Forum: Mikrocontroller und Digitale Elektronik ADC mit 8535 und UART


von Thorsten Schmidt (Gast)


Angehängte Dateien:

Lesenswert?

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?

von Thorsten Schmidt (Gast)


Lesenswert?

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

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.