logo elektroda
logo elektroda
X
logo elektroda
Adblock/uBlockOrigin/AdGuard mogą powodować znikanie niektórych postów z powodu nowej reguły.

Procedura obsługi klawiatury numerycznej dla AT90S2313 - optymalizacja pamięci

Armin 10 Gru 2004 23:34 4433 17
  • #1 1050983
    Armin
    Poziom 12  
    Posty: 90
    Pomógł: 1
    Ocena: 2
    był bym nie zmiernie wdzięczny gdyby ktoś napisał mi jakąś procedure do obsługi klawiaturki numerycznej (np. taka jak w telefonie) dla procka 90S2313, która nie zajmowała by dużo miejsca w jego pamięci.
    z góry serdeczne dzięki
  • #2 1051257
    LordBlick
    VIP Zasłużony dla elektroda
    Posty: 5438
    Pomógł: 549
    Ocena: 69
    Do "Wizjonera"... ;) A jak telefonowi było na imię ? Z elektronikami gadasz, pokaż schemat klawiaturki...
    Pozdr, LightI
  • #3 1052873
    Armin
    Poziom 12  
    Posty: 90
    Pomógł: 1
    Ocena: 2
    zwykła klawiatura z zamka szyfrowego...
    ma 7 wyprowadzeń
    po zwarciu jednego wejścia z jednym wyjściem pokazuje się odpowiednia liczba, i potrzebował bym do obsługi tego jakiś programik który by mi wyświetlał cyferki na LCD...
  • #4 1053618
    natalia.
    Poziom 14  
    Posty: 65
    Pomógł: 2
    Może będę upierdliwa i powtórzę za kolegą LightHouser abyś podał szczegóły swojej konstrukcji. Jak do tej pory nie wiadomo do jakiego portu jest przyłączona klawiatura.
  • #6 1055754
    Armin
    Poziom 12  
    Posty: 90
    Pomógł: 1
    Ocena: 2
    ja sam napisałem programik do obsługi takiej klawiatury i wyświetlania liczb na wyświetlaczu LCD 2x16. tylko problem jest w tym że ten mój program zajmuje za dużo i tak małej pamięci procka.
    program napisałem w bascomie
    jestem początkującym i nie znam jeszcze asm
    a LCD podłączony:
    EN - PB1
    D4 - PB4
    D5 - PB5
    D6 - PB6
    D7 - PB6
    RS - PB2
    jeśli komuś to potrzebne...
    i potrzebowałbym coś zajmującego mniej miejsca, jeżeli coś takiego istnieje :-)

    a oto programik:

    Dim Mux1 As Bit , Mux5 As Bit , Mux6 As Bit , Mux7 As Bit , Mux8 As Bit
    Dim Mux2 As Bit , Mux9 As Bit , Mux10 As Bit , Mux11 As Bit , Mux12 As Bit
    Dim Mux3 As Bit , Mux4 As Bit , Kod As Byte , Kodd As Word
    Dim Przycisk2 As Bit , Przycisk1 As Bit , Przycisk3 As Bit
    Cls : Cursor Off
    Lcd "klawiatura"
    Wait 3
    Cls

    Cursor Blink


    Portd = &B11111
    Kodd = 0000000000000000
    Mux1 = 1
    Mux2 = 1
    Mux3 = 1
    Mux4 = 1
    Mux5 = 1
    Mux6 = 1
    Mux7 = 1
    Mux8 = 1
    Mux9 = 1
    Mux10 = 1
    Mux11 = 1
    Mux12 = 1
    Przycisk1 = 0
    Przycisk2 = 0
    Kod = 0


    Do
    Ddrd.5 = 1
    Ddrd.6 = 0
    Ddrb.0 = 0

    Przycisk1 = 1 : Przycisk2 = 0 : Przycisk3 = 0

    If Pind.0 = 1 Then Mux1 = 1
    If Pind.2 = 1 Then Mux4 = 1
    If Pind.3 = 1 Then Mux7 = 1
    If Pind.4 = 1 Then Mux10 = 1

    Gosub Przyciski1




    Ddrd.5 = 0
    Ddrd.6 = 1
    Ddrb.0 = 0

    Przycisk1 = 0 : Przycisk2 = 1 : Przycisk3 = 0

    If Pind.0 = 1 Then Mux2 = 1
    If Pind.2 = 1 Then Mux5 = 1
    If Pind.3 = 1 Then Mux8 = 1
    If Pind.4 = 1 Then Mux11 = 1

    Gosub Przyciski1



    Ddrd.5 = 0
    Ddrd.6 = 0
    Ddrb.0 = 1

    Przycisk1 = 0 : Przycisk2 = 0 : Przycisk3 = 1

    If Pind.0 = 1 Then Mux3 = 1
    If Pind.2 = 1 Then Mux6 = 1
    If Pind.3 = 1 Then Mux9 = 1
    If Pind.4 = 1 Then Mux12 = 1

    Gosub Przyciski1



    If Kod = 6 Then : Cursor Noblink : End If
    If Kod > 7 Then
    Cls : Lcd "tylko 6 liczb"
    Wait 2 : Cls
    Kod = 0 : Cursor Blink : End If '


    Loop
    End

    Czekaj:
    Waitms 20
    Return

    Przyciski1:

    If Pind.0 = 0 Then
    Gosub Czekaj
    If Przycisk1 = 1 Then
    If Mux1 = 1 Then : Lcd "*" : Incr Kod : Mux1 = 0 : End If : End If
    If Przycisk2 = 1 Then
    If Mux2 = 1 Then : Lcd "0" : Incr Kod : Mux2 = 0 : End If : End If
    If Przycisk3 = 1 Then
    If Mux3 = 1 Then : Lcd "#" : Incr Kod : Mux3 = 0 : End If : End If
    End If

    If Pind.2 = 0 Then
    Gosub Czekaj
    If Przycisk1 = 1 Then
    If Mux4 = 1 Then : Lcd "7" : Incr Kod : Mux4 = 0 : End If : End If
    If Przycisk2 = 1 Then
    If Mux5 = 1 Then : Lcd "8" : Incr Kod : Mux5 = 0 : End If : End If
    If Przycisk3 = 1 Then
    If Mux6 = 1 Then : Lcd "9" : Incr Kod : Mux6 = 0 : End If : End If
    End If

    If Pind.3 = 0 Then
    Gosub Czekaj
    If Przycisk1 = 1 Then
    If Mux7 = 1 Then : Lcd "4" : Incr Kod : Mux7 = 0 : End If : End If
    If Przycisk2 = 1 Then
    If Mux8 = 1 Then : Lcd "5" : Incr Kod : Mux8 = 0 : End If : End If
    If Przycisk3 = 1 Then
    If Mux9 = 1 Then : Lcd "6" : Incr Kod : Mux9 = 0 : End If : End If
    End If

    If Pind.4 = 0 Then
    Gosub Czekaj
    If Przycisk1 = 1 Then
    If Mux10 = 1 Then : Lcd "1" : Incr Kod : Mux10 = 0 : End If : End If
    If Przycisk2 = 1 Then
    If Mux11 = 1 Then : Lcd "2" : Incr Kod : Mux11 = 0 : End If : End If
    If Przycisk3 = 1 Then
    If Mux12 = 1 Then : Lcd "3" : Incr Kod : Mux12 = 0 : End If : End If
    End If
    Return

    pozdrawiam
    z góry wielkie dzięki
    Załączniki:
    • Procedura obsługi klawiatury numerycznej dla AT90S2313 - optymalizacja pamięci klawiatura.jpg (7.39 KB) Musisz być zalogowany, aby pobrać ten załącznik.
  • #7 1055792
    ACULA
    Poziom 34  
    Posty: 3005
    Pomógł: 105
    Ocena: 114
    jeśli można mieć jedną uwagę to minimalnie tracąc na przejrzystości (ale tylko zasady działania) możesz zaoszczędzić miejsce i zwiększyć prędkość
    Do
    Ddrd.5 = 1
    Ddrd.6 = 0
    Ddrb.0 = 0
    ...........
    Ddrd.5 = 0
    Ddrd.6 = 1
    Ddrb.0 = 0

    można zmienić na

    Do
    Ddrd.5 = 1
    Ddrd.6 = 0
    ......
    Ddrd.5 = 0
    Ddrd.6 = 1

    oczywiście w pierwszym ustawianiu trzeba zadbać o 3 bity, później wystarczy dbać o 2 ;)
  • #8 1055982
    LordBlick
    VIP Zasłużony dla elektroda
    Posty: 5438
    Pomógł: 549
    Ocena: 69
    :arrow: Armin : Jeżeli nie zabezpieczysz wyjść diodami (np. 1N4148) to możesz sobie wciskając 2 klawisze zrobic "ała" (zwierasz wyjścia o różnych stanach)... ;)
    Pozdrawiam LightI
    Załączniki:
    • Procedura obsługi klawiatury numerycznej dla AT90S2313 - optymalizacja pamięci klawi.png (2.86 KB) Musisz być zalogowany, aby pobrać ten załącznik.
  • #9 1058193
    Armin
    Poziom 12  
    Posty: 90
    Pomógł: 1
    Ocena: 2
    mam kit jabela "zamek szyfrowy"
    i tam właśnie jest taka klawiatura, a całością steruje 89c2051
    który też ma tylko 2kB pamięci, i oprócz obsługi klawiatury to jeszcze musi być jakaś zmienna która sprawdza kod wprowadzony z klawiatury z kodem zapisanym
    i myślę że w takim przypadku musi być coś innego niż to co napisałem do obsługi klawiatury, co by zajmowało mniej miejsca
    fakt ze tam nie ma LCD a pamięć eeprom jest w osobnej kości

    jeżeli ktoś by miał coś takiego to był bym wdzięczny, ale w bascomie
    rastler(_at_)poczta.onet.pl

    pozdrawiam
  • #10 1058466
    LordBlick
    VIP Zasłużony dla elektroda
    Posty: 5438
    Pomógł: 549
    Ocena: 69
    No właśnie w 89C2051 są wyjścia pull-up, a w AVR push-pull i życzę powodzenia bez diodek... ;) Ja mam coś, co zajmie mniej miejsca, ale źródełkami w asm jak widzę nie jesteś zainteresowany, w dodatku to jest na przerwaniach Timer0 Overflow.
    Ewentualnie mogę zaproponować taki układ klawiatury :
    Procedura obsługi klawiatury numerycznej dla AT90S2313 - optymalizacja pamięci
    Na linie adresowe A0-A3 podajesz kod klawisza, a na wyjściu układu KEY_STATE = 1 oznacza, że jest on wciśnięty, co jest łatwe do zawarcia w jakiejkolwiek pętli i zajmie mniej miejsca.
    Co do nieznajomości ASM - Tutaj możesz go poznać i to wielką łopatą kładziony... ;)
    LightI
  • Pomocny post
    #11 1059650
    zumek
    Poziom 39  
    Posty: 3352
    Pomógł: 695
    Ocena: 52
    Witam.
    Armin->
    Odchudziłem "conieco" Twój program i załączam źródełko.

    LightHouser->
    Dlaczemu :wink: nas straszysz :?:
    Z wszystkich pinów , do których podłączona jest w/w klawiaturka , w dowolnym momencie tylko jeden pin "robi" jako wyjście , a reszto to wejścia.Wytłumacz proszę , co złego może stać się prockowi , bo "za chiny ludowe" nie mam pojęcia :?: Mam do Megi32 podłączoną 4x4 klawiaturę bez żadnych diód czy rezystorów i nawet jak wcisnąłem kilka jednocześnie , to procek żyje i ma się dobrze , więc wiesz chyba o czymś , o czym ja niestety nie wiem :(

    Pozdrawiam
    Piotrek Sz.
    Załączniki:
    • keybforyou.zip (631 Bajtów) Musisz być zalogowany, aby pobrać ten załącznik.
  • #12 1059785
    LordBlick
    VIP Zasłużony dla elektroda
    Posty: 5438
    Pomógł: 549
    Ocena: 69
    zumek napisał:
    LightHouser->
    Dlaczemu :wink: nas straszysz :?:
    Z wszystkich pinów , do których podłączona jest w/w klawiaturka , w dowolnym momencie tylko jeden pin "robi" jako wyjście , a reszto to wejścia.Wytłumacz proszę , co złego może stać się prockowi , bo "za chiny ludowe" nie mam pojęcia :?: Mam do Megi32 podłączoną 4x4 klawiaturę bez żadnych diód czy rezystorów i nawet jak wcisnąłem kilka jednocześnie , to procek żyje i ma się dobrze , więc wiesz chyba o czymś , o czym ja niestety nie wiem :(

    W którym miejscu powyższego kodu jest ustawianie DDRD.(0-3) ? Z rysunku wynikało, że te piny są wyjściami, ale czego... ? No i w ten sposób źle zrozumiałem intencje programisty... ;) Po prostu sam kiedyś konstruowałem coś podobnego i algorytm był na innej zasadzie - DDR-y miałem na stałe ustawione, a zmieniałem stany wyjść portów. Co do straszenia, to brzmi groźnie... ;) Niemniej jednak jest taka ewentualność, gdyby się coś pomyliło w programie, a 3 diodki nie są drogie... ;)
    P.S. zumek, coś ty taki dzisiaj zdenerwowany... ?
    Pozdrawiam, LihgtI
  • #13 1059880
    zumek
    Poziom 39  
    Posty: 3352
    Pomógł: 695
    Ocena: 52
    LightHouser napisał:

    W którym miejscu powyższego kodu jest ustawianie DDRD.(0-3) ...

    Widocznie Armin "liczy" na sprzetowy reset :wink:
    LightHouser napisał:

    Co do straszenia, to brzmi groźnie...

    Bałem się , że coś mi umknęło .Wprawdzie czytałem pdf-a , ale nie tak dokładnie i tylokrotnie co np. Robin Hood-a :wink:

    Cytat:

    P.S. zumek, coś ty taki dzisiaj zdenerwowany... ?
    Pozdrawiam, LihgtI


    A skądże :!: Pań(Panów) z US u mnie nie było .... tfuj.

    Pozdrawiam
    Piotrek Sz.
  • #14 1066375
    Armin
    Poziom 12  
    Posty: 90
    Pomógł: 1
    Ocena: 2
    Witam
    Zumek
    wpakowałem ten twój program do mojego 2313 i na 1 i 2 kolumnie chodzi dobrze ale na 3 kolumnie ( tam gdzie przyciski 3 6 9 #) to wpisuje to co mu się podoba i nie wiem co jest grane...
    a u Ciebie układ działał tak jak powinien??
  • Pomocny post
    #15 1072239
    zumek
    Poziom 39  
    Posty: 3352
    Pomógł: 695
    Ocena: 52
    Armin napisał:
    Witam
    Zumek
    wpakowałem ten twój program do mojego 2313 i na 1 i 2 kolumnie chodzi dobrze ale na 3 kolumnie ( tam gdzie przyciski 3 6 9 #) to wpisuje to co mu się podoba i nie wiem co jest grane...
    a u Ciebie układ działał tak jak powinien??


    Witam.
    
    ...
    Do
    Ddrb.0 = 0 'Dopisz tę linię - gdzieś się zapodziała ;)
    Ddrd.5 = 1
    Vec = 0
    Gosub Przyciski1
    ...
    


    Pozdrawiam
    Piotrek Sz.

    PS
    U mnie działa z innym układem połączeń.
  • #16 1119034
    Armin
    Poziom 12  
    Posty: 90
    Pomógł: 1
    Ocena: 2
    witam
    i serdecznie wszystkim za wszystko dziękuje

    a teraz chciałbym zrobić z tego jakiś prosty zamek szyfrowy
    trzeba by chyba było zapisać szyfr do jakiejś zmiennej
    i drugą zmienną w której zapisywali byśmy kod który własnie wpisaliśmy
    i porównać czy sie zgadzają czy też nie i ewentualnie otworzyć jakiś zamek czy coś takiego

    problem w tym że kompletnie nie wiem jak to zrobić
    i licze na Waszą pomoc
    pozdrawiam
  • #17 1119779
    Elektrooonik
    Poziom 29  
    Posty: 1212
    Pomógł: 127
    Ocena: 83
    Armin napisał:
    witam
    a teraz chciałbym zrobić z tego jakiś prosty zamek szyfrowy
    trzeba by chyba było zapisać szyfr do jakiejś zmiennej
    i drugą zmienną w której zapisywali byśmy kod który własnie wpisaliśmy
    i porównać czy się zgadzają czy też nie i ewentualnie otworzyć jakiś zamek
    pozdrawiam

    Ja bym proponował używać oddzielnych zmiennych do każdego znaku kodu i każdy znak wprowadzać również do odzielnej zmiennej. Umożliwia to wtedy kontrolę nad kolejnością wpisywanych znaków.
  • #18 1150290
    Armin
    Poziom 12  
    Posty: 90
    Pomógł: 1
    Ocena: 2
    witam
    do Elektrooonik
    może podałbyś jakiś gotowiec bo za bardzo nie wiem jak to zrobić
    pozdrawiam

Podsumowanie tematu

✨ Dyskusja dotyczy opracowania procedury obsługi klawiatury numerycznej (matrycowej 3x4) dla mikrokontrolera AT90S2313, z naciskiem na optymalizację pamięci programu. Autor posiada prosty program w Bascomie do odczytu klawiatury i wyświetlania cyfr na LCD 2x16, jednak zajmuje on zbyt dużo pamięci. Uczestnicy sugerują podanie szczegółów połączeń i schematu klawiatury, wskazują na konieczność stosowania diod zabezpieczających (np. 1N4148) przy równoczesnym wciskaniu wielu klawiszy, oraz proponują uproszczenia w kodzie dla zmniejszenia rozmiaru i zwiększenia szybkości działania. Pojawiły się propozycje użycia przerwań Timer0 Overflow i alternatywnych układów klawiatury z dekoderem 74HC139. Dyskutowano także o różnicach w konfiguracji portów mikrokontrolerów AVR i 89C2051 oraz o problemach z kolumną klawiatury w implementacji. W końcowej części poruszono temat implementacji prostego zamka szyfrowego, polegającego na porównaniu wprowadzonego kodu z zapamiętanym szyfrem, z sugestiami dotyczącymi przechowywania kodu w oddzielnych zmiennych dla kontroli kolejności znaków.
Podsumowanie wygenerowane przez AI na podstawie treści dyskusji.
REKLAMA