Boa noite. Pesquisei na internet e no LdG e não achei nada sobre reset interno para Arduino, apenas achei reset físico utilizando transistor. Os PICs possuem uma função reset_cpu() que reseta o PIC via comando, é muito estranho o Arduino não ter um também. Se alguém souber que existe um para nosso querido arduino postem aqui. Atenciosamente.
Camilo Jr.
Tags:
Pessoal, aproveitando o comentário sobre o pino 13, tenho uma dúvida, no meu Arduino, além de piscar durante o Reset, o LED do pino 13 fica acesso durante a execução de qualquer programa. Se eu setá-lo como OUTPUT, e colocá-lo em nivel LOW ele apaga, então não me atrapalha em nada, só queria saber se é normal?
Obrigado
Tenho um projeto que é essencial a estabilidade. Então pensei em acrescentar o watchdog.
Eu tenho que baixar alguma biblioteca para usar no uno ou 2009?
Onde encontro?
Ai é só acrescentar as linhas que já citaram não é?
Você pode utiliza a linha de comando abaixo:
asm volatile (" jmp 0");
Já foi testado por nós e utilizamos essa linha quando precisamos resetar o programa .
testei e parece que esta função está resolvendo meu problema principalmente com o cartão SD que constantemente parava de funcionar.
(ja tentei um monte de recurso, como desligar e ligar os pinos 4 e 10 de acordo com o uso do ethernet ou SD, melhorou mas não consegui passar de 3 dias rodando)
Minha pergunta é se este método pode causar algum tipo de Fadiga eletrônica ao ser repetido constantemente, no caso a cada 3h.
Boa noite, você tem a biblioteca para trabalhar com Watch Dog?
Testei a sugestão do Lab de Garagem e Calle_o
e funcionou no teste de reset apenas do Arduino, sem incluir periféricos.
Arquivo anexado:
Boa tarde, comigo também funcionou bem, testei outro método que é semelhante.
#include <avr/wdt.h>
void setup ()
{
Serial.begin (115200);
unsigned long tempo = micros();
Serial.println("----------------------");
Serial.print("Reiniciou em: ");
Serial.print(tempo);
Serial.println(" Micro segundos.");
Serial.println("----------------------");
Serial.println();
wdt_enable (WDTO_1S); //reseta após 1 segundo, if no "pat the dog" received
} // end of setup
void loop ()
{
Serial.println(".........................");
Serial.println ("Inicio do loop ...");
Serial.println(".........................");
Serial.println();
wdt_reset (); // me de mais um segundo para algo (pat the dog)
while (true) ; // oops, de volta ao loop
} // fim do loop
Muito bom esse post, estou em um projeto que tenho que trabalhar com memória eepron e lcd, agora estou implementando o watch dog para evitar transbordamento de memória.
Obrigado por partilhar
É possível executar o reset através do próprio pino Reset do Arduino, ligar um resistor de 100 ohm entre o pino de saída 12 ao pino RESET do Arduino e executar o código listado abaixo:
Cabe ressaltar que o código é para uso didático apenas.
// Posted by gabriellalevine: http://www.instructables.com/id/two-ways-to-reset-arduino-in-software/
// Modified by Milton Vilela
int xy=0;
int resetPin = 12;
void setup() {
digitalWrite(resetPin, HIGH);
delay(200);
pinMode(resetPin, OUTPUT);
Serial.begin(9600);//initializa porta serial
Serial.println("Programa reiniciado");//
delay(200);
}
void loop() {
xy++;
Serial.print("xy = ");
Serial.println(xy);
delay(300);
if(xy >= 30)
{
digitalWrite(resetPin, LOW);
Serial.println("linha nunca executada");
}
}
Complementando:
Após fazer a primeira gravação, devido ao tempo necessário para gravação de novos programas ou do mesmo programa no arduino, o resistor entre o pino 12 e o pino RESET do Arduino deve ser retirado para evitar que durante a gragação de programas a ativação do reset cause erro de gravação!
Exemplo legal, é uma outra alternativa mas creio que o reset via software seja melhor, você continua com seu pino 12 livre e não terá problemas com a vida útil do resistor ou problemas de contato.
Olá Camilo,
Só é necessário retirar o resistor no código que apresentei acima.
Se o reset for chamado de outra forma, por uma opção de menu, botão, etc, então não há necessidade de retirar.
Parece que esse reset é idêntico ao reset manual! Se alguém mais entendido puder dar uma ajuda, será muito bom.
Até +
Milton Vilela
Esse reset está funcionando da seguinte forma, o atmega (CI do arduino) quando tem seu pino 1 colocado em nível baixo (0V) ele é resetado e só volta a ligar quando seu pino 1 volta a nível alto (aproximadamente 5V).
No seu Sketch você inicia ele em nível alto e quando você entra no if e seu comando " digitalWrite(resetPin, LOW);" é executado, o pino 12 é colocado em nível baixo (0V) e através de um resistor de baixo valor (100ohms) chega ao pino 1 e o sistema é reiniciado, o sistema carrega logo voltando ao nível alto e assim por diante.
A placa do arduino possui um resistor pull-up mantendo o pino 1 o tempo todo em nível alto, se você conecta um fio com 0V o nível cai e não ocorre um curto pq há um resistor entre o 5 e o 0V (resistor pull-up).
O reset do arduino (apertando o botão da placa) funciona exatamente assim: você aperta o botão e ele envia 0V ao pino 1.
Bem-vindo a
Laboratorio de Garagem (arduino, eletrônica, robotica, hacking)
© 2024 Criado por Marcelo Rodrigues. Ativado por