/*****************************************************************
Programmname:		irdelay.c
Dateiname:          irdelay.c
Funktion:           Das Programm soll ein Signal einer Fernbedienung auswerten
Compiler:           AVR Studio
Ersteller:          V. Hollweger
Vers./Zstd/Datum:   V1.0, 27.02.2009
Aufgerufene Progr.: LCD.h
Änderungen:
******************************************************************/

#include <avr/io.h>
#include <avr/interrupt.h>
#include "LCD.h"
#define F_CPU 1000000

volatile unsigned char code_B[15];
volatile unsigned char fertigeig_B=0;
volatile unsigned int code = 0;
unsigned char i;
volatile unsigned char counter=0;
unsigned char kontrolle = 1;


int main() {

	GICR |= (1<<INT0);
	MCUCR |= (1<<ISC01);
	TIMSK |= (1<<TOIE0);
	TCNT0 = 128;
	sei();
	
	while(1){
		
		if((counter >= 7) && (kontrolle == 1)) {
			counter = 0;
			kontrolle = 0;
			code_B[1] = (PIND & (1<<PD2));
			i=2;
		}
		if(counter >= 14) {
			code_B[i] = (PIND & (1<<PD2));
			counter = 0;
			i++;
			if(i >= 13) {
				TCCR0 &= ~(1<<CS00);
				fertigeig_B = 1;
			} 
		}

		if (fertigeig_B == 1)	{
			fertigeig_B = 0;
			i=0;
			code = 0;

			for(i=0; i<=13; i++) {

				code_B[i] >>= 2;

				if(code_B[i] == 0) {
					code <<= 1;
					code |= 0x00;
				}	
				if(code_B[i] == 1) {
					code <<= 1;
					code |= 0x01;
				}
				

			}
			
			char buffer[20];
			itoa(code,buffer,10);
			lcd_init();
			lcd_string(buffer);
			
			GICR |= (1<<INT0);
			kontrolle = 1;
			
	} //end if		
	} //end while

}

ISR(TIMER0_OVF_vect) {
	counter++;
	TCNT0 = 128;
	
}

ISR(INT0_vect) {

	GICR &= ~(1<<INT0);
	DDRD = 0x00;
	code_B[0] = 1;
	TCCR0 |= (1<<CS00);
	
}
