Ir ao conteúdo

Posts recomendados

Postado

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.

 

Postado

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
Postado
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.

  • Membro VIP
Postado

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

Postado
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?

Postado

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

  • Curtir 1
  • Membro VIP
Postado
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

Postado
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
  • Membro VIP
Postado
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

Crie uma conta ou entre para comentar

Você precisa ser um usuário para fazer um comentário

Criar uma conta

Crie uma nova conta em nossa comunidade. É fácil!

Crie uma nova conta

Entrar

Já tem uma conta? Faça o login.

Entrar agora

Sobre o Clube do Hardware

No ar desde 1996, o Clube do Hardware é uma das maiores, mais antigas e mais respeitadas comunidades 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

×
×
  • Criar novo...