Forum: Mikrocontroller und Digitale Elektronik ADC bei Attiny13 funktioniert nicht


von Piepschmatz (Gast)


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

von asmprogger (Gast)


Lesenswert?

rcall anstatt rjmp  beim ersten sprung im mainloop. du benutzt ja auch 
ret

von Piepschmatz (Gast)


Lesenswert?

Besten Dank für deine Antwort :-) jepa !!

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.