mikrocontroller.net

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


Autor: Martin Ra (rama123)
Datum:

Bewertung
0 lesenswert
nicht 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:
void main(void)
{
  Setup();
  
  while(1)
  {
    if (time.sec !=  last_sec)                       
    {
      last_sec = time.sec;
      
      //Durchschnitt aus 8 Werten ermitteln
      for(av=0,i=8;i;--i)
      {
        ADCSRA |= 0x40;                      // starte neue ADC
        while (!(ADCSRA & (1<<ADIF)));      // warte bis ADC fertig ist     
        av = av+ADC;
      }
      av = av/8;
      
      sendv(av);
    }
  }
}

Autor: Uwe ... (uwegw)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Sind time.sec und last_sec als volatile deklariert?

Autor: Martin Ra (rama123)
Datum:

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

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
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.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.