- MultiPlus Wechselrichter Insel und Nulleinspeisung Conrad         
Ergebnis 1 bis 3 von 3

Thema: Analoge Eingänge

  1. #1
    Erfahrener Benutzer Fleißiges Mitglied
    Registriert seit
    19.02.2006
    Alter
    37
    Beiträge
    140

    Analoge Eingänge

    Anzeige

    Praxistest und DIY Projekte
    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...
    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
    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

  2. #2
    Erfahrener Benutzer Roboter Experte
    Registriert seit
    17.02.2006
    Alter
    54
    Beiträge
    781
    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

  3. #3
    Erfahrener Benutzer Fleißiges Mitglied
    Registriert seit
    19.02.2006
    Alter
    37
    Beiträge
    140
    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

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •  

Solar Speicher und Akkus Tests