PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : AD-Converter Programm



Furay
11.06.2009, 11:04
Hallo Zusammen,

zuerst zu vorgeschicht. Das soll eine beispielprogramm sein für eine AD umwanldung. Leider habe ich eine Progammierboard(STK 500) von der schule vergessen mitzunehmen. und nach den ferien muss ich das programm lauffähig haben.

Theorisch sollte es funktionieren, praktisch weiß ich es nicht.
Wenn eine von euch damit auskennt bzw einen ATMEGA 16 hat und es ausprobieren kann und mir sagt ob es geht, wäre ich sehr dankbar.

Funtkionserklärung:
Port D wurde als eingang verwendet, sobald Taster 0 (PIN 0) betätigt wird, wir einen einzelmessung durchgeführt. wenn diese Abgeschlossen ist, wird der untere Teil der AD-Umwandlung auf die Ausgänge gelegt (Port B)
Gemessern wird am ADC0 (PORT A Pin 0)


.INCLUDE "M16def.inc"

;************************************************* ********************************
; Definitionen und Zuweisungen
;************************************************* ********************************
.DEF akku = r16

;************************************************* ********************************
; Interrupt Vektortabelle
;************************************************* ********************************
.CSEG
.ORG 0x000
RJMP MainInit
.ORG 0x01C
RJMP ADinterput


;************************************************* ********************************
; Main Initzialisierung
;************************************************* ********************************
MainInit:

;Stackinitialisierung:
LDI akku, HIGH(RAMEND)
OUT SPH, akku
LDI akku, LOW(RAMEND)
OUT SPL, akku

;Portzuweisung AUSGÄNGE PORT B
LDI akku, 0x00
OUT DDRB, akku
COM akku
OUT PORTB, akku ;alle Ausgänge ausschalten

;Portzuweisung EINGÄNGE PORT D
LDI akku, 0xFF
OUT DDRD, akku
OUT PIND, akku

;**********************************
; AD-Converter einstellen.
;**********************************

clr akku

;Teiler einstellen Vorteiler 8 und Wandler Aktiveren
LDI akku, 0b10000011
OUT ADCSRA, akku

;Kanal ADC0 Wählen und Refernspannung Nutzen
ldi akku, 0b10000000
OUT ADMUX, akku

;************************************************* ********************************
; MAINPROGRAMM
;************************************************* ********************************

Mainloop:
sbic PORTD, 0 ;Taste 2 gedrückt = Einzelmessung
rcall EINZEL
rjmp mainloop


;************************************************* ********************************
; Unterprogramm Einzelmessung
;************************************************* ********************************
EINZEL:
;Messung starten
IN akku, ADCSRA
ORI akku, 0b01000000
OUT ADCSRA, akku
warte:
sbic ADCSRA, 6
rjmp warte
ldi akku, ADCL
OUT PORTB, akku
ret

ADinterput:
nop
reti

danke im Vorraus :-)