switches.c

gehe zur Dokumentation dieser Datei
00001 /****************************************************************************/
00023 /*****************************************************************************
00024 *                                                                            *
00025 *   This program is free software; you can redistribute it and/or modify     *
00026 *   it under the terms of the GNU General Public License as published by     *
00027 *   the Free Software Foundation; either version 2 of the License, or        *
00028 *   any later version.                                                       *
00029 *                                                                            *
00030 *****************************************************************************/
00031 #include "asuro.h"
00032 
00033 
00034 
00035 /****************************************************************************/
00077 unsigned char PollSwitch (void)
00078 {
00079   unsigned int i;
00080   int ec_bak = autoencode;              // Sichert aktuellen Zustand
00081 
00082   /*
00083      Autoencode-Betrieb vom ADC-Wandler unterbinden.
00084   */
00085   autoencode = FALSE;
00086 
00087   DDRD |= SWITCHES;                     // Port-Bit SWITCHES als Output
00088   SWITCH_ON;                            // Port-Bit auf HIGH zur Messung
00089   ADMUX = (1 << REFS0) | SWITCH;        // AVCC reference with external capacitor
00090   Sleep (10);
00091 
00092   ADCSRA |= (1 << ADSC);                // Starte AD-Wandlung
00093   while (!(ADCSRA & (1 << ADIF)))       // Ende der AD-Wandlung abwarten
00094     ;
00095   ADCSRA |= (1 << ADIF);                // AD-Interupt-Flag zuruecksetzen
00096 
00097   i = ADCL + (ADCH << 8);               // Ergebnis als 16-Bit-Wert
00098 
00099   SWITCH_OFF;                           // Port-Bit auf LOW
00100   Sleep (5);
00101 
00102   /*
00103      Autoencode-Betrieb vom ADC-Wandler wiederherstellen.
00104   */
00105   autoencode = ec_bak;
00106 
00107   /*
00108     Die Original Umrechenfunktion von Jan Grewe - DLR wurder ersetzt durch
00109     eine Rechnung ohne FLOAT-Berechnungen.
00110   return  ((unsigned char) ((( 1024.0/(float)i - 1.0)) * 61.0 + 0.5));
00111 
00112     Wert 61L evtl. anpasssen, falls fuer K1 falsche Werte zurueckgegebn werden.
00113   */
00114   return ((10240000L / (long)i - 10000L) * 61L + 5000L) / 10000;
00115 }
00116 
00117 
00118 
00119 /****************************************************************************/
00150 void StartSwitch (void)
00151 {
00152   SWITCH_OFF;                           // Port-Bit auf LOW
00153   DDRD &= ~SWITCHES;                    // Port-Bit SWITCHES als INPUT
00154   MCUCR &= ~((1 << ISC11) | (1 << ISC10));  // Low level erzeugt Interrupt
00155   GICR |= (1 << INT1);                  // Externen Interrupt 1 zulassen
00156 }
00157 
00158 
00159 
00160 
00161 /****************************************************************************/
00179 void StopSwitch (void)
00180 {
00181   GICR &= ~(1 << INT1);                 // Externen Interrupt 1 sperren
00182 }

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