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

[BASCOM] Attiny2313: Brak reakcji przycisków na PORTD.0 i PORTD.1 w BASCOM

kaka0204 27 Paź 2013 15:07 1920 15
REKLAMA
  • #1 12886508
    kaka0204
    Poziom 28  
    Posty: 954
    Pomógł: 148
    Ocena: 153
    Witam.
    Uczę się bascoma. Napisałem kod, który liczy do pewnej liczby z częstotliwością 1Hz. Niby wszystko jest ok, ale nie do końca. Męczę się z tym już kilka godzin. Mianowicie nie działają przyciski. Do PORTD.0 i PORTD.1 są podłączone 2 przyciski, które zwierają dany port do masy. Funkcja, która po naciśnięciu jednego z przycisku powinna inkrementować i dekrementować zmienną Minuty., wygląda tak.


    Kod: text
    Zaloguj się, aby zobaczyć kod



    Kod: text
    Zaloguj się, aby zobaczyć kod


    Niestety po naciśnięciu przycisku nic się nie dzieje. Tak wygląda cały kod

    Kod: text
    Zaloguj się, aby zobaczyć kod


    Co robię nie tak?
    Pozdrawiam.
  • REKLAMA
  • Pomocny post
    #2 12886587
    PROXAQQ
    Poziom 14  
    Posty: 30
    Pomógł: 10
    Sprawdzasz stan wysoki, a piszesz, że zwierasz wejścia przyciskami do masy. Zamień "1" na "0".
    W aliasach zamień Portd na Pind.
  • Pomocny post
    #3 12886594
    BlueDraco
    Specjalista - Mikrokontrolery
    Posty: 6479
    Pomógł: 939
    Ocena: 421
    Czy włączyłeś podciąganie linii portów, do których są podłączone przyciski?

    Obsługa przycisków w programie też jest "nie tak". Naciśnięcie przycisku powoduje, że na wejściu będziesz miał 0, nie 1. To, co dalej robisz w programie, też jest średnio sensowne, ale to zauważysz dopiero wtedy, kiedy wykryjesz poprawnie naciśnięcie przycisku.
  • REKLAMA
  • #4 12886654
    kaka0204
    Poziom 28  
    Posty: 954
    Pomógł: 148
    Ocena: 153
    PROXAQQ napisał:
    Sprawdzasz stan wysoki, a piszesz, że zwierasz wejścia przyciskami do masy. Zamień "1" na "0".
    W aliasach zamień Portd na Pind.

    Czemu dałem 1 zamiast 0? Ale pomyłka. Portd zmienione na Pind, pull-up właczone. Działa :)
    Dzięki bardzo, ale przy naciskaniu przycisku ekran bardzo przygasa, można ten defekt jakoś usunąć?
    Pozdrawiam.
  • REKLAMA
  • Pomocny post
    #5 12886663
    BlueDraco
    Specjalista - Mikrokontrolery
    Posty: 6479
    Pomógł: 939
    Ocena: 421
    Tak, ustaw linie portu jako wejścia. Zapewne przygasa z powodu zbyt dużego prądu wyjściowego uC.
  • #6 12886773
    kaka0204
    Poziom 28  
    Posty: 954
    Pomógł: 148
    Ocena: 153
    BlueDraco napisał:
    Tak, ustaw linie portu jako wejścia. Zapewne przygasa z powodu zbyt dużego prądu wyjściowego uC.

    może źle się wyraziłem. Ekran przy naciśnięciu przycisku mignie i na 100% nie jest to spowodowanie przez pobieranie zbyt dużego prądu z uC.
    Ps. ustawienie linii portb jako wejścia, także nie rozwiązuje problemu = ekran dalej miga w takt inkrementacji zmiennej.
  • Pomocny post
    #7 12886811
    PROXAQQ
    Poziom 14  
    Posty: 30
    Pomógł: 10
    Ma czym wyświetlasz dane? Pokaż program obsługi wyświetlania.
  • #8 12886829
    kaka0204
    Poziom 28  
    Posty: 954
    Pomógł: 148
    Ocena: 153
    Na wyświetlaczu LED. Oto cały kod:
    Kod: text
    Zaloguj się, aby zobaczyć kod
  • Pomocny post
    #9 12886887
    PROXAQQ
    Poziom 14  
    Posty: 30
    Pomógł: 10
    Podejrzewam, że te Waitms w obsłudze przycisków blokują wyświetlanie. Spróbuj je do testu usunąć. Oczywiście przyciski nie będą wtedy działać poprawnie, ale sprawdzisz wyświetlanie.
    Obsługa wyświetlania powinna być przeniesiona do obsługi przerwania, ale to już większa przeróbka programu. To przygasanie tak bardzo przeszkadza?
  • REKLAMA
  • #10 12886914
    kaka0204
    Poziom 28  
    Posty: 954
    Pomógł: 148
    Ocena: 153
    PROXAQQ napisał:
    Podejrzewam, że te Waitms w obsłudze przycisków blokują wyświetlanie. Spróbuj je do testu usunąć.

    Tak po usunięciu waitms ekran już nie miga.
    PROXAQQ napisał:
    To przygasanie tak bardzo przeszkadza?

    Niby nie, ale wolałbym gdyby jego nie było :)
  • #11 12886951
    PROXAQQ
    Poziom 14  
    Posty: 30
    Pomógł: 10
    No to musisz tak napisać program, żeby nie używać funkcji Waitms.
  • #12 12886985
    kaka0204
    Poziom 28  
    Posty: 954
    Pomógł: 148
    Ocena: 153
    Hmm. Nie wiem jak. Bascoma uczę się od dopiero 2 dni. Może kolega podać jakiś przykład?
  • Pomocny post
    #13 12887143
    BlueDraco
    Specjalista - Mikrokontrolery
    Posty: 6479
    Pomógł: 939
    Ocena: 421
    Jeśli dopiero dwa dni, to nie stracisz dużo, jeśli rzucisz go w kąt i zaczniesz się uczyć C. Gorąco polecam.
  • #14 12887360
    kaka0204
    Poziom 28  
    Posty: 954
    Pomógł: 148
    Ocena: 153
    BlueDraco napisał:
    Jeśli dopiero dwa dni, to nie stracisz dużo, jeśli rzucisz go w kąt i zaczniesz się uczyć C. Gorąco polecam.

    C się uczyłem, ale w ogóle mi nie wchodzi, dlatego spróbowałem swoich sił w bascomie i sądzę, że przy nim już zostanę.
  • Pomocny post
    #15 12887783
    Wojtek75
    Poziom 25  
    Posty: 530
    Pomógł: 91
    Ocena: 36
    Poczytaj sobie w helpie o "debounce".
  • Pomocny post
    #16 12888338
    Konto nie istnieje
    Poziom 1  

Podsumowanie tematu

✨ W dyskusji poruszono problem braku reakcji przycisków podłączonych do PORTD.0 i PORTD.1 w mikrokontrolerze Attiny2313 podczas programowania w BASCOM. Użytkownik początkowo używał błędnych stanów logicznych w kodzie, co uniemożliwiało prawidłowe działanie przycisków. Po sugestiach dotyczących zmiany stanu z "1" na "0" oraz włączenia podciągania linii portów, problem został rozwiązany. Dodatkowo, zauważono, że ekran LED przygasał podczas naciśnięcia przycisków, co było spowodowane blokowaniem wyświetlania przez funkcję Waitms. Użytkownik został zachęcony do usunięcia tej funkcji oraz do zastosowania techniki debouncing w celu poprawy obsługi przycisków. Wskazano również na możliwość wykorzystania timerów do multiplexingu wyświetlacza oraz do pomiaru czasu.
Wygenerowane przez model językowy.
REKLAMA