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



Teraz jest 20 maja 2026, o 12:03


Strefa czasowa: UTC + 1





Utwórz nowy wątek Odpowiedz w wątku  [ Posty: 14 ] 
Autor Wiadomość
PostNapisane: 12 lut 2016, o 11:34 
Offline
Użytkownik

Dołączył(a): 28 lis 2014
Posty: 79
Pomógł: 0

Witam. Chce uruchomić klawiaturę matrycową 5x5 z racji tego że temat dla mnie jako osoby początkującej jest dość kłopotliwy więc postanowiłem zrobić klawiaturkę matrycową 3x3 na stykówce. Czyli 6 wyprowadzeń do procesora. Trochę poczytałem o samej zasadzie działania i samą metodę rozumiem jak sprawdza się który klawisz wciśnięty. Jeśli chodzi o obsługę programową jest już problem. Więc tak, napisałem krótki kod do sprawdzania tylko jednej kolumny. Program jest ten liniowy, każdy krok osobno jest wykonywany. Dokładnie wiem że jest on nie za dobry i nie będzie działał. Chciałbym tylko żeby koledzy nakierowali mnie mniej więcej w którą stronę iść.


Składnia: [ Pobierz ] [ Ukryj ]
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.




Proszę Was o naprowadzenie, nie wiem czy sposób w jaki próbuję napisać obsługę klawiatury jest dobry. Za wszelką pomoc z góry dziękuję.



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 12 lut 2016, o 12:54 
Offline
Nowy
Avatar użytkownika

Dołączył(a): 10 maja 2014
Posty: 10
Pomógł: 3

Cześć, przejrzyj ten wątek http://forum.atnel.pl/topic814.html a szczególnie zobacz sobie gif który wrzucił Mscichu to Ci rozjaśni bardziej koncepcje multipleksowania i sprawdzania klawiszy. W Twoim kodzie nie ma wystawiania kolejnych wyjść portu (przesunięcia bitowego), na wyjściu procesora tylko operujesz na jednym bicie portu zamiast trzech. Warto też abyś miał jakiś wyświetlacz żeby sprawdzać wartość wciśniętego klawisza



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 12 lut 2016, o 13:37 
Offline
Użytkownik

Dołączył(a): 28 lis 2014
Posty: 79
Pomógł: 0

No właśnie na tej animacji zrozumiałem zasadę działania klawiatury. Próbowałem jakby zrozumieć kod który jest podany w poradniku ale nie bardzo mi to wyszło. Dlatego zabrałem się za pisanie swojego bardziej prostego, a pokazałem w zasadzie tylko kod odpowiadający jednej kolumnie. Więc w moim przypadku dla klawiatury 3x3 trzeba by użyć dla jeszcze dwóch o podobnej konstrukcji.

------------------------ [ Dodano po: 29 minutach ]

Może wrzucę schemat:

Obrazek

I całą sekwencję dla trzech kolumn:

Składnia: [ Pobierz ] [ Ukryj ]
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 12 lut 2016, o 14:22 
Offline
Nowy
Avatar użytkownika

Dołączył(a): 10 maja 2014
Posty: 10
Pomógł: 3

Dodałbym jeszcze wystawienie pinów wyjściowych na stan wysoki PORTB |= (1<<PB0) | (1<<PB1) | (1<<PB2) po ustawieniu kierunków wyjściowych bo domyślnie są wszystkie w stanie niskim i będzie wykrywał Ci wszystkie klawisze za pierwszym przejściem a powinien tylko pierwszą kolumnę. Napisz cały kod i zrób testy. Jak będą problemy to pisz.



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 12 lut 2016, o 14:26 
Offline
Użytkownik

Dołączył(a): 28 lis 2014
Posty: 79
Pomógł: 0

Ok zmontuje wszystko i dam znać jakie efekty są :) dzięki :)



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 12 lut 2016, o 21:42 
Offline
Użytkownik

Dołączył(a): 28 lis 2014
Posty: 79
Pomógł: 0

No i zaczeły się problemy :/ o to kod jaki napisałem:

Składnia: [ Pobierz ] [ Ukryj ]
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.




Przesunięcie bitowe jest, sprawdziłem to miernikiem. Natomiast moim zdaniem sprawdzenie jest dość kiepskie. Po naciśnięciu przycisku nic się nie dzieje :/



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 13 lut 2016, o 14:22 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 11 mar 2014
Posty: 1475
Pomógł: 167

Na schemacie wyżej jest przypisanie klawiszy do PBx i PDx a w programie sterujesz portem C.

Jaki cel mają delay-e między poszczególnymi wierszami w ramach tej samej kolumny?

--
Pozdrawiam,
Robert



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 14 lut 2016, o 07:59 
Offline
Użytkownik

Dołączył(a): 28 lis 2014
Posty: 79
Pomógł: 0

Podłączeniem do PCx bo.tak na stylowe było wygodniej, schemat robiłem wcześniej a nie zrobiłem juz później zmiany. Jeśli chodzi o delay_ms to miałem tu na myśli drgania styków. Ma ktoś pomysł dlaczego jest brak reakcji na wciśnięcie przycisku? Sam kod, jest napisany poprawnie jeśli chodzi o koncepcje?



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 14 lut 2016, o 10:44 
Offline
Użytkownik

Dołączył(a): 26 lip 2015
Posty: 269
Pomógł: 34

Najpierw to wywal stąd te delaye przelicz ile pętla główna potrzebuje czasu aby zrobić obieg, ale zrobię to za ciebie potrzeba jej aż prawie 500ms :o . Po wywaleniu dealy'ów nie zmieniaj w ifach stanu portu PB0 tylko zrób sobie zmienną np uint8_t switch_flag i to ją ustaw na jeden kiedy zostanie wciśnięty przycisk i na samym końcu pętli zrób if'a który sprawdzi czy zmienna switch_flag jest równa 1 jeśli tak to zmień stan portu PB0 na przeciwny, wyzeruj zmienną switch_flag i daj tam delay_ms(500). Kod powinien tak wyglądać nie mniej jednak przyjrzyj się niemu i zastanów się dlaczego nie działało. ;)

Składnia: [ Pobierz ] [ Ukryj ]
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.


W przypadku kiedy zechcesz używać każdego przycisku z osobna to kod może wyglądać tak. ;)

Składnia: [ Pobierz ] [ Ukryj ]
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.

Ten delay 500ms jest po to aby warunek if nie wykonywał się cały czas dopóki nie póścimy przycisku. Oczywiście są lepsze sposoby na rozwiązanie tego problemu od mojego, ale to jest jeden z prostszych :D .


Autor postu otrzymał pochwałę


Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 14 lut 2016, o 12:06 
Offline
Użytkownik

Dołączył(a): 28 lis 2014
Posty: 79
Pomógł: 0

Dziękuję bardzo za cenna wskazówkę, właśnie o taką odpowiedź mi chodziło ;) wprowadze zmiany, przetestuje i dam zdam raport ;)



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 15 lut 2016, o 19:16 
Offline
Użytkownik

Dołączył(a): 28 lis 2014
Posty: 79
Pomógł: 0

Pierwsze co chciałbym podziękować koledze Bartek123 :D Wielkie dzięki :D

Kod działa, ale nie do końca. Nie rozumiem jednego zjawiska, a mianowicie. W tej formie jaką podał kolega Bartek123

Składnia: [ Pobierz ] [ Ukryj ]
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.


Działają dwa wiersze, pierwszy podłączony do PD0 nie działa. Zaczołem szukać co jest grane, no i za komentowałem sprawdzanie wiersza pierwszego:

Składnia: [ Pobierz ] [ Ukryj ]
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.


No i zauważyłem, że działa tylko jeden wiersz. No to wymyśliłem sobie, że dodam przed PD0 sprawdzenie jakiegoś innego wiersza, zupełnie nie podłączonego do nieczego :P

Składnia: [ Pobierz ] [ Ukryj ]
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.


Ku mojemu zdziwieniu, wiersz pierwszy nagle działa. Analizowałem kod, ale nie zauważyłem co jest powodem takiego działania :) Może ktoś z Was będzie miał jakiś pomysł :P



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 15 lut 2016, o 20:15 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 11 mar 2014
Posty: 1475
Pomógł: 167

Cytuj:
Pierwsze co chciałbym podziękować koledze Bartek123 :D Wielkie dzięki :D

A kliknięcie pomógł, to nie łaska koledze dać?

--
Pozdrawiam,
Robert



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 15 lut 2016, o 20:36 
Offline
Użytkownik

Dołączył(a): 26 lip 2015
Posty: 269
Pomógł: 34

Skąd wiesz, że działa :) przecież w kodzie niema żadnej reakcji na to czy wciśnięty jest przycisk ;) Pokaż pełny kod z np zmienieniem stanu diody czy coś bo tak ciężko powiedzieć.



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 16 lut 2016, o 11:35 
Offline
Użytkownik

Dołączył(a): 28 lis 2014
Posty: 79
Pomógł: 0

rskup napisał(a):
Cytuj:
A kliknięcie pomógł, to nie łaska koledze dać?


Już poszło :P

A o to kod w całości jaki mam :

Składnia: [ Pobierz ] [ Ukryj ]
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.



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: 14 ] 

Strefa czasowa: UTC + 1


Kto przegląda forum

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


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:  
Sitemap
Technologię dostarcza phpBB® Forum Software © phpBB Group phpBB3.PL
phpBB SEO