Ir ao conteúdo
  • Comunicados

    • Gabriel Torres

      Seja um moderador do Clube do Hardware!   12-02-2016

      Prezados membros do Clube do Hardware, Está aberto o processo de seleção de novos moderadores para diversos setores ou áreas do Clube do Hardware. Os requisitos são:   Pelo menos 500 posts e um ano de cadastro; Boa frequência de participação; Ser respeitoso, cordial e educado com os demais membros; Ter bom nível de português; Ter razoável conhecimento da área em que pretende atuar; Saber trabalhar em equipe (com os moderadores, coordenadores e administradores).   Os interessados deverão enviar uma mensagem privada para o usuário @Equipe Clube do Hardware com o título "Candidato a moderador". A mensagem deverá conter respostas às perguntas abaixo:   Qual o seu nome completo? Qual sua data de nascimento? Qual sua formação/profissão? Já atuou como moderador em algo outro fórum, se sim, qual? De forma sucinta, explique o porquê de querer ser moderador do fórum e conte-nos um pouco sobre você.   OBS: Não se trata de função remunerada. Todos que fazem parte do staff são voluntários.
    • DiF

      Poste seus códigos corretamente!   21-05-2016

      Prezados membros do Fórum do Clube do Hardware, O Fórum oferece um recurso chamado CODE, onde o ícone no painel do editor é  <>     O uso deste recurso é  imprescindível para uma melhor leitura, manter a organização, diferenciar de texto comum e principalmente evitar que os compiladores e IDEs acusem erro ao colar um código copiado daqui. Portanto convido-lhes para ler as instruções de como usar este recurso CODE neste tópico:  
BloodCeltics Lopes

PIC 12F675 nao grava na eprom no isis proteus mikroc?

Recommended Posts

Estou tentando gravar um valor na eeprom do PIC 12F675 através do programa MikroC.

pelo que mostra na ajuda deste compilador os exemplos são para linha 16F e 18F... não tem para 12F

Pesquisei no forum da mikroC e em uma duvida semelhante os caras disseram que havia funcionado... mas não disseram como...

eis o que estou fazendo (esta em fase de projeto ainda... estou simulando no isis proteus):

cont = EEPROM_Read(0x00); //quero ler o valor zero (com a linha pic16F testei e funcionou perfeito)

 

e para escrever:

EEPROM_Write(0x00, cont); escrever o valor zero...

 

 

Obrigado a todos.

 

Compartilhar este post


Link para o post
Compartilhar em outros sites

Em qualquer compilador, prefiro eu mesmo escrever a função de gravar dados na eeprom. Essas bibliotecas não desativam o flag de gravação da EEPROM e nem apontam o registrador EEADR para um endereço vazio e ao executar em um power down os dados podem ser perdidos (já passei por isso na prática, um pic em um sistema com muitas quedas de energia perdia os dados na eeprom, pesquisa por EEPROM Lost data em fóruns gringo e verá que muitos passam por isso).

Isso acontece pelo que citei acima: porque as bibliotecas não desativam os flags de escrita e nem zeram o registrador que aponta o endereço de memória que será gravado. 

A melhor coisa é você escrever na mão essa biblioteca. Pesquisa no datasheet por EEPROM write e EEPROM read e lá tem os comandos para fazer escrita e leitura. Não vai dar mais que 5 linhas de código cada uma. Abraço

  • Curtir 1

Compartilhar este post


Link para o post
Compartilhar em outros sites
11 horas atrás, DELPITEC disse:

Não vai dar mais que 5 linhas de código cada uma. Abraço

Vou dar uma olhada... mas deve ser em assembly né? daí complica...

 

Outra coisa, que deixei de explicar: a gravação que pretendo é na própria eeprom do chip (não é externa)

E meu sistema não á muito complexo... não passaria por muitas quedas de energia...

Só preciso gravar um único dado na posição 00 da eeprom.

Editado por BloodCeltics Lopes

Compartilhar este post


Link para o post
Compartilhar em outros sites

Tem gente que apanha de 1 bit... Pelo menos você tá apanhando de 8 kk

Certa feita passei por um perrengue semelhante. Ao invés de perder um tempão procurando soluções, me deu um insight... gravei a partir do endereço 1 e já era... Se der certo e quiser mesmo usar o zero, tenta gravar + de 1 vez.

EEPROM_Write(0x00, cont); escrever o valor zero...

EEPROM_Write(0x00, cont); escrever o valor zero...

 

Certeza que os argumentos são (endereço, dado)? E se for o contrário?

 

Sobre queda de energia... sabe como gravar um dado na eeprom quando cai a luz pra recupera-lo depois, facin facin? Pois é .. eu sei ... :P

Compartilhar este post


Link para o post
Compartilhar em outros sites
37 minutos atrás, Isadora Ferraz disse:

EEPROM_Write(0x00, cont); escrever o valor zero...

EEPROM_Write(0x00, cont); escrever o valor zero...

Valeu... vou tentar apara ver se dá certo

37 minutos atrás, Isadora Ferraz disse:

 

Certeza que os argumentos são (endereço, dado)? E se for o contrário?

É para estar correto... usei o mesmo código com a linha 16F e deu certo, mas no menu de help do mikroC não mostra  parte para a linha 12F   (mas por pesquisas na internet retornaram que segue o padrão da linha 16F)

37 minutos atrás, Isadora Ferraz disse:

 

Sobre queda de energia... sabe como gravar um dado na eeprom quando cai a luz pra recupera-lo depois, facin facin? Pois é .. eu sei ..

Deve ser difícil né? mas se colocar uma mini bateria, para bkp... ou algo do tipo que sirva somente durante a gravação?

Compartilhar este post


Link para o post
Compartilhar em outros sites

O exemplo do datasheet é em assembly mas é simples de converter para C. 

É antes do código em asm (no datasheet) tem um explicação passo a passo do que deveria ser feito.

Abs

Editado por DELPITEC
  • Curtir 1

Compartilhar este post


Link para o post
Compartilhar em outros sites
2 horas atrás, DELPITEC disse:

simples de converter para C.

...pra você. Pra ele.. nem tanto...

 

Olha isso que bacaninha. 100% C com zero assembly...

#define EEPROM_WRITE(addr, value) do { \
             while(WR != 0)   /* wait till EEPROM idle */   \
                 continue;     \
             EEADR=(addr);     \
             EEDATA=(value);   \
             do                \
                 GIE = 0;        /* disable interrupts */   \
             while(GIE != 0);    /* make sure it worked */  \
             WREN=1;             /* enable writes */        \
             EECON2=0x55;        /* enter password */       \
             EECON2=0xAA;      \
             WR=1;               /* start write cycle */    \
             GIE = 1;            /* re-enable interrupts */ \
             WREN=0              /* disable writes */       \
  } while (0)

só acessando/configurando/lendo os registros. Se achar que deve, olhe o d.s. e confira bit a bit.

Talvez um contorno ou solução ...

17 horas atrás, DELPITEC disse:

Isso acontece pelo que citei acima: porque as bibliotecas não desativam os flags de escrita e nem zeram o registrador que aponta o endereço de memória que será gravado. 

 

17 horas atrás, DELPITEC disse:

Pesquisa no datasheet por EEPROM write e EEPROM read e lá tem os comandos para fazer escrita e leitura. Não vai dar mais que 5 linhas de código cada uma. Abraço

tmj... outro

Compartilhar este post


Link para o post
Compartilhar em outros sites
10 horas atrás, Isadora Ferraz disse:

Tem gente que apanha de 1 bit... Pelo menos você tá apanhando de 8 kk

Certa feita passei por um perrengue semelhante. Ao invés de perder um tempão procurando soluções, me deu um insight... gravei a partir do endereço 1 e já era... Se der certo e quiser mesmo usar o zero, tenta gravar + de 1 vez.

EEPROM_Write(0x00, cont); escrever o valor zero...

EEPROM_Write(0x00, cont); escrever o valor zero...

 

Certeza que os argumentos são (endereço, dado)? E se for o contrário?

 

Sobre queda de energia... sabe como gravar um dado na eeprom quando cai a luz pra recupera-lo depois, facin facin? Pois é .. eu sei ... :P

 

Só pra não deixar passar em branco...eu não sei se esse pic tem o bit HLVDCON

Caso tenha, só colocar um capacitor na fonte que mantenha o pic alimentado o tempo suficiente para testar o bit e se ele detectar tensão baixa, grava o dado que for na eeprom, correto @Isadora Ferraz ? Abs

  • Curtir 1

Compartilhar este post


Link para o post
Compartilhar em outros sites
10 horas atrás, DELPITEC disse:

não sei se esse pic tem o bit HLVDCON

Quase sei que não tem...

http://ww1.microchip.com/downloads/en/DeviceDoc/60001408A.pdf

 

A essência é esta mesmo. Sim deve ser temperada com

10 horas atrás, DELPITEC disse:

capacitor na fonte que mantenha o pic alimentado o tempo suficiente para testar o bit e se ele detectar tensão baixa, grava o dado que for na eeprom, correto

e salpicada com...

-pode usar o comparador

-pra agilizar e economizar recurso, deve ser um evento de interrupt

-nela desligar tudo que consome corrente

-pra economizar um (dos milhões de) ciclo de gravação, só grava se for diferente do anterior

 

Bom apetite...

 

  • Curtir 2

Compartilhar este post


Link para o post
Compartilhar em outros sites

Crie uma conta ou entre para comentar

Você precisar ser um membro para fazer um comentário






Sobre o Clube do Hardware

No ar desde 1996, o Clube do Hardware é uma das maiores, mais antigas e mais respeitadas publicações sobre tecnologia do Brasil. Leia mais

Direitos autorais

Não permitimos a cópia ou reprodução do conteúdo do nosso site, fórum, newsletters e redes sociais, mesmo citando-se a fonte. Leia mais

×