Hey, ich probiere grad meine UART aus. Habe ein ATmega8 auf dem Pollin-Board. Das senden von Zeichen und Strings funktioniert klasse. Nur ich empfange einfach nix. Jemand ne Ahnung was falsch ist? PD5&PD6 sind LED's zur Anzeige ob das Programm weiter läuft (und PD6 bleibt aus). /* * UART_IN.c * * Created: 23.02.2012 19:53:10 * Author: Cris */ #include <avr/io.h> #define F_CPU 16000000UL #define BAUD 9600UL #define UBRR_VAL ((F_CPU+BAUD*8)/(BAUD*16)-1) void uart_init(void); int uart_putc(unsigned char c); uint8_t uart_getc(void); int main(void) { uart_init(); DDRD = 0b11100000; uint8_t c; while(1) { PORTD |= (1 << PD5); c = uart_getc(); PORTD |= (1<< PD6); while (!(UCSRA & (1<<UDRE))) // warten bis Senden moeglich { } uart_putc(c + '0'); } } void uart_init(void) { UBRRH = UBRR_VAL >> 8; UBRRL = UBRR_VAL & 0xFF; UCSRB |= (1<<TXEN) | (1<<RXEN); // Frame Format: Asynchron 8N1 UCSRC = (1<<URSEL)|(1 << UCSZ1)|(1 << UCSZ0); // Asynchron 8N1 } int uart_putc(unsigned char c) { while (!(UCSRA & (1<<UDRE))) /* warten bis Senden moeglich */ { } UDR = c; /* sende Zeichen */ return 0; } uint8_t uart_getc(void) { while (!(UCSRA & (1<<RXC))) // warten bis Zeichen verfuegbar ; return UDR; // Zeichen aus UDR an Aufrufer zurueckgeben }
Hallo Cris, warum schreibt ihr immer wieder selbst Code der nicht funktioniert ? Verwende doch bitte eine Bibliothek von einem fertigen Projekt. Z.B.: * Software UART mit FIFO von Peter Dannegger: Beitrag "Software UART mit FIFO" ODER * UART Library von Peter Fleury: http://homepage.hispeed.ch/peterfleury/avr-software.html http://homepage.hispeed.ch/peterfleury/group__pfleury__uart.html .
An deinem Programm liegt es nicht. Das läuft bei mir. Überprüfe die Hardware d.h. die Leitung TX die vom PC kommt und auf RXD am Atmega8 endet. Im einfachsten Fall besteht der Test darin: AVR aus der IC-Fassung ziehen und eine Drahtbrücke zwischen RXD und TXD stecken. Dann auf dem PC was senden. Alles was du sendest muss als Echo auf den PC zurück kommen. Wenn nicht ist was iauf der Verbindung faul. Wenn das Echo zuverlässig kommt, dann den AVR mal tauschen. Vielleicht ist die Eingangsstufe an RXD zerschossen.
Anm. die LEDs sind "Witzlos", da sie durch das |= auf Dauerlicht stehen. Ein Toggeln mit ^= wäre sinnvoller.
Am PC das Hardware-Handshake (nennt sich im Hyperterminal 'Flusssteuerung') abgeschaltet?
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.