Forum: Compiler & IDEs Timer1 Overflow


von sep (Gast)


Angehängte Dateien:

Lesenswert?

Hi Leute

sicher ein leichtes Ding für euch: Beim Overflow des T1 soll ein
Register um 1 erhöht, und als LED Leiste angezeigt werden.

Leider bleiben die LEDs alle aus. Nichts erhöht sich.
Springt der vielleicht nicht in die INT-Routine?

von sep (Gast)


Lesenswert?

ach ja das
if ( overflw == 5)

muss im Normalfall
if ( overflw == 43)
heißen. Hab es hier nur zum Debuggen verkürzt.

von Nico Schümann (Gast)


Lesenswert?

So wird das nix..
Du brauchst globale Variablen, auf die du aus jeder Funktion zugreifen
kannst. Dann brauchst du noch das Schlüsselwort volatile, damit du auf
die Variable auch aus Interruptroutinen aufrufen kannst, sonst denkt
sich der Compiler vielleicht mal, dass er da irgendwas optimieren kann,
was ungut wäre

#include <avr/io.h>
#include <avr/iom8515.h>
#include <avr/interrupt.h>

volatile uint8_t min_counter_low = 0x00;
volatile uint8_t min_counter_high = 0x00;
volatile uint8_t overflw = 0x00;

int main(void)
{DDRB = 0xFF;
 PORTB = 0x00;
 TCCR1B |=  (1<<CS12);
 TIMSK |= (1<<TOIE1);
 sei();
 for (;;)
 {PORTB = min_counter_low;
 }
 return 0;
}
ISR (TIMER1_OVF_vect)
{++overflw;  //++bla ist etwas schneller als bla++
}



  if ( overflw == 5)
  {
    min_counter_low++;
    overflw = 0x00;
  }


}

von Nico Schümann (Gast)


Lesenswert?

Hm, da ging was schief.. Also ab ISR.. nochmal:
ISR (TIMER1_OVF_vect)
{++overflw;  //++bla ist etwas schneller als bla++
 if (overflw == 5)
 {++min_counter_low;
  overflw = 0x00;
 }
}

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.