Hi
habe meinen Code jetzt so überarbeitet wie du es geschrieben hast. Leider hat es nicht funktioniert. Das Problem mit dem 16-Bit-Timer besteht weiterhin.
So sieht der COde jetzt aus:
	Code:
	#define F_CPU 1000000UL
#include <util/delay.h>
#include <avr/io.h>
#include <avr/interrupt.h>
#include <stdio.h>
#define LED1 1
volatile uint8_t i;
#define a 50			//Zeit in ms/10 für Blinkfrequenz der LED1
uint8_t b;
//variablen für entprellung
#define TASTERPORT PIND
#define TASTERBIT PIND3
//Entprellung
char taster(void)
{
	static unsigned char zustand;
	char rw = 0;
	if(zustand == 0 && !(TASTERPORT & (1<<TASTERBIT)))			//Taster wird gedrueckt (steigende Flanke)
	{
		zustand = 1;
		rw = 1;
	}
	else if (zustand == 1 && !(TASTERPORT & (1<<TASTERBIT)))   //Taster wird gehalten
	{
		zustand = 2;
		rw = 0;
	}
	else if (zustand == 2 && (TASTERPORT & (1<<TASTERBIT)))   //Taster wird losgelassen (fallende Flanke)
	{
		zustand = 3;
		rw = 0;
	}
	else if (zustand == 3 && (TASTERPORT & (1<<TASTERBIT)))   //Taster losgelassen
	{
		zustand = 0;
		rw = 0;
	}
	else if (((zustand == 1) || (zustand == 2)) && !(TASTERPORT & (1<<TASTERBIT)))   //Taster wird gehalten
	{
		zustand = 2;
		rw = 0;
	}
	return rw;
}
int main(void)
{
	DDRB = 0b00000010;
	
	//Einstellung Interrupt
	PORTD = 0b00000100;
	GIMSK = (1<<INT0);
	MCUCR = (1<<ISC01); //The falling edge of INT0 generates an Interrupt
	//Timerkonfiguration
	//TIMSK = (1<<OCIE0A);				//Ineterrupt aktivieren
	//TCCR0A = (1<<WGM01);				//CTC-Mode akrivieren
	//OCR0A = 155;						//Interrupt asulösen bei Zählerstand (10ms)
	//TCCR0B = ((1<<CS00) | (1<<CS01));	//Timer starten mit Prescaler 64
	
	i=0;
	b=2*a;
	
	//Globale interrupts aktivieren
	sei();
	
	while (1)
	{
		if (i==0)
		{
			PORTB &=~ (1<<LED1);
		}
		if ((i>=1) && (i<=a))
		{
			PORTB |= (1<<LED1);
		}
		if ((i>=1) && (i>a) && (i<=b))
		{
			PORTB &=~ (1<<LED1);
			if (i>=b)
			{
				i=1;
			}
		}
		
	}
}
ISR(INT0_vect)
{
	_delay_ms(50);
	
	if (bit_is_set (TIMSK,OCIE0A))
	{
		TIMSK &= ~(1<<OCIE0A);				//Ineterrupt aktivieren
		TCCR0A &= ~(1<<WGM01);				//CTC-Mode akrivieren
		OCR0A |= 0;						//Interrupt asulösen bei Zählerstand (10ms)
		TCCR0B &= ~((1<<CS00) | (1<<CS01));	//Timer starten mit Prescaler 64
	}
	if (bit_is_clear (TIMSK,OCIE0A))
	{
		TIMSK |= (1<<OCIE0A);				//Ineterrupt aktivieren
		TCCR0A |= (1<<WGM01);				//CTC-Mode akrivieren
		OCR0A |= 156;						//Interrupt asulösen bei Zählerstand (10ms)
		TCCR0B |= ((1<<CS00) | (1<<CS01));	//Timer starten mit Prescaler 64
	}	
	if (i==0)
	{
		i=1;
	}
	if (i>=1)
	{
		i=0;
	}
}
ISR(TIMER0_COMPA_vect)
{
	i++;
}
 Bei meinem Anderen Problem habe ich den Fehler gefunden.
Über weitere Tipps bin ich sehr dankbar.
LG Lichti01
						
					
Lesezeichen