Página 1 de 1

Escrita na Eeprom interna PIC se "perde"

MensagemEnviado: 11 Set 2008 17:39
por elzirobotelho
Pessoal, estou tendo o seguinte problema, estou querendo gravar 12 variáveis, na memória eeprom interna do pic, quando eu chamo a rotina para gravação através de um botão, as variáveis são gravadas na Eeprom, mas, o programa se perde, tendo que ser ressetado o pic 18F452 clock 8MHz.
Após o resset o programa volta a funcionar normalmente, e atualiza o lcd com os mesmos valores que estavam antes da gravação na eeprom.
Segue uma parte do código se alguém puder me ajudar eu agradeço
Foi escrito no Mikroc 6.2

void escreve_eeprom()
{
Eeprom_Write(0x10,fator_u);
Delay_ms(10);
Eeprom_Write(0x11,fator_d);
Delay_ms(10);
Eeprom_Write(0x12,un);
Delay_ms(10);
Eeprom_Write(0x13,dz);
Delay_ms(10);
Eeprom_Write(0x14,ct);
Delay_ms(10);
Eeprom_Write(0x15,ml);
Delay_ms(10);
Eeprom_Write(0x16,dzml);
Delay_ms(10);
Eeprom_Write(0x17,end0);
Delay_ms(10);
Eeprom_Write(0x18,end1);
Delay_ms(10);
Eeprom_Write(0x19,end2);
Delay_ms(10);
Eeprom_Write(0x1A,end3);
Delay_ms(10);
Eeprom_Write(0x1B,end4);
Delay_ms(10);
Eeprom_Write(0x1C,end5);
Delay_ms(10);
}

do
{
if (Ps2_Key_Read(&dados, &especial, &down)) { //Foi pressionada alguma tecla?
if (down && (dados == 1)) trata_cursor(); //Sim, verifica se foi F1, caso verdadeiro
if (down && (dados == 2)) trata_fator(); //Sim, verifica se foi F2, caso verdadeiro
}
if (down && dados) { //Se foi selecionado um caracter alfa numérico
trata_teclado(); // e no LCD estiver a tela 1 Chama Sub-Rotina trata_teclado
}
atualiza_lcd();
x=0;
if (Usart_Data_Ready()) {
rx_endereco();
}
if (Button(&PORTB, 0, 10, 1)) j = 1;
if (j && Button(&PORTB, 0, 10, 0))
{
INTCON = 0; //Desabilita interrupção global e a de periféricos
escreve_eeprom();
j=0;
INTCON = 0b11010000; //Habilita interrupção global e a de periféricos
}
}
while(1); // Loop
} :?: :?: :?: :?:

MensagemEnviado: 11 Set 2008 18:16
por zielpunkt
Sem pensar muito no teu código, vc está tratando (debounce) as teclas/botões de forma adequada? Apesar de vc ter um baita tempo entre as gravações (10ms), e como não se sabe a finalidade e atuação das demais teclas, pode ser o caso.




Abço.

MensagemEnviado: 11 Set 2008 21:05
por microcontrolador.pic
Olá amigo,

Se eu não me engano, as versões anteriores do Mikroc está cheia de BUGs.
Tente compilar seu programa usando o mikroC v8.2.0.0.

(os compiladores da Mikroe são cheio de paus...)

Atenciosamente microcontrolador.pic

MensagemEnviado: 11 Set 2008 22:03
por elzirobotelho
microcontrolador.pic escreveu:Olá amigo,

Se eu não me engano, as versões anteriores do Mikroc está cheia de BUGs.
Tente compilar seu programa usando o mikroC v8.2.0.0.

(os compiladores da Mikroe são cheio de paus...)

Atenciosamente microcontrolador.pic



Obrigado pela dica, vou tentar obter a versão 8.2
Estou usando um deboucing de 10ms

MensagemEnviado: 11 Set 2008 23:11
por microcontrolador.pic
elzirobotelho escreveu:Obrigado pela dica, vou tentar obter a versão 8.2
Estou usando um deboucing de 10ms


Eh amigo,
faça os testes aí e veja se vai funcionar...
:D

Teve uma vez que eu apanhei desses compiladores da Mikroe, depois fui ver que era problemas na versão do compilador.

MensagemEnviado: 12 Set 2008 08:23
por phophollety
microcontrolador.pic escreveu:Olá amigo,

Se eu não me engano, as versões anteriores do Mikroc está cheia de BUGs.
Tente compilar seu programa usando o mikroC v8.2.0.0.

(os compiladores da Mikroe são cheio de paus...)

Atenciosamente microcontrolador.pic


Ou use o C18 e não use bibliotecas(não que sejam ruins.. mas...), procure fazer suas próprias rotinas de tudo, I2C, SPI, UART etc...

Gasta-se um pouco de tempo no começo, depois tem-se algo muito funcionar e menor.