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
hkr1734 schrieb:
> Hat irgendwer eine Idee, woran das liegen könnte?
Na klar. Du hast einen Programmierfehler in Zeile 42.
Das heißt: Du sollst deinen Code hochladen. Immerhin kenn ich noch keinen der Weissagen kann :)
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?
Hi > in WertH, ADCH > in WertL, ADCL Falsch. Erst ADCL, dann ADCH einlesen. MfG Spess
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.