Elektroda.pl
Elektroda.pl
X
Proszę, dodaj wyjątek dla 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 ?

08 Kwi 2014 23:08 1134 11
  • 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
  • Poziom 38  
    Kod: c
    Zaloguj się, aby zobaczyć kod


    pomyśl na tymi wartościami
  • 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.
  • Poziom 38  
    Kod: cpp
    Zaloguj się, aby zobaczyć kod

    to jeszcze ta
  • 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 ??
  • 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ł.
  • 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?
  • Pomocny post
    Poziom 38  
    Trudne?
    I pojąłeś.
  • 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
  • Pomocny post
    Poziom 28  
    Taka rada stan klawiszy najlepiej odczytywać w przerwaniu timera.
  • Pomocny post
    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.
  • 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.