Forum: Mikrocontroller und Digitale Elektronik while-Schleife und if-Abfrage


von Martin R. (rama123)


Lesenswert?

Hallo,

ich probiere ein kleines Programm zu schreiben um mit einem atmega16 
Spannungen zu messen. Ein Timer löst mit einer bestimmten Frqeuenz 
Interrups aus und da ich die Frequenz kenne, weiß ich wann eine Sekunde 
vorrüber ist. Dann möchte ich im Hauptprogramm die Spannung über den 
AD-Wandler messen.
Das Spannungsmessen funktioniert auch und auch der Timer läuft richtig.

Jetzt zu meinem Problem:
So wie hier im Code wird die if-Abfrage irgendwie nicht ausgeführt, wenn 
ich allerdings eine Variable zwischen der while(1)-Schleife und der 
If-Abfrage an den UART an den PC sende, dann funktioniert plötzlich die 
If-Abfage.

Ich hoffe es kann mir jemand weiterhelfen, ich verstehe nämlich absolut 
nicht warum es nicht funkioniert.

Hier nun der Code:
1
void main(void)
2
{
3
  Setup();
4
  
5
  while(1)
6
  {
7
    if (time.sec !=  last_sec)                       
8
    {
9
      last_sec = time.sec;
10
      
11
      //Durchschnitt aus 8 Werten ermitteln
12
      for(av=0,i=8;i;--i)
13
      {
14
        ADCSRA |= 0x40;                      // starte neue ADC
15
        while (!(ADCSRA & (1<<ADIF)));      // warte bis ADC fertig ist     
16
        av = av+ADC;
17
      }
18
      av = av/8;
19
      
20
      sendv(av);
21
    }
22
  }
23
}

von Uwe .. (uwegw)


Lesenswert?

Sind time.sec und last_sec als volatile deklariert?

von Martin R. (rama123)


Lesenswert?

ah, last_sec hatte ich als volatile deklariert bei time.sec hatte ich 
das nicht gemacht.
Jetzt funktioniert es, Danke.

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.