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



Teraz jest 29 lis 2024, o 14:27


Strefa czasowa: UTC + 1





Utwórz nowy wątek Odpowiedz w wątku  [ Posty: 20 ] 
Autor Wiadomość
PostNapisane: 3 lis 2013, o 21:11 
Offline
Nowy

Dołączył(a): 03 lis 2013
Posty: 11
Pomógł: 0

Witam!
Mam taki prosty układ na tiny2313:
Obrazek
Ma to być zamek na kod. Mój problem polega na tym, że nie wiem jak obsłużyć klawiaturę.
Przykładowo gdy wcisnę przycisk 4 zewrę porty PB6 i PB3.
Jak to będzie wyglądało w kodzie?

Pozdrawiam i proszę o pomoc.



Ostatnio edytowano 3 lis 2013, o 21:33 przez jaczkisr, łącznie edytowano 1 raz

Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 4 lis 2013, o 07:35 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 04 cze 2013
Posty: 79
Lokalizacja: Rybnik
Pomógł: 2

Port do którego podłączone są kolumny (PB1, PB2, PB3) ustawiasz sobie jako wyjściowy z podciągnięciem do Vcc, a wiersze klawiatury matrycowej ustawiasz jako wejścia ( PB4...PB7). Wykrywanie wciśniętego przycisku odbywa się na zasadzie przeszukiwania klawiatury, czyli włączasz kolumnę PB1 i sprawdzasz czy na którymś z wierszy pojawił się stan wysoki i postępujesz tak z wszystkim kolumnami w kółko. Można też układ zmodyfikować i wykorzystać zewnętrzne przerwanie które wyzwala przeszukiwanie klawiatury, mikrokontroler nie zajmuje się wtedy tylko szukaniem.

Dodam jeszcze, że powinieneś przy tranzystorze zastosować diodę żeby go nie upalić. Chyba że stosujesz jakiś driver np ULN2803.



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 4 lis 2013, o 08:50 
Offline
Nowy

Dołączył(a): 03 lis 2013
Posty: 11
Pomógł: 0

To ma być coś w tym stylu?

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: 4 lis 2013, o 09:32 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 04 cze 2013
Posty: 79
Lokalizacja: Rybnik
Pomógł: 2

Jeden z kolegów z forum opisał jak oprogramować taką klawiature, tutaj masz link: topic814.html

Najlepiej przeszukiwać w pętli for niż sprawdzać pojedynczo każdy klawisz. Dodatkowo musisz podciągnąć do Vcc (pull-up).



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 4 lis 2013, o 12:23 
Offline
Nowy

Dołączył(a): 03 lis 2013
Posty: 11
Pomógł: 0

Dobra poddaje się z tą klawiaturą, zrobię to podłączając każdy pin do minusa.
Obrazek

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

I mam taki pytanie odnośnie programu. Mam ustawione piny, jak zrobić if gdy przycisk został wciśnięty?



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 4 lis 2013, o 12:28 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 11 lut 2013
Posty: 376
Lokalizacja: Kłopoty-Stanisławy
Pomógł: 33

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


------------------------ [ Dodano po: 7 minutach ]

Chociaż jeszcze drgania styków by się przydało obsłużyć .... zwłaszcza że to zamek szyfrowy i dobrze byłoby się móc dostać do "sejfu" :)
Składnia: [ Pobierz ] [ Ukryj ]
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.


Podstawy obsługi przycisków sa bardzo fajnie opisane w Bluebook'u rozdział 5.3 str 177 (wdanie "miekkie")


Autor postu otrzymał pochwałę

_________________
50 znaków Atnela ....



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 4 lis 2013, o 14:33 
Offline
Nowy

Dołączył(a): 03 lis 2013
Posty: 11
Pomógł: 0

Dzięki, bardzo mi pomogłeś ale mam jeszcze dwa problemy.
Po pierwsze nie wiem jak podać prąd na tranzystor (PD5).
Po drugie nie wiem czy ten program będzie działał tak jak bym tego chciał, to znaczy:
ma zczytywać klawisze i przypisywać je do tablicy a potem sprawdzać czy ciąg w tablicy jest taki jak "pin" (36148).


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: 4 lis 2013, o 14:43 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 11 lut 2013
Posty: 376
Lokalizacja: Kłopoty-Stanisławy
Pomógł: 33

Na sam początek martwiłbym się raczej drganiami styków, bo jeśli jakoś ich nie ogarniesz i zostawisz inkrementację licznika w obecnej formie to prawie mogę zagwarantować, że nie uda Ci się wpisać poprawnego kodu do zamka.

A jeśli chodzi o "podanie prądu" to przeczytaj:

http://mirekk36.blogspot.com/2012/01/av ... stawy.html

------------------------ [ Dodano po: 1 minucie ]

po nagłówku domyślam się, że używasz Eclipse. Jeśli tak usuń F_CPU i ustaw w opcjach projektu częstotliwość.

_________________
50 znaków Atnela ....



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 4 lis 2013, o 15:18 
Offline
Nowy

Dołączył(a): 03 lis 2013
Posty: 11
Pomógł: 0

Co do drgań to wykonam to tak jak mi pokazałeś, teraz to pominąłem bo chciałem żeby było przejrzyście.
Inkrementacja licznika w C wygląda to chyba jak to zrobiłem, chyba, że to ma wyglądać tak? licznik + 1;
Jeśli chodzi o podanie prądu na pin PD5 to będzie: PORTD &= ~(1<<PD5);



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 4 lis 2013, o 17:24 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 11 lut 2013
Posty: 376
Lokalizacja: Kłopoty-Stanisławy
Pomógł: 33

Nie, nie, inkrementacja jak najbradziej zapisana jest dobrze, tyle że chodziło mi o to że w momencie kiedy naciśniej przycisk i on Ci bedzie "drgał" to licznik może się zwiększyć o więcej niż 1 - może to być kilkanaście albo kilkadziesiąt albo kilkaset. Chodziło mi przede wszystkim o drgania styków przycisku.

_________________
50 znaków Atnela ....



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 4 lis 2013, o 17:41 
Offline
Nowy

Dołączył(a): 03 lis 2013
Posty: 11
Pomógł: 0

Ok, dodałem opóźnienie, więc problemu z drganiami styków nie powinno być. Możesz zerknąć na kod czy wszystko jest dobrze i będzie działało? No i dzięki za dotychczasową pomoc :)

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: 4 lis 2013, o 18:08 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 11 lut 2013
Posty: 376
Lokalizacja: Kłopoty-Stanisławy
Pomógł: 33

jaczkisr, to długa droga będzie :)

Po ustaleniu kierunku portu (we/wy) należy ustalić jego stan początkowy i czy ma być wewnętrznie podciągnięty do VCC czy ściągnięty do GND.
Znaczy się po prostu czy ma tam panować stan niski czy wysoki. I do tego właśnie służy instrukcja PORTx |= (1<<PXy) dla stanu wysokiego i instrukcja PORTx &= ~(1<<PXy) ........ tak, dla stanu niskiego. Jeśli Twoje klawisze zwierają pin procesorka do masy to musisz wstępnie tenże pind podciągnąć do VCC, żeby po naciśnięciu przycisku procek mógł zauważyć różnicę w potencjale i "wiedzieć" w ten sposób że coś się dzieje.

_________________
50 znaków Atnela ....



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 4 lis 2013, o 18:09 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 11 sty 2013
Posty: 1760
Pomógł: 196

Witam
Ja w sprawie "elektrycznej"
Oprócz wspomnianej diody, baza tranzystora z portem uC powinna być podłączona przez rezystor.
Pozdr.



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 4 lis 2013, o 18:13 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 11 lut 2013
Posty: 376
Lokalizacja: Kłopoty-Stanisławy
Pomógł: 33

jaczkisr napisał(a):
więc problemu z drganiami styków nie powinno być.


To nie do końca tak. Czas w ms ( tam 60 ) trzeba dobrać sobie eksperymentalnie. U mnie tego typu opóźnienia jakoś działały i nie było problemów. Poza tym, przy tym podejściu mogą być problemy. :)

Ciekawy artykuł : http://mirekk36.blogspot.com/2012/10/dr ... ak-to.html

Gorąco polecam. Po zrozumieniu tej serii życie staje się prostsze.

------------------------ [ Dodano po: 1 minucie ]

Racja, kicajek, za bardzo skupiłem się na stronie programowej. :)

_________________
50 znaków Atnela ....



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 4 lis 2013, o 18:17 
Offline
Użytkownik
Avatar użytkownika

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

Ja jeszcze dodam, że w tym kodzie brak jest funkcji main i pętli głównej.
Na początek jednak poczytaj o konfiguracji pinów procesora http://mirekk36.blogspot.com/2012/01/av ... stawy.html
A co to jest? int *tablica = new int[5];



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 4 lis 2013, o 18:35 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 11 lut 2013
Posty: 376
Lokalizacja: Kłopoty-Stanisławy
Pomógł: 33

Oooo, faktycznie, czyli znaczy się droga będzie jeszcze dłuższa :)

A jeśli kolega nie poczyta podrzucanych mu artykułów ....

_________________
50 znaków Atnela ....



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 4 lis 2013, o 19:36 
Offline
Użytkownik
Avatar użytkownika

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

Przerobiłem Twój program żeby Ci pokazać co w nim było źle. Nie sprawdzałem go czy działa. Oczywiście to nie jest wzór do naśladowania bo już samo sprawdzanie klawiszy należało by zrobić jako jedną funkcję a nie pisać kilka razy praktycznie to samo.
Składnia: [ Pobierz ] [ Ukryj ]
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.


Co do podłączenia przekaźnika to poczytaj i obejrzyj to http://mirekk36.blogspot.com/2012/04/pr ... cenia.html



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 5 lis 2013, o 10:46 
Offline
Nowy

Dołączył(a): 03 lis 2013
Posty: 11
Pomógł: 0

Poprzeglądałem artykuły które podesłaliście, konfigurację pinów procesora będę musiał jeszcze ogarnąć. Za chwile idę do sklepu zaopatrzyć się w attiny i w zabezpieczenie w postaci diody. :) Swoją drogą, mógłbym rozwiązać to tak, że w zmiennych ustalił bym kod, np.: 36148 a potem użył to w IF?
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: 5 lis 2013, o 10:55 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 11 lut 2013
Posty: 376
Lokalizacja: Kłopoty-Stanisławy
Pomógł: 33

nie jestem pewien czy to by zadziałało, ale tak na szybko to chyba musiałbyś wcisnąć wszystkie przyciski na raz i to bez znaczenia w jakiej kolejności ...

------------------------ [ Dodano po: kilkunastu sekundach ]

i nie mam pojecia jak wygląda podstawienie stringu w operacji bitowej ...

_________________
50 znaków Atnela ....



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 5 lis 2013, o 13:22 
Offline
Użytkownik
Avatar użytkownika

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

Hmm... kol. jaczkisr czy Ty masz jakąś książkę do nauki C na AVR-ki? Jeśli nie to najlepiej jakbyś się w takową zaopatrzył bo te kody, które próbujesz pisać nie mają szans zadziałać. Widać, że brak Ci podstaw jeśli chodzi o typy danych w avr-gcc czy chociażby o konfiguracje pinów procka. Co jest podstawą podstaw.
A Ty zabierasz się za zamek szyfrowy. To jest tak jak mawia Mirek "strzał w kolano przez lewę ramię".
Nie odbieraj tego jako złośliwość z mojej strony ale bez ogarnięcia podstaw to będzie naprawdę trudna i wyboista droga.



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

Strefa czasowa: UTC + 1


Kto przegląda forum

Użytkownicy przeglądający ten dział: Brak zidentyfikowanych użytkowników i 0 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