switches.c

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

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