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

Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt. Bitte hier nur auf die ursprüngliche Frage antworten, für neue Fragen einen neuen Beitrag erstellen.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.