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




zurück zur Beispiel-Übersicht