-
-
Erfahrener Benutzer
Roboter Experte
Hallo,
Laut Datenblatt sollte mann zuerst ADCL auslesen und danach ADCH.
Denn nachdem ADCH ausgelesen ist wird die ADCH/ADCL register kombination freigegeben um von die AD-Wandler wieder actualisiert zu werden.
Wenn mann zuerst ADCH ausliest, und damit die Register freigibt, konnte es sein dass inzwischen die AD-Wandler neue Daten in ADCL gespeichert hat!
Wenn mann dann ADCL ausliest ist dass die Wert van einem andere Messung!
Ich hab mich die compilierten code mahl angeschaut (GCC.EXE).
--------------------
die Code:
buffer = (ADCH<<8 ) | ADCL;
wird umgesetzt nach:
in r24,37-0x20
in r24,36-0x20
--------------------
die Code:
buffer = ADC;
wird umgesetzt nach:
in r24,36-0x20
in r25,(36)+1-0x20
--------------------
Die '36' ist ADCL und die '37' is ADCH.
Da kann mann sehen dass die code '(ADCH<<8 ) | ADCL' ein potentialen Fehler
verursachen kann denn ADCH wird zuerst gelesen und damit die Register freigegeben.
Die code 'buffer = ADC' liest zuerst ADCL und danach ADCH.
==============================
Ich benutzte immer:
buffer = ADCL;
buffer|=(ADCH<<8 );
Ich hatte die code 'buffer = ADC' noch niemahls benutzt,
Danke, schon wieder etwas gelernt!
==============================
Gruss
Henk
Berechtigungen
- Neue Themen erstellen: Nein
- Themen beantworten: Nein
- Anhänge hochladen: Nein
- Beiträge bearbeiten: Nein
-
Foren-Regeln
Lesezeichen