adc.c-Dateireferenz

Funktionen zum Auslesen der ADC-Wandler.
Gruppiert in die zusammenhaengenden Hardwareeinheiten.
(Batterie, Liniensensoren, Radsensoren)
Die Switches (Taster) werden in der Datei switches.c bearbeitet. Mehr ...

#include "asuro.h"

gehe zum Quellcode dieser Datei

Funktionen

int Batterie (void)
 Liest die Batteriespannung und gibt sie zurueck.
Es erfolgt keine Konvertierung in einen Spannungswert.
void LineData (unsigned int *data)
 Liest die Daten der beiden Linienverfolgungssensoren.
Die Linien-Beleuchtungs-LED kann sowohl an- als auch ausgeschaltet sein.
void OdometrieData (unsigned int *data)
 Liest die Daten der beiden Odometriesensoren (Radsensoren).
Diese Funktion schaltet die Odometrie-LED's immer an.
Diese Funktion schaltet die Back-LED's immer aus.


Ausführliche Beschreibung

Funktionen zum Auslesen der ADC-Wandler.
Gruppiert in die zusammenhaengenden Hardwareeinheiten.
(Batterie, Liniensensoren, Radsensoren)
Die Switches (Taster) werden in der Datei switches.c bearbeitet.

Siehe auch:
Defines fuer die Auswahl der ADC-Kanaele in asuro.h
BATTERIE, IR_LEFT, IR_RIGHT, WHEEL_LEFT, WHEEL_RIGHT
Der Kanal SWITCH wird hier nicht bearbeitet.
Version:
V--- - 10.11.2003 - Jan Grewe - DLR
Original Version von der ASURO CD

V--- - bis zum 07.01.2007 -
Bitte in Datei CHANGELOG nachsehen.

V001 - 13.01.2007 - m.a.r.v.i.n
+++ Alle Funktionen
Zerlegte Sourcen in einzelne Dateien fuer eine echte Library.

V002 - 22.01.2007 - Sternthaler
+++ Alle Funktionen
Kommentierte Version (KEINE Funktionsaenderung)

Definiert in Datei adc.c.


Dokumentation der Funktionen

int Batterie ( void   ) 

Liest die Batteriespannung und gibt sie zurueck.
Es erfolgt keine Konvertierung in einen Spannungswert.

Parameter:
keine 
Rückgabe:
10-Bit-Wert der Batteriespannung (Bereich 0..1023)
Fehler:
(Sternthaler) Die globale Variable autoencode muesste auch hier
temporaer auf FALSE gesetzt werden. Wie in LineData()
Die Spannung in Volt kann mit folgende Formel berechnet werden:
Umess[V] = (Uref / 2 ^ ADC-Bitsanzahl) * Batterie ()
Ubat[V] = ((R1 + R2) * Umess) / R2
Dabei sind:
Uref = 2.56 Volt
ADC-Bitsanzahl = 10 Bit
R1 = 12000 Ohm auf der ASURO-Platine
R2 = 10000 Ohm auf der ASURO-Platine
Oder einfach:
Ubat[V] = 0,0055 * Batterie ()
Beispiel:
(Nur zur Demonstration der Parameter/Returnwerte)
  // In Variable wert den 10-Bit-Bateriespannungswert lesen
  // und bei Unterschreitung von 810 eine alles_stop-Funktion
  // aufrufen.
  int wert;
  wert = Batterie ();
  if (wert < 810)             // 810 entsprechen ca. 4,455 Volt
    alles_stop ();            // Spannung zu klein, Akkus schonen

Definiert in Zeile 80 der Datei adc.c.

00082 {
00083   ADMUX = (1 << REFS0) | (1 << REFS1) | BATTERIE; // interne 2.56V Referenz
00084                                                   // Ref. mit ext. Kapazitaet
00085   ADCSRA |= (1 << ADSC);                // Starte AD-Wandlung
00086   while (!(ADCSRA & (1 << ADIF)))       // Ende der AD-Wandlung abwarten
00087     ;
00088   ADCSRA |= (1 << ADIF);                // AD-Interupt-Flag zuruecksetzen
00089   return ADCL + (ADCH << 8);            // Ergebnis als 16-Bit-Wert
00090 }

void LineData ( unsigned int *  data  ) 

Liest die Daten der beiden Linienverfolgungssensoren.
Die Linien-Beleuchtungs-LED kann sowohl an- als auch ausgeschaltet sein.

Parameter:
[out] data Zeiger auf die gelesenen Daten:
data[0] linker Sensor (Bereich 0..1023)
data[1] rechter Sensor (Bereich 0..1023)
Rückgabe:
nichts
Siehe auch:
Die globale Variable autoencode wird temporaer auf FALSE gesetzt und am Ende
der Funktion mit dem alten Wert restauriert.
Hinweis:
Die Linien-Beleuchtungs-LED kann vorher mit der Funktion FrontLED()
im aufrufenden Programmteil an- bzw. ausgeschaltet werden.
Beispiel:
(Nur zur Demonstration der Parameter/Returnwerte)
  unsigned int data [2];
  FrontLED (ON);
  LineData (data);
  if (data [0] > 100)         // 0 ist der linke Sensor ...
    tu_diese ();              // linker Sensor > 100
  if (data [1] < 50)          // ... 1 ist der rechte Sensor
    tu_das ();                // rechter Sensor < 50

Definiert in Zeile 128 der Datei adc.c.

00130 {
00131   int   ec_bak = autoencode;            // Sichert aktuellen Zustand
00132 
00133   /*
00134      Autoencode-Betrieb vom ADC-Wandler unterbinden.
00135   */
00136   autoencode = FALSE;
00137 
00138   /*
00139      Linken Linien-Sensor lesen
00140   */
00141   ADMUX = (1 << REFS0) | IR_LEFT;       // Referenz mit externer Kapazitaet
00142   Sleep (10);
00143   ADCSRA |= (1 << ADSC);                // Starte AD-Wandlung
00144   while (!(ADCSRA & (1 << ADIF)))       // Ende der AD-Wandlung abwarten
00145     ;
00146   ADCSRA |= (1 << ADIF);                // AD-Interupt-Flag zuruecksetzen
00147   data [0] = ADCL + (ADCH << 8);        // Ergebnis als 16-Bit-Wert
00148 
00149   /*
00150      Rechten Linien-Sensor lesen
00151   */
00152   ADMUX = (1 << REFS0) | IR_RIGHT;      // Referenz mit externer Kapazitaet
00153   Sleep (10);
00154   ADCSRA |= (1 << ADSC);                // Starte AD-Wandlung
00155   while (!(ADCSRA & (1 << ADIF)))       // Ende der AD-Wandlung abwarten
00156     ;
00157   ADCSRA |= (1 << ADIF);                // AD-Interupt-Flag zuruecksetzen
00158   data [1] = ADCL + (ADCH << 8);        // Ergebnis als 16-Bit-Wert
00159 
00160   /*
00161      Autoencode-Betrieb vom ADC-Wandler wiederherstellen.
00162   */
00163   autoencode = ec_bak;
00164 }

void OdometrieData ( unsigned int *  data  ) 

Liest die Daten der beiden Odometriesensoren (Radsensoren).
Diese Funktion schaltet die Odometrie-LED's immer an.
Diese Funktion schaltet die Back-LED's immer aus.

Parameter:
[out] data Zeiger auf die gelesenen Daten:
data[0] linker Sensor,
data[1] rechter Sensor. (Bereich 0..1023)
Rückgabe:
nichts
Fehler:
(Sternthaler) Die globale Variable autoencode muesste auch hier
temporaer auf FALSE gesetzt werden. Wie in LineData()
Hinweis:
Die Odometrie-Beleuchtungs-LED's muessen zur Messung der Odometrie-
sensoren wegen der Hardware im ASURO immer eingeschaltet sein.
Die Hardware ist so ausgelegt, dass dadurch allerdings die hinteren
Back-LED's ausgeschaltet werden.
Da die Odometrie-Beleuchtungs-LED's in dieser Funktion EIN-geschaltet
werden, funktionieren dann die Back-LED's nicht mehr. Sie koennen im
Programm nach dieser Funktion mit BackLED() bei Bedarf wieder
eingeschaltet werden.
Beispiel:
(Nur zur Demonstration der Parameter/Returnwerte)
  unsigned int data [2];
  OdometrieData (data);
  if (data [0] > data [1])    // 0 linker Sensor; 1 ist rechter Sensor
    fahre_links ();           // Ein bisschen nach links fahren
  if (data [0] < data [1])
    fahre_rechts ();          // Ein bisschen nach rechts fahren
  BackLED (ON, OFF);          // linke Back-LED mal wieder anschalten

Definiert in Zeile 208 der Datei adc.c.

00210 {
00211   /*
00212      Vorbereitung zum lesen der Odometrie-Sensoren.
00213   */
00214   DDRC &= ~((1 << PC0) | (1 << PC1));   // Port auf Input=>Back-LEDs gehen aus
00215   ODOMETRIE_LED_ON;                     // Odometrie-LED's einschalten
00216 
00217   /*
00218      Linken Odometrie-Sensor lesen
00219   */
00220   ADMUX = (1 << REFS0) | WHEEL_LEFT;    // Referenz mit externer Kapazitaet
00221   ADCSRA |= (1 << ADSC);                // Starte AD-Wandlung
00222   while (!(ADCSRA & (1 << ADIF)))       // Ende der AD-Wandlung abwarten
00223     ;
00224   ADCSRA |= (1 << ADIF);                // AD-Interupt-Flag zuruecksetzen
00225   data [0] = ADCL + (ADCH << 8);        // Ergebnis als 16-Bit-Wert
00226 
00227   /*
00228      Rechten Odometrie-Sensor lesen
00229   */
00230   ADMUX = (1 << REFS0) | WHEEL_RIGHT;   // Referenz mit externer Kapazitaet
00231   ADCSRA |= (1 << ADSC);                // Starte AD-Wandlung
00232   while (!(ADCSRA & (1 << ADIF)))       // Ende der AD-Wandlung abwarten
00233     ;
00234   ADCSRA |= (1 << ADIF);                // AD-Interupt-Flag zuruecksetzen
00235   data [1] = ADCL + (ADCH << 8);        // Ergebnis als 16-Bit-Wert
00236 }


Erzeugt am Wed Feb 14 16:10:02 2007 für ASURO Library von  doxygen 1.5.1-p1