LusoRobótica - Robótica em Português

Sistemas específicos => Arduino / AVR => Tópico iniciado por: SJD22 em 02 de Maio de 2012, 00:33

Título: "RESET" a um ATMega1280
Enviado por: SJD22 em 02 de Maio de 2012, 00:33
Boa noite,

andei aqui a mexer com uns timers no meu atmega1280 e acho que lixei isto... Agora o meu firmware que lia na boa de varias portas USART, passa-se.

Basicamente queria saber se é possivel fazer reset a um atmega 1280 e mete-lo como vem de fabrica.

obg
Título: Re: "RESET" a um ATMega1280
Enviado por: senso em 02 de Maio de 2012, 00:58
A configuração de todos os periféricos é feita por software, basta meteres um programa limpo que pronto ele deixa de ter o teu código lá dentro.
Mas cheira-me a stack a rebentar..
Código: [Seleccione]
#include <avr/io.h>
int main(void){

}

Pronto, isto não faz nada a unica coisa que esse código vai ter é os .init e o crt e os vectores de interrupção, devem ser uns 300 bytes de flash usados.
Ou então agarra no programador e faz um erase, ai fica mesmo limpinho, mas não é por limpares a flash e voltar a meter código que não funciona que o código passa magicamente a funcionar.
Título: Re: "RESET" a um ATMega1280
Enviado por: SJD22 em 02 de Maio de 2012, 01:06
Já fiz erase... e nada...

Eu tenho isto a funcionar de forma estável há uns dias. Hoje andei a testar uns timmers para meter um led a piscar e começou a dar asneira sobretudo quando leio do módulo de GSM e envio para o ecran (entenda-se USART para o PC). Ou lixei o processador (se é que isso é possivel) ou na altura em que andei a mexer nos timmers mexi em qq coisa que agora nao me lembro...
Título: Re: "RESET" a um ATMega1280
Enviado por: senso em 02 de Maio de 2012, 01:12
Timers e UART não tem nada de nada a ver...
É impossivel estragar um micro ao mexer nos registos, afinal eles estão lá precisamente para fazermos o que queremos deles..
Posta o código se quiseres/puderes que dou uma vista de olhos.
Título: Re: "RESET" a um ATMega1280
Enviado por: SJD22 em 02 de Maio de 2012, 01:16
Pois, tb acho que não mas então é coincidencia... mas a biblioteca que estou a usar do arduino (HardwareSerial) usa ISR e eu tb usei para "capturar" o fim do timmer e acender ou apagar o LED...

O codigo tem perto de 30 ficheiros/bibliotecas... é muita fruta... vou tentar isolar isto...
Título: Re: "RESET" a um ATMega1280
Enviado por: senso em 02 de Maio de 2012, 01:17
As ISR's são totalmente isoladas, não têm nada a ver umas com as outras.
Título: Re: "RESET" a um ATMega1280
Enviado por: SJD22 em 02 de Maio de 2012, 01:24
Então há aqui qq azelhice minha...
Título: Re: "RESET" a um ATMega1280
Enviado por: SJD22 em 02 de Maio de 2012, 01:48
Agora faz reset sozinho... senso, qual é mesmo a forma de ver a razao do reset? Ha um registo qq que diz isso acho eu...
Título: Re: "RESET" a um ATMega1280
Enviado por: senso em 02 de Maio de 2012, 02:02
Isso é a stack a rebentar quase quase quase de certeza.
Tens o MCUCR que te dá algumas das origens de reset, mas se for stack a ir ao ar e os endereços de return da chamada de funções estar errado, não é o MCUCR que te ajuda.
Como vai o teu projecto em termos de usagem da secção data, que corresponde á RAM?
Título: Re: "RESET" a um ATMega1280
Enviado por: SJD22 em 02 de Maio de 2012, 02:06
Em tempos tive um problema identico e era a stack a rebentar... mas aí tinha uns 85% ocupados e agora tenho 59%... mas é como te digo esta merd* sempre funcionou até ha 5horas atras qdo mexi nos timmers...

estou a tentar isolar o problema a ver donde vem o erro...
Título: Re: "RESET" a um ATMega1280
Enviado por: senso em 02 de Maio de 2012, 02:27
Mas deixa de enviar dados ou passa-se completamente?
Podes ter deixado uma interrupção de um timer ligada que agora não tem ISR o que leva a que entres numa ISR que efectivamente não existe, dai para a frente, ele corre pela flash fora a fazer sabe-se lá o quê até dar a volta ao program counter.
Título: Re: "RESET" a um ATMega1280
Enviado por: SJD22 em 02 de Maio de 2012, 08:36
Ele está muito bem a enviar dados para o ecran e de repente envia dados todos marados...e umas vezes ate faz reset.

Mas eu ao meter um novo firmware na flash o gajo supostamente nao iria limpar isso tudo e iria deixar de acontecer isso que dizes de ter uma interrupçao de um timer ligada sem ISR?
Título: Re: "RESET" a um ATMega1280
Enviado por: SJD22 em 02 de Maio de 2012, 10:08
Isto começou a dar asneira quando eu meti este codigo e depois tirei:

No main:
TIMSK1=0x01; // enabled global and timer overflow interrupt;
TCCR1A = 0x00; // normal operation page 148 (mode0);
TCNT1=0x0000; // 16bit counter register
TCCR1B = 0x04; // start timer/ set clock

Fora do main:
ISR(TIMER1_OVF_vect) {
// blah blah
}
Título: Re: "RESET" a um ATMega1280
Enviado por: SJD22 em 02 de Maio de 2012, 11:42
Isto está cada vez pior... :) Mais uma pista:

Se meter este código

Código: [Seleccione]
Serial0.println("1");
delay(1000);
Serial0.println("2");
delay(1000);
Serial0.println("3");
delay(1000);
Serial0.println("4");
delay(1000);
Serial0.println("5");
delay(1000);
Serial0.println("6");
delay(1000);
Serial0.println("7");

recebo na boa no PC os numeros....

Mas se tirei os delay não recebo rigorosamente nada.

Eu palpita-me que com o codigo que meti no meu post de cima alterei alguma frequencia qq...
Título: Re: "RESET" a um ATMega1280
Enviado por: senso em 02 de Maio de 2012, 21:24
Se apagas-te tudo, não tem nada que ter problema..
Até porque isso envolve unicamente o timer e nada mais.
Não será que estás a ligar o terminal depois de ele imprimir isso, abre o terminal e dá um reset ao Arduino..
Título: Re: "RESET" a um ATMega1280
Enviado por: SJD22 em 02 de Maio de 2012, 22:08
O terminal está sempre ligado. Tenho isto assim ha imensos dias a funcionar... foi desde que andei a brincar com os timmers que isto se lixou... Nao tarda mto lixo com isto! :D
Título: Re: "RESET" a um ATMega1280
Enviado por: senso em 02 de Maio de 2012, 22:18
E programas via ISP?
Mesmo assim eu dava-lhe um reset.
Podes é ter apagado código que não devias ou tens para ai algo que não devias..
Título: Re: "RESET" a um ATMega1280
Enviado por: SJD22 em 03 de Maio de 2012, 01:17
Estou a usar um Dragon para programar.

Neste momento tenho uma versao do codigo que tinha feito na vespera e funcionava... agora nao funciona... :)

Dar reset ao processador nao é o mesmo que desligar e voltar a ligar?
Título: Re: "RESET" a um ATMega1280
Enviado por: senso em 03 de Maio de 2012, 01:23
Sim, é precisamente a mesma coisa.
Ou tens algo mal ligado agora ou o código já tinha problemas...
Alteras-te alguma flag de compilação ou algum dos outros ficheiros que estás a incluir?
Pode ter sido uma modificação noutro sitio e nem te lembras..
Por isso é que mesmo para projectos pessoais um svn no google code vale ouro.
Título: Re: "RESET" a um ATMega1280
Enviado por: SJD22 em 03 de Maio de 2012, 01:37
Nao alterei nada... acho eu.... as vezes o cansaço prega algumas partidas, mas acho que nao!

Mas espera que isto agora está a dar... Cada vez percebo menos disto... apenas fiz reset e desliguei o cabo do Dragon.... e agora dá....



Título: Re: "RESET" a um ATMega1280
Enviado por: senso em 03 de Maio de 2012, 01:46
Tens alguma coisa dependente de SPI?
Título: Re: "RESET" a um ATMega1280
Enviado por: SJD22 em 03 de Maio de 2012, 01:53
Tenho sim. Tenho um cartão SD.

Mas olha que tanto o cartão como o programador estiverem ligados durante dias e dias seguidos sem problemas...