Existe uma função (software) para resetar o Uno como se apertasse o botão reset ?

Gostaria de resetar o Uno usando algum comando na IDE (software) como se fosse resetado pelo botão rest na placa (hardware).

Tks,

Jota

Exibições: 8352

Responder esta

Respostas a este tópico

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

RSS

© 2024   Criado por Marcelo Rodrigues.   Ativado por

Badges  |  Relatar um incidente  |  Termos de serviço