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