Criei uma função com switch case, sendo várias são opções de configuração e apenas uma de execução.

Declarei a variável de controle do switch case antes do setup e atribuí um valor, sendo este o número da opção de execução, então no caso de falta de energia, e quando ela voltar, o código voltará a funcionar normalmente porque toda configuração foi gravado na EEPROM. Ta funcionando perfeitamente...

Só que dessa forma ao apertar o botão reset o Arduino reinicia e volta funcionar normalmente, sendo que não consigo entrar nas opções de configuração.

Meu questionamento: Como capturar o sinal do BOTÃO RESET para elaborar um algorítimo que ele possa diferenciar a falta de energia ou uso do boão reset (sem adicionar outro botão)?

Exibições: 555

Responder esta

Respostas a este tópico

RCB, boa noite,

não entendi bem a dificuldade, pois em ambos casos, reset ou poweron, as variaveis são definidas e o setup é rodado.

Mas se voce quer guardar a informação se o reset foi pressionado, use um resistor a mais no reset, um capacitor ligados em um port.

RV

Não existe uma função que capta o sinal do botão reset ou o nome da porta usado pelo botão que possa capturar o sinal alto ou baixo?

Até onde sei não existe, pois o reset é físico e não lógico no microcontrolador. Se não me engano até é possível configurar os fuses para usar o pino de reset como I/O, mas o reset deixa de funcionar (não sei se todo chip suporta isso).

Se você quer usar dessa forma teria que fazer como o Rui falou, usar o botão de reset para acionar outro pino do microcontrolador e fazer o tratamento conforme desejar.

RV qual o valor do resistor e do capacitor (eletrolítico ou cerâmico) e como seria o esquema de ligação?

Olá.

  Essa gambiarra toda contraria o princípio do microcontrolador. O inicio de tudo é o reset, quando vc liga o microcontrolador um capacitor está descarregado, o capacitor do reset, que dispara os circuitos de inicialização (zera registradores como os de interrupção, contador de programas, direções de ports, etc. Não atua sobre memória RAM). O pino reset atua sobre esse capacitor. Por isso é a mesma coisa. Quanto mais "mesma coisa" mais eficiente o reset, senão não seria um reset... Seria um reset parcial.

  Nos micros antigos (MSX) lembro que já passei por isso. Usava a RAM. A ram quando vc liga vem com blocos de 255,255,255 de depois 0 0 0 0 0. Coisa assim. Aih verificava um endereço de ram. Previamente escrevia um 1234 da vida e depois via se ele estava lá. Se estivesse era pq a memória RAM vinha de um reset no dedo. Mas no Arduino, vale o teste, mas existe um procedimento de inicialização de memoria que apaga tudo. Confira isso, verifique se pode ser mudado, se quiser insistir.

  O caminho limpo e tecnológico seria ter um botão de "configurar" que não seja o reset. Quando vc aperta roda a rotina de configuração...

  Não sei como é o seu circuito, se está apelando pq não tem mais I/Os. Se for, mande ele para ver se alguem tem alguma sugestão de economia de pinos.

  Aqui por ex faço paineis com 3 teclas usando só um pino. 3 resistores e 3 chaves. um resistor de pullup por ex de 22k. 3 resistores: um que liga 22K no pino, outro liga 10K no pino e outro que liga GND. Daria pra por mais até. Usando o pino de forma analógica dá pra diferenciar qual tecla foi pressionada com facilidade.O chicote do teclado do painel fica com 2 fios ! Até umas 6 teclas é tranquilo diferenciar. Dá ainda para usar composições, tipo: Se o usuário apertar 2 teclas ao mesmo tempo vem outro valor que é possivel perceber.

Certo Eduardo

Já estava trabalhando com a possibilidade de ter que adicionar mais um botão mesmo e usar a EEPROM para gravar novo valor, e usando a função de inicialização: asm volatile ("jmp 0"); e depois ler o novo valor na variável controle do switch case, e  me levaria de volta para as opções de configuração.

Obrigado.

Construí um código (em anexo), que da uma ideia de como resolvi meu problema, mas tendo que adicionar um botão para esta finalidade.

Anexos

RSS

© 2024   Criado por Marcelo Rodrigues.   Ativado por

Badges  |  Relatar um incidente  |  Termos de serviço