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

Klawiatura matrycowa 4x4 podłączona do portu C mikrokontrolera mega32 - błędy w odczycie

PatrykP100 22 Gru 2014 17:48 846 5
REKLAMA
  • #1 14246326
    PatrykP100
    Poziom 11  
    Witam
    Podłączyłem klawiaturę matrycową 4x4 do portu C mikrokontrolera mega32.
    Do portu A podłaczyłem wyświetlacz i zaprogramowałem atmege tak:
    Kod: text
    Zaloguj się, aby zobaczyć kod

    Na wyświetlaczu cały czas wyświetla się cyfra 7 chociaż nic nie jest wciśnięte, układ reaguje na naciśnięcie tylko 3 przycisków wyświetlając 11 lub 15. Sprawdziłem czy nie ma przerw w połączeniach, zwarć i innych problemów zewnętrznych, wszystko jest ok. Fusbity uC ustawione standardowo, zmieniony tylko ten od taktowania. Klawiatura na pewno jest podłączona poprawnie, bez rezystorów podciągających.
    /edit użyłem syntax jak kazał moderator ale kod stał się nieczytelny, dodało do niego jakieś fragmenty html
    Moderowany przez piotrva:


    Coś musiałeś zrobić źle - poprawiam

  • REKLAMA
  • Pomocny post
    #2 14246442
    piotrva
    VIP Zasłużony dla elektroda
    Najprawdopodobniej we fusebitach masz WŁĄCZONY interfejs JTAG (bit JTAGEN), co powoduje, że piny PC5..2 są "zablokowane"

    Musisz wyłączyć we fusebitach interfejs JTAG, tak będzie najprościej.

    Możesz też spróbować na samym początku programu:
    Kod: text
    Zaloguj się, aby zobaczyć kod
  • REKLAMA
  • #3 14246466
    PatrykP100
    Poziom 11  
    Dzięki wielkie Piotrva, działa po wpisaniu tych dwóch linijek.Swoją drogą do czego one służą ?
  • REKLAMA
  • #4 14246532
    piotrva
    VIP Zasłużony dla elektroda
    PatrykP100 napisał:

    Swoją drogą do czego one służą.

    Fajnie, że pytasz :)
    Te 2 linijki służą do wyłączenia interfejsu JTAG z poziomu programu.

    Dlatego są 2 razy, bo aby wyłączyć interfejs JTAG należy 2 krotnie zapisać wartość 1 do bitu JTD w rejestrze MCUCSR w przeciągu 4 cykli zegara (po szczegóły odsyłam do dokumentacji).

    Gdybyś używał w programie przerwań to przed tymi linijkami powinieneś dodać Disable Interrupts, a po nich Enable Interrupts.

    Nie użyłem zapisu MCUCSR.JTD=1, gdyż nie wiem na ile instrukcji ASM Bascom rozbił by tę sekwencję (czy nie byłoby to więcej niż 4 instrukcje), a przy takim zapisie liczę na kompilację tego do 1 lub 2 instrukcji na operację.
  • REKLAMA
  • #5 14249323
    Konto nie istnieje
    Konto nie istnieje  
  • #6 14250023
    piotrva
    VIP Zasłużony dla elektroda
    O fusebitach wspominałem.
    Komendy tej nie pamiętałem - od dawna nie siedzę w Bascom :)
REKLAMA