- LiFePO4 Speicher Test         
Ergebnis 1 bis 10 von 10

Thema: Probleme mit Timer0 und Timer1

Baum-Darstellung

Vorheriger Beitrag Vorheriger Beitrag   Nächster Beitrag Nächster Beitrag
  1. #4
    Neuer Benutzer Öfters hier
    Registriert seit
    04.06.2017
    Beiträge
    23
    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
    Geändert von Lichti01 (31.05.2018 um 15:57 Uhr)

Ähnliche Themen

  1. ISR für TIMER0 und TIMER1 laufen nicht zusammen
    Von PhilSU im Forum C - Programmierung (GCC u.a.)
    Antworten: 3
    Letzter Beitrag: 10.11.2012, 10:32
  2. Timer0 + Timer1 Input Capture
    Von Kesandal im Forum C - Programmierung (GCC u.a.)
    Antworten: 5
    Letzter Beitrag: 02.07.2011, 01:50
  3. Probleme mit Timer1
    Von Cyrus777 im Forum Schaltungen und Boards der Projektseite Mikrocontroller-Elektronik.de
    Antworten: 5
    Letzter Beitrag: 27.06.2011, 21:26
  4. PWM mit ATMEGA644p mit timer0, timer1 und timer2
    Von lebratmaxe im Forum Basic-Programmierung (Bascom-Compiler)
    Antworten: 4
    Letzter Beitrag: 29.07.2010, 19:42
  5. Probleme mit Timer0
    Von frankne im Forum Basic-Programmierung (Bascom-Compiler)
    Antworten: 3
    Letzter Beitrag: 09.08.2007, 22:53

Stichworte

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •  

Labornetzteil AliExpress