- Akku Tests und Balkonkraftwerk Speicher         
Ergebnis 1 bis 3 von 3

Thema: Analogeingänge beim AT90S4433

  1. #1
    Erfahrener Benutzer Robotik Einstein
    Registriert seit
    01.11.2003
    Ort
    Freiburg im Breisgau
    Alter
    35
    Beiträge
    2.624

    Analogeingänge beim AT90S4433

    Anzeige

    Praxistest und DIY Projekte
    Hi!
    Ich habe da mal ne kleine Frage!
    Ich möchte jetzt endlich mal lernen, wie man die Analogeingänge beim AT90S4433 benutzt!
    Ich progge in Assembler.
    Wenn man einfachheitshalber mal einen Poti als Spannungsteiler vor den Eingang ADC0 (PC0) setzt und an die Ausgänge z.B. PD0 und PD1 jeweils eine LED setzt.
    Wie mache ich das dann, dass ich den Wert vom ADC in eine Variable packe und die dann mit einem Wert vergleiche, sodass sowas wie eine Schwelle entsteht.
    Wenn der ADC z.B. über 4V misst, dann soll LED1 an und LED2 aus sein, während unter 4V die LED1 aus sein soll und die LED2 an sein soll!?
    Kann mir jemand einen Code schreiben, oder auch eine Seite zeigen, wo das gezeigt wird?
    Mir würde auch schon reichen, dass ich weiß, wie man den Wert vom ADC in eine Variable packt!?

    Kann mir jemand helfen?
    Ich prügel mich schon lange mit dem Probelm!
    Ich habe schon viel gelesen, aber nichts verstanden!

    Danke!

  2. #2
    Gast
    Mich würde das mal beim Mega16 in Basic mit Bascom interessieren.

  3. #3
    Benutzer Stammmitglied
    Registriert seit
    09.02.2004
    Ort
    Darmstadt
    Alter
    44
    Beiträge
    32
    Hallo,

    habe noch zufällig irgendwelchen ADC-Code für den 90S4433 gefunden, den ich mal zum Test geschrieben habe.

    Es hat definitiv funktioniert, allerdings wurde der Code danach noch etwas modifiziert. Ich kann also keine Funktionsgarantie geben.
    Allerdings ist das ganze nicht wirklich schwer. Das meiste findet in der ISR statt (Ergebnis in r18:r17), allerdings habe ich die Displayausgabe auskommentiert.

    Das sollte Dir einen groben Überblick verschaffen. Das Lesen des Datenblattes ist natürlich immer Pflicht.

    Code:
    .include "4433def.inc"
    
    
    .CSEG
    .org 0x0000 ; code segment start
    
    ; Interrupt vectors
    rjmp RESET ; 0x00 external reset
    rjmp NO_INTERRUPT ; 0x01 external int0
    rjmp NO_INTERRUPT ; 0x02 external int1
    rjmp NO_INTERRUPT ; 0x03 timer1 capture event
    rjmp NO_INTERRUPT ; 0x04 timer1 compare match
    rjmp NO_INTERRUPT ; 0x05 timer1 overflow
    rjmp NO_INTERRUPT ; 0x06 timer0 overflow
    rjmp NO_INTERRUPT ; 0x07 SPI serial transfer complete
    rjmp NO_INTERRUPT ; 0x08 UART, Rx complete
    rjmp NO_INTERRUPT ; 0x09 UART data register empty
    rjmp NO_INTERRUPT ; 0x0a UART, Tx complete
    rjmp ADC_INTERRUPT ; 0x0b ADC conversion complete
    rjmp NO_INTERRUPT ; 0x0c EEPROM ready
    rjmp NO_INTERRUPT ; 0x0d Analog comparator
    
    
    ;--------------------------------------------------------------------
    ;     ISRs
    ;--------------------------------------------------------------------
    
    RESET:
    rjmp main
    
    
    ADC_INTERRUPT:
    	in r20, SREG
    	push r16
    	push r17
    	push r18
    
    	in r17, ADCL
    	in r18, ADCH
    
    ; skip 2 LSB
    ;	asr r18
    ;	ror r17
    ;	asr r18
    ;	ror r17
    
    ; display output
    ;	mov r16, r18
    ;	rcall lcd_printdec ; print high byte
    ;	mov r16, r17
    ;	rcall lcd_printdec ; print low byte
    ;	ldi r16, ' '
    ;	rcall lcd_data
    
    	; start next conversion
    	sbi ADCSR, 6
    
    	pop r18
    	pop r17
    	pop r16
    	out SREG, r20
    reti
    
    
    NO_INTERRUPT:
    reti
    
    
    ;--------------------------------------------------------------------
    ;     MAIN
    ;--------------------------------------------------------------------
    main:
    
            ldi r16, low(RAMEND)  ; initialise stack pointer
            out SPL, r16
    
    	sei ; global interrupt enable
    
    
    	; analog input 0
    	ldi r16, 0x00
    	out ADMUX, r16
    
    	; enable, start dummy conversion, no free run, interrupt, factor 128
    	ldi r16, 0b11011111
    	out ADCSR, r16
    
    loop:
    	rjmp loop
    Jens
    Rot ist Schwarz und Plus ist Minus.

Berechtigungen

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

MultiPlus Wechselrichter Insel und Nulleinspeisung Conrad