Tengo el siguiente circuito:
simular este circuito : esquema creado con CircuitLab
Y este código para ejecutarlo:
#define F_CPU 4915200UL // Quarz with 4.9152Mhz
#define BAUD 9600
#include <asf.h>
#include <avr/io.h>
#include "helpFile.h" // set/clear Bit (LED)
#include <util/delay.h>
void USART_Init( unsigned int ubrr )
{
/* Set baud rate */
UBRR0H = (unsigned char)(ubrr>>8);
UBRR0L = (unsigned char)ubrr;
/* Enable receiver ?nd transmitter */
UCSR0B = (1<<RXEN0)|(1<<TXEN0);
/* Set frame format 8data, 1stop bit */
UCSR0C = (1<<URSEL0)|(1<<USBS0)|(3<<UCSZ00);
}
void USART_Transmit( unsigned char data )
{
/* Wait for empty transmit buffer */
while ( !( UCSR0A & (1<<UDRE0)) )
;
/* Put data into bu?fer, sends the data */
UDR0 = data;
}
void main( void )
{
USART_Init(31);
DDRB = ( 1 << PB0 );
while(1)
{
USART_Transmit('C');
PORTB ^= ( 1 << PB0 );
_delay_ms(1000);
}
}
Si conecto esto a una herramienta UART/USB e inicio Terminal Monitor con 9600Boud rate y 8n1, obtengo mensajes vacíos. ¿Puede decirme qué hice mal / qué cambiar para que funcione?
Aunque dijiste que usas detener un poco, habilita dos. Pero eso no debería interferir con nada.
El mayor problema está en el generador de velocidad en baudios. La tasa de baudios en modo normal se calcula como . Entonces UBRR es y para es , no .
Editar: se encontró otro problema, cambio de bit incorrecto en el registro de configuración C de UART. Debería ser , no .
venny
kimliv
Ignacio Vázquez-Abrams
util/setbaud.h
...kimliv
venny
pedro bennett