Hallo alle miteineander,

Ich habe einen ATmega32 und programmiere mit AVR-Studio4.11.

Ich will die Spannung am PA4 messen und bei unterschreiten eines Schwellwertes eine Störungs-LED schalten.

Im Idealfall liegen 5V an PA4 an, und dies würde ja einen dezimalen Wert von 1024 machen. Wobei dann das Highbyte ( ADCH ) 3 sein muß und Lowbyte (ADCL) 255.

Wenn das Programm nun an den fett markierten Zeilen das ADCH und ADCL in Register übernehmen soll, wird das nicht richtig gemacht.

Es fehlen Bits im HighByte so als ob der Wert nach linksgeschoben worden wäre. D.h. wenn der Wert im ADCH ursprünglich 3 war ist er nachher nur noch 2, was sich doch ganz erheblich auf das Endergebniss auswirken kann.

Dies passiert jedoch nicht immer, wie ich bei debuggen feststellen konnte.

Hier mal der Teil-Code:

Code:
ldi temp,4;Spannungsmessung an   PA4 !!!!!!!!!!! 
	out ADMUX, temp
	ldi temp, ((1<<ADEN)|(1<<ADSC)|(1<<ADFR)) + 7  ; 
	out ADCSRA, temp

	sbi ADCSRA, ADIF    	;logisch "1" löscht ADIF flag !
	;ADC einlesen:
	in lowByte, ADCL 	;immer zuerst low byte lesen
	in highByte, ADCH 	;danach  high byte		

	ldi temp, high(900)
	cpi lowByte,low (900)
                cpc highByte,temp  
	brlo Storung 
	   
	ldi temp,0b00010000
	out PORTB,temp

Wieso wird der Wert nicht immer richtig übernommen?
Als Anmerkung sei gesagt, daß dies nur ein Ausschnitt aus dem Code ist.

Bin für alle Tips dankbar,

mit den besten Grüssen........