Hallo, habe problem mit meinem Programm: Das Zeichen "1" wird korrekt übertragen, aber beim betätigen einer Taste werden nur irgendwelche zufälligen Zeichen übertragen, woran kann das liegen? Habe auch schon ausprobiert das Zeichen direkt in der ISR zu senden -> hat noch weniger geklappt, da wurden ganze Strings mit zufälligen zeichen übertragen :-( Code: #include <inttypes.h> #include <stdlib.h> #include <avr/interrupt.h> #include <avr/signal.h> #include <avr/io.h> #include <avr/sleep.h> #ifndef F_CPU #define F_CPU 4000000UL /* Oszillator-Frequenz in Hz */ #endif volatile uint8_t taste; /* Funktionsprototypen */ /***********************/ void USART_Init(uint16_t baud); void USART_Transmit(uint8_t data); /* Hauptprogramm */ /*****************/ int main(void) { DDRD &=~((1<<PD2) | (1<<PD3)); // INT0 und INT1 sind Eingänge PORTD |= (1<<PD2) | (1<<PD3); // INT0 und INT1 interne Pullup set_sleep_mode(SLEEP_MODE_PWR_DOWN); // Sleepmode: Powerdown USART_Init(25); // USART mit 9600Baud USART_Transmit('1'); GIMSK |= (1<<INT1) | (1<<INT0); // INT0 und INT1 aktivieren MCUCR |= (1<<SE); // Sleep-Enable MCUCR &=~((1<<ISC11) | (1<<ISC10) | (1<<ISC01) | (1<<ISC00)); //INT1 und INT0 auf Lowlevel do { sei(); sleep_mode(); USART_Transmit(taste); }while(1); return(0); } /* Funktionen */ /**************/ void USART_Transmit(uint8_t data) { /* Wait for empty transmit buffer */ while ( !( UCSRA & (1<<UDRE)) ); /* Put data into buffer, sends the data */ UDR = data; } void USART_Init(uint16_t baud) { /* Set baud rate */ UBRRH = (unsigned char)(baud>>8); UBRRL = (unsigned char)baud; /* Enable transmitter */ UCSRB = 1<<TXEN; /* Set frame format: 8data, 1stop bit */ UCSRC = (1<<USBS)|(3<<UCSZ0); } /* Interrupts */ /**************/ /* Unbelegte Interrupts ignorieren */ EMPTY_INTERRUPT(__vector_default); INTERRUPT(SIG_INT0) { taste = 'x'; } INTERRUPT(SIG_INT1) { taste = 'y'; }
Hat sich erledigt, habe nah "USART_Transmit(taste);" ein delay von 15ms, jetzt funktioniert es!
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.