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)
danke im VorrausCode:.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![]()
Lesezeichen