Pierwsze kroki z CPLD (Xilinx CoolRunner II): obsługa przycisków
Jednym z istotnych elementów projektów zaprezentowanych w książce „Układy programowalne dla początkujących” jest obsługa przycisków. Pozornie prosta operacja w rzeczywistości sprawia wiele problemów, które wynikają ze zjawiska nazywanego „dzwonieniem styków”. Zjawisko to można zilustrować następująco. Niech będzie dany obwód elektryczny składający się z szeregowego połączenia rezystora i przycisku jak pokazano na rysunku 1. W sytuacji gdy nie jest naciśnięty przycisk, napięcie na przewodzie Key praktycznie odpowiada napięciu zasilającemu VCC.
Projekt przedstawiony w artykule bazuje na książce „Układy programowalne dla początkujących„, której autorem jest Andrzej Pawluczuk. |
Rys. 1. Schemat elektryczny obwodu przycisku dołączonego do wejścia CPLD
W momencie naciśnięcia przycisku, co odpowiada zwieraniu przewodu Key do masy, należałoby się spodziewać, że napięciu mierzone na nim względem masy będzie miało wartość 0V. W rzeczywistości w chwili naciśnięcia przycisku generowana jest seria połączeń i rozłączeń styków przycisku. Identyczne zjawisko występuje w momencie zwolnienia przycisku.
Z punktu widzenia człowieka pojedyncze naciśnięcie i zwolnienie przycisku dla układów cyfrowych generuje ciąg impulsów. Z ich punktu widzenia nastąpiło kilkukrotne naciśnięcie i zwolnienie przycisku. Obrazuje to rysunek 2, na którym zaznaczono odcinki czasu związane ze stabilnym stanem odpowiadające nienaciśniętemu przyciskowi, okresy związane z generacją ciągu impulsów wynikające z naciśnięcia oraz zwolnienia przycisku oraz czas odzwierciedlający stabilny stan związany z naciśniętym przyciskiem.
Rys. 2. Przykładowy przebieg napięcia na styku przycisku
Sklep KAMAMI.pl oferuje w promocyjnej cenie zestawy składające się z płytek ZL14PLD i ZL15PLD, ksiązki „Układy programowalne dla początkujących” oraz programatora ISP dla układów CPLD i FPGA firmy Xilinx. |
Zignorowanie zjawiska „dzwonienia styków” oznacza, że urządzenie zamiast pojedynczego (z punktu widzenia człowieka) impulsu związanego z naciśnięciem przycisku otrzyma ciąg impulsów (ich liczbę należy traktować jako losową). Chyba nikogo nie trzeba przekonywać o szkodliwości tego zjawiska.
Istnieje prosty sposób pozwalający na eliminację efektów związanych z dzwonieniem styków w momencie naciśnięcia i zwolnienia przycisku. W książkowych przykładach jest przedstawiony komponent PushButton (rozdział 5.4 książki „Układy programowalne dla początkujących”), którego zadaniem jest eliminacja zjawiska dzwonienia styków. Schemat blokowy komponentu przedstawia rysunek 3.
Rys. 3. Schemat blokowy komponentu PushButton