/* Dieses Program schaltet PB1 und  PB4 am ATTiny 13 ein */
/*  und aus und lässt die daran hängenden LED blinken   */
/* Der Timer A wertet einen Vergleich von OCR0A aus und setzt PB0 */
/* PB0 wird dann in IF wieder zurückgesetzt */

#include <avr/io.h>
#include <util/delay.h>  
//#include "lcd_tools.h"
//#include <stdlib.h> 
//#include <rncontrol.h>
//#include <avr/interrupt.h>
  
  int main(void)
{
	// Es folgt eine Testroutine
	DDRB |= (1 << DDB0);					// PORTB PB0 als Ausgang
	PORTB &= ~(1 << PB0);					// PB0 aus
	DDRB |= (1 << DDB1);					// PORTB PB1 als Ausgang
	PORTB &= ~(1 << PB1);					// PB1 aus
	//PB2 ist beim tiny13 externer clock eingang T0
	//DDRB |= (1 << DDB2);					// PORTB PB2 als Ausgang
	//PORTB &= ~(1 << PB2);					// PB2 aus
	DDRB |= (1 << DDB3);					// PORTB PB3 als Ausgang
	PORTB &= ~(1 << PB3);					// PB3 aus
	DDRB |= (1 << DDB4);					// PORTB PB4 als Ausgang
	PORTB &= ~(1 << PB4);					// PB4 aus
	// PB5 liegt auf High damit kein Reset ausgelöst wird
	//DDRB |= (1 << DDB5);					// PORTB PB5 als Ausgang
	//PORTB &= ~(1 << PB5);					// PB5 aus
	
	PORTB |= (1 << PB3);	// LED an PB3 einschalten
	
	OCR0A = 4;	// Vergleichswert (-1) einstellen, 5xTaster drücken
	TCCR0A |= (1 << COM0A0) | (1 << COM0A1); // OC0A ein bei Vergleichswert
	TCCR0A |= (1 << CS00) | (1 << CS01) | (1 << CS02);   
										// Externe Clock an T0, steigende Flanke
	
	while (1)		// endlos in main 
	{
	
	if (PB0 == 1)				// wenn der Counter PB0 eingeschaltet hat
								// dann nach 500ms zurücksetzen
	{	_delay_ms (500);		// 500 ms warten
		PORTB &= ~(1 << PB0);	// PB0 aus, ist OC0A
	}
	
	PORTB |= (1 << PB1);	// LED an PB1 einschalten
	
	PORTB |= (1 << PB4);	// LED an PB4 einschalten
	
	_delay_ms (500);			// 500 ms warten
	PORTB &= ~(1 << PB1);	// LED an PB1 ausschalten
	_delay_ms (500);			// 500 ms warten
	PORTB &= ~(1 << PB4);	// LED an PB4 ausschalten
	_delay_ms (500);			// 500 ms warten
	}
	return 0;
}	
