Ich habe folgende Schaltung:
Simulieren Sie diese Schaltung – Mit CircuitLab erstellter Schaltplan
Und dieser Code, um es auszuführen:
#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);
}
}
Wenn ich diesen an ein UART/USB Tool anschließe und den Terminal Monitor mit 9600Boud rate und 8n1 starte bekomme ich leere Meldungen. Können Sie mir sagen, was ich falsch gemacht habe / was ich ändern muss, damit es funktioniert?
Obwohl Sie angegeben haben, dass Sie verwenden hör auf, ermöglicht zwei. Aber das sollte nichts stören.
Größeres Problem ist im Baudratengenerator. Die Baudrate im Normalmodus wird berechnet als . Also ist UBRR und für es ist , nicht .
Bearbeiten: Ein weiteres Problem gefunden, falsche Bitverschiebung im UART-Konfigurationsregister C. Es sollte sein , nicht .
Venny
Kimliw
Ignacio Vazquez-Abrams
util/setbaud.h
...Kimliw
Venny
Peter Bennett