Forum: Mikrocontroller und Digitale Elektronik Vergleichsvariable für Timerinterrupt auf 0 setzen


von Pat K. (c63)


Lesenswert?

Hallo zusammen,

stehe vor folgendem Problem:
Ich übertrage über die serielle Schnittstelle Daten an meine USART.
Nun soll der Vergleichswert "swTeiler", bei jeder Übertragung auf 0 
zurückgesetzt werden, damit die Interrupt-Routine auch definitiv im 
ersten Durchlauf erreicht wird.

USART Interrupt
1
ISR(USART_RXC_vect) 
2
{
3
  a = UDR;
4
        if (a == '1') 
5
  {
6
    Auslesen = 60;
7
8
  }
9
}

Timer Interrupt
1
ISR (TIMER1_COMPA_vect)
2
{
3
  static uint16_t swTeiler = 0;
4
  swTeiler++;
5
  //if (swTeiler == 60 )
6
  if (swTeiler == Auslesen )
7
  {
8
    swTeiler = 0;
9
    PORTD |= (1<<PD6);
10
    TCCR1B |= (1<<WGM12) | (1<<CS12); // | (1<<CS10) | (1<<CS11);
11
    TIMSK |= (1<<OCIE1B);
12
    OCR1B = 3094;
13
    sei();
14
  }
15
}
16
17
ISR (TIMER1_COMPB_vect)
18
{
19
  static uint8_t vTeiler = 0;
20
  vTeiler++;
21
  if (vTeiler == 10)
22
  {
23
    vTeiler = 0;
24
    PORTD &=~ (1<<PD6);
25
  }
26
}
Komm leider auf keinen grünen Zweig und bin für jeden Hilfe dankbar.
mfg
c63

von Karl H. (kbuchegg)


Lesenswert?

Problem Behoben schrieb:

> Nun soll der Vergleichswert "swTeiler", bei jeder Übertragung auf 0

> ISR (TIMER1_COMPA_vect)
> {
>   static uint16_t swTeiler = 0;

Dann bleibt dir nichts anders übrig, als die Variable aus der Funktion 
rauszunehmen und zu einer globalen Variablen zu machen, damit sie auch 
ausserhalb der ISR-Funktion sichtbar ist und du somit auf sie in der 
USART ISR zugreifen kannst.

Es gäbe noch eine andere Möglichkeit, nämlich einen speziellen Wert für 
'Auslesen' zu vereinbaren, der in der Timer-ISR entsprechend gehandhabt 
wird, aber eigentlich wird es damit immer komplizierter und entfernt 
sich mehr vom Zweck. Den swTeiler anstelle einer funktionslokalen static 
Variable einfach global zu machen, ist um einiges einfacher.


> Komm leider auf keinen grünen Zweig und bin für jeden Hilfe dankbar.

Nicht?
Dann wäre mal das Durcharbeiten eines C-Buchs angebracht.
Sichtbarkeit von Variablen und Funktionen, wie man sie bestimmt und wie 
man sie einschränkt sind eigentlich Basisdinge.

: Bearbeitet durch User
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.