Hallo Leute!
In meinem neuen Projekt versuche ich nun den analogen Eingang eines ATmega16 zu verwenden. Die Aufgabe die ich mir gestellt habe ist eigentlich recht simpel, ich will mit Hilfe 2er LDRs 2 Spannungen auf den Analog Eingang legen, anschließend in einen Digitalen Wert umwandeln, vergleichen welche größer, kleiner, oder ob sie gleich sind, und anschließend mit Hilfe 3er LEDs anzuzeigen auf welchem die Größere Spannung anliegt.
Ich weiß nicht ob mein Fehler in der Hardware oder in der Software liegt. Angenommen die Hardware passt, wo liegt mein Fehler im Programm?
Ich bekomme immer heraus das beide Spannungen gleich sind...
Die Beschaltung sieht folgendermaßen aus:Code:.include "m16def.inc" .def temp = r16 .def Ergebnis1 = r17 .def Ergebnis2 = r18 .CSEG .org 0x000 jmp Initialisierung ; Reset Interupt Handler jmp Kein_Interrupt ;EXT_INT0 ; INT 0 Interupt Handler jmp Kein_Interrupt ;EXT_INT1 ; INT 1 Interupt Handler jmp Kein_Interrupt ;TIM2_COMP ; Timer 2 Compare Interupt Handler jmp Kein_Interrupt ;TIM2_OVF ; Timer 2 Overflow Interupt Handler jmp Kein_Interrupt ;TIM1_CAPT ; Timer 1 Capture Interupt Handler jmp Kein_Interrupt ;TIM1_COMPA ; Timer 1 Compare A Interupt Handler jmp Kein_Interrupt ;TIM1_COMPB ; Timer 1 Compare B Interupt Handler jmp Kein_Interrupt ;TIM1_OVF ; Timer 1 Overflow Interupt Handler jmp Kein_Interrupt ;TIM0_OVF ; Timer 0 Overflow Interupt Handler jmp Kein_Interrupt ;SPI_STC ; SPI Transfer Complete Interupt Handler jmp Kein_Interrupt ;USART_RXC ; USART RX Complete Interupt Handler jmp Kein_Interrupt ;USART_DRE ; USART UDR empty Interupt Handler jmp Kein_Interrupt ;USART_TXC ; USART TX Complete Interupt Handler jmp ADCfertig ; ADC Conversion Complete Interupt Handler jmp Kein_Interrupt ;EE_RDY ; EEPROM Ready Interupt Handler jmp Kein_Interrupt ;ANA_COMP ; Analog Comperator Interupt Handler jmp Kein_Interrupt ;TWSI ; TWI Interupt Handler jmp Kein_Interrupt ;EXT_INT2 ; INT 2 Interupt Handler jmp Kein_Interrupt ;TIM0_COMP ; Timer 0 Compare Interupt Handler jmp Kein_Interrupt ;SPM_RDY ; Store Program Memory Ready Interupt Handler Kein_Interrupt: reti Initialisierung: ;Stackpointer ldi temp, LOW(RAMEND) out SPL, temp ldi temp, HIGH(RAMEND) out SPH, temp ;Aus/Eingänge clr temp out DDRA, temp ; Eingang ser temp out DDRD, temp ; Ausgang ;Interrupts aktivieren sei ; Generelle Interruptfreigabe Main: ldi temp, (3<<REFS0) | (1<<ADLAR) ; Interne 2,56V Quelle ; Linksbündig in Register geschrieben (ADLAR=1) ; ADC Eingang = ADC0 (MUX4-0...00000) out ADMUX, temp ldi temp, (1<<ADEN) | (1<<ADSC) | (1<<ADIE) | (5<<ADPS0) out ADCSRA, temp call Warten mov Ergebnis1, temp ldi temp, (3<<REFS0) | (1<<ADLAR) | (1<<MUX0) ; Interne 2,56V Quelle ; Linksbündig in Register geschrieben (ADLAR=1) ; ADC Eingang = ADC1 (MUX4-0...00001) out ADMUX, temp ldi temp, (1<<ADEN) | (1<<ADSC) | (1<<ADIE) | (5<<ADPS0) out ADCSRA, temp call warten mov Ergebnis2, temp cbi PortD, 6 cbi PortD, 1 cbi PortD, 0 cp Ergebnis1, Ergebnis2 brlo PC+6 breq PC+3 sbi PortD, 6 jmp Main sbi PortD, 1 jmp Main sbi PortD, 0 jmp Main Warten: brie PC+2 reti jmp Warten ADCfertig: ldi temp, ADCH ret
LEDs auf PortD, 6, 1, 0
5V auf AVCC, VCC, AREF
Kann mir dabei irgend jemand weiterhelfen?
mfg Gerko







Zitieren

Lesezeichen