'* Name        : ADC-Summer
'* Function    : First Steps Example
'* Hardware    : aTeVaL Evaluation Board -
'* Compiler    : lunaAVR 2013.r6 (or newer)
'* Author      : rgf,
'* Date/Version: 06.12.2013
'* www         :
' µC-Belegung am Beispiel Atmega328p
' Poti:    PortC.0	!The bottom ADC jumper must be plugged on the aTeVaL!
' Summer:	PortD.7 !The solder bridge "SPKR" on the solder side must be closed!
avr.device = atmega328p   'Set controller type
avr.clock = 8000000       'To tell the compiler at what speed the controller works.
avr.stack = 64            'Set the program stack
' -> See "avr":
#library "Library/Adc.interface"
' -> See "Libraries":
'Alias the port pins of potentiometer and the summer with an identifier.
'This for readability in the source code.
#define POTI as PortC.0
#define BUZZER as PortD.7
' -> See "#defines":
'A variable unsigned 16-bit add to receive the ADC reading
dim adc_wert as word
POTI.mode	= input         'poti as input
BUZZER.mode	= output,low  'buzzer as output
' -> See "Port":
'We want the voltage value of the potentiometer on the ADC0 (pin 23 from controller)
'Configure the analog-digital converter of the controller.
'Division factor of the ADC, ADC frequency should be btw 50 and 200 kHz.
'In this case, divider 64, so then 8MHz / 64 = 125kHz
Adc.Clock	= 64
'AVCC (also +5V used as a voltage reference)
Adc.Reference = avcc
'select channel 0 (ADC0)
Adc.Channel = 0
'ADC enable
'After turning on a dummy conversion is recommended.
'start conversion
adc_wert = Adc.Value
'Main loop
  'read value
  adc_wert = Adc.Value
  'Wait so many microseconds as the ADC value is
  long_delay( adc_wert )
  'Invert pin of buzzer
'Sub program
procedure long_delay(us as word)
  'so many us wait as the function were given
  while us    'Loop to run as long as us <> 0
    waitus 1  'wait 1µs
    us--      'Variable "us" decrement