Spannung messen ( ADC ) mit dem Atmega8
Um eine Spannung mit dem Atmega8 messen zu können , gibt es den Befehl : GETADC
ADC = Analog to Digital Conversion ( Umsetzung von Spannung in einen Dezimalwert )
Als Beispiel wollen wir mal ein Poti zwischen '+' und '-' setzen und dann die Spannung regeln und messen :

Der Atmega8 hat für eine ADC-Messung 6 fest vorgesehene, mögliche Pins. ( C.0 bis C.5 )
Man kann sie zwar nicht gleichzeitig nutzen ( Multitasking ) , aber problemlos direkt nacheinander.
Da die Auflösung einer Messung 10Bit ( 0 - 1023 ) beträgt ,
benötigt man als Rückgabewert eine WORD Variable.
Wir müssen den/die Pin(s) , die wir zur ADC Messung nutzen wollen jetzt nicht wie sonst als Aus- oder Eingang definieren,
jedoch schon dem Atmega8 klar machen was wir wollen.
Dazu gibt es den Befehl :
config Adc = Single , Prescaler = Auto
Single bedeutet , das man nach Aufruf einer Messung automatisch einen Rückgabewert erhält.
Prescaler = Auto bedeutet , das der Atmega8 selber die beste
Geschwindigkeit im Verhältnis zur aktuellen Taktfrequenz
wählt.
Als nächstes muß man dem Atmega8 mitteilen das er auch loslegen soll mit : Start Adc
wobei jetzt noch nichts passiert :-)
Um Variablen nutzen zu können , müssen die quasi auch "angemeldet" werden.
Dim Messung as word
Um eine Variable also nutzen zu können , muß diese mit dem Befehl : DIM "aufgemacht / angemeldet" werden.
Übersetzt heißt das soviel wie :
Dimensioniere/Reserviere mir einen Speicherbereich der den Namen Messung hat und eine Größe eines Word sein soll
Der eigentliche Befehl um eine Messung zu starten lautet dann :
Messung = Getadc(0)
Die Zahl in der Klammer gibt an , an welchem Pin gemessen werden soll ,
wobei der Index des Pins = der Wert in der Klammer bedeutet.
Pin c.0 = Getadc(0)
Pin c1 = Getadc(1)
Pin c.2 = Getadc(2)
Pin c.3 = Getadc(3)
Pin c.4 = Getadc(4)
Pin c.5 = Getadc(5)
Hier mal ein komplettes Beispiel wobei wir den gemessenen Wert per RS232 an den PC senden :
$regfile = "m8def.dat"
$crystal = 8000000
$hwstack = 32
$swstack = 32
$framesize = 32
$baud = 9600
config Adc = Single , Prescaler = Auto
Start Adc
Dim Messung as word
Do
Messung = Getadc(0)
Print "Wert = " ; Messung
waitms 1000
loop
end