'************************************************************************** '* Name : ADC-Summer '* Function : First Steps Example '* Hardware : aTeVaL Evaluation Board - http://www.ehajo.de '************************************************************************** '* Compiler : lunaAVR 2015.r1 (or newer) '************************************************************************** '* Author : rgf, avr@myluna.de '* Date/Version: 04.04.2015 '* www : http://avr.myluna.de '************************************************************************** ' µC-Belegung am Beispiel Atmega328p ' Poti: PortC.0 !Der untere ADC-Jumper auf dem aTeVaL muss gesteckt sein! ' Summer: PortD.7 !Die Lötbrücke "SPKR" auf der Lötseite muss geschlossen sein! '************************************************************************** avr.device = atmega328p 'Controller-Typ festlegen avr.clock = 8000000 'Dem Compiler mitteilen mit welcher Taktrate der Controller läuft avr.stack = 64 'Den Programmstack einstellen ' -> Siehe "avr": http://avr.myluna.de/doku.php?id=de:avr #library "Library/Adc.interface" ' -> Siehe "Libraries": http://avr.myluna.de/doku.php?id=de:libraries 'Die Port-Pins von Poti und Summer mit einem Bezeichner 'versehen. Dies zur besseren Lesbarkeit im Quelltext #define POTI as PortC.0 #define SUMMER as PortD.7 ' -> Siehe "#defines": http://avr.myluna.de/doku.php?id=de:define 'Eine Variable ohne Vorzeichen mit 16 Bit anlegen zur Aufnahme des ADC-Messwerts dim adc_wert as word POTI.mode = input 'Poti als Eingang SUMMER.mode = output,low 'Summer als Ausgang ' -> Siehe "Port": http://avr.myluna.de/doku.php?id=de:port 'Wir wollen den Spannungswert des Potis über den ADC0 einlesen (Pin 23 vom Controller) 'Den Analog-Digitalwandler des Controllers konfigurieren. 'Teilungsfaktor des ADC, ADC-Frequenz soll zw. 50 und 200kHz liegen. 'In diesem Fall Teiler 64, also dann 8MHz / 64 = 125kHz Adc.Clock = 64 'AVCC (also +5V als Spannungsreferenz verwenden) Adc.Reference = avccCap 'Channel 0 (ADC0) auswählen Adc.Channel = 0 'ADC einschalten Adc.Enable 'Nach dem Einschalten wird eine Dummy-Wandlung empfohlen 'Wandlung starten void Adc.Value 'Hauptschleife do 'Messwert lesen adc_wert = Adc.Value 'Warten so viele µs, wie der ADC-Wert ist long_delay( adc_wert ) 'Pin des Summers invertieren SUMMER.toggle loop 'Unterprogramm procedure long_delay(us as word) 'so viele us warten wie der Funktion uebergeben wurden while us 'Schleife solange ausführen wie us <> 0 ist waitus 1 '1µs warten us-- 'Variable "us" dekrementieren wend endproc