homedom
10.04.2008, 20:11
Hi,
ich bin grad dabei mir ein kleines Bussystem aufzubauen. Als Schnittstelle zum PC will ich einen Atmega162 benutzen, da der 2 Uarts hat. Mein Problem is aber, dass ich es nicht zum laufen bekomm. Ich hab ein kleine Programm geschrieben, dass nur über Uart0 ein Zeichen ausgeben soll, an Uart0 hängt die serielle Com Schnittstelle. Hier mal mein Programm:
#include <avr/io.h>
#include <stdint.h>
#include <avr/interrupt.h>
#define F_CPU 16000000L
#define CBAUD 9600L
#define COM_VAL ((F_CPU/(CBAUD*16))-1)
void com_init()
{
UBRR0H = COM_VAL >> 8;
UBRR0L = COM_VAL & 0xFF;
UCSR0B = (1<<TXEN0)|(1<<RXEN0);
UCSR0C = (1<<URSEL0)|(1<<UCSZ01)|(1<<UCSZ00);
}
void com_send(unsigned char c)
{
while ( !( UCSR0A & (1<<UDRE0)) )
;
UDR0 = c;
return;
}
int main(void)
{
DDRD = 0xFF;
com_init();
while(1)
{
com_send('E');
}
return 0;
}
Harwaretechnisch sollte alles i.O. sein, da der bootloader auch funktioniert. Kann mir einer sagen was ich falsch mache? Am PC kommt kein Zeichen an?!
gruß, homedom
ich bin grad dabei mir ein kleines Bussystem aufzubauen. Als Schnittstelle zum PC will ich einen Atmega162 benutzen, da der 2 Uarts hat. Mein Problem is aber, dass ich es nicht zum laufen bekomm. Ich hab ein kleine Programm geschrieben, dass nur über Uart0 ein Zeichen ausgeben soll, an Uart0 hängt die serielle Com Schnittstelle. Hier mal mein Programm:
#include <avr/io.h>
#include <stdint.h>
#include <avr/interrupt.h>
#define F_CPU 16000000L
#define CBAUD 9600L
#define COM_VAL ((F_CPU/(CBAUD*16))-1)
void com_init()
{
UBRR0H = COM_VAL >> 8;
UBRR0L = COM_VAL & 0xFF;
UCSR0B = (1<<TXEN0)|(1<<RXEN0);
UCSR0C = (1<<URSEL0)|(1<<UCSZ01)|(1<<UCSZ00);
}
void com_send(unsigned char c)
{
while ( !( UCSR0A & (1<<UDRE0)) )
;
UDR0 = c;
return;
}
int main(void)
{
DDRD = 0xFF;
com_init();
while(1)
{
com_send('E');
}
return 0;
}
Harwaretechnisch sollte alles i.O. sein, da der bootloader auch funktioniert. Kann mir einer sagen was ich falsch mache? Am PC kommt kein Zeichen an?!
gruß, homedom