adc.c

gehe zur Dokumentation dieser Datei
00001 /****************************************************************************/
00025 /*****************************************************************************
00026 *                                                                            *
00027 *   This program is free software; you can redistribute it and/or modify     *
00028 *   it under the terms of the GNU General Public License as published by     *
00029 *   the Free Software Foundation; either version 2 of the License, or        *
00030 *   any later version.                                                       *
00031 *                                                                            *
00032 *****************************************************************************/
00033 #include "asuro.h"
00034 
00035 
00036 
00037 /****************************************************************************/
00080 int   Batterie (
00081   void)
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 }
00091 
00092 
00093 
00094 /****************************************************************************/
00128 void  LineData (
00129   unsigned int  *data)
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 }
00165 
00166 
00167 
00168 /****************************************************************************/
00208 void  OdometrieData (
00209   unsigned int  *data)
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