Hi vohopri,
danke schön.
Schaltplan ist recht einfach, auf der Nibobee sind bereits Stiftleisten mit diversen Ports des ATMega16 verbunden. Unter anderem ist dort am Connector X5 RXD und TXD der UART des Chips ausgeführt. Die hab ich über Widerstände an ein BTM-222 angeschlossen (Weil verschiedene Pegel BTM222 3,3V und Nibobee 5V). Mit einem 3,3V Stabi-IC wird das Modul versorgt. Status LEDs kann man am Modul anschließen, muss man aber nicht.
Die Software dazu:
Code:
void writeChar(uint8_t data )
{
while ( !( UCSR0A & (1<<UDRE0)) );
UDR0 = data;
}
void writeString(char *string)
{
while(*string)
writeChar(*string++);
}
/*void uart_init(void) ATMEGA16
{
UCSRB |= (1<<TXEN); // UART TX einschalten
UCSRB |= (1<<RXEN); // UART RX einschalten
UCSRC |= (1<<URSEL)|(1<<UCSZ1)|(1<<UCSZ0); // Asynchron 8N1
UBRRH = UBRR_VAL >> 8;
UBRRL = UBRR_VAL & 0xFF;
}*/
void uart_init(void) //ATMEGA1284
{
UCSR0B |= (1<<TXEN0); // UART TX einschalten
UCSR0B |= (1<<RXEN0); // UART RX einschalten
UCSR0C |= (1<<USBS0)|(3<<UCSZ00); // Asynchron 8N1
UBRR0H = UBRR_VAL >> 8;
UBRR0L = UBRR_VAL & 0xFF;
}
uint8_t uart_getc_nb(void) //non blocking
{
if (!(UCSR0A & (1<<RXC0))) {
return 0;
} else {
return UDR0;
} // Zeichen aus UDR an Aufrufer zurueckgeben
}
uint8_t uart_getc(void)
{
while (!(UCSR0A & (1<<RXC0))) // warten bis Zeichen verfuegbar
;
return UDR0; // Zeichen aus UDR an Aufrufer zurueckgeben
}
void uart_gets( char* Buffer, uint8_t MaxLen )
{
uint8_t NextChar;
uint8_t StringLen = 0;
NextChar = uart_getc(); // Warte auf und empfange das nächste Zeichen
// Sammle solange Zeichen, bis:
// * entweder das String Ende Zeichen kam
// * oder das aufnehmende Array voll ist
while( NextChar != '\n' && StringLen < MaxLen - 1 ) {
*Buffer++ = NextChar;
StringLen++;
NextChar = uart_getc();
}
// Noch ein '\0' anhängen um einen Standard
// C-String daraus zu machen
*Buffer = '\0';
}
Es gibt Anleitungen im Netz dazu aber so ganz haben die dann doch nicht funktioniert. Deswegen hab ich dann die Grundfunktionen einfach nach dem Datenblatt nach implementiert.
Lesezeichen