Hallo am Sonntagnachmittag.
Ich habe folgendes Problem: Ich will Zeichen vom PC zum Uc (ATMEGA8)
über RS232 bzw. UART senden.
Voraussetzungen:
- Senden vom Uc zum PC funktioniert (von daher sollten die Einstellungen
in Hyperterm, also Baudrate, Stopbit usw. stimmen).
- Ein MAX232 ist eingebaut, beschaltet wie im Turorial
AVR-Tutorial: UART
- Der uC wird mit einem Quarz (4,9152MHZ) betrieben, die Frequenz ist im
Makefile angegeben
Codeschnipsel:
Initialisierung
1 | void uart_init(void)
|
2 | {
|
3 | UCSRB = (1 << TXEN) | (1 << RXEN); // UART TX & RX einschalten
|
4 |
|
5 | UCSRC = (1 << URSEL) | (3<<UCSZ0); // Asynchron 8N1
|
6 |
|
7 | UBRRH = UBRR_VAL >> 8;
|
8 | UBRRL = UBRR_VAL & 0xFF;
|
9 | }
|
Funktion zum empfangen der Zeichen
1 | char uart_getc(void)
|
2 | {
|
3 | while (!(UCSRA & (1<<RXC))) // warten bis Zeichen verfuegbar
|
4 | {
|
5 | }
|
6 | return UDR; // Zeichen aus UDR an Aufrufer zurueckgeben
|
7 | }
|
Ausschnitt aus main()
1 | void main(void)
|
2 | {
|
3 | uart_init();
|
4 | uart_puts("start"); //Funktion zum senden von Strings
|
5 | while(1)
|
6 | {
|
7 | char test;
|
8 | test = uart_getc();
|
9 | uart_putc(test);
|
10 | uart_putc(',');
|
11 | }
|
12 | }
|
Liegt der Hund im Code begraben oder habe ich doch was in der
Verschaltung vermurkst?
Achja meine Vorgehensweise:
ich starte Hyperterm, dann den uC. In Hyperterm erscheint "Start". Jetzt
drücke ich eine Taste, daraufhin müsste doch eigentlich der uC ein
"Echo" gefolgt von einem Komma erzeugen??
Einen schönen Sonntag! Julian