Tengo un ATmega328P-PU en una placa de pruebas,
yestoyintentandoquelascomunicacionesenseriefuncionenatravésdeunodeestoschicosmalos:
El328PsecargaconunbocetodeparpadeomodificadoquesolohaceunSerial.print()alfinaldecadaiteración.
intled=13;intcount=0;voidsetup(){pinMode(led,OUTPUT);//initializethedigitalpinasanoutput.Serial.begin(9600);}voidloop(){count++;for(inti=0;i<2;i++){digitalWrite(led,HIGH);delay(150);digitalWrite(led,LOW);delay(150);}delay(350);Serial.print("abcdefghijklmnopqrstuvwxyz");
}
La buena noticia es que estoy recibiendo algo , pero la mala noticia es que todo está confuso.
Aquí hay un ejemplo de la línea de comandos de Linux de las cosas que estoy recibiendo. También veo resultados confusos similares a través del monitor serie de Arduino y el minicom también:
$ (stty 9600 cs8 -parenb -cstopb;od -a )< /dev/ttyUSB0
0000000 ack ack ' f ' ack x f ack x ~ ack rs ack rs can
0000020 rs rs rs ' rs f rs x rs ~ rs nul f ack x f
0000040 x ack ~ f ack ~ ~ ack f ack ~ ~ ack ack ' f
0000060 ' ack x f ack x ~ ack rs ack rs can rs rs rs '
0000100 rs f rs x rs ~ rs nul f ack x f x ack ~ f
0000120 ack ~ ~ ack f ack ~ ~ ack ack ' f ' ack x f
0000140 ack x ~ ack rs ack rs can rs rs rs ' rs f rs x
0000160 rs ~ rs nul f ack x f x ack ~ f ack ~ ~ ack
0000200 f ack ~ ~ ack ack ' f ' ack x f ack x ~ ack
0000220 rs ack rs can rs rs rs ' rs f rs x rs ~ rs nul
0000240 f ack x f x ack ~ f ack ~ ~ ack f ack ~ ~
0000260 ack ack ' f ' ack x f ack x ~ ack rs ack rs can
0000300 rs rs rs ' rs f rs x rs ~ rs nul f ack x f
0000320 x ack ~ f ack ~ ~ ack f ack ~ ~ ack ack ' f
0000340 ' ack x f ack x ~ ack rs ack rs can rs rs rs '
0000360 rs f rs x rs ~ rs nul f ack x f x ack ~ f
He usado el boceto Atmega_Board_Programmer de Nick Gammon para escribir con éxito el cargador de arranque, en particular probando un par de configuraciones de fusibles diferentes (con y sin el bit de división por 8), pero el resultado es siempre el mismo: basura basura. Bueno, en realidad, cuando se divide por 8, el parpadeo fue super S L O W y obviamente no está bien.
Agradecería cualquier comentario o ideas sobre las vías para explorar. ¿Qué ajustes para tweek? ¿Es razonable el circuito?
EDITAR / ACTUALIZAR
Basándome en la sugerencia de MarkU, ejecuté con éxito mi boceto de parpadeo modificado en un Arduino Uno. Al hacer eso, también verifiqué que el panel de ruptura FT232RL funciona como se esperaba. También noté que en el Uno, la secuencia de parpadeo parecía ser más rápida que el mismo boceto que se ejecuta en mi tablero. Hmmm ...
Así que configura la placa de prueba de nuevo, obteniendo resultados confusos. Luego, pensando en un parpadeo más lento en comparación con la ejecución en Uno, cambié la velocidad en baudios en el lado de Linux 9600 - > 4800. Hey! ¡Ya no está confuso!
El boceto cree que se está enviando a 9600, así que parece que estoy fuera por un factor de 2 en algún lugar. ¿Es mi cristal 4 MHz en lugar de 8? No noté ningún fusible u otra configuración que cambiaría el tiempo por un factor de 2.
Estoesloquecreoqueelproblemaes:estoycompilandoconlaplacaobjetivoconfiguradaen"Arduino Uno", la cual Creo que esto usa una constante F_CPU = 16000000UL. Luego subo a mi placa de pruebas que ejecuta un oscilador de 8 Mhz, la mitad del valor esperado.