ADC mit 8535 und UART

Gast #66266
Hallo

ich wollte mit dem angehängten Programm den ADC vom AVR 8535 testen.

Es soll einfach nur ein Wert auf Channel 0 im Free Running Mode
eingelesen werden und über das Uart ausgegeben werden.(ich geb einfach
nur das low Byte aus um zu sehen ob überhaupt was funktioniert)
Nur leider tut es das nicht.
Ich hab das ganze mit dem AVR-Studio 4.0 und VMLab simuliert.
Und auch real auf dem Prozessor, das UART Register wird aber nicht
aktualisiert.
Es läuft alles Perfekt bis zur Zeile

out UDR, lADC    ;Low Byte des ADC Wertes ausgeben (nur zu
Testzwecken)

Kann mir da jemand weiterhelfen warum UDR nicht aktualisiert wird?
Angehängte Dateien:
Gast
Hier nochmal das Programm mit dem Anhang hat irgendwie nicht geklappt.


.include "8535def.inc"



.def temp = r16
.def hADC = r17
.def lADC = r18


.cseg
rjmp  Initial  ; nach RESET zum Hauptprogramm
reti          ;External Interrupt0 Vector Address
reti          ;External Interrupt1 Vector Address
reti          ;Timer2 compare match Vector Address
reti          ;Timer2 overflow Vector Address
reti          ;Timer1 Input Capture Vector Address
reti          ;Timer1 Output Compare A Interrupt Vector Address
reti          ;Timer1 Output Compare B Interrupt Vector Address
reti          ;OverflowTimer1 Interrupt Vector Address
reti           ;OverflowTimer0 Interrupt Vector Address
reti          ;SPI Interrupt Vector Address
reti            ;UART Receive Complete Interrupt Vector Address
reti            ;UART Data Register Empty Interrupt Vector Address
reti          ;UART Transmit Complete Interrupt Vector Address
rjmp Analog      ;ADC Conversion Complete Interrupt Vector Address
reti          ;EEPROM Write Complete Interrupt Vector Address
reti             ;Analog Comparator Interrupt Vector Address







Analog:

in hADC,ADCH
in lADC,ADCL
reti






Initial:

;Stackpointer initialisieren
ldi temp, LOW(RAMEND) ;LOW-Byte der obersten RAM-Adresse
out SPL, temp
ldi temp, HIGH(RAMEND) ;HIGH-Byte der obersten RAM-Adresse
out SPH, temp

ldi temp,8000000/(9600*16)-1   ;Baudrate 9600 einstellen
out UBRR,temp
sbi UCR,TXEN                   ;TX aktivieren



ldi temp,0b11101110              ;ADC aktivieren free running mode
Interrupt aktiviert
out ADCSR,temp                 ;Vorteiler 64

ldi temp,0b00000000              ;ADC Channel wählen Channel=0
out ADMUX,temp





sei                            ;Interrupsts Global freigeben


main:
sbis UBRR,UDRE   ;Warten, bis UDR bereit ist
rjmp main
out UDR, lADC    ;Low Byte des ADC Wertes ausgeben (nur zu
Testzwecken)
rjmp main

Antwort schreiben

Eine eigene Frage? Dieser Thread ist über 22 Jahre alt. Stell sie in einem eigenen Thread – dort lesen mehr Leute mit, und sie wird öfter und schneller beantwortet.

Neuen Thread starten

Eine Lösung, Ergänzung oder Rückmeldung zu diesem Thread? Dann antworte hier.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.