Lo más extraño le está sucediendo a una placa Arduino independiente que diseñé y construí. El tablero (cuyos esquemas están a continuación) tiene las siguientes características:
- Tiene un ATmega328P con un regulador de voltaje de 5V y circuitos habituales cuando se configura como un controlador independiente.
- Controla un marcador con varios dígitos de 7 pantallas vinculados a través de los conectores de la derecha (JP1 a JP12).
- Tiene botones de cursor decodificados usando una escala de voltaje a través de ANALOG_0 (A0).
- Tiene un reloj de tiempo real para mantener la hora cuando está apagado.
- Tiene un módulo receptor de RF.
- Tiene un encabezado UART (JP17) para que pueda programar la placa utilizando un puerto serie.
- Tiene un altavoz conectado al pin digital 3 (D3).
Le subo bocetos utilizando un adaptador RS232 a TTL que también he construido (esquemas también a continuación) y un cable de serie a USB. Al programarlo, la placa se comporta como una placa Severino .
Lo extraño es que, cuando subo un boceto, el proceso se detiene en el medio y luego el altavoz comienza a pitar continuamente. Hace una pausa con los siguientes mensajes de avrdude:
avrdude: Versión 5.11, compilada el 2 de septiembre de 2011 a las 19:38:36 Copyright (c) 2000-2005 Brian Dean, http://www.bdmicro.com/ Copyright (c) 2007-2009 Joerg Wunsch
System wide configuration file is "C:\arduino-1.0.3\hardware/tools/avr/etc/avrdude.conf"
Using Port : \\.\COM1
Using Programmer : arduino
Overriding Baud Rate : 115200
Cuando presiono reiniciar en el tablero, avrdude continúa emitiendo sus mensajes (como se muestra a continuación), el pitido se detiene, la carga continúa y el boceto se carga con éxito en el tablero.
avrdude: Send: 0 [30] [20]
avrdude: Send: 0 [30] [20]
avrdude: Send: 0 [30] [20]
... messages and upload continue and completes successfully.
No tengo el resto de los mensajes a mano aquí, pero espero que entiendas la idea.
Entonces, mis preguntas son:
- ¿Qué hace que el proceso de carga se detenga?
- ¿Por qué suena el timbre cuando el proceso se detiene?
Respuestas:
Bueno, dados todos los comentarios hechos bajo su pregunta, esta es definitivamente una pregunta difícil. Es posible que desee intentar agregar un condensador de desacoplamiento como lo sugiere @jfpoilpret, aunque sus esquemas me parecen correctos ... (tal vez solicite una revisión en EE SE ).
También le aconsejo que copie el
avrdude
comando de la salida IDE de Arduino (lo encontrará en la parte superior) y lo ejecute en el shell de comandos con una tasa de bits más baja:cuanto mayor sea el
-B
valor, menor será su tasa de bits. y-b
a la velocidad de transmisión correcta para su gestor de arranque (¿está seguro de que es 115200? Es más común ver 57600).¿También configuró los fusibles correctamente? Es posible que también desee verificar los valores de los fusibles para ver si los relojes están configurados correctamente:
que dará salida a los valores de los fusibles. Luego, para que los valores sean legibles, coloque los valores en la parte inferior del formulario en el sitio de la calculadora de fusibles , después de elegir la
Atmega328P
MCU de la lista desplegable.Verifique que:
Es porque cuando el procesador no tiene la salida configurada, los valores dentro de los registros están en un estado indefinido e impredecible. Lo que significa que generalmente mantiene el último valor que tenía antes de un reinicio o un estado cambiado debido a alguna rareza electrostática, o está dando una salida PWM extraña debido a la influencia de un reloj cercano.
Básicamente, está sucediendo algo incorrecto cuando está cargando su código y ese error tiene un efecto indirecto en el audio. No me preocuparía mucho por esas cosas, sino más por la causa de la pausa.
Lamentablemente, no tengo una respuesta directa para usted, pero en el mejor de los casos debería investigar más. HTH
fuente
Finalmente encontré lo que estaba causando el problema: la señal de reinicio del pin 4 (DTR - Terminal de datos lista) en el conector DB9-Hembra se disparó hasta 10 V antes de ir a 0 V y estaba activando la programación de alto voltaje en el ATmega. A continuación se muestra una imagen de alcance que muestra la situación:
El rastro amarillo es
DTR
señal mientras que el rastro verde es laRESET
señal en el ATmega.De acuerdo con la nota de aplicación Atmel AVR042 Atmel AVR042: Consideraciones de diseño de hardware , se debe agregar un diodo ESD entre ATmega
RESET
yVcc
evitar que la señal de reinicio active el modo de programación de alto voltaje, así:Después de agregar un diodo de señal tan pequeño (1N4148) como la nota de la aplicación recomendada, solucioné el problema. Vea a continuación la toma del alcance tomada después de agregar el diodo.
Ahora el pico de 10V se ha ido.
¡Eso fue complicado! Pero nunca podría encontrar lo que estaba mal sin la investigación y las herramientas adecuadas. ¡El dinero en un telescopio es dinero bien gastado!
fuente
No estoy seguro, pero el problema también puede estar relacionado con la función de reinicio automático de la placa del convertidor.
Copié el diseño de la placa del convertidor del Arduino Severino y, de acuerdo con su manual , la comunicación en serie debe configurarse a 19.200 bps para que funcione la función de reinicio automático.
Bueno, estoy usando 115.200, así que eso debe ser un problema.
fuente