Hallo Leute, ich habe ein Problem bei meinem ATmega32 ein Char über die serielle Schnittstelle zu empfangen. Die Aufgabenstellung ist wie folgt: Wird ein definiertes Zeichen (z.B c) übers Terminalprogramm geschickt soll eine LED angehen. Im Anhang habe ich mal meinen Code eingefügt. Dazu ist zu sagen, dass das Senden uart_putc (Char senden) und uart_puts (String senden) ohne Probleme funktioniert. Somit kann es nur noch an der Interrupt Routine oder der Routine zum Empfangen liegen. Leider bekomme ich es nicht hin, etwas zu empfangen und auszuwerten. Mir ist bewusst, das solche Themen hier schon hundert mal abgehandelt wurden doch ich habe seit Tagen das Forum durchsucht, aber leider nichts gefunden was mir weiter hilft. Noch kurz die Rahmenbedingungen: -Als Entwicklungsumbegung benutze ich Atmel Studio 6 -Als Programmierboard benutze ich das Atmel Evaluationboard V2.01 -Verbunden mit einem USB<-->Serial Wandler -Mit PonyProg2000 wird programmiert -Als Terminalprogramm benutze ich Termite 3.2 Hoffe ihr könnt mir helfen.
Besorge Dir ein C-Buch und lies es erstmal. Du machst viele Anfängerfehler! Dein Programm versucht gleichzeitig via Interrupt und via Polling auf den UART zuzugreifen, da sollte man sich für eine Variante entscheiden. Wieso das überhaupt durch den Compiler geht ist mir auch unklar. Es müsste nämlich als
1 | c = uart_getc(); |
umgeschrieben werden.
Du hast in USART_init() den Empfänger nicht eingeschaltet.
@Jim Meba Ist natürlich richtig das es
1 | c = uart_getc(); |
sein muss. Erster fehler. @Jope Danke für diese Antwort. Ist richtig, dass ich vergessen habe den Empfang einzuschalten. ich habe den Code jetzt wie folgt geändert und es funktioniert. Allerdings bin ich noch ein bisschen überfragt was ich mit dem Interrupt machen soll. So wie hier geschrieben nutze ich diesen ja trotzdem nicht, oder?
1 | int main(void) |
2 | {
|
3 | |
4 | DDRD = (1<<PD5) | (1<<PD6); |
5 | USART_init(); |
6 | sei(); |
7 | |
8 | while(1) |
9 | {
|
10 | LED1(); |
11 | |
12 | if ( (UCSRA & (1<<RXC)) ) |
13 | {
|
14 | uint8_t c; |
15 | c = uart_getc(); |
16 | if (c == 'a') |
17 | {
|
18 | LED2(); |
19 | }
|
20 | |
21 | }
|
22 | }
|
23 | }
|
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.