Ayuda a conectar el ATMega328PB personalizado mediante FTDI en serie

2

Construí este circuito ATMega328PB . Funcionaa3.3vdesdeunabateríade1.5vusando booster y 8MHz desde el resonador externo ( CSTCE8002PC2 -R0 ).

Usando USBTinyISP, configuro los fusibles: FF bajo (para 8MHz), D8 alto (Vector de reinicio de arranque habilitado), FD ext.

Usando VisualStudio y vMicro plug-in compilé un programa para UNO. vMicro creó un archivo HEX de mi programa CON un cargador de arranque que cargué a través del ISP y funciona bien (parpadea el LED).

Mi objetivo final es hacer un gestor de arranque personalizado de 8MHz pero como pasos intermedios Estoy tratando de obtener un signo de vida en serie utilizando FT231X FTDI, y luego subir un boceto sobre él.

Corté el puente 5v en FT231X y conecté el puente 3.3v en su lugar. 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 16MHz, lo inicializo manualmente e intento insertar datos en 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 de comunicación correcto pero da:

avrdude: stk500_getsync (): no está sincronizado: resp = 0x00

Los LED de RX y TX en el FT231X nunca parpadean.

Ni siquiera sé si el problema es HW o SW. Qué estoy haciendo mal. ¿Qué más puedo probar?

    
pregunta Gary

2 respuestas

1

Está funcionando. En última instancia, fue una combinación de cambio entre TX y RX y el uso de la mitad de la velocidad en baudios del cargador de arranque en la PC. Así que primero cargué: configuración {Serial.begin (9600); } loop {Serial.write ("Hola"); }. hfuse = D9, abrió el Monitor Serial Arduino con una velocidad de baudios de 4800 y finalmente obtuvo impresiones. Luego verifiqué 115200 baudios con 57600 en el monitor, tanto en TX como en RX, utilizando el ciclo de lectura / escritura. Luego quemé un cargador de arranque UNO (velocidad de transmisión 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.

    
respondido por el Gary
0

En tal caso, comience con una configuración de trabajo y luego trabaje paso a paso hasta la configuración final. Me gusta:

  • Comience con 5V, 16 MHz, gestor de arranque existente, Arduino IDE con un boceto de 'hola mundo'.
  • Cambie a 3.3V (suministro de laboratorio) y 8 MHz. verificar (la velocidad en baudios se reducirá a la mitad)
  • use su circuito FTDI a serie. verificar.
  • cambie a su suministro de 3.3V. verificar.
  • cambia a usar tu IDE e ISP. verificar.

Si el paso que hace que las cosas se vuelvan demasiado grandes, 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. Toma algo de tiempo, pero llegarás al final.

    
respondido por el Wouter van Ooijen

Lea otras preguntas en las etiquetas