erstellt
05.07.2010
|
Analogeingang
|
Erster Test mit der Beschaltung eines
Analoeingang und drei Digitalausgängen. |
Bei
diesem Versuch wird ein Analogeingang mit einer
variablen Spannung
beaufschlagt, und je nach Höhe der Spannung
ein bis
drei Led's
an den Digitalausgängen zum Leuchten gebracht.
Als Analoge Eingangsspannung wird eine Spannung aus
der 5 Volt
Betriebsspannung über ein Potentiometer zwischen 0 und
5 V
geregelt und dem Eingang PC0 zugeführt.
PC0 ist Standardmäßig ein Digitaleingang, wird aber
duch eine Programmierungs-Anweisung als Analogeingang
deklariert.
Der Analogeingang arbeitet mit einer Auflösung von 10
Bit,
dass bedeutet eine Auflösung von 1024 Schritte,
ergo
habe ich
bei einer Spannung von 5 Volt eine Spannungsauflösung
von 4,8
Millivolt pro Schritt. |
|
Plan
vergößern |
|
|
|
|
|
Schaltungsbeschreibung:
|
Die
Spannungsversorgung des
Mikroprozessors muß 5 Volt
betragen , diese erhalten wir dadurch dass
beispielsweise eine
Eingangsspannung von 6 bis 30 Volt
durch einen Festspannungsregler (LM7805) auf 5 Volt
runter geregel wird.
Der
Condensator C1
dient zur Glättung der Betriebsspannung
Pin 1 (
Reset ) am Atmega
wird über einen 10 KOhm Widerstand
Standarmäßig auf Plus (VCC) gelegt , und sollte nur
beim beschreiben (Programmieren) auf Minus liegen.
Pin 7
(VCC) wird auf Plus 5
Volt gelegt als Versorgungsspannung des Prozessors
Pin 8
(GND) Minus der
Versorgungsspannung
Pin 14
(PB0) Digitalausgang
für LED 1
Pin 15
(PB1) Digitalausgang
für LED 2
Pin 16
(PB2) Digitalausgang
für LED 3
Pin 20
(VCC) wird auf Plus
5 Volt gelegt als Versorgungsspannung des Prozessors
Pin 22
(GND) Minus der
Versorgungsspannung
Pin 23
(PC0 / ADC0 )
Analogeingang
|
So sieht die Schaltung
aus
|
|
Und
so sieht das dazugehörige Programm aus.:
|
Erweiterung auf 5 Digitale
Ausgänge
|
|
Hier das
Programm bei 5
Digitalausgänge
|
|
|
Der AD Wandler |
Die
folgenden Ausführungen gelten hier Explizit
für den Atmega 32
Prozessor ,sind aber bis auf wenige
Ausnahmen auch für den Atmega
8 und Atmega 16 zutreffend.
Die Atmega 32 Prozessoren haben
mehrere Analoge Eingänge ( ADC0 bis ADC7 )
,und einen Analog/Digitalumsetzer (A/ D
Wandler), wobei alle analogen
Eingänge auf einen internen A/D Wandler
führen und im sogenannten Multiplexverfahren
abgefragt werden.
Ein
Multiplexverfahren ist praktisch ein
Zeitliches hintereinander Abfragen
der Eingänge , das meist so schnell
geschieht das es
in der Realität nicht auffällt wenn das
Ergebnis
beispielsweise als Anzeige dienen soll, und
weil das Menschliche Auge,
und meist auch das Gehirn eine gewisse
Trägheit besitzt hat der
Betrachter den Eindruck alles würde Zeitgleich
geschehen.
Die
Analogeingänge haben eine
Auflösung von 10 Bit , das entspricht
1024 Werte,
bei
einer möglichen Eingangsspannung von max. 5
Volt entspricht das einer
Auflösung von 0,0048 Volt.
|
|
|
Mit
diesen analogen Eingängen kann man
Spannungen messen oder besser
gesagt vergleichen , dies
geschieht indem eine angelegte Spannung am
Analogeingang mit einer
festen Spannung die sogenannte Referenzspannung
verglichen wird. Das
Ergebnis wird als Digitaler Wert (10 Bit)
ausgegeben.
Die Referenzspannung die zum Vergleich
herangezogen wird kann intern
aus dem Atmega bezogen werden und beträgt in
diesem Fall immer 2,56
Volt oder aber extern am AREF Anschluß angelegt
werden, in diesem Fall
kann der Wert 0 bis 5 Volt betragen.
Aber Achtung !
Sollte die interne
Referenzspannung benutzt werden
darf auf keinen Fall eine Externe Spannung am
Anschluß AREF anliegen ,
weil dies evtl. das Ende des Atmega bedeuten
könnte.
Getestet hab ich
das allerdings noch nicht.
Beispiel:
Wir
legen eine Spannung von 5 Volt an ADC0 , diese
wird mit einer 5 Volt
Referenzspannung verglichen und als 10 Bit Wert
ausgegeben.
Der
Ausgabewert beträgt dann 1024.
Würden wir 2,5 Volt anlegen , hätten wir ein
Ausgangswert von 512
Beim
Atmega 32 und auch bei vielen anderen haben die
meisten Ports mehrere
Funktionen die je nach Bedarf konfiguriert
werden.
Standardmäßig dienen die Pin Anschlüsse 33
bis
40 ( Port A) beim Atmega 32 als Digitale
Ein/Ausgänge um sie als
Analoge Eingänge zu benutzen muss dies dem
Atmega natürlich
mitgeteilt werden, dies kann man über
Bascom Anweisungen
erledigen oder aber direkt in sogenannte
Register einstellen, hier wird
es am Beispiel der Registereinstellungen
vorgenommen (
Programm Zeile 8).
Zuvor müssen wir erst einmal die Eingänge die
benutzt werden
sollen als Eingänge definieren (Programm Zeile
7).
|
Der
Analog
/ Digital Wandler benötigt eine eigene
Spannungsversorgung Im
Plan unten sehen wir das der Anschluss AVCC mit
der Positiven
Spannungsversorgung verbunden ist, und auch der
GND neben den AVCC
Anschluss wurde zusätzlich belegt.Der Anschluss
AREF wurde ebenfalls mit
der Positiven Versorgungsspannung verbunden und
dient hier als 5 Volt
externe Referenzspannung.
Es besteht auch die Möglichkeit eine Interne von Controller zu
Verfügung gestellte Spannung von 2,54 Volt als Referenz zu nutzen ,
dazu müssen einige Bits im ADMUX Register gestellt werden , und am AREF
Eingang ( Pin 32 beim Atmega 32)muss mindestens ein kleiner Kondensator
ca 20 nF angeschlossen werden, sonst funktioniert diese Funktion nicht.
|
|
|
|
|
Zeile |
Programm |
Beschreibung |
1 |
$regfile
"m32.dat" |
Holt sich aus der
Datei
"m32def.dat" die Bauteil Spezifischen Informationen
wie
Anschlussbelegung Speichergröße usw. |
2 |
$crystal=1000000
|
Setzt die
Taktfrequenz auf
1 Mhz ( Default) |
3 |
Config
Lcd=16*2 |
Definiert das Display
in
Art und Größe |
4 |
Config
Lcdpin=Pin,Db4=Portc.3,Db5=Portc.2,Db6=Portc.1,Db7=Portc.6,Rs=Portc.5,E=Portc.4
|
Definiert die
Anschlussbelegung bzw, die Verbindungen zwischen
Display und Atmega |
5 |
On
ADC ADC_interrupt |
Legt die Bezeichnung
"ADC_Interrupt" für die Unteroutine fest die nach
jedem Messvorgang
angesprungen werden soll |
6 |
Sreg.7=1
|
Gibt die Globale
Interrupt's frei |
7 |
DDRA=&B00000000
|
DDR
für "Daten Richtungs Register"
in dem
Angegeben wird in welche Richtung die Ein/Ausgänge
wirksam werden
sollen das Zeichen "&B" gibt
dem
Prozessor an das nun die folgende Eingabe im
Binärformat
vorliegt, es gibt auch z.B. die Möglichkeit die Werte
im
Dezimalformat usw anzugeben .
Die folgenden Werte
geben den gesamten
Port an wobei eine 1 angibt das der jeweilige
Anschluß als
Ausgang interpretiert werden soll und eine 0 gibt an
das es sich um
einen Eingang handelt .
Es wird von rechts mit
den niederwertigen
Anschluss begonnen .
Also die Rechte Null enspricht
dem ADC0 usw. In
diesem Beispiel ist also ADCO bis ADC7 als Eingänge
definiert. |
8 |
ADMUX=&B00000000
|
Mit dem Register
ADMUX
werden Grundlegende Angaben zum Verhalten der
Analogeingänge gemacht.
Bit 7 + 6 =00 ( Externe Referenzspannung an PIN
AREF, hier 5 Volt)
Bit 7 + 6= 01 (Anschluss AVCC dient als Referenz)
Bit 7 + 6= 11 (Interne Referenzspannung von 2,56
Volt)
Bit 5 = 0 ( Auflösung des Messwert in 10 Bit also
1023 Werte)
Bit 5 = 1 ( Auflösung des Messwert in 8 Bit also 255
Werte)
Bit 3 ( Wird nur benötigt bei Vergleichsfunktionen
der verschiedenen
Analogeingänge )
Bit 2 + 1 + 0 = 000 ( Eingang ADC0 wird
abgefragt )
Bit 2 + 1 + 0 = 001 ( Eingang ADC1 wird
abgefragt )
Bit 2 + 1 + 0 = 010 (Eingang ADC2 wird
abgefragt )
usw. |
9 |
ADCSR=&B11101111
|
Mit dem Register
ADCSR
wird die Funktion des A/D Wandlers beeinflusst
Bit 7=1 schaltet den AD Wandler ein (Standard = 0 )
Bit 6=1 startet die Konvertierung
Bit 5=1 Freilaufmodus für permanente Konvertierung
Bit 3=1 Interrupt soll benutzt werden
Bit 2 + 1 + 0 legt die Samplerrate fest, also mit
welcher
Geschwindigkeit die Analogeingänge abgefagt werden.
Die Geschwindigkeit
wird aus dem Systemtakt des Atmegas gewonnen indem
dieser durch einen
Teiler den Takt reduziert. Dieser Teiler Faktor wird
durch BIT 2-1-0
bestimmt laut Datenblatt sollte die Samplerrate
zwischen 50 und 200 Khz
betragen.
Bit 2 + 1 + 0 = 010 Teilt Systemtakt durch 4
Bit 2 + 1 + 0= 111 teilt Systemtakt durch 128 |
10 |
Do
|
Anfang der
Hauptprogrammschleife |
11 |
cls
|
Display löschen |
12 |
Lcd
"Messwert"; ADCD |
Messwert als
Digitaler
Wert anzeigen ( Wert zwischen 0 und 1023) |
13 |
waitms
500 |
Pause |
14 |
loop
|
Schleifenrücksprung |
16 |
ADC_interrupt
|
Routine für Interrupt
der
nach Jedem Messvorgang angesprungen wird |
17 |
????
|
Irgend eine Funktion
(
noch nicht benutzt) |
18 |
Return
|
Aus Interrupt Routine
aussteigen |
|
Aktualisiert 20.12.2017
|
Copyright by ms 2009
|