Elektroda.pl
Elektroda.pl
X
Proszę, dodaj wyjątek www.elektroda.pl do Adblock.
Dzięki temu, że oglądasz reklamy, wspierasz portal i użytkowników.

Klawiatura tel 4x3 jak przerobić na 4x4 ?

oficerJK 08 Kwi 2014 23:08 1041 11
  • #1 08 Kwi 2014 23:08
    oficerJK
    Poziom 9  

    Mam problem,
    Próbowałem uruchomić program z przykładu "Klawiatura telefoniczna " cz 4 Kursu AVR GCC w której obsługa odwołuje się do klawiatury 4x3, Jak zmienić koda aby działała jak 4x4 , próbowałem zmienić zmienną col < 0x80 na col>0x00 i działa połowicznie bo się jakby wzbudza i samoistnie zaczyna podawać kody.
    Oto orginalny kod dla 4x3

    Kod: c
    Zaloguj się, aby zobaczyć kod

    0 11
  • #2 08 Kwi 2014 23:13
    tadzik85
    Poziom 38  

    Kod: c
    Zaloguj się, aby zobaczyć kod


    pomyśl na tymi wartościami

    0
  • #3 09 Kwi 2014 11:20
    oficerJK
    Poziom 9  

    No w tej linijce kodu jest tylko ustawianie kolejnych wierszy , których jest akurat 4 tyle co trzeba , problem jest z kolumnami w tej wersji klawiatura działa tylko z pierwszymi trzema kolumnami . Wiem, że to wszystko działa na jednym porcie i jakakolwiek ingerencja w col lub row może wzajemnie zakłócać zasoby porty. Miałem nadzieję , że ktoś znajdzie problem. W sumie jest sporo innych prostszych rozwiązań obsługi klawiatury 4x4 ale ta mnie szczególnie zainteresowała z uwagi na działaniach logicznych przesuwania bitów.

    0
  • #4 09 Kwi 2014 11:28
    tadzik85
    Poziom 38  

    Kod: cpp
    Zaloguj się, aby zobaczyć kod

    to jeszcze ta

    0
  • #5 09 Kwi 2014 13:02
    oficerJK
    Poziom 9  

    Widzę , że kolega też nie czuje powagę sytuacji :). Tak to właśnie ta linia odpowiada za sprawdzenie przyciskó w danej kolumnie przy konkretnym poziomie "zero" wystawionym na danym wierszu . ale jak zmieniam zapis na
    z

    Kod: cpp
    Zaloguj się, aby zobaczyć kod

    na
    syntax=cpp]
    for(col=0x10; col> 0x01; col<<=1, key++)


    [/syntax]

    to czwarta kolumna klawiszy jest odczytana ale przy okazji przypadkowo pojawiają się stany nieustalone na porcie klawiatury i gdy trzymam wciśnięty klawisz nic się nie dzieje złego ale jak puszczam to samoistnie klawiatura generuje zdarzenia.

    Mimo wszystko dzięki za szczere chęci , może ktoś bardziej doświadczony schyli się ku temu problemowi ??

    0
  • #6 09 Kwi 2014 13:10
    tadzik85
    Poziom 38  

    Bo masz zmienić obie linie.
    Z mojego 1 postu aby uzyskać podciąganie na liniach odczytywanychi wyglądać tak:

    Kod: c
    Zaloguj się, aby zobaczyć kod

    A z 2 postu ma wyglądać tak:
    Kod: c
    Zaloguj się, aby zobaczyć kod


    bo kolejne wartości maja być : 0x10 0x20 0x40 0x80.

    Więc z czym masz problem?
    Chwila pomyślenia nad bitem 7.

    A jakbyś nie był tak leniwy to nie jeden przykład na elektrodzie lub Google byś znalazł.

    0
  • #7 09 Kwi 2014 16:10
    oficerJK
    Poziom 9  

    Dzięki za pomoc, sprawdzę to w praktyce, nie z lenistwa wynika moja słabość a raczej z braku doświadczenia, przesiadam się z Bascoma i od miesiąca dopiero trawię dość trudny temat jakim jest programowanie AVR w C i wogóle C a że i mam mało czasu na wszystko jak każdy to chciałbym dalej analizować kody zawarte w różnych kursach :). Ten kod wydał mi się w miarę łatwy ale jak chciałem go zmienić pod klawiaturkę 4x4 to dał mi ciosa :). Nie pomyślałem o podciąganiu czwartej kolumny. Mam tak że nie odpuszczam tematom i to mnie blokuje aby iść dalej z nauką. Fakt jest sporo różnych projektów tego typu i nawet je sprawdziłem w praktyce ale ten jeden mi nie dawał spokoju. Operacje na bitach troszkę trzeba je polubić :). Obym się nie zniechęcił za szybko. Wielkie dzięki jeszcze raz !!

    Dodano po 48 [minuty]:

    Czy nie powino być tak

    Kod: c
    Zaloguj się, aby zobaczyć kod


    zmieniłem ostatnią wartość 0x8f (Twojego autorstwa ) na 0xff aby bit siódmy był podciągniety analogicznie jak trzy wcześniejsze odpowiedzialne za podciąganie kolumn (wejść) do 1 11111111
    a pierwotnie było 0x7f 01111111

    Pierwotnie wiersze startują od 0x8e czyli bitowo port ma stany:
    01111110
    01111101
    01111011
    01110111
    a po zmianie
    11111110
    11111101
    11111011
    11110111

    czy dobrze pojmuję rzeczy?

    0
  • Pomocny post
    #8 09 Kwi 2014 18:15
    tadzik85
    Poziom 38  

    Trudne?
    I pojąłeś.

    0
  • #9 09 Kwi 2014 19:36
    oficerJK
    Poziom 9  

    Troszkę już się programowało ale zazwyczaj zwykłe aplikacje a teraz doszedł jeszcze sprzęt , trzeba w oku mieć jakby oscyloskop, hehh . ,
    Ps. Sprawdziłem opcję z moją poprawką hula i buczy ... zamiast 7 wpisujemy "F"
    no i oczywiście ze zmianą dla kolumn jak w poprzednim poście.
    Pozdrawiam

    Dodano po 14 [minuty]:

    Poniżej poprawiony kod przykładu dla klawiatury w 4x4 w opcji 4x3
    Dodana sygnalizacja naciśnięcia przycisku, blokada przed kolejnym odczytem przycisku jeśli nie puszczono poprzedniego.

    Kod: c
    Zaloguj się, aby zobaczyć kod

    0
  • Pomocny post
    #10 09 Kwi 2014 19:46
    mi14chal
    Poziom 27  

    Taka rada stan klawiszy najlepiej odczytywać w przerwaniu timera.

    0
  • Pomocny post
    #11 09 Kwi 2014 21:04
    Tomq
    Poziom 38  

    Teraz podnieś poprzeczkę i zrób nieblokującą obsługę klawiatury. W tym celu funkcję delay musisz zastąpić sprawdzaniem warunku powiązanego z timerem.

    W obecnej postaci w chwili gdy wciśniesz klawisz cały program jest zatrzymywany. W większości aplikacji nie zrobi to różnicy, ale są zastosowania gdzie ma to znaczenie.

    0
  • #12 09 Kwi 2014 21:55
    oficerJK
    Poziom 9  

    Pomyślę i o tym później, wykorzystuję przerwania w Bascom-e od timera, zupełnie inna jakość pracy ale i dużo więcej trzeba myśleć aby poprawnie wszystko zsynchronizować, zrobić trzeba będzie obsługę wektora przerwania np co 10 ms żeby sprawdzał stan wierszy, podglądałem już takowe projekty ale tutaj ewidentnie zablokowałem się na tych bitach ... Nie chcę iść na głęboką wodę , krok po kroku ale do przodu najpierw ten kurs AVR GCC przejdę potem Blue-booka Pana Mirka zacznę rozgryzać :) .
    Dziękuję za doping i do następnego spotkania . Ten temat uważam za zamknięty.

    0