PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Analoge Eingänge



Gerko
31.07.2006, 16:45
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...

.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

Die Beschaltung sieht folgendermaßen aus:

LEDs auf PortD, 6, 1, 0
5V auf AVCC, VCC, AREF

Kann mir dabei irgend jemand weiterhelfen?

mfg Gerko

dennisstrehl
31.07.2006, 16:55
5V auf AVCC, VCC, AREF

Wenn du die interne Referenz verwendest, darfst du keine Spannung von außen an Aref anlegen.

Zum eigentlichen Problem muss ich mir erstmal anschauen, wie das Programm überhaupt funktioniert...

Edit: "ldi temp, ADCH"
Du weist, was "ldi" macht? Ein "in" wäre hier nötig.

Du brauchst den ADC beim zweiten Wandeln übrigens nicht komplett neu zu initialisieren, wenn du einfach das ADSC-Bit setzt, wird der nöchste Wert "eingelesen".



MfG

Gerko
31.07.2006, 17:54
Danke für diesen hinweis das ich eigentlich in schreiben müsste, das war auch schon der Fehler, es funktioniert jetzt ^^

Naja, einmal hab ich mich auch bei dem breq befehl vertan, aber der Hauptfehler war wirlich das in

Danke für die schnelle Antwort

mfg Gerko