0
Offline
Edison Member
Karma: 8
Posts: 1040
Arduino rocks
|
 |
« on: July 17, 2011, 11:13:02 am » |
Quiero poner un watchdog para que cuando algún proceso del programa tarde mas tiempo de la cuenta se resetee el micro. Estoy usando un Duemilanove con un Atmega168, con este codigo pasado el tiempo del watchdog (8 segundos), el led del pin 13 se queda parpadeando de forma muy rápida pero no resetea el programa. Podéis probarlo con un atmega328 para ver si este es el problema. #include <avr/wdt.h>
void setup() { wdt_disable(); Serial.begin(9600); wdt_enable(WDTO_8S); }
void loop() { Serial.println("Test"); delay(10000); wdt_reset(); }
Saludos.
|
|
|
|
|
Logged
|
|
|
|
|
0
Offline
Edison Member
Karma: 8
Posts: 1040
Arduino rocks
|
 |
« Reply #1 on: July 19, 2011, 03:32:05 am » |
Me puedo imaginar que el tema esta en el bootloader que tengo metido.
|
|
|
|
|
Logged
|
|
|
|
|
0
Offline
Edison Member
Karma: 8
Posts: 1040
Arduino rocks
|
 |
« Reply #2 on: July 22, 2011, 03:15:10 am » |
Pues he probado a meter otra versión de bootloader y hace lo mismo, cuando llega el tiempo que tienes puesto en el watchdog empieza a parpadear el led del pin 13 de forma muy rápida.
Saludos.
|
|
|
|
|
Logged
|
|
|
|
|
Madriz
Offline
Full Member
Karma: 0
Posts: 176
Glober Arduiner
|
 |
« Reply #3 on: July 22, 2011, 05:32:27 am » |
|
|
|
|
« Last Edit: July 22, 2011, 05:39:08 am by aero_yo »
|
Logged
|
|
|
|
|
0
Offline
Edison Member
Karma: 8
Posts: 1040
Arduino rocks
|
 |
« Reply #4 on: July 22, 2011, 06:22:52 am » |
Voy a probar a cargar este bootloader y te cuento.
Gracias.
|
|
|
|
|
Logged
|
|
|
|
|
Madriz
Offline
Full Member
Karma: 0
Posts: 176
Glober Arduiner
|
 |
« Reply #5 on: July 26, 2011, 08:31:41 am » |
SE me ha ocurrido otra solución leyendo otro hilo del foro, programar el arduino sin bootloader. Evitas el problema del bootloader en el reset y éste es más rápido. Hola
Con esos programadores haces lo mismo que siempre, sigues usando el ide del arduino y cargas el programa en el arduino pero con una ventaja, no cargas el bootloader (parte de programa para que puedas programar los arduinos desde el usb) y consumes menos memoria, aparte que cargas mas rapido la compilacion en el arduino.
Eso no quita cuando quieras, vuelvas a cargar el bootloader y vuelvas a usar el arduino programandolo por el usb.
Ventajas: Rapidez y economia de ram. Cargas bootloaders en chips Atmel virgenes. Cargas el programa mas rapido.
Desventajas: no puedes programar el arduino por usb ya que le quitas el bootloader pero puedes cargar el bootloader siempre que quieras, no es irreversible.
Yo, ultimamente, estoy cargando todos los pde a traves del usbtiny, ya no uso el bootloader del arduino salvo contadas ocasiones.
Un saludo
PD: si vas a usarlo, y necesitas ayuda dentro de mis posibilidades, comentalo en el foro, solo hay un detalle, es que cuando cargas los pde a traves del usbtiny hay que cambiar un fichero de configuracion:
La solucion esta en editar un fichero de texto que se encuentra (en el caso de usar windows) en:
c:\Documents and Settings\<USERNAME>\Application Data\Arduino\preferences.txt
En mi caso: c:\Documents and Settings\administrador\datos de programa\Arduino\preferences.txt
ese fichero hay que editarlo y cambiar la linea de texto que dice:
upload.using=bootloader
por este otro:
upload.using=usbtinyisp
|
|
|
|
|
Logged
|
|
|
|
|
0
Offline
Edison Member
Karma: 8
Posts: 1040
Arduino rocks
|
 |
« Reply #6 on: July 29, 2011, 05:04:57 pm » |
Esta solución esta bien para ahorrarte el bootloader, pero no es lo que busco. La historia es saber como hacer un reset cuando el programa se queda frito en algún sitio. Por cierto de donde has sacado aero_yo lo del usbtiny?
Saludos.
|
|
|
|
|
Logged
|
|
|
|
|
|
|
0
Offline
Edison Member
Karma: 8
Posts: 1040
Arduino rocks
|
 |
« Reply #8 on: July 30, 2011, 05:06:23 am » |
He probado ha subir el tiempo hasta 8 seg que es el maximo y hace lo mismo, se queda frito. Voy a ver si puedo cargarlo sin bootloader, porque no tengo apaños. Saludos.
|
|
|
|
|
Logged
|
|
|
|
|
Madriz
Offline
Full Member
Karma: 0
Posts: 176
Glober Arduiner
|
 |
« Reply #9 on: July 30, 2011, 05:53:22 am » |
da igual que pongas 8s, porque cuando se resetea vuelve a 15ms en el bootloader por defecto, y no le da tiempo a leer la orden de volver a 8s, que va después del boot.
Suerte y ya me contarás porque yo también quiero implementarlo en un proyecto pero no tengo el programador isp aún.
|
|
|
|
|
Logged
|
|
|
|
|
0
Offline
Edison Member
Karma: 8
Posts: 1040
Arduino rocks
|
 |
« Reply #10 on: July 30, 2011, 06:02:02 am » |
No lo sabia que por defecto son 15ms. Saludos.
|
|
|
|
|
Logged
|
|
|
|
|
0
Offline
Edison Member
Karma: 13
Posts: 1266
Arduino rocks
|
 |
« Reply #11 on: July 31, 2011, 02:55:19 pm » |
como ha terminado esto?
tengo un proyecto en el que me vendria genial. Es un medidor electrico que sube los datos a internet cada 10segundos, el problema es que a veces (pueden pasar dias que va todo OK) se queda colgado y no reconoce la conexión a internet.
me interesaria alguna forma que cada "1 hora" se resetee el arduino este ejecutando el codigo en el punto que sea.
se puede hacer esto con lo que estas investigando tu flico??
gracias
|
|
|
|
|
Logged
|
|
|
|
|
Madriz
Offline
Full Member
Karma: 0
Posts: 176
Glober Arduiner
|
 |
« Reply #12 on: July 31, 2011, 03:01:05 pm » |
El tiempo máximo es de 8s, si puedes cambiar esos 10 segundos a 8 y le da tiempo a ejecutar todo el código de conexión en ese intervalo igual te puede servir.
Podrías esquivar esta limitación activando el wtd después de conectado, pero te la juegas a que si hay un cuelgue durante la conexión no entre el reset.
|
|
|
|
« Last Edit: July 31, 2011, 03:07:28 pm by aero_yo »
|
Logged
|
|
|
|
|
0
Offline
Edison Member
Karma: 13
Posts: 1266
Arduino rocks
|
 |
« Reply #13 on: July 31, 2011, 03:06:17 pm » |
en realidad los 10 segundos son porque tengo una condicion if que hace que se ejecute cada 10 segundos. es decir, el bucle loop esta todo el rato dando vueltas sin problemas. en cuanto a subir los datos, tarda 2 segundos en llamar a la web para subir los datos. dicho esto, me valdria el watchdog para resetear el arduino cada 1 hora ? en tal caso, se define el watchdog al principio y el ya se encarga de ejecutar el codigo de reset cuando se cumpla la hora?? muchas gracias pero es que lo del watchdog es nuevo, pero estoy leyendo para intentar entenderlo. edit... este link lo explica facilito y creo que ya lo tengo claro, voy a aplicarlo en mi codigo a ver que tal. http://blog.bricogeek.com/noticias/arduino/como-utilizar-watchdog-con-arduino/edit2... mierda no habia visto que hay que cambiarle el bootloader !! Esto no lo he hecho nunca y no tengo un programador externo, asi que mi gozo en un pozo!!! que rabia. tendre que hacerme con un programador externo de esos y probar.
|
|
|
|
« Last Edit: July 31, 2011, 03:57:45 pm by Sergegsx »
|
Logged
|
|
|
|
|
Las Palmas - España
Offline
Full Member
Karma: 0
Posts: 151
|
 |
« Reply #14 on: July 31, 2011, 04:13:02 pm » |
No hace falta que compres un grabador, solo compra otro atmega y con el que tienes ahora puedes programarlo por ISP, cargando el ejemplo que viene en el IDE llamado ArduinoISP, tienes mas info aqui: http://arduino.cc/es/Tutorial/ArduinoISP
|
|
|
|
|
Logged
|
Si quieres ser mas positivo....pierde un electrón......
|
|
|
|
|