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

Jak odpytać czy LCD jest podłączony (Konwerter I2c)

xena11 30 Paź 2018 12:21 552 5
REKLAMA
  • #1 17527881
    xena11
    Poziom 11  
    Witam, chciałbym zrobić taką funkcjonalność w moim układzie tak, aby program rozpoznawał, kiedy mam podłączony LCD a kiedy nie. Dlaczego? Gdyż przy odłączonym LCD, procesor się zatrzymuje przy próbie wysłania coś komendą LCD. Napisałem program, który wykrywa problem i omija zawieszanie się, ale chciałbym aby program też rozpoznawał, że wyświetlacz jest już podłączony i inicjował z nim komunikacje. Dzięki temu mamy sposób, na zrobienie panela zewnętrznego, dołączanego w razie potrzeby np. by podejrzeć parametry układu.

    Jak odpytać po I2C, że komunikacja jest nawiązana? Używam konwertera LCD HD44780 I2C IIC TWI



    Oto kod:

    Kod: VB.net
    Zaloguj się, aby zobaczyć kod
  • REKLAMA
  • #2 17528023
    ex-or
    Poziom 28  
    Odłączasz LCD wraz z modułem IIC, czy też bez niego?
    W pierwszym przypadku sprawdzasz status zwrócony przez I²C na operację startu transmisji, jeśli status wskazuje, że nastąpiło potwierdzenie przez moduł znaczy moduł obecny, status zwraca NACK - moduł nieobecny.
    W drugim przypadku próbujesz odczytać status LCD i startujesz timeout - jeśli nie ma odpowiedzi przed upływem timeoutu - wyświetlacz nieobecny, jest odpowiedź - wyświetlacz obecny.

    To tak ogólnie. Programu nie komentuję bo Basica nie tykam.
  • REKLAMA
  • Pomocny post
    #3 17528289
    dasej
    Poziom 32  
    Witam.

    Wystawiasz na szynę I2C adres jak niema odpowiedzi to znaczy że brak urządzenia.

    Kod: C / C++
    Zaloguj się, aby zobaczyć kod


    Nie wiem jak to zrobić w bascomie dlatego daję wersję C
  • REKLAMA
  • #4 17528404
    xena11
    Poziom 11  
    Bardzo Ci dziękuję za super odpowiedź bo jest pełna i dokładnie o to mi chodziło. Ale niestety muszę ten kod przetranslatorować na bascoma. Nie mam jeszcze pojęcia jak to zrobić i jeszcze nie rozgryzłem co oznaczają poszczególne zmienne.

    Odłączam LCD wraz z modułem I2c.

    Gdyby ktoś mógłby pomóc mi w tym i podpowiedzieć jak to mogłoby wyglądać w bascom byłbym wdzięczny.

    Dodano po 44 [minuty]:

    Udało się to zrobić metodą prób i błedów korzystając z pomocy bascoma. Działa ale nie rozumem do końca tego, bo zmienna ERR zawsze jest 0 niezależnie od tego czy wyświetlacz jest podłączony czy nie. Natomiast odebranie jakiegoś jednego byte z I2c jest 0 gdy odłączone a 255 gdy przyłączone i na tej podstawie rozpoznaje wyświetlacz. Może nie jest to eleganckie ale działa.

    Kod: VB.net
    Zaloguj się, aby zobaczyć kod
  • REKLAMA
  • #5 17528534
    dasej
    Poziom 32  
    Działanie jest proste wysyłasz na szynę adres urządzenia I2C.
    Jak pod danym adres niema urządzenie to masz negatywną odpowiedź.
    Jest to fragment scanera szyny I2C. https://www.elektroda.pl/rtvforum/topic3284925.html
    A to jest dla bascoma musisz tylko sprawdzić i wykorzystać ten fragment który będzi Ci potrzebny https://www.elektroda.pl/rtvforum/topic3105823.html#15093061
  • #6 17528963
    xena11
    Poziom 11  
    Ok, dzięki. Przeanalizowałem to co tam napisali i wychodzi na to, że prawdopodobnie tylko komenda I2cwbyte zwraca błąd w zmiennej ERR. bo po komendzie I2crbyte zawsze ERR=0 niezależnie co jest na magistrali. Dzięki temu można to też tak zrobić bardziej profesjonalnie.

    Jest inny problem który zauważyłem . Gdy wyświetlacz jest w układzie i wydaję polecenia LCD to podczas działania programu, gdy Timer T2 zlicza mi czas a INT0 i INT1 zliczają wartości z enkodera to co jakiś czas - losowo, zdarza się, że procek się przytnie na klikaset ms. Widać to na lampce, która mrugać ma raz na sekundę, ale czasami się przycina. Problem całkowicie znika, gdy nie używam komend LCD. To bardzo dziwne, tak jakby czasem komunikacja po I2C z lcd czasami coś wstrzymywała. Dodam, że odświerzam LCD co 1sekundę.

    Czasami też, zdarza się podczas pierwszego użycia LCD, że mam krzaki na wyświetlaczu i muszę zresetować przyciskiem reset procesor i wówczas wszystko jest ok.


    Co to może być?
REKLAMA