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 }