Jaecko
01.03.2009, 14:32
Moin.
Für ein Projekt sollen mit einem ATMega32 Daten ausgegeben werden.
Bisher hatte ich mit den UARTs eigentlich nie Probleme; nur dieses Mal seh ich anscheinend den Fehler nicht.
Wenn ich ein Testprogramm mit Bascom erstelle, erscheinen die gesendeten Daten fehlerfrei am Terminal. Versuch ich das ganze nun in C, erhalte ich am Terminal nur Unmengen 0x00.
Da es in Bascom geht, schliesse ich einen Hardwarefehler aus => Irgendwo ein Fehler im Code.
Hab die Teile hier mal angehängt. Sieht dort jemand nen Fehler?
F_CPU: 8 MHz
Baud: 9600/8/n/1
Initialisierung:
void USART_Init(ui32_t baud)
{
ui8_t sreg = SREG;
ui16_t ubrr = (ui16_t) ((ui32_t) F_CPU / (16 * baud) - 1);
UBRRH = (ui8_t) (ubrr>>8);
UBRRL = (ui8_t) (ubrr);
cli();
UCSRB = (1 << RXEN) | (1 << TXEN);
UCSRC = (1 << UMSEL) | (1 << UCSZ1) | (1 << UCSZ0);
do
{
UDR;
} while (UCSRA & (1 << RXC));
UCSRA = (1 << RXC) | (1 << TXC);
SREG = sreg;
}
Schreibfunktionen:
void USART_PutC_Sync(const ui8_t c)
{
while (!(UCSRA & (1 << UDRE)))
{;}
UDR = c;
}
void USART_PutS_Sync(const char *s)
{
do
{
USART_PutC_Sync(*s);
} while (*s++);
}
Testprogramm:
USART_Init(9600);
while(1)
{
USART_PutS_Sync("Test\r\n");
_delay_ms(1000);
}
mfG
Für ein Projekt sollen mit einem ATMega32 Daten ausgegeben werden.
Bisher hatte ich mit den UARTs eigentlich nie Probleme; nur dieses Mal seh ich anscheinend den Fehler nicht.
Wenn ich ein Testprogramm mit Bascom erstelle, erscheinen die gesendeten Daten fehlerfrei am Terminal. Versuch ich das ganze nun in C, erhalte ich am Terminal nur Unmengen 0x00.
Da es in Bascom geht, schliesse ich einen Hardwarefehler aus => Irgendwo ein Fehler im Code.
Hab die Teile hier mal angehängt. Sieht dort jemand nen Fehler?
F_CPU: 8 MHz
Baud: 9600/8/n/1
Initialisierung:
void USART_Init(ui32_t baud)
{
ui8_t sreg = SREG;
ui16_t ubrr = (ui16_t) ((ui32_t) F_CPU / (16 * baud) - 1);
UBRRH = (ui8_t) (ubrr>>8);
UBRRL = (ui8_t) (ubrr);
cli();
UCSRB = (1 << RXEN) | (1 << TXEN);
UCSRC = (1 << UMSEL) | (1 << UCSZ1) | (1 << UCSZ0);
do
{
UDR;
} while (UCSRA & (1 << RXC));
UCSRA = (1 << RXC) | (1 << TXC);
SREG = sreg;
}
Schreibfunktionen:
void USART_PutC_Sync(const ui8_t c)
{
while (!(UCSRA & (1 << UDRE)))
{;}
UDR = c;
}
void USART_PutS_Sync(const char *s)
{
do
{
USART_PutC_Sync(*s);
} while (*s++);
}
Testprogramm:
USART_Init(9600);
while(1)
{
USART_PutS_Sync("Test\r\n");
_delay_ms(1000);
}
mfG