collapse

* Posts Recentes

Amplificador - Rockboard HA 1 In-Ear por almamater
[Ontem às 19:13]


O que é isto ? por KammutierSpule
[26 de Março de 2024, 19:35]


Bateria - Portátil por almamater
[25 de Março de 2024, 22:14]


Emulador NES em ESP32 por dropes
[13 de Março de 2024, 21:19]


Escolher Osciloscópio por jm_araujo
[06 de Fevereiro de 2024, 23:07]


TP4056 - Dúvida por dropes
[31 de Janeiro de 2024, 14:13]


Leitura de dados por Porta Serie por jm_araujo
[22 de Janeiro de 2024, 14:00]


Distancia Cabo por jm_araujo
[08 de Janeiro de 2024, 16:30]


Meu novo robô por josecarlos
[06 de Janeiro de 2024, 16:46]


Laser Engraver - Alguém tem? por almamater
[16 de Dezembro de 2023, 14:23]

Autor Tópico: "RESET" a um ATMega1280  (Lida 8516 vezes)

0 Membros e 1 Visitante estão a ver este tópico.

Offline SJD22

  • Mini Robot
  • *
  • Mensagens: 660
"RESET" a um ATMega1280
« 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

Offline senso

  • Global Moderator
  • Mini Robot
  • *****
  • Mensagens: 9.733
  • Helpdesk do sitio
Re: "RESET" a um ATMega1280
« Responder #1 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.
Avr fanboy

Offline SJD22

  • Mini Robot
  • *
  • Mensagens: 660
Re: "RESET" a um ATMega1280
« Responder #2 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...

Offline senso

  • Global Moderator
  • Mini Robot
  • *****
  • Mensagens: 9.733
  • Helpdesk do sitio
Re: "RESET" a um ATMega1280
« Responder #3 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.
Avr fanboy

Offline SJD22

  • Mini Robot
  • *
  • Mensagens: 660
Re: "RESET" a um ATMega1280
« Responder #4 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...

Offline senso

  • Global Moderator
  • Mini Robot
  • *****
  • Mensagens: 9.733
  • Helpdesk do sitio
Re: "RESET" a um ATMega1280
« Responder #5 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.
Avr fanboy

Offline SJD22

  • Mini Robot
  • *
  • Mensagens: 660
Re: "RESET" a um ATMega1280
« Responder #6 em: 02 de Maio de 2012, 01:24 »
Então há aqui qq azelhice minha...

Offline SJD22

  • Mini Robot
  • *
  • Mensagens: 660
Re: "RESET" a um ATMega1280
« Responder #7 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...

Offline senso

  • Global Moderator
  • Mini Robot
  • *****
  • Mensagens: 9.733
  • Helpdesk do sitio
Re: "RESET" a um ATMega1280
« Responder #8 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?
Avr fanboy

Offline SJD22

  • Mini Robot
  • *
  • Mensagens: 660
Re: "RESET" a um ATMega1280
« Responder #9 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...

Offline senso

  • Global Moderator
  • Mini Robot
  • *****
  • Mensagens: 9.733
  • Helpdesk do sitio
Re: "RESET" a um ATMega1280
« Responder #10 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.
Avr fanboy

Offline SJD22

  • Mini Robot
  • *
  • Mensagens: 660
Re: "RESET" a um ATMega1280
« Responder #11 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?

Offline SJD22

  • Mini Robot
  • *
  • Mensagens: 660
Re: "RESET" a um ATMega1280
« Responder #12 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
}

Offline SJD22

  • Mini Robot
  • *
  • Mensagens: 660
Re: "RESET" a um ATMega1280
« Responder #13 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...

Offline senso

  • Global Moderator
  • Mini Robot
  • *****
  • Mensagens: 9.733
  • Helpdesk do sitio
Re: "RESET" a um ATMega1280
« Responder #14 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..
Avr fanboy