-
Data: 2020-08-23 15:38:45
Temat: Re: 74HCT245 jako port wejściowy - nie działa, choć powinien
Od: Atlantis <m...@w...pl> szukaj wiadomości tego autora
[ pokaż wszystkie nagłówki ]Z ciekawości wykonałem nową wersje modułu, w którym układ 74HCT245 jest
podłączony dokładnie tak samo, jak w tym drugim, działającym urządzeniu.
Przy okazji poprawiłem trochę sposób prowadzenia ścieżki zasilania i
pola masy. Okazało się jednak, że to nie tutaj leżała przyczyna.
Zacząłem jeszcze raz analizować sytuację i nagle mnie olśniło - byłem w
stanie odczytywać wartość portu i to nie powodowało problemów. Jednak
gdy tylko stosowałem swoją bibliotekę (która również czyta z tego portu)
urządzenie zaczęło działać niestabilnie i resetować się. Istniała jednak
jeszcze jedna różnica - testowa funkcja odczytująca wartość portu była
wywoływana raz na sekundę. Natomiast funkcja sprawdzająca wartość
przycisku jest wywoływana w każdym przebiegu pętli.
Zrobiłem więc eksperyment - ustawiłem programowy timer, powodujący
wywoływanie funkcji key_update() co jakiś 40 ms. Okazuje się, że problem
przestał występować. Nie pojawiają się też "fałszywe" wciśnięcia
przycisków. Na dobrą sprawę mógłbym to tak zostawić, nawet upraszczając
bibliotekę, bo to opóźnienie załatwia sprawę debouncingu.
Tyle tylko, że sprawa nie daje mi spokoju. Dlaczego tak się dzieje?
Dlaczego w drugim urządzeniu, opartym na tej samej architekturze, mogę
wywoływać funkcję key_update() z pętli głównej i nic się nie dzieje, a w
drugim występują takie problemy i trzeba stosować timer?
Mogę od razu obalić teorię, która w pierwszym momencie przychodzi do
głowy - to działające urządzenie ma jeszcze mniej "zajętą" pętlę główną,
więc nie ma tam niczego, co mogłoby robić za naturalne opóźnienie.
I jeszcze jedno: funkcja key_update jest wywoływana kilkukrotne - za
każdym razem przyjmując jako argument adres do struktury odnoszącej się
do jednego z przycisków. Przy każdym wywołaniu sprawdzany jest port.
Jednak wielokrotne wywołania nie są najwyraźniej problemem same w sobie,
bo wspomniany wcześniej timer programowy również wywołuje funkcję
trzykrotnie.
Następne wpisy z tego wątku
- 23.08.20 16:09 Atlantis
- 23.08.20 18:43 Atlantis
- 25.08.20 18:00 Atlantis
- 25.08.20 18:42 J.F.
- 25.08.20 20:36 Atlantis
- 28.08.20 11:03 J.F.
Najnowsze wątki z tej grupy
- e-paper
- 60 mA dużo czy spoko?
- Dziwne zachowanie magistrali adresowej w 8085
- Współczesne mierniki zniekształceń nieliniowych THD audio, produkują jakieś?
- Jaki silikon lub może klej?
- Smar do video
- Litowe baterie AA Li/FeS2 a alkaliczne
- "ogrodowa linia napowietrzna"
- jaki zasilacz laboratoryjny
- jaki zasilacz laboratoryjny
- Puszka w ziemię
- T-1000 was here
- Ściąganie hasła frezem
- Koszyk okrągły, walec 3x AA, na duże paluszki R6
- Brak bolca ochronnego ładowarki oznacza pożar
Najnowsze wątki
- 2025-02-17 Kraków => MS Dynamics 365BC/NAV Developer <=
- 2025-02-17 Chrzanów => Programista NodeJS <=
- 2025-02-17 Warszawa => Node.js / Fullstack Developer <=
- 2025-02-17 Białystok => System Architect (Java background) <=
- 2025-02-17 Białystok => Solution Architect (Java background) <=
- 2025-02-17 Gliwice => Team Lead / Tribe Lead FrontEnd <=
- 2025-02-17 Gdańsk => PHP Developer <=
- 2025-02-17 Warszawa => Senior ASP.NET Developer <=
- 2025-02-17 Gliwice => Business Development Manager - Network and Network Security
- 2025-02-17 Mińsk Mazowiecki => Area Sales Manager OZE <=
- 2025-02-17 Odśnieżanie samochodu
- 2025-02-17 Katowice => Regionalny Kierownik Sprzedaży (OZE) <=
- 2025-02-17 Dęblin => JavaScript / Node / Fullstack Developer <=
- 2025-02-17 Pompiarze...
- 2025-02-16 PV teraz