ADC bei Attiny13 funktioniert nicht

Gast #1871356
Lesenswert?

Hallo Leute

Ich habe folgender Code geschrieben (siehe unten) und er funktioniert 
nicht.
Habe schon 2 Tag rumgetüftelt und es geht einfach nicnt. Ich wil eine 
Analoge Spannung bei Port 4 einlesen und dann auf PortB ausgeben.
Ist nur einen Test. Mir ist auch klar das der Controller auch zwischen 
verschieden Werten umher schaltet. Aber die höchsten bbit sollten ja 
stehen bleiebn.

Aber es geht nichts! Warum ?

Kann mir jemand auf die Sprünge helfen ?

Besten Dank


.include  "tn13def.inc"

begin:  rjmp  main  ; 1 Reset Handler
  reti    ; 2 INT0 IRQ0 Handler
  reti    ; 3 PCINT0 Handler
  reti    ; 4 TIM0_OVF Timer0 Overflow Handler
  reti    ; 5 EE_RDY EEPROM Ready Handler
  reti    ; 6 ANA_COMP Analog Comparator Handler
  reti    ; 7 TIM0_COMPA Timer0 Compare A Handler
  reti    ; 8 TIM0_COMPB Timer0 Compare B Handler
  reti    ; 9 WDT Watchdog Time-out Handler
  reti    ;10 ADC Conversion Complete Handler

;----------------------------------------------------------------------- 
-
; Initialisierungen
;----------------------------------------------------------------------- 
-
main:
;--- Stack Initialisierung ---
  ldi  r16,low(RAMEND)
  out  SPL,r16
; Ports initialisieren
  sbi  DDRB,0  ; PORTB0 auf Ausgang
  sbi  DDRB,1  ; PORTB1 auf Ausgang
  sbi  DDRB,2  ; PORTB2 auf Ausgang
  sbi  DDRB,3  ; PORTB3 auf Ausgang
  sbi  DDRB,4  ; PORTB4 auf Ausgang

; ADC initialisieren
  ldi  r16,0b00100010; Port, Referenzspannung und Auflösung
  out  ADMUX,r16
  ldi  r16,0b10000100  ; Modus, Interrupt und Start
  out  ADCSRA,r16

;----------------------------------------------------------------------- 
-
; Hauptprogramm-Schleife
;----------------------------------------------------------------------- 
-
mainloop:  wdr
  rjmp  getValueADCandWait
  out  PORTB,R16
  rjmp  mainloop  ; Sprung zum Beginn der Hauptprogrammschleife
;--------------------------------------------------------------------
; getValueADCandWait - Digitalisiert einen Analogwert und wartet auf das 
Ergebnis
; PA: r16 = Ergebnis
;--------------------------------------------------------------------
getValueADCandWait:
  sbi  ADCSRA,6  ; Start ADC
getValueADCandWait1:
  sbic  ADCSRA,6  ; Test ob fertig
  rjmp  getValueADCandWait1  ; wenn nicht fertig
  ldi  r16,ADCH  ; Einlesen des Analogwertes
  ret

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren