Kanał - ATNEL tech-forum
Wszystkie działy
Najnowsze wątki



Teraz jest 24 lut 2025, o 12:32


Strefa czasowa: UTC + 1





Utwórz nowy wątek Odpowiedz w wątku  [ Posty: 5 ] 
Autor Wiadomość
PostNapisane: 7 cze 2015, o 15:36 
Offline
Nowy
Avatar użytkownika

Dołączył(a): 20 lis 2012
Posty: 11
Lokalizacja: Kraków / Trzebinia
Pomógł: 0

Witam,
napisałem taki program testowy do klawiatury matrycowej 4x3.
Składnia: [ Pobierz ] [ Ukryj ]
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.


Problem polega na tym, że gdy wcisnę klawisz na przecięciu trzeciej kolumny z pierwszym wierszem, to do zmiennej klawisz wpisywana jest wartość klawisza pierwszego (czyli K1/W1).
Gdy przerobiłem program tak aby sprawdzać kolumny a nie wiersze, problem był podobny tylko z innym przyciskiem.
Wiem, że kod nie jest okazem optymalizacji, i że można to zrobić inaczej. Jednak interesuję mnie przyczyna wadliwego działania.



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 7 cze 2015, o 16:44 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 29 sty 2012
Posty: 777
Lokalizacja: Karpicko k. Wolsztyna
Pomógł: 197

Dla testu spróbuj ustawić małe opóźnienie między ustawieniem stanów na kolumnach a odczytem wierszy
Składnia: [ Pobierz ] [ Ukryj ]
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.


Autor postu otrzymał pochwałę


Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 7 cze 2015, o 16:57 
Offline
Nowy
Avatar użytkownika

Dołączył(a): 20 lis 2012
Posty: 11
Lokalizacja: Kraków / Trzebinia
Pomógł: 0

Dzięki za odpowiedź.
Po dodaniu opóźnień program działa poprawnie.
Jak to rozumieć? Wynik warunku if zostawał prawdziwy po zmianie na odczyt innej kolumny?



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 7 cze 2015, o 17:10 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 29 sty 2012
Posty: 777
Lokalizacja: Karpicko k. Wolsztyna
Pomógł: 197

Po wpisaniu jakiś stanów do rejestrów procesora musi minąć troszkę czasu aby te stany faktycznie pojawiły sie na odpowiednich wyjściach. Tak to w skrócie można wytłumaczyć.

Opóźnienie 10us jest troszkę za duże i spokojnie wystarczyło by mniejsze. Podczas prób z klawiaturą matrycową z wykorzystaniem charlieplexingu wystarczyło jak dałem opóźnienie o wartości jednego taktu zegara za pomocą asemblerowego polecenia nop
Składnia: [ Pobierz ] [ Ukryj ]
język asm
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.


Autor postu otrzymał pochwałę


Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 7 cze 2015, o 21:15 
Offline
Nowy
Avatar użytkownika

Dołączył(a): 20 lis 2012
Posty: 11
Lokalizacja: Kraków / Trzebinia
Pomógł: 0

Zastąpiłem opóźnienia 10us tymi pustymi instrukcjami (cztery x nop) i wystarczyło.
Dzięki jeszcze raz.



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
Wyświetl posty nie starsze niż:  Sortuj wg  
Utwórz nowy wątek Odpowiedz w wątku  [ Posty: 5 ] 

Strefa czasowa: UTC + 1


Kto przegląda forum

Użytkownicy przeglądający ten dział: Brak zidentyfikowanych użytkowników i 3 gości


Nie możesz rozpoczynać nowych wątków
Nie możesz odpowiadać w wątkach
Nie możesz edytować swoich postów
Nie możesz usuwać swoich postów
Nie możesz dodawać załączników

Szukaj:
Skocz do:  
cron
Sitemap
Technologię dostarcza phpBB® Forum Software © phpBB Group phpBB3.PL
phpBB SEO