Pages: [1]   Go Down
Author Topic: Entprellen von Schalter mit Interrupt und PinChange  (Read 1002 times)
0 Members and 1 Guest are viewing this topic.
0
Offline Offline
Newbie
*
Karma: 1
Posts: 24
Arduino rocks
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

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
Logged

Forum Moderator
BZ (I)
Offline Offline
Brattain Member
*****
Karma: 271
Posts: 21879
+39 349 2158303
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

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
Logged

0
Offline Offline
Newbie
*
Karma: 1
Posts: 24
Arduino rocks
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Hi,

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

Wie muss ich RC auslegen?

Gruß kami
Logged

Germany
Online Online
Faraday Member
**
Karma: 59
Posts: 3071
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

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?
Logged

Forum Moderator
BZ (I)
Offline Offline
Brattain Member
*****
Karma: 271
Posts: 21879
+39 349 2158303
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

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
Logged

Pages: [1]   Go Up
Jump to: