Hallo, ich habe das STK500 und probiere gerade mit dem UART rum. Dabie will ich über HyperTerminal ein Zeichen an den Atmega8 schicken. Dieses Zeichen soll auf PORTB dargestellt werden. Die LEDs flackern dabei aber immer nur ganz kurz (aber der richtige Wert!). Wieso bleiben die LEDs nicht an? Ich weise doch dem PORTB das Register UDB zu?!? Das Zeichen kommt mit Sicherheit richtig an, wenn ich es zurückschicke, erscheint es richtig im HyperTerminal-Fenster! Hier mein Code (die relevanten Stellen): int main(void) { DDRA = 0x00; DDRB = 0xFF; PORTB = 0xFF; DDRD = (0<<PD2)|(1<<PD1)|(0<<PD0); UCSRB |= (1<<RXCIE)|(1<<TXCIE)|(1<<RXEN)|(1<<TXEN); UCSRC |= (1<<URSEL)|(3<<UCSZ0); UBRRL = 51; //Baudrate 9600 bei f_cpu = 8MHz sei(); while(1) { }; } ISR(USART_RXC_vect) { uint8_t received_byte = UDR; PORTB = received_byte; UDR = received_byte; }; Danke schonmal im Voraus, Gruß Flea
flea wrote: > > UCSRB |= (1<<RXCIE)|(1<<TXCIE)|(1<<RXEN)|(1<<TXEN); ********** Wenn du einen Interrupt erlaubst, solltest du auch einen Handler dazu haben. Hast du den nicht, sorgt gcc dafür, dass der µC statt dessen resettet wird. Reset -> PORTB = 0xFF;
@ flea (Gast) >dabei aber immer nur ganz kurz (aber der richtige Wert!). Wieso bleiben >die LEDs nicht an? Ich weise doch dem PORTB das Register UDB zu?!? Du aktivierst den TXC Interrupt. Wozu? Hast du auch einen Interrupthandler dafür? Wenn nicht, macht dein AVR jedes mal einen Reset, wenn ein Zeichen gesendet wurde! Versuch es mal ohne TXCIE.
1 | int main(void) |
2 | {
|
3 | DDRA = 0x00; |
4 | DDRB = 0xFF; |
5 | PORTB = 0xFF; |
6 | DDRD = (0<<PD2)|(1<<PD1)|(0<<PD0); |
7 | |
8 | UCSRB |= (1<<RXCIE)|(1<<RXEN)|(1<<TXEN); |
9 | UCSRC |= (1<<URSEL)|(3<<UCSZ0); |
10 | |
11 | UBRRL = 51; //Baudrate 9600 bei f_cpu = 8MHz |
12 | |
13 | sei(); |
14 | |
15 | while(1) |
16 | {
|
17 | };
|
18 | }
|
19 | |
20 | ISR(USART_RXC_vect) |
21 | {
|
22 | uint8_t received_byte = UDR; |
23 | PORTB = received_byte; |
24 | UDR = received_byte; |
25 | };
|
MFG Falk
Achso, den TX-INterrupt hatte ich zuvor bei anderen Experimenten verwendet. Danke!
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.