Circuito de reset para atmega328p

Buenas a todos.

He montando una pequeña placa usando un atmega328p el cual quiero programar estilo arduino, es decir: he grabado el bootloader de arduino, he cogido la placa de un uno y he quitado el chip, conectado GND a GND, RESET a RESET, TX a TX y RX a RX y lo programo como si fuera un UNO.

Ahora bien, en mi placa he puesto un circuito RC en la entrada de Reset. El típico de una resistencia de 10K y 100nF. Y me he topado que el circuito no se deja programar, dando error de conexión el avrdude. Cambiando el condensador a 10nF el circuito ya funciona.

imagedata.php


La duda que me asalta es la siguiente: en teoría ese circuito RC, evita que por ruidos indeseados el micro se reinicie a través del pin, pero cual es el criterio para seleccionar un valor de R y C. Utilizo los tipicos que se ven en todos los circuitos que son los anteriores.
 
El criterio es el tiempo, para usar el bootloader, el circuito reinicia el ATmega y hay un diminuto tiempo en donde este verifica las condiciones para programar antes de continuar la ejecución, con un valor muy grande el ATmega tiene un reinicio más lento y el sistema no se sincroniza adecuadamente.

Ahora no tengo el circuito disponible, pero si se trata de una configuración open drain es muy importante tener cuidado con el condensador, para evitar problemas es mejor que uses los valores que emplea el Arduino.
 
Hola
Buenas a todos.

He montando una pequeña placa usando un atmega328p el cual quiero programar estilo arduino, es decir: he grabado el bootloader de arduino, he cogido la placa de un uno y he quitado el chip, conectado GND a GND, RESET a RESET, TX a TX y RX a RX y lo programo como si fuera un UNO.

Ahora bien, en mi placa he puesto un circuito RC en la entrada de Reset. El típico de una resistencia de 10K y 100nF. Y me he topado que el circuito no se deja programar, dando error de conexión el avrdude. Cambiando el condensador a 10nF el circuito ya funciona.

http://www.subirimagenes.com/imaged....subirimagenes.com/imagen/9721286typreset.png

La duda que me asalta es la siguiente: en teoría ese circuito RC, evita que por ruidos indeseados el micro se reinicie a través del pin, pero cual es el criterio para seleccionar un valor de R y C. Utilizo los tipicos que se ven en todos los circuitos que son los anteriores.
Bueno en realidad no uso arduino ., (NI LO PIENSO USAR )​
Mi recomendacion es que siempre te guies por la hoja de datos del micro usado en este caso ( el atmega 328p)​
Con respecto al la parte R/C ., siempre ., pero siempre ., tenes que guiarte por la hoja de datos (alli estan los valores optimos recomendados)​
En cuanto a la funcion de RESET ., exiten varias posibilidades ( yo no uso la funcion externa ., uso la funcion WATCH DOG RESET)​
Es mas segura y facil de inplementar ., con las distintas velocidadades de arranque​
En cuanto a la velocidas de inicio del reset ., se configuran desde lo fusebit​
Si se te hace dificil entender eso ., tenes la ayuda de esta pagina​
http://www.engbedded.com/fusecalc/
La pagina te da la posibilidad de ., configurar distintos parametros ., y los resultados te los muestra de la dos maneras ., que admiten casi todos los programadores que hay en el mercado​
De la misma manera te aconsejo que si usas la usart (RX y TX)., le coloques el cristal externo (con sus capacitores corespondientes)., en este caso uno de 16Mhz (maximo admitido )​
Ya que de esa manera ., se puede configurar con un maximo de error de 0,00% ., tanto en lectura de trasmicion como de recepcion​
Eso es un error muy comun ., que cometen muchos al usar TX y RX ., de la USART ., y luego vienen los problemas de lectura o envio ., de trama o datos​
 
Para Nuyel: la placa arduino no lleva circuito RC. Simplemente lleva un pulsador directo. Por eso el arduino tiende a reiniciarse tanto cuando está en ambientes con motores y demas.

Para locodelafonola: ufff... 440 páginas de datasheet en ingles... algún día tendré que leerlo, lo sé, pero cada vez que empiezo... De todas formas, le eché un vistazo y no encontré nada al respecto, quizás debiera mirar mejor. Lo que si me encontré fue una nota de aplicación de Atmel en la que recomienda unos valores típicos de 4k7 y 100nF.

He ahí mi duda, si uno de 10nF o de 100nF. Mi electrónica es básica. Deduzco que el usar un filtro RC paso bajo, es para limitar las posibles corrientes de alta frecuencia que puedan hacer que el microcontrolador se reinicie. Con 100nF y 10k, la frecuencia de corte es de 159Hz, si le pongo 10nF, sube a 1.59KHz. No sé hasta que punto puede llegar a ser fatal en caso de ruidos de motores y relés.
 
Hola
Para Nuyel: la placa arduino no lleva circuito RC. Simplemente lleva un pulsador directo. Por eso el arduino tiende a reiniciarse tanto cuando está en ambientes con motores y demas.

Para locodelafonola: ufff... 440 páginas de datasheet en ingles... algún día tendré que leerlo, lo sé, pero cada vez que empiezo... De todas formas, le eché un vistazo y no encontré nada al respecto, quizás debiera mirar mejor. Lo que si me encontré fue una nota de aplicación de Atmel en la que recomienda unos valores típicos de 4k7 y 100nF.

He ahí mi duda, si uno de 10nF o de 100nF. Mi electrónica es básica. Deduzco que el usar un filtro RC paso bajo, es para limitar las posibles corrientes de alta frecuencia que puedan hacer que el microcontrolador se reinicie. Con 100nF y 10k, la frecuencia de corte es de 159Hz, si le pongo 10nF, sube a 1.59KHz. No sé hasta que punto puede llegar a ser fatal en caso de ruidos de motores y relés.
Bueno ., si aparese ., pagina 18 parrafo 5.2.5 ., y despues pagina 72 y subsiguientes parrafos​
Si te hubieras fijado ., en la pagina del CALC que te indique ., te darias cuenta ., que se debe a la condfiguracion de los FUSEBIT​
Eso va directamente asociado al la configuracion del cristal (externo o interno )​
Me tome el trabajo de hacer una captura de pantalla de esa pagina ., donde se ve claramente los tiempos del RESET / FRECUENCIA X CRISTAL​
Capturar-1.jpg
Por otra parte ., si el fabricante te recomienda ., una resistencia de 4,7k (NO 10K) y capacitor de 100nf ., colocarle otro valor es un error​
 
Calcular una frecuencia de corte como si se tratas de un circuito análogo es un error, en primera, si llegaras a tener un ruido de 2kHz con la intensidad para reiniciar el MCU, eso significaría 2 cosas, que conectaste algo que no debías al regulador, o que este es muy muy muy malo para la tarea, los pulsos son más cortos que eso y el MCU es más sensible a la velocidad, los cortes se pueden producir por periodos bastante cortos y para nada equivalentes a periodos en orden de los pocos kHz sin que el regulador lo compense.

Segundo, una resistencia de bajo valor da más inmunidad que una de alto valor y no genera retrasos a la respuesta del reset, en tal caso, lo que producirá el reset es el Brown Out cuando todo el voltaje cae. Lo que es importante, es que el valor no sea demasiado bajo como para que el resto del circuito pueda enviarlo a reset pero para saber eso hay que ir más a detalle con el circuito del Arduino y encontramos esto:
rainicio.PNG
¿decías que no hay condensador? No está conectado directamente a tierra, pero al llevar a LOW esa salida el MCU de la comunicación realiza la tarea de conectarlo a tierra, y no solo eso, también significa que si colocas externamente otro condensador a tierra de 100nf tendrás un bonito divisor de tensión capacitivo lo que puede hacer imposible que el segundo se descargue y llevar el voltaje a VDD/2.

Lo que tendrías que hacer en tal caso es implementar un circuito adicional para permitir el reinicio adecuadamente, o usar un condensador pequeño que logre llevar el voltaje a los valores adecuados.
 
Hola
Calcular una frecuencia de corte como si se tratas de un circuito análogo es un error, en primera, si llegaras a tener un ruido de 2kHz con la intensidad para reiniciar el MCU, eso significaría 2 cosas, que conectaste algo que no debías al regulador, o que este es muy muy muy malo para la tarea, los pulsos son más cortos que eso y el MCU es más sensible a la velocidad, los cortes se pueden producir por periodos bastante cortos y para nada equivalentes a periodos en orden de los pocos kHz sin que el regulador lo compense.

Segundo, una resistencia de bajo valor da más inmunidad que una de alto valor y no genera retrasos a la respuesta del reset, en tal caso, lo que producirá el reset es el Brown Out cuando todo el voltaje cae. Lo que es importante, es que el valor no sea demasiado bajo como para que el resto del circuito pueda enviarlo a reset pero para saber eso hay que ir más a detalle con el circuito del Arduino y encontramos esto:
Ver el archivo adjunto 155500
¿decías que no hay condensador? No está conectado directamente a tierra, pero al llevar a LOW esa salida el MCU de la comunicación realiza la tarea de conectarlo a tierra, y no solo eso, también significa que si colocas externamente otro condensador a tierra de 100nf tendrás un bonito divisor de tensión capacitivo lo que puede hacer imposible que el segundo se descargue y llevar el voltaje a VDD/2.

Lo que tendrías que hacer en tal caso es implementar un circuito adicional para permitir el reinicio adecuadamente, o usar un condensador pequeño que logre llevar el voltaje a los valores adecuados.
Tiene toda la razon amigo Nuyel​
Leyendo tu mensaje ., me acorde de otra situacion ., que parece ., PERO NO ES ., que se reinicie el micro​
En un programa ., el "BOOTEO" ., o carga del BOOTLADER del micro ., tenia una funcion de deteccion externa ., de un microcontacto​
Las condiciones de inicio del programa detectaba el PIN/PORT del atmega a GND ., si no estaba a gnd ., movia un motor hasta que estuviera detectado​
Pero la falla estaba en el micro contacto (nuevo) ., no cerraba ., entonces el programa se reiniciaba permanentemente ., dando la imprecion que se "reseteaba" ciclicamente​
Hay que ver que no sea algo parecido a eso ., u otra funcion que cree ese problema​
Yo las placas que armo y grabo por SPI., no he tenido problemas ., incluso arme algunos atmegas para encendido electronico ., donde si hay mucho "ruido" ., sin enbargo funcionan bien hasta el dia de hoy​
 
Atrás
Arriba