www.mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik Mega8 ADC Meßproblem


Autor: Carsten Pietsch (papa_of_t)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo, ich hab wahrscheinlich wieder mal irgend eine Banalität 
vergessen, aber ich komme gerade nicht drauf, wo mein Fehler liegt. Ich 
will mehrere ADC-Kanäle messen und verwende erstmal folgendes einfache 
Mini-Testprogramm:


$regfile = "m8def.dat"
$crystal = 8000000
$baud = 1200
'
Ddrc = &B00000000

Dim Ad_kanal(6) As Word
Dim I As Byte
Dim W As Word

Do
      '############### 6 AD ports messen
      For I = 1 To 6
            Admux = &B01000000 + I
            Admux = Admux - 1
            Adcsra = &B11000010
            Do : Loop Until Adcsra.6 = 0
            Ad_kanal(i) = Adcd
      Next I

      For I = 1 To 6
            Print "AD" ; I ; "=" ; Ad_kanal(i) ; Chr(9) ;
      Next I
      Print
      Print
Loop
End

Wenn ich dieses Programm laufen lasse und an den Mega8 auf dem 
Steckbrett nur 4 Beine anschließe (Betriebsspannung, ADC1  und Tx, damit 
man was lesen kann) funktioniert das ganz normal, ich erhalte 0 wenn ich 
den ADC auf Masse lege und 1023 wenn ich ihn auf 5V lege. Wenn ich den 
zweiten ADC mit dem ersten zusammen schalte, funktioniert das genauso 
ABER: wenn die beiden verschiedene Spannungen haben (einer auf Masse, 
einer auf 5V) dann ergeben sich "Mischwerte" (AD1=312  AD2=956 usw.) - 
Warum? Ist das bei Euch auch so? Hab ich bei der ADC-Initialisierung 
oder Abfrage etwas vergessen?

Autor: cdg (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
ne Pause ?

Autor: Sonic (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ist das Bascom? Ich weiß nicht wie der Compiler das umsetzt, aber meiner 
Erfahrung nach muss nach dem Umschalten des MUX eine Pause von min. 40µs 
'rein, sonst kommt Mist 'raus. Probier's einfach mal mit Pausen zwischen 
den Kanälen.

Autor: Carsten Pietsch (papa_of_t)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ihr habt recht, die Pause bringt's! @Sonic: Ja, das ist Bascom. In 
diesem Fall - klein, (zu) schnell und simpel, oder? :-)

Natürlich habe ich mich gefragt, warum mir das bisher nie aufgefallen 
ist. Es lag einfach daran, daß ich bisher den internen Oszillator mit 
1MHz statt mit 8Mhz habe laufen lassen. Bei 1Mhz funktioniert es auch so 
wie oben stehend.

Naja - kaum macht man alles richtig - schon funktioniert's.. :-)

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.