ADC funzt net so wie er soll

OP #363319
Lesenswert?
• ▲
▼
Hallo,

habe eine Frage zum ADC. Er soll bei Aufruf den Port auslesen und das
Ergebnis zurückgeben. So weit scheint das alles auch zu funktionieren.
Aber die If-Else Anweisung nicht. Egal welche Spannung ich anlege oder
welche Werte ich bei dem If Teil eingebe, er führt immer die Else
Schleife aus... Woran liegt das?


#include <avr/io.h>


uint16_t auswertung (void);
volatile uint16_t wert=0;

int main (void)
{
  uint16_t i=0,ergebnis=0;

  //Ports initialisieren
  DDRC  = 0xFF; //Port C als Ausgang für die LED's
  PORTC = 0XFF; //Pull Up's aktiviert


  while(1)
  {
    ergebnis = auswertung();


    if (1023 > ergebnis > 1)
    {
      PORTC = (0b00001111);
    }
    else PORTC = (0b10101010);

  }
}



uint16_t auswertung (void)
{


//Initialisieren
ADCSRA = ((1<<ADEN) | (1<<ADPS2) | (1<<ADPS1) | (1<<ADPS0));
ADMUX = ((1<<MUX0) | (1<<MUX1) | (1<<MUX2));

//Dummy Auslesung als Warm-Up wie im Tutorial
ADCSRA |= (1<<ADSC);
while (ADCSRA & (1<<ADSC));

//Messung
ADCSRA |= (1<<ADSC);
while (ADCSRA & (1<<ADSC));

wert = ADCL; //ERR
wert += (ADCH<<8); //Alternativ 'wert = ADCW;'

ADCSRA &= ~(1<<ADEN); //ADC Disable

return wert;

}
Gast #363320
Lesenswert?
• ▲
▼
Hi Markus,

als das
if (1023 > ergebnis > 1)
ist mir persönlich in der Form noch nicht untergekommen.
Versuch doch mal
if ( (ergebnis < 1023) && (ergebnis > 1) )

Wobei Du beachten solltest, dass die Werte von einem ADC meiner
Erfahrung nach sehr stark schwanken können. Daher sei dir vielleicht
angeraten, noch eine Filterfunktion dahinterzuhängen, oder Du nimmst
einen etwas höheren Wert als 1.

Gruss,
Sebastian
Gast #363321
Lesenswert?
• ▲
▼
if (1023 > ergebnis > 1) bedeutet: if ((1023 > ergebnis) > 1)

D.h. der Vergleich (1023 > ergebnis) liefert  0 oder 1 zurück und ist
damit nie > 1.

Der Code dürfte also vollständig wegoptimiert worden sein und nur der
else-Zweig wird ausgeführt.


Peter

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.