Hallo,
Ich hab ein problem mit einer einfachen Singel-Messunge des ADC vom
ATMega16.
Ich verwendet eine STK500 und bin nun am ende meiner Kenntnisse.
Die erste messung wird durchgeführt aber jeder weitere hat den Wert der
ersten. Ich hab im Tutorial hier gelesen das die werte übernohmen werden
müssen, nur ich weiß nicht wie genau.
Vorgabe: es muss mit Assambler programmiert werden.
Hier ist mein programmcode... der leider nach der erste messung nichts
mehr einliest.
rjmp warte
in akku, ADCL
com akku
OUT PORTB, akku
Dann lies noch mal im Artikel nach, wie das ist, wenn man ein 16-Bit
Register auslesen will. Man muss das High-Byte ebenfalls auslesen. Das
Lesen des Low-Bytes verriegelt den ADC gegen Updates. Das Lesen des
High-Bytes hebt diese Verriegelung wieder auf.
Hallo,
jetzt liest du nur die oberen beiden Bit's des Messwertes aus, wenn du
da eine Veränderung sehen willst muss die Eingangsspannung in größerem
Maß geändert werden. Entweder die liest ADCH in ein anderes Register
wenn du die oberen Bits nicht brauchst, oder du setzt ADLAR=1 im ADMUX
dann sind die oberen 8-Bits im ADCH und die unteren 2 im ADCL.
Sascha
wieso ich lese doch jetzt beide einmal aus... aber da ich 8 LED´s auf
dem STK500 habe kann und will ich nur 8 anzeigen. die anzeige ist ja
nicht mein problem nur das die neuen Werte geschrieben werden.
Wie müsste es aussehen damit es funktioniert?
Hallo,
ja - du liest beide aus, aber überschreibst den 1. Wert gelesenen Wert
(ADC-Bit's 7..0) in deinem Register 'akku' wieder mit dem 2. Wert
(ADC-Bit's 9..8). Wenn du ADCH nicht brauchst, dann lies den Wert nicht
in 'akku' sondern in ein anderes Register ein! Oder schalte die
Anordnung der Daten mit ADLAR=1 um.
Wenn du nur Bit 9 und 8 ausliest, dann ändert sich dort bei Vref=2.56V
nur alle 0.64V was!
Spannung Bit 9 8
< 0.64 0 0
> 0.64 , < 1.28 0 1> 1.28 , < 1.92 1 0> 1.92 1 1
Achso: das ...
> OUT ADCL, akku> OUT ADCH, akku
... kannst du dir sparen, ADCL/ADCH sind Readonly !
Sascha
Danke erstmal
Hab nun das ganz zum laufen gebracht.
die reihenfolge vom auslesen der ADC-Register ist wichtig.
Das mit in eine anderes register ist Richtig.
garnicht einlesen geht nicht und auch das umdrehen lässt keine
neuen Werte zu.
Zuerst muss das ADCL gelesen werden und erst danach das ADCH.
ins selbe Register speichern bewirkt wieder nichts, in zwei
seperate Register jedoch, lässt es zu und nun funktioniert auch alles.
Grüße
Als Anhang das funktionierde Programm