www.mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik ADC bei Attiny13 funktioniert nicht


Autor: Piepschmatz (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: asmprogger (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
rcall anstatt rjmp  beim ersten sprung im mainloop. du benutzt ja auch 
ret

Autor: Piepschmatz (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Besten Dank für deine Antwort :-) jepa !!

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.