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



Teraz jest 11 lip 2026, o 16:40


Strefa czasowa: UTC + 1





Utwórz nowy wątek Odpowiedz w wątku  [ Posty: 8 ] 
Autor Wiadomość
PostNapisane: 25 lut 2014, o 15:10 
Offline
Użytkownik

Dołączył(a): 18 lut 2014
Posty: 53
Lokalizacja: Kraków
Pomógł: 0

Próbuję napisać program do skanowania klawiatury matrycowej 4x3. Korzystam z Atmega8A taktowana wewnętrzym oscylatorem 8MHz. Program ma zmienić stan pinu do którego podłączona jest dioda LEDx po naciśnięciu przycisku o numerze x.
Problem polega na tym że działa mi tylko pierwsza kolumna klawiatury, proszę o pomoc, wskazówkę, trop.
Oto mój kod:

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: 25 lut 2014, o 15:14 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 17 gru 2012
Posty: 729
Lokalizacja: Białystok
Pomógł: 12

Niech kolega popatrzy na ten sposób obsługi
Składnia: [ Pobierz ] [ Ukryj ]
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.


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

_________________
sig off ;(



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 25 lut 2014, o 17:56 
Offline
Użytkownik

Dołączył(a): 18 lut 2014
Posty: 53
Lokalizacja: Kraków
Pomógł: 0

Dziękuje za poradę ale wolałbym na początek bez przerwań/liczników itp.
Mógłby ktoś zerknąć okiem na kod, naprowadzić lub wskazać blędy?



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 25 lut 2014, o 18:08 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 17 gru 2012
Posty: 729
Lokalizacja: Białystok
Pomógł: 12

Bez przerwań też się da ;) Można ten multipleks zrobić w pętli for. W sumie nie tylko :)

_________________
sig off ;(



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

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

Wydaje mi się, że błąd masz w tej części
Składnia: [ Pobierz ] [ Ukryj ]
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.

Bo najpierw piny kolumn mają ustawiony stan wysoki. Ale po przekręceniu się pierwszej pętli for na tych pinach jest już stan niski, który już wciąż się na nich utrzymuje. Poza tym podczas odczytu wierszy stan niski powinien być tylko na jednej kolumnie.

Dlatego spróbuj może na początku pierwszej pętli for ustawiać na pinach kolumn stan wysoki po to żeby potem po ustawieniu na danej kolumnie stanu niskiego, ten stan był tylko na tej jednej kolumnie.
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: 25 lut 2014, o 18:24 
Offline
Użytkownik

Dołączył(a): 18 lut 2014
Posty: 53
Lokalizacja: Kraków
Pomógł: 0

Wprowadziłem poprawkę, jednak nadal działa tylko pierwsza kolumna, czyli funkcja zwraca mi tylko 1,4 lub 7



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 25 lut 2014, o 21:58 
Offline
Użytkownik
Avatar użytkownika

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

Przerobiłem troszkę ten program i jakoś działa.
Składnia: [ Pobierz ] [ Ukryj ]
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.

Jednak ja bym zrobił skanowanie klawiatury w przerwaniu od jakiegoś timera co kilkanaście lub kilkadziesiąt ms.


A tak poza tym to w ten sposób nie zeruje się bitów
Składnia: [ Pobierz ] [ Ukryj ]
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.
tylko w ten
Składnia: [ Pobierz ] [ Ukryj ]
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.


I po co do funkcji skan_klawiatury przekazujesz tyle argumentów skoro wszystkie argumenty to stałe dosłowne i w każdym wywołaniu tej funkcji są takie same. W tym przypadku można by zrobić tak i też będzie działać
Składnia: [ Pobierz ] [ Ukryj ]
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.

Chyba, że kolega ma jakiś inny plan co do tej funkcji i tylu argumentów.


Autor postu otrzymał pochwałę


Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 25 lut 2014, o 22:19 
Offline
Nowy

Dołączył(a): 23 lut 2014
Posty: 20
Lokalizacja: Szczecinek
Pomógł: 3

Tam wystarczy przerzucić "return" w funkcji skan_klawiatury przed ostatni nawias klamrowy i działa, przynajmniej u mnie.

Ale nie do końca bo cały czas mruga dioda pod PD7.



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

Strefa czasowa: UTC + 1


Kto przegląda forum

Użytkownicy przeglądający ten dział: Brak zidentyfikowanych użytkowników i 4 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:  
Sitemap
Technologię dostarcza phpBB® Forum Software © phpBB Group phpBB3.PL
phpBB SEO