www.mikrocontroller.net

Forum: GCC "Frischling" braucht Hilfe bei ADC


Important announcement: there is an English version of this forum on EmbDev.net. Posts you create there will be displayed on Mikrocontroller.net and EmbDev.net.
Autor: Flocke (Gast)
Datum:
Angehängte Dateien:

Diesen Beitrag bewerten:
lesenswert
nicht 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...

Autor: Johann L. (gjlayde) Benutzerseite
Datum:

Diesen Beitrag bewerten:
lesenswert
nicht 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?

Autor: Martin Schwaikert (sirnails)
Datum:

Diesen Beitrag bewerten:
lesenswert
nicht lesenswert
Setz mal das ADMUX-Register explizit auf den Kanal vor der Wandlung.

Autor: Flocke (Gast)
Datum:

Diesen Beitrag bewerten:
lesenswert
nicht 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...

Autor: Martin Schwaikert (sirnails)
Datum:

Diesen Beitrag bewerten:
lesenswert
nicht 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.

Autor: Karl Heinz Buchegger (kbuchegg) (Moderator)
Datum:

Diesen Beitrag bewerten:
lesenswert
nicht 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.

Autor: Volkmar Dierkes (volkmar)
Datum:

Diesen Beitrag bewerten:
lesenswert
nicht 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:
      if(ausgabe ==0)                // wenn "ausgabe1" >= x, führe Aktion aus
      {  
        PORTA = (1<<PORTA7);            //rote LED
      }
      else                    // wenn "ausgabe1" < x, führe alternative Aktion aus
      {  
        PORTA = (1<<PORTA6);            //grüne LED
      }

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

Autor: Flocke (Gast)
Datum:
Angehängte Dateien:

Diesen Beitrag bewerten:
lesenswert
nicht 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...

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




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 erkennst du die Nutzungsbedingungen an.

webmaster@mikrocontroller.netImpressumNutzungsbedingungenWerbung auf Mikrocontroller.net