- 3D-Druck Einstieg und Tipps         
Ergebnis 1 bis 10 von 10

Thema: Programm springt immer wieder in Init

Baum-Darstellung

Vorheriger Beitrag Vorheriger Beitrag   Nächster Beitrag Nächster Beitrag
  1. #1

    Programm springt immer wieder in Init

    Hallo

    Ich hätte eine kleine Frage und zwar hab ich folgendes Programm bei dem mit der Zeit die Pulsbreite von Timer2 erhöht werden soll:


    Code:
    #include <avr/io.h>
    #include <avr/interrupt.h>
    
    //Funktionsdeklaration
    void init();
    void init_timer0();
    void init_timer2();
    
    //Timer0:
    #define T0_TEILER64	TCCR0|=0x03;TCCR0 &=0xFB
    #define T0_NORMAL	TCCR0&=0x87
    #define T0_RESET	TCNT0=0
    #define T0_OVL_INT	TIMSK|=0x01;SREG|=0x80
    
    //Timer2:
    #define T2_INT_OVL_ENABLE	TIMSK|=0x40;SREG|=0x80
    #define T2_FAST_PWM_EIN		TCCR2&=0x00;TCCR2|=0x68
    #define T2_PULSBREITE		        OCR2
    #define T2_TEILER_1			TCCR2&=0xF8;TCCR2|=0x07
    
    int main()//
    {
    	//Initialisierung der Baugruppen)
    	init();
    	init_timer0();
    	init_timer2();
    	// Hintergrundschleife bzw. Hintergrundprozess
    	do
    	{
    		
    	}
    	while(1);	
    	
    
    	return 0;
    }
    
    void init()
    {
    	DDRA &=0x00;
    	//PB5 als Ausgang konfigurieren
    	DDRD |=0xFF; 
    }
    
    void init_timer0()
    {
    	//Normalbetrieb einstellen
    	T0_NORMAL;
    	//Teiler (64) einstellen
    	T0_TEILER64;
    	//Zählerstand Reset
    	T0_RESET;
    	//Interrupt freischalten (Überlaufinterrupt freischalten)
    	T0_OVL_INT;	
    }
    
    void init_timer2()
    {
    	// PWM-Betrieb einstellen
    	T2_FAST_PWM_EIN;
    	// Pulsbreite auf 0 einstellen
    	T2_PULSBREITE = 0;
    	// Maximale Frequenz - Teiler
    	T2_TEILER_1;
    	// Overflow Interrupt freigeben
    	T2_INT_OVL_ENABLE;
    }
    
    //ISR für Timer0 Überlauf (alle 2ms)
    ISR(TIMER0_OVF_vect)
    {
    	static unsigned char zaehler=0;
    
    	zaehler ++;
    	
            if(zaehler >= 49)//ca alle 98ms
            {
    		zaehler = 0;
    		if(T2_PULSBREITE<=250)
    		{
    			
    			T2_PULSBREITE += 5;
    		}
    	}	
    }


    Das Problem ist das wenn die Variable zaehler den Wert 16 erreicht das Programm wieder zu init springt und dann wieder init_timer0 und init_timer2 durchläuft und das ganze wieder von vorne beginnt.

    Vielleicht weiß jemand wo da der Fehler liegt!

    Ich bin totaler Anfänger und weiß auch nicht ob ich hier in diesem Forum mit dieser Frage richtig bin...

    Aber ich würde mich über die Lösung des Problems freuen!!!
    Geändert von radbruch (15.02.2012 um 06:38 Uhr) Grund: Code-Tag eingefügt und Thread nach C verschoben

Ähnliche Themen

  1. switch-Anweisung springt immer zum selben case X Befehl
    Von HF SHOOTER im Forum C - Programmierung (GCC u.a.)
    Antworten: 3
    Letzter Beitrag: 05.11.2007, 19:06
  2. immer wieder pwm tiny45
    Von meldano im Forum Basic-Programmierung (Bascom-Compiler)
    Antworten: 1
    Letzter Beitrag: 23.04.2007, 02:23
  3. Immer wieder - Labornetzteil...
    Von Vaterssohn im Forum Elektronik
    Antworten: 2
    Letzter Beitrag: 15.11.2006, 21:47
  4. Immer wieder....I2C Bus
    Von JensB im Forum Elektronik
    Antworten: 1
    Letzter Beitrag: 16.09.2004, 16:26
  5. Immer wieder LCD Probleme
    Von Bruce im Forum Robby CCRP5
    Antworten: 7
    Letzter Beitrag: 03.08.2004, 12:26

Berechtigungen

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

fchao-Sinus-Wechselrichter AliExpress