Danke für die zahlreichen Antworten!
Also ich hab jetzt die Schaltung gebaut:
AREF----Vorwiderstand----Photowiderstand-----GND
22K Ohm 78 Ohm-1M Ohm
|
|
ADC0
LED an C5, Messung an C0.
Funktioniert leider nicht, egal mit was für einem Wert ich den vom ADC
gemessenen vergleiche (0,128,255), immer leuchtet die LED. (Siehe mit
!!!!! markierte Zeile). Das kann ja nicht sein. Sieht jemand einen
Fehler?
.include "m8def.inc"
.def temp1 = r16
.def adlow = r17 ; Ergebnis vom ADC
.def adhigh = r18 ; Ergebnis vom ADC
; C5 als Ausgang
ldi temp1, 0b00100000
out DDRC, temp1
; ADC initialisieren: ADC0, Vcc als Referenz, Single Conversion,
Vorteiler 128
ldi temp1, (1<<REFS0) | (0<<MUX0) | (0<<MUX1) | (0<<MUX2) |
(0<<MUX3) ; Kanal 0, interne Referenzspannung 5V
out ADMUX, temp1
ldi temp1, (1<<ADLAR) ; linksbündige Ausrichtung in adhigh
out ADMUX, temp1
ldi temp1, (1<<ADEN) | (1<<ADPS2) | (1<<ADPS1) | (1<<ADPS0)
; ADC an und Prescaler auf 128
out ADCSRA, temp1
sample_adc:
sbi ADCSRA, ADSC ; den ADC starten
wait_adc:
sbic ADCSRA, ADSC ; wenn ADC fertig, wird dieses Bit
gelöscht
rjmp wait_adc
in adlow, ADCL ; immer zuerst LOW Byte lesen
in adhigh, ADCH ; danach das mittlerweile gesperrte High
Byte
cpi adhigh, 0 ;!!!!!!!!!!!!!!!!!!!!!!!!
brsh gr
ldi temp1, 0xFF ;kleiner: LED aus
out PORTC, temp1
rjmp sample_adc
gr: ;größer: LED an
ldi temp1, 0x00
out PORTC, temp1
rjmp sample_adc