Entprellen von Schalter mit Interrupt und PinChange

Hi Leute,

ich habe hier folgendes Problem ich habe unter Arduino einen Attiny84 so programmiert, das er über einen simplen Schalter einen Interrupt auslöst.

Der Schalter wird nun geschlossen und geöffnet. Ich frage nur auf PinChange ab. Also beim Betätigen des Schalter wird der Interrupt gestartet.

Nun möchte ich gerne jeweils eine Ausgabe durch den Controller bekommen für folgende 2 Tätigkeiten:

  1. Der Schalter wird geöffnet und wieder geschlossen.
  2. Der Schalter wird nur geöffnet und bleibt offen stehen.

Problem dabei ist nun das der Schalter auch klappern kann, als relativ schnell auf und zu springen kann. Das soll durch den Controller nicht ausgewertet werden.

Ich habe dafür bisher folgenden Code unter Arduino geschrieben:

ISR (PCINT0_vect) {
volatile unsigned long now;
now = millis();
if (now < inttime) { return;}

inttime = now + 2000;
flag=1;

}

void setup() {
setPrescaler(0); // div 1, i.e. speed up to 8 MHz

delay(500);

ADCSRA &= ~ bit(ADEN); // disable the ADC
bitSet(PRR, PRADC); // power down the ADC
PRR = bit(PRTIM1) | bit(PRUSI) | bit(PRADC); // only keep timer 0 going

pinMode(DIO1, INPUT); //set the pin to input
digitalWrite(DIO1, HIGH); //use the internal pullup resistor
PCMSK0 |= (1<<PCINT2); // tell pin change mask to listen to (DIO1)
GIMSK |= (1<<PCIE0); // enable PCINT interrupt in the general interrupt mask

sei();

}

Der Rest des Codes ist unerheblich.

Wer hat da eine gute Idee wie man das Entprellen vernünftig wegbekommt?

Vielen Dank.

Gruß kami

Du kannst nicht in der Interruptfunktion mit Software entprellen. Du muß elektrisch entprellen entweder durch ein RC-Glied oder ein IC zB den MC14490
Grüße Uwe

Hi,

okay wie sollte ich das denn am besten aufbauen? Also per Software geht das echt nicht?

Wie muss ich RC auslegen?

Gruß kami

Also per Software geht das echt nicht?

Natürlich kann man per Software besser entprellen als durch Elektronik.
Aber nicht (allein) in der ISR, da diese ja nicht mehr drankommt, wenn der Taster sich beruhigt hat.

Elektrisches Entprellen braucht man nur, wenn das Signal nicht in einen µC geht, sondern direkt ( z.B. in Zähl-IC's ) elektrisch verwendet wird.

  1. Der Schalter wird geöffnet und wieder geschlossen.
  2. Der Schalter wird nur geöffnet und bleibt offen stehen.

Wie lang soll denn 1 und 2 sein ? Wann weisst du, dass Fall 2 gemeint ist ? Im Fall 1) soll die Taster-Funktion 2) noch nicht ausgeführt worden sein?

Ich sehe es nicht notwendig die Überwachung des Schalters über eine Interruptroutine realisieren zu müssen Pulling muß auch möglich sein und dann ist entprellen mit über SW kein Problem.
Grüße Uwe