Construí este circuito ATMega328PB . Funciona a 3,3 V con una batería de 1,5 V con refuerzo y 8 MHz con un resonador externo ( CSTCE8M00G52A-R0 ).
Usando USBTinyISP configuré fusibles: Low-FF (para 8MHz), High-D8 (Boot Reset Vector Enabled), Ext-FD.
Utilizando VisualStudio y vMicro plug-in compilé un programa para UNO. vMicro creó un archivo HEX de mi programa CON un gestor de arranque que cargué a través del ISP y funciona bien (el LED parpadea).
Mi objetivo final es hacer un gestor de arranque de 8 MHz personalizado, pero como pasos intermedios, estoy tratando de obtener una señal de vida en serie usando FT231X FTDI, y luego subir un boceto sobre él.
Corté el puente de 5v en FT231X y en su lugar conecté el puente de 3.3v. Luego conectado (sin batería):
ATmega328 FT321X
--------- ------
Vcc Vcc
GND GND
GND CTS
RST DTR (over 0.1uF)
RxD TX
TxD RX
Dado que el registro UBRR predeterminado del cargador de arranque UNO está configurado para 16 MHz, lo inicializo manualmente e intento enviar datos a través de la serie.
#define myubbr (8000000/16/9600-1)
void setup()
{
pinMode(6, OUTPUT);
// Init serial
UBRR0H = (unsigned char)(myubbr >> 8);
UBRR0L = (unsigned char)myubbr;
UCSR0A = 0;//Disable U2X mode
UCSR0B = (1 << TXEN0);//Enable transmitter
UCSR0C = (3 << UCSZ00);//N81
}
void loop()
{
digitalWrite(6, HIGH);
delay(100);
digitalWrite(6, LOW);
delay(100);
char * str = "Hello World";
while (*str) {
while (!(UCSR0A & (1 << UDRE0)));
UDR0 = *str++; //send the data
}
}
En la PC ejecuto: avrdude -v -p m328p -c arduino -PCOM8 -b 9600 Avrdude reconoce el puerto com correcto pero da:
avrdude: stk500_getsync(): no sincronizado: resp=0x00
Los LED RX y TX del FT231X nunca parpadean.
Ni siquiera sé si el problema es HW o SW. Qué estoy haciendo mal. ¿Qué más puedo probar?
En tal caso, comience con una configuración de trabajo y luego avance paso a paso hasta su configuración final. Como:
Si el paso que hace que las cosas tengan pico todavía es demasiado grande, divídalo en pasos más pequeños. ¡Divide y conquistaras! Esta es la misma técnica que utilizo para averiguar qué hace que un compilador se bloquee en una aplicación de 30k líneas. Lleva algo de tiempo, pero al final llegarás allí.
Esta funcionando. En última instancia, fue una combinación de cambiar entre TX y RX y usar la mitad de la velocidad en baudios del cargador de arranque en la PC. Así que primero cargué: setup { Serial.begin(9600); } loop { Serial.write("Hola"); }. hfuse=D9, abrí Arduino Serial Monitor con una velocidad de transmisión de 4800 baudios y finalmente obtuve impresiones. Luego verifiqué 115200 baudios con 57600 en el monitor tanto en TX como en RX usando un bucle de lectura/escritura. Luego grabé un cargador de arranque UNO (velocidad de baudios predeterminada 115200) y configuré uno.upload.speed=57600 en boards.txt, configuré hfuse=D8 para ejecutar el cargador de arranque y ahora puedo cargar programas en serie.
chris stratton