Istnieje kilka sposobów eliminacji drgań styków (posegregowane według skuteczność)

1. układy specjalizowane
2. metoda programowa
3. przez filtr RC (kondensator)

1. Układy specjalizowane:

zalety:

  • jest najbardziej skuteczną metodą
  • dodatkowe opcje jak np. wyłączenie wszytkich klawiszy pinem EN

wady:

  • najdroższa z metoda

Schemat podłączenia:

Przykładowy układ specjalizowany: MAX6818

Piny EN i CH nie są niezbędne (EN jak nie używamy podciągamy do masy)

Więcej informacji o układzie MAX6818:

 

2. Metoda programowa:

zalety:

  • bez ponoszenia dodatkowych koszów, możliwość dodania po wykonaniu urządzenia

wady:

  • zajmuje czas procesora, może być kłopotliwa w implementacji

przykładowy program dla adruino:

 

3. Przez filtr RC (kondensator)

zalety:

  • bardzo tania

wady:

  • nie gwarantuje 100% skuteczności
  • rozładowywanie kondensatora przyciskiem skraca jego żywotność
  • im bardzie skuteczna i bezpieczna metoda tym więcej elementów

Przykład implementacji:

Szerzej problem omówili:

Program w celu sprawdzenia skuteczności sprzętowej eliminacji drgania styków

Program w czasie rzeczywistym wychwytuje wszystkie zmiany stanu i wyrzuca je do serial portu, pomijając powtarzanie stanu po przekroczeniu 25 powtórzeń tego samego stanu:

Ograniczenia programu: program odczytuje tylko stan cyfrowy pinu (co zresztą powinno wystarczyć do obsługi przycisku, w sposób cyfrowy), nie reaguje na zmiany stanu w granicach poziomów logiczny TTL, czyli wtedy kiedy drgania następuje w granicach stanu wysokiego lub niskiego ale jeszcze go nie przekroczyły. Do tego celu należało by wykorzystać wejście analogowe jednak znacznie skomplikowało by to kod programu.

/*
Program do testowania sprzętowej eliminacji drgania styków

W celu wizualizacji wyników skorzystaj z kreślarki
Narzędzia -> Kreślarka

Domyślne podłączenie :

| pushButton
\
| GND

Pin pushButton jest domyślnie programowo podciągnięty do zasilania

Napisane przez AIIoT
Strona: http://aiiot-technology.eu
*/

#define SerialBaud 230400 // Szybkośc portu szeregowego
#define pushButton 4 // Wejście przycisku

byte static licz = 25; // Liczba powtórzeń tego samego stanu

byte i; // Zmienna licznika powtórzeń
bool buttonState, lastButtonState; // Zmienne do blokady powtórzeń

#if defined(ESP8266) // Ustawienia tylko dla ESP8266
#if(ARDUINO_ESP8266_NODEMCU||ARDUINO_ESP8266_WEMOS_D1MINI||ARDUINO_ESP8266_ESP01)// Nie wykonuj dla NODEMCU, WEMOS, ESP8266_ESP01
#else
#define LED_BUILTIN 2 // Zmiana pinu diody sygnalizacyjnej na wbudowaną diodę dla ESP-07, ESP-12
#endif
#endif

// the setup routine runs once when you press reset:
void setup() {
Serial.begin(SerialBaud); // inicjalizacja portu szeregoweko
// make the pushbutton’s pin an input:
pinMode(pushButton, INPUT_PULLUP); // pushButton jako pin wejściowy, z podciądniętym rezystorem
pinMode(LED_BUILTIN, OUTPUT); // LED_BUILTIN jako pin wyjściowy
Serial.print(„\r\nboot „);
}

// the loop routine runs over and over again forever:
void loop() {
// read the input pin:
lastButtonState = buttonState; buttonState = digitalRead(pushButton); // Zapis poprzedniego i odczy aktualnego stanu

if(lastButtonState == buttonState && i<licz)i++; // Zliczanie powtórzeń
if(lastButtonState != buttonState)i=0; // Zerowanie stanu licznika
if(lastButtonState != buttonState || i <licz){ // Wysyłanie zmiany wartości portem szeregowym
Serial.print(„\r\nStan: „);
Serial.print(buttonState);
}

digitalWrite(LED_BUILTIN,buttonState); // Sygnalizsacja wcisnięcia przycisku wbudowaną diodą
}

Dodaj komentarz

Twój adres e-mail nie zostanie opublikowany. Wymagane pola są oznaczone *


The reCAPTCHA verification period has expired. Please reload the page.