Hallo,
die meisten Tasterprobleme werden meiner Erfahrung nach auch durch diese kleinen Modifikationen an PollSwitch gelöst:
Die Abfrage des INT1/PD3"=Pins sofort zu Beginn ist eher eine Performance=Frage und unterbindet das Anwerfen des Wandlers, wenn sowieso keiner der Taster gedrückt ist.Code:unsigned char PollSwitch (void){ unsigned int i; // Kehrt sofort zurück, falls kein Taster gedrückt ist if (PIND & SWITCHES) return 0; DDRD |= SWITCHES; // Port-Bit SWITCHES als Output SWITCH_ON; // Port-Bit auf HIGH zur Messung ADMUX = (1 << REFS0) | SWITCH; // AVCC reference with external capacitor Sleep (10); // Kondensator Zeit geben ADCSRA |= (1 << ADSC); // Starte AD-Wandlung while (!(ADCSRA & (1 << ADIF))); // Ende der AD-Wandlung abwarten ADCSRA |= (1 << ADIF); // AD-Interupt-Flag zuruecksetzen i = ADCL + (ADCH << 8); // Ergebnis als 16-Bit-Wert DDRD &= ~SWITCHES; // Pin SWITCHES als Eingang SWITCH_OFF; // Pull-Up abschalten Sleep (5); return ((10240000L / (long)i - 10000L) * 63L + 5000L) / 10000; }
Wesentlich wichtiger ist das Rücksetzen von PD3 auf Input&PullUpOff direkt nach der Messung.
In der ursprünglichen Version von PollSwitch wird lediglich SWITCH_OFF (=PORTD &= ~(1 << PD3)) durchgeführt, was PD3 als Output/GND hinterlässt. Damit lädt sich Kondensator C7 nach dem ersten Aufruf von PollSwitch nur noch auf die durch den Spannungsteiler R24/R23 (1k/1M) erzeugte Spannung auf (jedenfalls solange kein Taster gedrückt ist). Der nächste Aufruf von PollSwitch setzt PD3 zu Beginn zwar wieder auf HighPegel, wodurch eine zweckmäßige Messung prinzipiell gelingen kann -- Jedoch zeigt das Ergebnis wohl durch das träge Aufladen des Kondensators oftmals auch dann einen gedrückten Taster an, wenn tatsächlich keiner gedrückt ist.
Natürlich muss unter Umständen zusätzlich noch der bekannte Multiplikator (bei mir 63) angepasst werden, damit überhaupt sinnvolle Werte zurückgegeben werden können. Die jedoch mitunter auch nach dieser "Kalibrierung" verbleibende gröbste Verwirrung der Taster -- nämlich die Fehlanzeige eines gedrückten Tasters -- sollte durch das Rücksetzen von PD3 behoben werden.
HTH
Thomas







Zitieren

Lesezeichen