Pages: [1]   Go Down
Author Topic: Problema com watchdog (resolvido)  (Read 1930 times)
0 Members and 1 Guest are viewing this topic.
Brasil
Offline Offline
Sr. Member
****
Karma: 2
Posts: 315
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Quote
Bom coloquei o optiboot 4.4 no meu ATMEGA328 que esta "travando",  e agora o watchdog está funcionando.
Tentei usar um .hex chamado "ATmegaBOOT_168_atmega328_pro_8MHz.hex" e continuou o mesmo problema

Realmente era algo quanto ao BOOTLOADER, eu descobri o problema e como contorna-lo

Obrigado a todos que contribuíram (bubulindo, HUGOPT e outros)

Bom, amigos,
Não sei se estou implementando incorretamente o watchdog ou se eu interpretei incorretamente.
Queria que se ele ficar travado em algum loop infinito, que houve-se o reset espontâneo.
Mas está ocorrendo o seguinte problema.
Quando mando esse sketch para um ATMEGA328 com bootloader do lilypad ele trava
Code:
#include <LiquidCrystal.h>
#include <avr/wdt.h>

LiquidCrystal lcd(12, 11, 8, 7, 6, 5);
#define LCD_WIDTH 16
#define LCD_HEIGHT 2

void setup()
{
  lcd.begin(LCD_WIDTH, LCD_HEIGHT,1);
  lcd.setCursor(0,0);
  lcd.print("Inicializando");
  wdt_enable(WDTO_4S); //Função que ativa e altera o Watchdog
  delay(2000);
  lcd.setCursor(0,0);
  lcd.print("Ok           ");  
}

void loop()
{
}
Para conseguir mandar outro sketch, tenho que manter o ATMEGA com o VCC desconectado, e exatamente no momento que vai iniciar o upload (a  mensagem UPLOADING aparece) após terminar de compilar, que consigo mandar outro sketch para o ATMEGA328.
O reset que seria enviado pelo DTR ou colocando o PINO 1 para GND não funciona, só encontrei essa solução para "salvar" o ATMEGA328.
Será que é um problema com meu código, com a lib "wdt.h" ou com o bootloader?
Obrigado se alguem puder ajudar, pois não quero ter que usar um "watchdog" por hardware.
« Last Edit: March 14, 2013, 06:34:23 pm by mmoscz » Logged

4x Duemilanove (clone)
Uno torrado (clone)
Amiga 1200 40MB
Windows XP


'round the world...
Offline Offline
Faraday Member
**
Karma: 42
Posts: 3289
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

Acho que é problema do bootloader mesmo. Eu li em tempos que o bootloader não funciona com o wdt. :\ Já experimentaste o último?
Logged

Eu não sou o teu criado. Se respondo no fórum é para ajudar todos mediante a minha disponibilidade e disposição. Responder por mensagem pessoal iria contra o propósito do fórum e por isso evito-o.
Se realmente pretendes que eu te ajude por mensagem pessoal, então podemos chegar a um acordo e contrato onde me pagas pela ajuda que eu fornecer e poderás então definir os termos de confidencialidade do meu serviço. De forma contrária toda e qualquer ajuda que eu der tem de ser visível a todos os participantes do fórum (será boa ideia, veres o significado da palavra fórum).
Nota também que eu não me responsabilizo por parvoíces escritas neste espaço pelo que se vais seguir algo dito por mim, entende que o farás por tua conta e risco.

Dito isto, mensagens pessoais só se forem pessoais, ou seja, se já interagimos de alguma forma no passado ou se me pretendes convidar para uma churrascada com cerveja (paga por ti, obviamente).

Portugal
Offline Offline
Edison Member
*
Karma: 37
Posts: 1593
Pretending you know everything then you will learn nothing.
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Daquilo que eu sei sobre o watchdog se o activas depois no teu codigo tens de o ir resetando.No teu skectch tens:
Code:
wdt_enable(WDTO_4S); //Função que ativa e altera o Watchdog
Que o activa e irá estoirar dentro de 4 segundos.Passado estes 4 segundos ele renicia.
Quote
delay(2000);
Logo aqui queimas 2 segundos e como na loop nao tens nada que depois possa resetar o watchdog ele vai estoirar e resetar nos proximos 2 segundos.
Para ires acalmando o "cao de guarda" antes de ele "morder" o reset tens de no teu codigo prever que teras de correr a funçao wdt_reset( ) antes do estoiro, caso contrario ira estar sempre a resetar reset apos reset que será o que te está a acontecer.
Do tipo se a funçao X  que nao completou a tarefa por erro de comunicaçao com o pc vou reniciar  o programa
Quote
#define wdt_reset    (       )       __asm__ __volatile__ ("wdr")

Reset the watchdog timer. When the watchdog timer is enabled, a call to this instruction is required before the timer expires, otherwise a watchdog-initiated device reset will occur.
Aqui a uns tempos tambem li sobre esse problema entre o bootoader e o watchdog mas tambem li que ja foi resolvido algures ...
Algo deste tipo devera funcionar:
Code:
#include <avr/wdt.h>

void setup() {  
  wdt_enable(WDTO_500MS); // have the wdt reset the chip
  // if 500ms passes without a reset
}

void loop() {  
  wdt_reset(); // reset the wdt
}
« Last Edit: March 14, 2013, 04:19:22 am by HugoPT » Logged

Debian,Mint,Ubuntu
Arduino Mega 2560
Arduino Nano
Arduino Duemilanove
MAC OS Montain Lion
Raspberry PI Model B


Brasil
Offline Offline
Sr. Member
****
Karma: 2
Posts: 315
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset


Quote
Logo aqui queimas 2 segundos e como na loop nao tens nada que depois possa resetar o watchdog ele vai estoirar e resetar nos proximos 2 segundos.
Para ires acalmando o "cao de guarda" antes de ele "morder" o reset tens de no teu codigo prever que teras de correr a funçao wdt_reset( ) antes do estoiro, caso contrario ira estar sempre a resetar reset apos reset que será o que te está a acontecer.
Do tipo se a funçao X  que nao completou a tarefa por erro de comunicaçao com o pc vou reniciar  o programa

Obrigado HUGO, mas eu fiz de propósito dessa forma, para ele resetar e rodar o que está no SETUP() novamente. Justamente é um teste de como watchdog funcionaria.
No sketch "real" em vários locais diferentes do código eu tenho o wdt_reset().

Acho que é problema do bootloader mesmo. Eu li em tempos que o bootloader não funciona com o wdt. :\ Já experimentaste o último?
Bom, vou tentar um novo bootloader, como estou usando um ATMEGA328P-PU tive que usar outro programador que não a IDE do Arduino para queimar o BOOTLOADER.
Obrigado
Logged

4x Duemilanove (clone)
Uno torrado (clone)
Amiga 1200 40MB
Windows XP


Portugal
Offline Offline
Edison Member
*
Karma: 37
Posts: 1593
Pretending you know everything then you will learn nothing.
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Se tens um programador externo porque não esquecer o bootloader?
Logged

Debian,Mint,Ubuntu
Arduino Mega 2560
Arduino Nano
Arduino Duemilanove
MAC OS Montain Lion
Raspberry PI Model B


Brasil
Offline Offline
Sr. Member
****
Karma: 2
Posts: 315
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Se tens um programador externo porque não esquecer o bootloader?

Não tenho outro programador, pois uso um arduino como gravador ISP, esse ATMEGA na protoboard é um recurso que uso quando estou experimentando os projetos, pois já queimei placas arduino em outras situações.
A pergunta então é a seguinte, se eu mandar o sketch usando o "upload with programer", ele sobrepõe o bootloader?
Logged

4x Duemilanove (clone)
Uno torrado (clone)
Amiga 1200 40MB
Windows XP


Portugal
Offline Offline
Edison Member
*
Karma: 37
Posts: 1593
Pretending you know everything then you will learn nothing.
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Quote
A pergunta então é a seguinte, se eu mandar o sketch usando o "upload with programer", ele sobrepõe o bootloader?
Sim sobrepoe.
Quando eu termino um projecto normalmente gravo o no atmega com um programador externo removendo assim o bootloader, só uso mesmo o bootloader quando estou a desenvolver na IDE.
Numa placa final coloco sempre um ICSP header para poder programar o chip com programador externo, nao quero que o atmega ao ligar faça a verificaçao se esta a receber um skeetch, ou muito menos renicie se algo iniciar a comunicaçao serie na porta.

« Last Edit: March 14, 2013, 10:18:54 am by HugoPT » Logged

Debian,Mint,Ubuntu
Arduino Mega 2560
Arduino Nano
Arduino Duemilanove
MAC OS Montain Lion
Raspberry PI Model B


'round the world...
Offline Offline
Faraday Member
**
Karma: 42
Posts: 3289
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

Desculpa reanimar a thread...

Qual é mesmo o bootloader que estás a usar? Eu reparei agora que todos os meus Arduinos ficam bloqueados quando tento usar o watchdog. smiley-sad

Onde arranjaste o que estás a usar agora que permite o funcionamento do WDT?

Sinceramente, nunca utilizei um WDT em projectos meus (o que é estranho, tendo em conta que pelo menos um deles está no mercado). :\
Logged

Eu não sou o teu criado. Se respondo no fórum é para ajudar todos mediante a minha disponibilidade e disposição. Responder por mensagem pessoal iria contra o propósito do fórum e por isso evito-o.
Se realmente pretendes que eu te ajude por mensagem pessoal, então podemos chegar a um acordo e contrato onde me pagas pela ajuda que eu fornecer e poderás então definir os termos de confidencialidade do meu serviço. De forma contrária toda e qualquer ajuda que eu der tem de ser visível a todos os participantes do fórum (será boa ideia, veres o significado da palavra fórum).
Nota também que eu não me responsabilizo por parvoíces escritas neste espaço pelo que se vais seguir algo dito por mim, entende que o farás por tua conta e risco.

Dito isto, mensagens pessoais só se forem pessoais, ou seja, se já interagimos de alguma forma no passado ou se me pretendes convidar para uma churrascada com cerveja (paga por ti, obviamente).

Brasil
Offline Offline
Sr. Member
****
Karma: 2
Posts: 315
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Desculpa reanimar a thread...

Qual é mesmo o bootloader que estás a usar? Eu reparei agora que todos os meus Arduinos ficam bloqueados quando tento usar o watchdog. smiley-sad

Onde arranjaste o que estás a usar agora que permite o funcionamento do WDT?

Sinceramente, nunca utilizei um WDT em projectos meus (o que é estranho, tendo em conta que pelo menos um deles está no mercado). :\
Estou usando o OPTIBOOT 4.4 https://optiboot.googlecode.com/files/optiboot_v4_4.zip no ATMEGA328 STANDALONE (8Mhz sem cristal), funciona muito bem com o WDT,
no meu ARDUINO DUEMILANOVE ocorre o erro do WDT, parece que em alguns UNO´s não dá esse problema.
« Last Edit: March 27, 2013, 08:55:06 pm by mmoscz » Logged

4x Duemilanove (clone)
Uno torrado (clone)
Amiga 1200 40MB
Windows XP


'round the world...
Offline Offline
Faraday Member
**
Karma: 42
Posts: 3289
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

Ok.

Obrigado. smiley
Logged

Eu não sou o teu criado. Se respondo no fórum é para ajudar todos mediante a minha disponibilidade e disposição. Responder por mensagem pessoal iria contra o propósito do fórum e por isso evito-o.
Se realmente pretendes que eu te ajude por mensagem pessoal, então podemos chegar a um acordo e contrato onde me pagas pela ajuda que eu fornecer e poderás então definir os termos de confidencialidade do meu serviço. De forma contrária toda e qualquer ajuda que eu der tem de ser visível a todos os participantes do fórum (será boa ideia, veres o significado da palavra fórum).
Nota também que eu não me responsabilizo por parvoíces escritas neste espaço pelo que se vais seguir algo dito por mim, entende que o farás por tua conta e risco.

Dito isto, mensagens pessoais só se forem pessoais, ou seja, se já interagimos de alguma forma no passado ou se me pretendes convidar para uma churrascada com cerveja (paga por ti, obviamente).

Pages: [1]   Go Up
Jump to: