Variable, Timer und ISR

Gast #3061510
Lesenswert?

Hallo !
Kann mir jemand sagen, ob es möglich ist, einen generierten 
1-Sekunden-Takt in einer Variablen zu speichern, die man dann in einer 
Wartefunktion weiterverarbeiten kann ?
Was ich nämlich nicht verstehe ist, dass mit dem Programmbeispiel die 
LED blinkt, aber sobald ich in der ISR nur takt--; stehen habe, und den 
Rest in der Hauptschleife oder einer weiteren Funktion bearbeiten will, 
klappt es nicht mehr. Als würde der Zustand von "takt" aussehalb der ISR 
nicht erhalten bleiben.
Auch eine Abfrage auf den PORT funktioniert nicht...

1
static int takt=1000;
2

3

4
//------------------- ISR für Timer0 1ms ---------------------------
5

6
ISR(TIMER0_COMP_vect) 
7
{  
8
    takt--;
9
    if(takt==0)
10
    {
11
    PORTC^=(1<<PC3); takt=1000;
12
    }
13
}
Gast #3061550
Lesenswert?

Aber da ist doch nichts großes dran. Außer, dass es dann halt so 
ausschaut:

[c]

volatile int takt=1000;

//------------------- ISR für Timer0 1ms ---------------------------

ISR(TIMER0_COMP_vect)
{
    takt--;
}


{while (true)               // Mainloop-Begin

  {if(takt==0)
    {
    PORTC^=(1<<PC3); takt=1000;
    }
        }
}
Gast #3061559
Lesenswert?

Das hier ist die Timerkonfig:
1
// --------------------INIT TIMER 0 (Wartezeiten / Laufzeitüberwachung) --------
2

3
  TCCR0 = (1<<WGM01) | (1<<CS01) | (1<<CS00);            // Prescaler 64
4

5
  OCR0  = 56;                         // 1ms
6

7
  TIMSK |= (1<<OCIE0);
#3061562
Lesenswert?

xray1981 schrieb:
> Aber da ist doch nichts großes dran. Außer, dass es dann halt so
> ausschaut:

Poste trotzdem bitte alles.

> ISR(TIMER0_COMP_vect)
> {
>     takt--;
> }

Mach hier wenigstens eine Sicherung rein

{
  if( takt > 0 )
    takt--;
}


... damit sicher gestellt ist, dass du hier .....

>   {if(takt==0)

die Variable auch wirklich bei 0 erwischt und nicht bei +1 und das 
nächste mal dann schon bei -1


(das ist zb eine Möglichkeit, je nach Timereinstellung, was dir 
passieren kann. Gibt noch mehr: Daher ... kompletten Code! Wenn er so 
kurz ist, wie du siggerierst, dann ist da ja nichts dabei, einfach das 
File als ganzes anzuhängen)

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren