FTDI parece ser un tema de foro popular, pero parece que no puedo encontrar una respuesta a un problema de confusión que tengo. Trataré de dar tantos detalles como pueda, ya que parece que no puedo limitar el problema.
Estoy usando un ATmega328-PU (el problema más barato para los usuarios de ArduinoISP) con un FTDI 232-RL Breakout Board. Pude grabar el gestor de arranque Arduino utilizando la tabla de ruptura sin ningún problema, así como cargar el boceto que estoy usando.
Ahora, estoy tratando de usar el puerto de comunicación serie FTDI de mi PC para interactuar con el 328. Los únicos pines que estoy ejecutando desde la placa de ruptura a mi placa son los pines TX, RX y GND. Estoy usando una velocidad en baudios de mi puerto serie de 115200.
Síntomas: el indicador de RX parpadea de forma constante, por lo que recibe muchos bits felices de la PC. El indicador de TX parpadea durante aproximadamente 1 segundo y luego se apaga. No hay bits felices de FTDI a ATmega328.
No tengo un botón de reinicio en mi circuito 328, solo una resistencia de + 5V. Tengo un reloj externo de 16MHz en mi circuito. He adjuntado el código de configuración de mi boceto para referencia adicional.
Ahora, las preguntas:
1) ¿Debo hacer algo con los pines CTS y DTR que vienen de la tabla de ruptura?
2) ¿Hay un reloj interno en el ATmega328 que me está fastidiando (incluso después del cargador de arranque? Si es así, ¿cómo puedo desactivarlo?
3) ¿Es necesario un botón de reinicio en mi circuito si el croquis ya está cargado?
Espero que alguien pueda arrojar algo de luz sobre mi problema. Muy apreciado!
Aquí está el código de configuración (después de declarar los pines en 328):
void setup()
{
DDRB |= (1<<1) | (1<<2) | (1<<3) | (1<<5) ; // BLANK, SS, MOSI, SCLK as OUTPUTS
DDRD |= (1<<3) | (1<<4) | (1<<6) | (1<<7) ; // VPRG, XLAT, GSCLK, Debug as OUTPUTS
DDRC = 255;
XLAT_Low;
BLANK_High;
VPRG_Low;
Debug_Low;
//Timer 1 (16bit)
TCCR1A = (1<<WGM11) | (0<<WGM10); // Fast PWM with ICR1 as top
TCCR1B = (1<<WGM13) | (1<<WGM12); // Fast PWM with ICR1 as top
TCCR1B |= (1<<CS12) | (1<<CS11) | (1<<CS10); // external clock (T1) on rising egde
TIMSK1 |= (1<<TOIE1); // enable overflow interupt
ICR1 = Gray_Scale_Depth; // Grey scale depth for TLC-PW
//Timer 0 (8bit)
TCCR0A = (1<<WGM01) | (0<<WGM00); // CTC
TCCR0A |= (0<<COM0A1) | (1<<COM0A0); // Toggle on Compare Match
TCCR0B = (0<<CS02) | (0<<CS01) | (1<<CS00); // No Prescaler
OCR0A = 0; // f(OCR) = F_CPU/2/Prescaler
//UART Initialisation
UCSR0A |= (1<<U2X0); // Double up UART
UCSR0B |= (1<<RXEN0) | (1<<TXEN0) | (1<<RXCIE0); // UART RX, TX und RX Interrupt enable
UCSR0C |= (1<<UCSZ01) | (1<<UCSZ00) ; // Asynchrous 8N1
UBRR0H = 0;
UBRR0L = 1; //Baud Rate 1 MBit --> 0% Error at 16MHz
//Enable global interrupts
sei();
//Configure SPI
SPCR = (1<<SPE)|(1<<MSTR);
SPSR = B00000000;
ptr=display_buffer;
}