PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Erneut: Spannung mit Atmega8 messen...



PhilippW
29.11.2005, 19:51
Hallo, allerseits!

Ich hab eine Frage zu einem altbekannten Problem: Spannung messen mit dem Atmega8...
Ich weiß, das wurde schon oft durchgekaut und ich habe mich heute schon den ganzen Tag durch alle möglichen Internetseiten, insbesondere der Roboternetz- und Mikrocontroller.net- Suche gewühlt, aber nichts passendes gefunden...
Bislang habe ich immer nur mit der C-Control zu tun gehabt und möchte mich nun auch mit den AVRs befassen...
Um mir den Einstieg zu erleichtern, hab ich auf mikrocontroller.net erfolgreich das Tutorial durchgearbeitet (allerdings mit einem Atmega8-16PC) und möchte jetzt den Teil mit dem AD-Wandler ein wenig vertiefen.
Dazu sollen Spannungen von 0 bis 5 Volt gemessen und über UART ausgegeben werden.

Probeweise habe ich mir folgenden Code zusammen gewurschtelt, welcher sich im Nachhinein aber als völliger Quatsch herausstellt hat... 8-[


.include "m8def.inc"

.def temp = r16
.equ CLOCK = 4000000
.equ BAUD = 9600
.equ UBRRVAL = CLOCK/(BAUD*16)-1

; Stackpointer initialisieren
ldi temp, LOW(RAMEND)
out SPL, temp
ldi temp, HIGH(RAMEND)
out SPH, temp

; Baudrate einstellen
ldi temp, LOW(UBRRVAL)
out UBRRL, temp
ldi temp, HIGH(UBRRVAL)
out UBRRH, temp

; Frame-Format: 8 Bit
ldi temp, (1<<URSEL)|(3<<UCSZ0)
out UCSRC, temp

sbi UCSRB,TXEN ; TX aktivieren

ldi r16, 0x00
out DDRD, r16 ;Port D durch Ausgabe von 0x00 ins
;Richtungsregister DDRD als Eingang konfigurieren

loop:

in r16, PIND ;an Port D anliegende Werte (Taster) nach r16 einlesen
rcall serout ;Unterprogramm aufrufen
ldi temp, 10
rcall serout
ldi temp, 13
rcall serout

rjmp loop

serout:
sbis UCSRA,UDRE ; Warten bis UDR für das nächste
; Byte bereit ist
rjmp serout
out UDR, temp
ret ; zurück zum Hauptprogramm


Abfragen möchte ich nach Möglichkeit PD0 und den gemessenen Wert in ein Register speichern, um ihn nachher an ein LCD oder über die serielle Schnittstelle (UART) auszugeben...

Reicht es einfach, AREF an 5V zu legen oder muss ich Softwareseitig noch etwas einstellen?
Was muss ich machen, damit mein Code doch noch funktioniert.

Bei Assembler möchte ich auch gerne bleiben, da es mich irgendwie juckt, auch damit programmieren zu können... ;-)

Ich weiß, dass ich viel verlange, da das Thema ADC ja schon sehr oft besprochen wurde, aber ich komme immer noch mit der einfachen AD-Port-Abfrage der C-Control durcheinander...

Mit freundlichen Grüßen,

Philipp Wehner