-         

Ergebnis 1 bis 3 von 3

Thema: Problem mit Software PWM

  1. #1
    Neuer Benutzer Öfters hier
    Registriert seit
    12.05.2005
    Ort
    Dornstetten
    Alter
    30
    Beiträge
    10

    Problem mit Software PWM

    Anzeige

    Hallo ihr,
    hab da ein kleines Problem mit meinem Programm. Ich habe den Timer0 als Overflow interupt. bei einem Interrupt soll er den zähler i um eins erhöhen bis 50 und dann wieder zurücksetzten. Gleichzeitig vergleicht er i mit x und solange i<x setzt er den PORTC und sonst setzt er ihn zurück.
    Nun mein Problem wenn ich x in meiner endlosschleife eine Wert gebe ist der PORT die ganze aus. Geb ich ihm einmal vor der Endlosschelfie einen Wert klappts.
    Weiß jemand was ich falsch mache?
    Danke schonmal

    Hier noch der Code:
    Code:
    #include <avr/io.h>
    #include <avr/interrupt.h>
    
    uint8_t x ;
    uint8_t i = 0;
    
    //_____________Interrupt routine start
    ISR (SIG_OVERFLOW0)
    {
    if (i>=50)
    i=0;
    if (i<x)
    PORTC = 0xff;
    else
    PORTC = 0x00;
    i++;
    }
    //______________Interrupt routine end
    
    int main(void)
    {
    
    DDRC = 0xff;
    PORTC = 0x00;
    TCCR0 |= (1<<CS02)| (1<<CS00) ;	//Teiler setzten
    TIMSK |= (1<< TOIE0);				//Timer0 Interrupt freigeben
    sei();	
    									//Interupt Global aktivieren
    x=45;	//hier gehts
    
    for(;;)
    {
    x=45;	//hier nicht
    }
    
    }

  2. #2
    Erfahrener Benutzer Roboter Genie
    Registriert seit
    19.03.2005
    Ort
    Villach
    Alter
    26
    Beiträge
    995
    es muss auf jeden fall heißen am anfang:

    volatile uint8_t x;
    volatile uint8_t i; //Das = 0 kannst du weglassen. das macht der compiler automatisch.

    und:
    ISR (SIG_OVERFLOW0) ist eine mischung der alten und neuen schreibweise. normalerweise gehts glaub ich. aber beser du nimmst nur die alte schreibweise SIGNAL (SIG_OVERFLOW0) oder nur die neue ISR (OVERFLOW0_vect), bin mir bei der neuen abe rnicht ganz sicher.

    abe rich denk das erste müsste dein problem sicher lösen. denn der compiler optimiert den code so dass in den funktionen nu rmehr kopien verwendet werden, die alt bleiben. und durch volatile verhinderst du das.

  3. #3
    Neuer Benutzer Öfters hier
    Registriert seit
    12.05.2005
    Ort
    Dornstetten
    Alter
    30
    Beiträge
    10
    Hey cool
    Habs grad probiert und klappt einwandfrei.
    Dankeschön

Berechtigungen

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