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



Teraz jest 30 mar 2026, o 19:59


Strefa czasowa: UTC + 1





Utwórz nowy wątek Odpowiedz w wątku  [ Posty: 10 ] 
Autor Wiadomość
PostNapisane: 1 maja 2013, o 20:05 
Offline
Użytkownik

Dołączył(a): 07 sty 2013
Posty: 89
Pomógł: 5

Jeśli dobrze zrozumiałem , to Col0-Col3 , to kolejne bity 0-3 na porcie ,
.. wtedy sprawdziłbym czy wartość tych wymaskowanych 4-rech bitów == 15 ,
if ((COL_PIN & (COL0|COL1|COL2|COL3)) == 15) key =255;
chyba , że "nie poczułem" Twojej klawiatury

ps. oczywiście 15 to (COL0|COL1|COL2|COL3),można też bardziej elegancko



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 2 maja 2013, o 06:50 
Offline
Użytkownik

Dołączył(a): 07 sty 2013
Posty: 89
Pomógł: 5

Twó warunek jest tak długo spełniony, dopóki nie naciśniesz wszystkich czterech "kolumn-przycisków" ;)



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 2 maja 2013, o 09:29 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 08 mar 2013
Posty: 236
Lokalizacja: Warszawa
Pomógł: 5

A nie może byc po prostu:
else
{
key = 255;
}
Może cos żle obczajam, ale skoro to jest kolejny, ostatni przypadek, to else uwzgledni tez i ten przypadek, gdzie nie wcisniety jest przycisk.

_________________
sig off ;(



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 3 maja 2013, o 19:17 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 10 sty 2013
Posty: 844
Lokalizacja: Przemyśl
Zbananowany użytkownik

Pomógł: 43

Próbowałeś po każdym włączeniu rezystora podciągającego wstawić niewielkie opóźnienie przed dalszymi operacjami?

_________________
Klimatyzacja Przemyśl



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 3 maja 2013, o 20:15 
Offline
Użytkownik

Dołączył(a): 07 sty 2013
Posty: 89
Pomógł: 5

Witam , a może tak "wyrzucić" na LCD stan całego portu w hex'ie ?
stan portu jest czytany dopiero po dwu taktach zegara, przełączenie portu
to kolejne dwa , dopisz w tym kawałeczku asemblera jeszcze kilka "nop"
odczyt portu wrzuć do zmiennej i wyślij na LCD lub RS



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 4 maja 2013, o 09:43 
Offline
Użytkownik

Dołączył(a): 17 sty 2013
Posty: 327
Lokalizacja: Białystok
Pomógł: 14

Mam nadzieję, że dobrze rozumiem i kombinuję ;P a gdyby kolega zrobił tak:

Kod:
        if(!(COL_PIN & COL0)) key = 1 + (cnt*4);
        else if(!(COL_PIN & COL1)) key = 2 + (cnt*4);
        else if(!(COL_PIN & COL2)) key = 3 + (cnt*4);
        else if(!(COL_PIN & COL3)) key = 4 + (cnt*4);
        else key=255;


Chodzi oczywiście o kod z początku strony.



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 4 maja 2013, o 12:40 
Offline
Użytkownik

Dołączył(a): 17 sty 2013
Posty: 327
Lokalizacja: Białystok
Pomógł: 14

a spróbuj dopisać przed sprawdzaniem przycisku poprostu:

Kod:
key=255;



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

Dołączył(a): 08 mar 2013
Posty: 236
Lokalizacja: Warszawa
Pomógł: 5

Nie wiem czy to pomoże. Ale na mojej płytce działa: jak wciskam przycisk mam numer przycisku, a jak puszczam mam zero. W sumie twój pomysł tez mi dawał w rezultacie 255 albo 0 (jakby nic nie było wcisniete);(. Fajna zabawa w tym terminalu, wykombinowałem coś znacznie lepszego a to dzieki panu mirkowi k.:D.
mój main.c:
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: 4 maja 2013, o 19:48 
Offline
Użytkownik
Avatar użytkownika

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

Antystatyczny napisał(a):
Wygląda na to, że zbyt ostro mieszam kierunkami pinów w przerwaniu, a w związku z tym, że pull up w atmedze jest w sumie dość słabiutki, chyba czas narastania napięcia jest zbyt długi. To oczywiście moje przypuszczenia.

Twoje przypuszczenia są jak najbardziej trafne. Ja też tak sądzę po moich bojach z klawiatura odczytywaną za pomocą charlieplexingu.
Program nie odczytywał mi klawiszy a jak już to jakieś głupoty. Dopiero podciągnięcie pinów zewnętrznymi rezystorami 10k spowodowało prawidłowe odczytywanie wciskanych klawiszy.



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 5 maja 2013, o 14:40 
Offline
Użytkownik

Dołączył(a): 07 sty 2013
Posty: 89
Pomógł: 5

Witam ,
Jeśli nadal walczysz , to proponuję radykalną terapię:
a- wyrzuć wstawkę asemblera
b- swoją procedurę obsługi zmiennej "key" w całości
przenieś na początek zaraz po obsłudze flagi timera
c- zacznij od bezwarunkowego przypisania key= 0xFF;
a potem warunkowo przepisz , zależnie od wykrytego naciśnięcia.

d.- jako ostatnie ,ustal kierunek i stan portu ,
zmienną cnt i daj czas do następnego przerwania na ustalenie stanu portu.

ps. jak nadal nie będzie OK , po podeślij fragment listingu
dotyczący przypisania zmiennej key , postaram się zweryfikować ...

ps2. dużą część weekendu "zmarnowałem" na podobną walkę z kompilatorem ,
jak skończę, poskarżę się na forum ,póki co mam pewność iż , to co zapisujemy
jest tylko życzeniem , wyczyny kompilatora są skrajnie trudno przewidywalne ...

------------------------ [ Dodano po: 6 minutach ]

podejrzewam związek z poziomem optymalizacji ,
ale jeszcze nie ostatecznie ..



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

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