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

Procesor AVR, klawiatura matrycowa i diody.

25 Lut 2012 16:52 6256 65
  • Poziom 38  
    Dostałem od tadzik85 program w którym jest m.in. obsługa klawiatury matrycowej.
    Kod: c
    Zaloguj się, aby zobaczyć kod

    Żeby nie mieć takich przebiegów w przypadku naciśnięcia dwóch klawiszy:

    [img]
    https://obrazki.elektroda.pl/8527363300_1330184227.png
    [/img]

    dodałem diody zabezpieczające
    [img]
    https://obrazki.elektroda.pl/6539476800_1330184420.png
    [/img]

    Działało to na ATMega32- ale musiałem dawać trzy nop-y aby działało prawidłowo.
    Wczoraj dostałem ATMega644pa
    Zamieniłem, ustawiłem fusebity- no i lipa.
    Sprawdzałem, zmieniałem program i procesory.
    Dopiero po dodaniu 16 nop-ów albo _delay_us(1) zaczęło działać.
    tadzik85 napisał mi żeby zamienić diody opornikami 470ohm.
    No i jak ręką odjął- działa z jednym nop-em.
    Większość schematów jakie widziałem nie ma żadnych zabezpieczeń-
    dopuscza zwarcie dwóch wyjść.
    AVR to wytrzymuje.
    A teraz dwa pytania:
    jak się zachowają inne procesory- ARM, PIC - przy takim zwarciu?
    dlaczego po zastosowaniu diod trzeba dawać takie opóźnienie odczytu?
    Przecież to są szybkie diody 1n4148- ani jakaś znacząca pojemność złącza ani mała szybkość nie wchodzą chyba w grę.
    [/code]
  • Tektronix
  • Poziom 38  
    rozwiązaniem będzie ustawienie portu kolumn na zero i zmiana kierunku tych wejść HIZ lub '0' będziesz miał wówczas.

    Kolumny na pinach 4-7??
  • Poziom 38  
    Kod: c
    Zaloguj się, aby zobaczyć kod

    P.S.
    W ogóle działa- ale dlaczego z tymi diodami tak się zachowuje?
    Mi nie chodzi o zmiany w dzialąjącym programie- ale dlaczego wprowadzenie diod
    tak zwiększa konieczne opóżnienie do synchronizacji.
    No chyba że oprócz tego ktoś ma pomysł jak to zrobić aby działało bez żadnych diod i oporników a jednocześnie nie stanowiło zagrożenia dla procesora- nie AVR ale innych też.
  • Poziom 38  
    Link

    Tu obsługa klawiatury wygląda ciekawiej.
  • Tektronix
  • Pomocny post
    Moderator Mikrokontrolery Projektowanie
    Co do zmiany programu, to już tadzik podpowiedział rozwiązanie - na jednym pinie wystawiasz zero, a pozostałe są w stanie HiZ, stabilizowanym przez wewnętrzne/zewnętrzne rezystory podciągające.
    Co do diod - robisz w sposób sztuczny wyjście typu OC, przy czym w przypadku kiedy wszystkie diody są w stanie zaporowym nic nie stabilizuje poziomów logicznych. Powrót do poziomu 1 następuje długo poprzez prąd upływu diod, a 0 jest utrzymywane dzięki pojemnościom pasożytniczym w trybie HiZ.
  • Poziom 38  
    Jak to- wejścia w Hi-z?
    Kod: c
    Zaloguj się, aby zobaczyć kod
  • Poziom 38  
    wejścia bez podciągania.

    PORT_colx = 0
    DDR_colx = 1 dla wybranej kolumny dla pozostałych zero
  • Pomocny post
    Specjalista - Mikrokontrolery
    janbernat napisał:
    Jak to- wejścia w Hi-z?


    Kod: c
    Zaloguj się, aby zobaczyć kod
  • Poziom 38  
    Kod: c
    Zaloguj się, aby zobaczyć kod

    Nie wiem czy się nie pomyliłem przy przepisywaniu.
    Prawie podobny kod przesłał mi sulfur.
    Niestety- brak reakcji.
  • Pomocny post
    Użytkownik usunął konto  
  • Poziom 38  
    Chyba nie dokładnie się kolego przyjrzałeś.
  • Użytkownik usunął konto  
  • Poziom 38  
    nie to omawiamy. z twoim założeniem wynik będzie poprawny o ile wcześniej KBD_DIR było 0.
    Więc tu nic się nie zmienia. ale fakt '&' by się przydał.
  • Pomocny post
    Użytkownik usunął konto  
  • Poziom 38  
    a tam piętnować :D
    literówka wsio.
  • Poziom 38  
    To chociaż napiszcie jak ta instrukcja ma wyglądać.
    No i proszę mnie tak okropnie nie krytykować że jestem pasożytem.
    Wiem że jestem- jeszcze w dodatku z książek przepisuję kod a nie tylko z elektrody.
    No w końcu- na kimś mądrzejszym treba się wzorować.
  • Poziom 38  
    Kod: c
    Zaloguj się, aby zobaczyć kod


    Tak, ale tyczy to twojego oryginalnego kodu

    Ale dlaczego po zmianach ci nie działa nie wiem. Zmiana wygląda poprawnie
  • Poziom 38  
    Jeszcze kompilator sugeruje nawiasy:
    Kod: c
    Zaloguj się, aby zobaczyć kod

    Teraz już się nie piekli z warning-iem.
    Ale dlaczego albertb napisał że połowa kodu w tej instrukcji jest niepotrzebna to nie wiem.
    No i w ogóle to działa.
    Tylko zdiodami działa dziwnie.
  • Poziom 38  
    Można się ograniczyć do:
    Kod: c
    Zaloguj się, aby zobaczyć kod
  • Pomocny post
    Użytkownik usunął konto  
  • Poziom 24  
    Zrobiliście sobie offtopic, ale proponuję skupić się na kodzie michalko12, który zdaniem autora tematu nie działa, a moim powinien. Jak ktoś ma jakieś sugestie, chętnie przeczytam.
  • Poziom 38  
    Czyli autosugestia że chodzi o wszystkie piny portu powodowała takie ustawienia.
    Rzeczywiście- przy klawiaturze telefonicznej 4x3 wyszło by szybciej.
    No to teraz pytanie- dlaczego kod michałko12 i prawie taki sam sulfura nie działa wcale?
    I czy jeszcze próbować- bo już próbowałem ze wszystkimi pinami jako wejścia- połowa z podciąganiem- czy już sobie darować?
    Chodzi o oszczędność czterech oporników- jak któryś z Was sprzeda 1 000 000 urządzeń z taką klawiaturą to mu zostanie w kieszeni parę złotych.
    P.S.
    No w myślach mi czytasz- ten kod mnie męczy- dlaczego nie działa.
  • Pomocny post
    Poziom 24  
    Mam klawiaturę 4x3 w domu, ale nie mogę tego sprawdzić empirycznie, bo jest używana do innych celów teraz (priorytety). A wierzyć mi się nie chce, że taki prosty kod nie działa.
  • Pomocny post
    Użytkownik usunął konto  
  • Pomocny post
    Specjalista - Mikrokontrolery
    Wypróbuj to:

    Kod: c
    Zaloguj się, aby zobaczyć kod
  • Poziom 24  
    albertb: ponieważ ocenę stylu programowania uważam za offtopic.
    michalko: moim zdaniem problemem jest czas pomiędzy zmianą konfiguracji pracy pinów a odczytywaniem tej wartości.
  • Poziom 38  
    wówczas nie działby ci 1 lub 2 wiersze.
  • Poziom 24  
    Nie zgadzam się. Dlaczego tak uważasz ?
  • Poziom 38  
    bo kolejne odczyty wierszy dają opóźnienie. A jeśli efekt na wyjściu pojawi się po więcej niż powiedzmy 8 taktach to już problem tego co podłączono do portu.
  • Poziom 38  
    Okropnie mi się biesi kompilator z kodem michałko12.
    No ale walczę dalej.