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



Teraz jest 14 sty 2026, o 05:04


Strefa czasowa: UTC + 1





Utwórz nowy wątek Odpowiedz w wątku  [ Posty: 13 ] 
Autor Wiadomość
PostNapisane: 21 lip 2014, o 12:29 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 28 mar 2013
Posty: 333
Pomógł: 10

Witam,
chciałbym uzyskać z klawiatury cała ramkę. Chodzi mi tylko o odbiór. Jak wiadomo taka ramką ma 11 bitów z czego 8 bitów to dane wciśniętego klawisza.
Bity odbieram w przerwaniu zewnętrznym, gdy wykrywa sygnał CLK (zbocze opadające) sprawdza stan pinu DATA i odpowiednio zapisuję "1" lub "0". Gdy odczyta 11 bit, zapisuje cała ramkę do nowej zmiennej, która to jest wyświetlana na lcd poprzez lcd_char(); , dane ramki, flaga są zerowane i gotowe do odbioru.

Problem jest taki ze gdy wcisnę klawisz, wyświetlają się losowe kody. Tzn. tak zauważyłem ze przeważnie są to te same kody, i mm wrażenie ze powtarzają sie one w kółko.

Chciałbym uzyskać po odczycie 11 bitu, pełną ramkę ps/2, którą następnie zamaskuję i przesunę uzyskując kod klawisza.

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: 21 lip 2014, o 13:48 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 28 mar 2013
Posty: 333
Pomógł: 10

każdy mi poleca gotowe rozwiązania żeby popatrzeć od innych jak oni robili.... chodzi o to ze chciałbym własny kod napisać, nie sztuka skopiować od kogoś i dalej nie wiedzieć jak się to robi, poszukam może coś mi te tematy pomogą żeby ten błąd znaleźć



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 21 lip 2014, o 19:37 
Offline
Uzytkownik zasłużony dla forum.atnel.pl
Avatar użytkownika

Dołączył(a): 16 lip 2012
Posty: 2088
Lokalizacja: Leżajsk / Kraków
Pomógł: 411

Błędem jest przesunięcie (drugie z kolei) jak odczytujesz 0.
PS.
Te zmienne powinny być zdefiniowane w przerwaniu. Nie ma sensu ich udostępniać dla funkcji main.
Składnia: [ Pobierz ] [ Ukryj ]
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.

Ta zmienna niepotrzebnie ma static, bo pewnie przeniesiesz później to do innego pliku jak np. masz w przykładzie o dekodowaniu RC5. Przemyśl to.
Składnia: [ Pobierz ] [ Ukryj ]
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.

_________________
Dragonus Cracovus: Biomagia



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 22 lip 2014, o 11:04 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 28 mar 2013
Posty: 333
Pomógł: 10

Krauser napisał(a):
Błędem jest przesunięcie (drugie z kolei) jak odczytujesz 0.
PS.
Te zmienne powinny być zdefiniowane w przerwaniu. Nie ma sensu ich udostępniać dla funkcji main.
Składnia: [ Pobierz ] [ Ukryj ]
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.

Ta zmienna niepotrzebnie ma static, bo pewnie przeniesiesz później to do innego pliku jak np. masz w przykładzie o dekodowaniu RC5. Przemyśl to.
Składnia: [ Pobierz ] [ Ukryj ]
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.


Krauser, między czasie zrobiłem jak napisałeś, i tez sobie wydzieliłem osobne pliki, ostatecznie problem rozwiązałem, używając pętli switch...case .
Teraz zastanawiam się jak ładować poszczególne znaki ascii np do wskaznika a potem wyswietlać je za pomocą lcd_str();
załóżmy ze mamy taki kod:

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


string sie nie zapisuje, pisze z pamieci, wiec mogą byc blędy - ale ogolnie taka zasada jest w moim kodzie



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 22 lip 2014, o 16:36 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 28 mar 2013
Posty: 333
Pomógł: 10

ale mi chodzi o łaczenie znaków char w stringa.



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 22 lip 2014, o 17:46 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 28 mar 2013
Posty: 333
Pomógł: 10

no nie bardzo, znalazłem funkcje do łączenia stringów z innymi stsrinagami. Mi chodzi zeby mając poszczególne znaki tak je dodac zeby powstał string tóry mozna wyświetlić za pomocą lcd_str(wskaznik);



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 22 lip 2014, o 18:04 
Offline
Uzytkownik zasłużony dla forum.atnel.pl
Avatar użytkownika

Dołączył(a): 16 lip 2012
Posty: 2088
Lokalizacja: Leżajsk / Kraków
Pomógł: 411

Kolega mokrowski dobrze podpowiada.
Możesz to rozwiązać tak, że masz string wynikowy i jeden o pojemności 2 znaków na odebraną literkę:
topic7653.html#p86934

_________________
Dragonus Cracovus: Biomagia



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 22 lip 2014, o 19:01 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 28 mar 2013
Posty: 333
Pomógł: 10

niew iem czy jk Was dobrez rozumiem. Mam tak:

zmienna a = 'A';
zmienna b = 'T';
zmienna c = 'N';
zmienna d = 'E';
zmienna e = 'L';

i chce to jakoś skleić.. może w wskaźnik *str;

a potem wpoprzez funkcję lcd_str(str) - mieć na wyslietlaczu wyraz "ATNEL".


@mokrowski, wiem ze strcat łączy stringi... ale ja mam poszczególne literki a one nie są stringami..



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 22 lip 2014, o 20:47 
Offline
Uzytkownik zasłużony dla forum.atnel.pl
Avatar użytkownika

Dołączył(a): 16 lip 2012
Posty: 2088
Lokalizacja: Leżajsk / Kraków
Pomógł: 411

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

_________________
Dragonus Cracovus: Biomagia



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 23 lip 2014, o 21:28 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 28 mar 2013
Posty: 333
Pomógł: 10

Dzięki za kod- teoretycznie proste a ciężko na takie coś wpaść. Powiedz mi, dlaczego tablica chabuf ma dwa elementy? dlatego może ze będzie tam znak i '\0' ? - który sam będę musiał dopisywać?
czemu wpisałeś do niej gwiazdkę?



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 23 lip 2014, o 21:43 
Offline
Uzytkownik zasłużony dla forum.atnel.pl
Avatar użytkownika

Dołączył(a): 16 lip 2012
Posty: 2088
Lokalizacja: Leżajsk / Kraków
Pomógł: 411

Atmegowiec napisał(a):
który sam będę musiał dopisywać?

Nie musisz sam wpisywać '\0' zmienia się tylko 1 element tablicy.
Atmegowiec napisał(a):
czemu wpisałeś do niej gwiazdkę?

Po to, aby 2 element był '\0'.

_________________
Dragonus Cracovus: Biomagia



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 24 lip 2014, o 07:32 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 28 mar 2013
Posty: 333
Pomógł: 10

tak dokładnie, buforem roboczym bedzie tablica charbuf[]. Zmienne podałem tylko zeby łatwiej przedstawić sytuację - bardziej obrazowo.

Wiec program działa jednakże powiela mi w stringu kazdy znak "aattnneell" . Nie wiem dlaczego, myślałem ze gdzieś powieliłem funkcje "składającą stringa, ale nie ma czegoś takiego

Wysweitlajac sama tablice char_buf pojawia sie pojedynczy znak, a gdy wrzuce do lcd_str() string_buf, string jest podwojony.



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 24 lip 2014, o 09:34 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 28 mar 2013
Posty: 333
Pomógł: 10

@mokrowski masz całkowita racje co do punktu 1 i 2, próbowalem to jakoś pokrętnie rowiazać naciskanie wielkich liter ale niestety darowałem sobie.

Co do znaków nie-graficznych np ENTER, ESC rozwiąze to tak:

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


a potem odwoływac się w funkcji:

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 dublowania, to zauwazylem ze drugi znak pojawi sie podczas puszczania klawisza. Wiec juz jest jakis trop.

Driver klawiatury z prawdziwego zdarzenia to nie bedzie.. ale fakt pasowało by miec duze litery, nie wiem jak to rozwiązać, schemat zaproponowany przez @Krauser, póki co sprwdza sie bardzo dobrze - jesli chodzi o kody ascii, tylko widzę ze klawiatura przestaje odpowiadac gdy zapełni sie cały bufor string_buf[].



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

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