Gostaria de resetar o Uno usando algum comando na IDE (software) como se fosse resetado pelo botão rest na placa (hardware).
Tks,
Jota
Tags:
Não acredito que não exista nenhum comando ou forma de chamar uma interrupção do arduino para resetar o sistema como um todo, assim como acontece quando é pressionado o botão rest na placa.
Alguem sabe ?
Valeu.
Jota o que você deseja é um software reset.
Nos microprocessadores pode-se fazer isso dando um jump para o endereço 0000.
Mas no ATMega:
"Jump to program location 0. Jumping to program location 0 does not clear all the registers and hence you do not have a "clean" reset."
A resposta oficial da ATMEL para o ATmega é essa : usando o watchdog interno.
http://www.atmel.com/webdoc/AVRLibcReferenceManual/FAQ_1faq_softres...
http://support.atmel.com/bin/customer.exe?=&action=viewKbEntry&...
Se não entender me avise..
Estudo microprocessadores desde o Intel 8008 - o primeiro microprocessador de 8 bits do Intel...
http://pt.wikipedia.org/wiki/Intel_8008
Não confunda com o 8088 (16 bits) do PC XT. he he
Essa função abaixo, reseta o arduino uno
asm volatile (" jmp 0");
Rogério veja o meu post anterior (peguei na Atmel)
"Jump to program location 0. Jumping to program location 0 does not clear all the registers and hence you do not have a "clean" reset."
Um jump para o endereço 0 não limpa todos os registradores e portanto ele não é um reset limpo.
É verdade, José
obrigado pela dica
Fala, Jota!
Tente isto!
#include <avr/wdt.h>
void setup ()
{
// Colocar na ultima linha do setup
wdt_enable (WDTO_2S); // Se tiver algum processo maior que este tempo, terá que ser alterado
} // end of setup
void loop () {
// Seu programa
wdt_reset ();
reset(); // Chama função reset, vc pode colocar em outra parte de seu programa.
} // end of loop
void reset(){
while (true) ; // fica aqui até resetar
}
Olá Jota,
Eu não sei bem pra que alguem iria querer fazer um reset fisico total de uma montagem, visto que seria bastante fazer a limpeza de toda variável no proprio codigo, mas existe uma forma, mais ou menos mecanica de fazer isso, principalmente se você fizer sempre montagens stand alone como eu faço.
Para o arduino funcionar o PINO 1 tem que estar alimentado, e isso geralmente se faz colocando uma resistencia de 10k(veja imagem do esquema abaixo), entre o pino 1 e o VCC, e se coloca uma chave interruptora ligada ao terra, que quando pressionada reseta o aduino.
Uma saida para um reset total, seria ao inves de colocar uma chave manual, colocar algo como um relê ou um transistor chaveador, dai bastaria mandar acionar uma porta do arduino que aciona aquele componente, ele levaria o GND para o pino 1 e ai o arduino resetaria como se você estivesse pressionando.
Não fiz o teste, mas na lógica funcionaria perfeitamente.
veja o esquema stand alone do arduino aqui:
Obrigado pelas dicas de todos, vou testar e depois comento o resultado.
Obrigado a todos,
Jota
Testei as soluções dadas pelos amigos.
A melhor para o meu caso foi o do Mauricio que fez um reset completo no Uno, eu so coloquei as 2 funcoes juntas : wdt_enable (WDTO_2S);
wdt_reset ();
Dentro da função que eu chamo para resetar se determinadas condições acontecem...
A outra solução (asm volatile (" jmp 0");), reseta mas parece que não totalmente o arduino, o caracteres que foram criados no display ficam "sujos" dentre outras cositas mas...
Obrigado pela ajuda do pessoal.
Mais uma vez foi de grande ajuda..
[]´s
Jota
Bem-vindo a
Laboratorio de Garagem (arduino, eletrônica, robotica, hacking)
© 2024 Criado por Marcelo Rodrigues. Ativado por