adc.c

gehe zur Dokumentation dieser Datei
00001 /****************************************************************************/
00032 /*****************************************************************************
00033 *                                                                            *
00034 *   This program is free software; you can redistribute it and/or modify     *
00035 *   it under the terms of the GNU General Public License as published by     *
00036 *   the Free Software Foundation; either version 2 of the License, or        *
00037 *   any later version.                                                       *
00038 *                                                                            *
00039 *****************************************************************************/
00040 #include "asuro.h"
00041 
00042 
00043 
00044 /****************************************************************************/
00083 int   Battery (
00084   void)
00085 {
00086   int   ec_bak = autoencode;            // Sichert aktuellen Zustand
00087   int   data;
00088 
00089   /*
00090      Autoencode-Betrieb vom ADC-Wandler unterbinden.
00091   */
00092   autoencode = FALSE;
00093 
00094   ADMUX = (1 << REFS0) | (1 << REFS1) | BATTERIE; // interne 2.56V Referenz
00095                                                   // Ref. mit ext. Kapazitaet
00096   ADCSRA |= (1 << ADSC);                // Starte AD-Wandlung
00097   while (!(ADCSRA & (1 << ADIF)))       // Ende der AD-Wandlung abwarten
00098     ;
00099   ADCSRA |= (1 << ADIF);                // AD-Interupt-Flag zuruecksetzen
00100   data = ADCL + (ADCH << 8);            // Ergebnis als 16-Bit-Wert
00101   /*
00102      Autoencode-Betrieb vom ADC-Wandler wiederherstellen.
00103   */
00104   autoencode = ec_bak;
00105   return data;
00106 }
00107 
00108 
00109 
00110 /****************************************************************************/
00144 void  LineData (
00145   unsigned int  *data)
00146 {
00147   int   ec_bak = autoencode;            // Sichert aktuellen Zustand
00148 
00149   /*
00150      Autoencode-Betrieb vom ADC-Wandler unterbinden.
00151   */
00152   autoencode = FALSE;
00153 
00154   /*
00155      Linken Linien-Sensor lesen
00156   */
00157   ADMUX = (1 << REFS0) | IR_LEFT;       // Referenz mit externer Kapazitaet
00158   Sleep (10);
00159   ADCSRA |= (1 << ADSC);                // Starte AD-Wandlung
00160   while (!(ADCSRA & (1 << ADIF)))       // Ende der AD-Wandlung abwarten
00161     ;
00162   ADCSRA |= (1 << ADIF);                // AD-Interupt-Flag zuruecksetzen
00163   data [0] = ADCL + (ADCH << 8);        // Ergebnis als 16-Bit-Wert
00164 
00165   /*
00166      Rechten Linien-Sensor lesen
00167   */
00168   ADMUX = (1 << REFS0) | IR_RIGHT;      // Referenz mit externer Kapazitaet
00169   Sleep (10);
00170   ADCSRA |= (1 << ADSC);                // Starte AD-Wandlung
00171   while (!(ADCSRA & (1 << ADIF)))       // Ende der AD-Wandlung abwarten
00172     ;
00173   ADCSRA |= (1 << ADIF);                // AD-Interupt-Flag zuruecksetzen
00174   data [1] = ADCL + (ADCH << 8);        // Ergebnis als 16-Bit-Wert
00175 
00176   /*
00177      Autoencode-Betrieb vom ADC-Wandler wiederherstellen.
00178   */
00179   autoencode = ec_bak;
00180 }
00181 
00182 
00183 
00184 /****************************************************************************/
00221 void  OdometryData (
00222   unsigned int  *data)
00223 {
00224   int   ec_bak = autoencode;            // Sichert aktuellen Zustand
00225 
00226   /*
00227      Autoencode-Betrieb vom ADC-Wandler unterbinden.
00228   */
00229   autoencode = FALSE;
00230   /*
00231      Vorbereitung zum lesen der Odometrie-Sensoren.
00232   */
00233   DDRC &= ~((1 << PC0) | (1 << PC1));   // Port auf Input=>Back-LEDs gehen aus
00234   ODOMETRIE_LED_ON;                     // Odometrie-LED's einschalten
00235 
00236   /*
00237      Linken Odometrie-Sensor lesen
00238   */
00239   ADMUX = (1 << REFS0) | WHEEL_LEFT;    // Referenz mit externer Kapazitaet
00240   ADCSRA |= (1 << ADSC);                // Starte AD-Wandlung
00241   while (!(ADCSRA & (1 << ADIF)))       // Ende der AD-Wandlung abwarten
00242     ;
00243   ADCSRA |= (1 << ADIF);                // AD-Interupt-Flag zuruecksetzen
00244   data [0] = ADCL + (ADCH << 8);        // Ergebnis als 16-Bit-Wert
00245 
00246   /*
00247      Rechten Odometrie-Sensor lesen
00248   */
00249   ADMUX = (1 << REFS0) | WHEEL_RIGHT;   // Referenz mit externer Kapazitaet
00250   ADCSRA |= (1 << ADSC);                // Starte AD-Wandlung
00251   while (!(ADCSRA & (1 << ADIF)))       // Ende der AD-Wandlung abwarten
00252     ;
00253   ADCSRA |= (1 << ADIF);                // AD-Interupt-Flag zuruecksetzen
00254   data [1] = ADCL + (ADCH << 8);        // Ergebnis als 16-Bit-Wert
00255 
00256   /*
00257      Autoencode-Betrieb vom ADC-Wandler wiederherstellen.
00258   */
00259   autoencode = ec_bak;
00260 }

Erzeugt am Sun Nov 18 18:24:52 2007 für ASURO Library von  doxygen 1.5.1-p1