Ich habe nun ein Programm erstellt, welches den Wert des ADCs in den EEPROM abspeichert. Jedoch erhalte ich die ganze Zeit ungefähr die gleichen Werte, ohne dass ich irgend eine Taste drücke. Diese Werte sind im Bereich 0x0150 bis 0x0180. Wenn ich eine Taste drücke kriege ich auch nur einen Wert dazwischen geliefert. Wo ist der Fehler im Programm?
Wollte eigentlich nur den jeweiligen Wert in den EEPROM speichern, wenn eine Taste gedrückt wird.
Als Referenzspannung habe ich AREF mit Jumper angegeben. (Also 2,56 V.)Code:.Include "m32def.inc" .DEF tmp = R16 .DEF lowad = R17 .DEF highad = R18 .EQU wertadlow = 0x60 .EQU wertadhigh = 0x61 ldi tmp,(1<<ADEN)|(1<<ADPS1)|(1<<ADPS2) out ADCSRA, tmp ldi tmp,(0<<REFS0)|(0<<REFS1)|(1<<MUX2)|(1<<MUX1)|(1<<MUX0) out ADMUX, tmp sbi ADCSRA, ADSC ;Das Bit ADSC wird gesetzt und der ADC startet. wait: sbis ADCSRA,ADIF ;Das ADIF wird abgefragt, ob eine Spannung anliegt. rjmp wait ;Warteschleife bis Spannung anliegt. in lowad, ADCL ;Das Low-Byte des ADCs wird ausgelesen. in highad, ADCH ;Das High-Byte wird ausgelesen. ;Überprüfung ob Werte im sinnvollen Bereich sind. ldi R21,0x32 ;Es wird erst ab Wert 50 in EEPROM geschrieben. sub R21,lowad brpl wait ldi R21,0x02 ;Es wird erst ab Wert 768 nicht mehr in EEPROM geschrieben. sub R21,highad brmi wait write1: sbic EECR,EEWE ;Ist der Schreibzyklus beendet, PC = PC +2 rjmp write1 ldi R19, 0xF0 ;Festlegen der Zieladresse. ldi R20, 0x00 out EEARH, R20 ;Die Zieladresse des EEPROM wird übertragen. out EEARL, R19 ;Als Nächstes wird das Low-Byte des ADCs abgespeichert. out EEDR, highad ;Byte in Zwischenspeicher laden. ;Folgende 2 Befehle sorgen dafür, dass der Wert im Zwischenspeicher nun endgültig in der Zieladresse des EEPROMs abgespeichert wird. sbi EECR,EEMWE sbi EECR,EEWE write2: sbic EECR,EEWE ;Ist der Schreibzyklus beendet, PC = PC +2 rjmp write2 ;Nun wird die nächste Zieladresse festgelegt und das High-Byte des ADCs abgespeichert. inc R19 out EEARL, R19 ;Es muss nur das Low-Byte geändert werden. out EEDR, lowad sbi EECR,EEMWE sbi EECR,EEWE ;Ende
Wäre auch gut, wenn jemand das Programm mal in seinem RN-Control testen könnte und mir sagen kann, ob dort die gleichen Werte gespeichert werden.
Danke!







Zitieren

Lesezeichen