Mega8 - ADC liefert konstanten Wert

Gast #1558158
Lesenswert?

Ich lese 4 ADC´s des Atmega8 etwa folgendermaßen aus:

1. Mux-Kanaleinstellungen ändern (auf z.B. Kanal3)
2. ADC-Starten
3. Warten bis der ADC fertig ist
4. ADC-Wert in Variablen kopieren
5. Wert der Variablen auf ein LED-Display ausgeben
->und wieder von vorn

Allerdings liefert der ADC immer einen kostanten Wert...

z.B.(0111011001->473) oder (0111011001->474)
Der Wert ändert sich aber nur bei einem Neustart der Schaltung.

Ich habe gelesen, dass die erste Messung nach dem Kanal-Wechsel immer 
schrott sein soll, aber 2-maliges Lesen hilft auch nicht.


Hat irgendwer eine Idee, woran das liegen könnte?

>PS:
>Programiert habe ich in Assembler nach dem ADC-Tutorial
Gast #1558179
Lesenswert?

Sorry, aber ich dachte, das mein vorgehen möglicherweise falsch sein 
könnte, so rein Hardwaremäßig (z.B. man muss erst 50µS warten bis man 
erneut den ADC lesen darf)

Hier also der Entscheidende Quellcode:
1
.include "m8def.inc"
2

3
.def temp1  = r16
4
.def temp2  = r17
5

6
.def WertL  = r18
7
.def WertH  = r19
8

9
Main:
10
  rcall Get_ADC_0
11
  rcall Ausgabe 
12
;Die Ausgabe funktioniert zu 100%, ewig getestet, die Daten werden korrekt ausgegeben, verwertet werden WertH und WertL
13

14

15
Get_ADC_0:
16
  ldi temp1, (1<<REFS0) | (1<<ADLAR) | (0<<Mux3) | (0<<Mux2) | (0<<Mux1) | (0<<mux0)
17
  ;Referenz 5V intern, Wert linksbündig, Kanal 0
18
  out ADMUX, temp1
19

20
  ldi temp1, (1<<ADEN) | (1<<ADPS2) | (1<<ADPS1) | (0<<ADPS0)
21
  ;ADC an, Vorteiler 64
22
  out ADCSR, temp1
23
  rcall Get_ADC_lesen
24
ret
25

26
;^^^Gibt es für die Kanäle 0-3^^^
27

28

29
Get_ADC_lesen:
30
  sbi ADCSR, ADSC       ;ADC starten
31
  wait_adc:
32
    sbic ADCSR, ADSC
33
    rjmp R_wait_adc
34
  in WertH, ADCH
35
  in WertL, ADCL
36
ret

Achja, AVCC ist mit einem 100nF-Kondensator gegen GND angeschlossen...


Haben möglicherweise die Register r18 und r19 eine Sonderfunktion?

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren