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 }