Go Down

Topic: Entprellen von Schalter mit Interrupt und PinChange (Read 1 time) previous topic - next topic

kami83

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

uwefed

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

kami83

Hi,

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

Wie muss ich RC auslegen?

Gruß kami

michael_x

Quote
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.

Quote

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?

uwefed

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

Go Up
 

Quick Reply

With Quick-Reply you can write a post when viewing a topic without loading a new page. You can still use bulletin board code and smileys as you would in a normal post.

Warning: this topic has not been posted in for at least 120 days.
Unless you're sure you want to reply, please consider starting a new topic.

Note: this post will not display until it's been approved by a moderator.
Name:
Email:

shortcuts: alt+s submit/post or alt+p preview