Forum: Compiler & IDEs "Frischling" braucht Hilfe bei ADC


von Flocke (Gast)


Angehängte Dateien:

Lesenswert?

Einen schönen guten Abend miteinander!

Mein Interesse für die µC wurde erst vor kurzem geweckt und ich befinde 
mich daher bei meinen ersten primitiven Versuchen. Wer es aufregend mag 
wird sich durch die folgenden Zeilen seiner wertvollen Zeit beraubt 
fühlen...

Für denjenigen der jetzt noch dabei ist folgende Randinfos:
Ich habe mir für die ersten Versuche das NET IO Board von Pollin mit dem 
ATMega32 beschafft und nutze einen ISP und AVR Studio4. Über die 
Lauflichter etc. bin ich erfolgreich hinaus. Nächster Schritt soll das 
temperaturabhängige ansteuern von 2 LEDs sein (grün=Temp OK; rot=Temp 
kritisch). Ich habe mir dazu einen Fühler über Spannungsteiler gebastelt 
und die Messleitung an einen ADC Port angeklemmt, als Vref wird intern 
5V verwendet. Das Messsignal beträgt lt. Multimeter auch ca 2,5V.

Um leichter festzustellen ob auch tatsächlich ein Ergebnis erzeugt wird 
habe ich zunächst eine Prüfung auf Null eingerichtet. Bislang verläuft 
diese auch immer positiv (also Ergebnis =0, obwohl 2,5V anliegen). Das 
ist schon zimlich frustrierend-.-'

Kann mir jemand helfen den Fehler zu finden? Ich checks einfach nicht...

von Johann L. (gjlayde) Benutzerseite


Lesenswert?

Der Test "ausgabe == 0" ist warscheinlich zu strikt, d.h. ausgabe ist 
wegen Rauschen und Messfehlern nie (oder nur extrem kurz) Null.

Versuch einfach mal, ein bestimmtes Bit von Ausgaen zu testen, z.b. "if 
(ausgabe & 1)" oder "if (ausgabe & 16)" o.ä. Und warum left-Alignment 
der Werte?

von Martin S. (sirnails)


Lesenswert?

Setz mal das ADMUX-Register explizit auf den Kanal vor der Wandlung.

von Flocke (Gast)


Lesenswert?

Nabend nochmal,

erstmal schönen Dank für eure Antworten.

@Johann: Der Test läuft auf das (unwahrscheinliche) Ergebnis ausgabe=0, 
obwohl die ausgabe wegen rauschen etc fast nie 0 sein dürfte (abgesehn 
davon liegen wie gesagt 2,5V an), wird dennoch immer die LED für 
ausgabe=0 angesteuert. Folglich wird das Ergebnis immer als 0 erkannt, 
oder nicht?
Linksbündig deswegen, weil ich die 2 kleinsten Bit "abschneiden" will, 
wegen Rauschen. Ich lese dann nur das High-Register ADCH aus und lasse 
als uint8_t den 8-Bit-Wert ausgeben.
Bei einer 8-bit Auflösung sollte das Ergebnis doch etwa (2,5/5)*512 = 
255 sein...

@Martin: habe den Kanal jetzt VOR der Initialisierung im ADMUX gesetzt, 
leider ohne Veränderung...

von Martin S. (sirnails)


Lesenswert?

Flocke schrieb:

> @Martin: habe den Kanal jetzt VOR der Initialisierung im ADMUX gesetzt,
> leider ohne Veränderung...

Setz doch mal den Kanal vor dem LESEN.

von Karl H. (kbuchegg)


Lesenswert?

Eine Fehlinterpretation der Ausgabe ist ausgeschlossen? Immerhin 
schaltest du die LED-Pins immer nur auf 1, aber nie wieder auf 0 zurück.

(Und für die Grenze würde ich erst mal etwas anderes als 0 nehmen. Die 
Hälfte vom Messbereich wäre zb ein ganz guter Wert.)


Welcher µC ist das eigentlich? Damit man mal kontrollieren kann, was du 
hier

    ADMUX = (1<<REFS0)|(1<<ADLAR);

eigentlich wirklich als Referenzspannung eingestellt hast.

von Volkmar D. (volkmar)


Lesenswert?

Karl Heinz Buchegger schrieb:
> Immerhin schaltest du die LED-Pins immer nur auf 1, aber nie wieder auf 0 
zurück.

Macht er doch:
1
      if(ausgabe ==0)                // wenn "ausgabe1" >= x, führe Aktion aus
2
      {  
3
        PORTA = (1<<PORTA7);            //rote LED
4
      }
5
      else                    // wenn "ausgabe1" < x, führe alternative Aktion aus
6
      {  
7
        PORTA = (1<<PORTA6);            //grüne LED
8
      }

Die jeweils andere LED wird ja immer ausgeschaltet (direkte Zuweisung, 
keine Veroderung)

von Flocke (Gast)


Angehängte Dateien:

Lesenswert?

Schönen Guten nochmal,

erstmal vielen Dank für die Vorschläge die bislang kamen. Leider war ich 
in den vergangenen Tagen verhindert und konnte daher nicht wirklich auf 
die Antworten reagieren.

Die Tips die bislang kamen habe ich versucht umzusetzen, (habe auch 
vielo anderes versucht...-.-') bislang jedoch ohne Erfolg.

Bezüglich der Frage zum µC-Typ: es handelt sich um den ATMega32 und die 
der Auszug des entsprechenden Datenblattes

REFS1    REFS0    Voltage Reference Selection

 0        0       AREF, internal Vref turned off
 0        1       AVCC with external capacitor at AREF pin
 1        0       Reserved
 1        1       Internal 2,56V Reference

besagt letztendlich nur, dass mit ADCSRA |= (1<<REFS0); die interne 
Referenzspannung ausgewählt wurde. Das NET I/O Board hat hier noch einen 
Jumper für die Spannung, der mittlerweile alle Stellungen durchlaufen 
hat, aber zweckgemäß auf Vref int. steckt.

Ich weiß langsam echt nicht mehr woran es liegen kann, habe auch schon 
diverse Leute gefragt... keiner weiß woran es liegt. Der µC ist auch in 
Ordnung, habe den Prozzi ausgetauscht und neu geflasht, gleiches 
Ergebnis.

Anbei noch der aktuelle Softwarestand...

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.