Großes Dank nochmal an Jaecko!
Hab den Code jetzt nach deiner Empfehlung mit den INT-Pins nochmal neu gestrickt.
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);
{
}
}
Jetzt klappt alles einwandfrei!
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
Lesezeichen