Großes Dank nochmal an Jaecko!
Hab den Code jetzt nach deiner Empfehlung mit den INT-Pins nochmal neu gestrickt.
Jetzt klappt alles einwandfrei!Code:/* * main.c * * Created on: 23.09.2010 * */ #include <avr/io.h> #include <avr/interrupt.h> #define F_CPU 2048000UL #define BAUD 9600UL #define UBRR_BAUD ((F_CPU/(16UL*BAUD))-1) #define LED_DDR DDRD #define LED_PORT PORTD #define LED_PORTPIN PD7 volatile unsigned int Zaehlerstand; void uart_init(void) { // Baudrate einstellen (Normaler Modus) UBRRH = (uint8_t) (UBRR_BAUD>>8); UBRRL = (uint8_t) (UBRR_BAUD & 0x0ff); // Aktivieren von receiver und transmitter UCSRB = (1<<RXEN)|(1<<TXEN); // Einstellen des Datenformats: 8 Datenbits, 1 Stoppbit UCSRC = (1<<URSEL)|(1<<UCSZ1)|(1<<UCSZ0); } ISR (INT1_vect) { LED_PORT |= (1<<LED_PORTPIN); Zaehlerstand = TCNT1; //den aktuellen Zaehlerstand auslesen TCNT1 = 0; //den Zaehlerstand zuruecksetzen if (Zaehlerstand >= 1000) //die Zeit zwischen zwei Low-Pegeln wurde gemessen { if (Zaehlerstand >= 3400) //die Pause vor der nächsten Minute wurde gemessen { while ( !( UCSRA & (1<<UDRE)) ); // Warten bis der Sendepuffer frei ist UDR = '2'; // Daten in den Puffer schreiben und damit senden } } else //die Zeit eines Low-Pegel wurde gemessen { if (Zaehlerstand >= 300) //Low-Pegel > 150ms -> 1 { while ( !( UCSRA & (1<<UDRE)) ); // Warten bis der Sendepuffer frei ist UDR = '1'; // Daten in den Puffer schreiben und damit senden } else //Low-Pegel < 150ms -> 0 { while ( !( UCSRA & (1<<UDRE)) ); // Warten bis der Sendepuffer frei ist UDR = '0'; // Daten in den Puffer schreiben und damit senden } } } void main(void) { uart_init(); //UART initialisieren GICR |= (1<<INT1); //externer Interrupt an INT1 (PD3) aktiviert MCUCR |= (0<<ISC11) | (1<<ISC10); //Interupt bei jeder logische Veränderung an INT1 (PD3) TCCR1B |= (1<<CS12) | (1<<CS10); // Prescaler auf 1024 -> 2.048MHz/1024 -> 2000Hz sei(); //Interrupts freischalten LED_DDR |= (1<<LED_PORTPIN); //LED Port als Ausgang LED_PORT &= ~ (1<<LED_PORTPIN); //LED Port auf High -> LED leuchtet while(1); { } }
Einen kleinen Wermutstropfen gibts aber doch: Ich weiß immer noch nicht warum mein erster Code nich funktioniert hat, aber jetzt bin ich endlich erstmal weiter :-D
Schönen Abend noch,
Knipser







Zitieren
Lesezeichen