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

Driver I2C-LCD (HD44780) z układem PCF8574

bolcio 29 Gru 2008 19:01 20947 18
REKLAMA
  • Driver I2C-LCD (HD44780) z układem PCF8574

    Prezentowany przeze mnie układ służy do przyłączenia wyświetlacza LCD ze sterownikiem HD44780 lub kompatybilnym do mikrokontrolera poprzez interfejs I2C (TWI). Dzięki temu oszczędzamy – czasem bardzo cenne – wyprowadzenia mikrokontrolera. Urządzenie jest bardzo proste w konstrukcji a głównym jego elementem jest układ PCF8574 (8-bitowy ekspander szyny I2C). Wyświetlacz LCD jest sterowany w trybie 4-bitowym bez odczytu flagi zajętości. Ekspander steruje sygnałami RS i E (R/W na stałe do masy) a także DB4-DB7. Jeden z bitów ekspandera wykorzystałem do sterowania poprzez tranzystor BS170 podświetlenia wyświetlacza LCD. Ostatni wolny bit wyprowadziłem w postaci złącza wraz z zasilaniem do podłączenia różnych innych urządzeń (np. jakiegoś bipera). Układ wyposażony jest także w potencjometr do regulacji kontrastu wyświetlacza LCD. Przy pomocy zworek możliwa jest zmiana adresu układu PCF8574.

    Driver I2C-LCD (HD44780) z układem PCF8574
    Driver I2C-LCD (HD44780) z układem PCF8574

    Konstrukcja układu została zoptymalizowana do współpracy z wyświetlaczem 2x16 o wymiarach 80x36 mm ze złączem 1x16 pinów. Można jednak dostosować urządzenie do dowolnego wyświetlacza LCD.

    W załączniku zamieszczam schemat ideowy, montażowy, widok ścieżek płytki drukowanej oraz biblioteki w języku C do obsługi wyświetlacza. Podczas ich tworzenia korzystałem z materiałów zamieszczonych na stronie http://radzio.dxp.pl/hd44780. Były one kompilowane przy pomocy WinAVR ver. 20080610. Urządzenie zostało przeze mnie podłączone do ATmegi32 taktowanej wewnętrznym rezonatorem o częstotliwości 8 MHz.
    Załączniki:
    • lcdvtwi.rar (22.46 KB) Musisz być zalogowany, aby pobrać ten załącznik.

    Fajne? Ranking DIY
    O autorze
    bolcio
    Poziom 12  
    Offline 
    Specjalizuje się w: trochę avr
    bolcio napisał 61 postów o ocenie 6, pomógł 3 razy. Mieszka w mieście Szczecin. Jest z nami od 2003 roku.
  • REKLAMA
  • #2 5920962
    Galareta
    Poziom 23  
    Posty: 696
    Pomógł: 14
    Ocena: 182
    Nie lepiej by było jakiś ATtiny zaprzengnac do tego? taniej by chyba wyszło :) A można by było uprościć i przyspieszyć transfer tzn zrobić w kontrolerze bufor:)

    w AVT ATTINY2313 kosztuje coś około 4,30zł a PCF8574 6zł:)
  • #3 5921756
    hotdog
    Poziom 26  
    Posty: 1106
    Pomógł: 95
    Ocena: 108
    Galareta napisał:
    Nie lepiej by było jakiś ATtiny zaprzengnac do tego? taniej by chyba wyszło :) A można by było uprościć i przyspieszyć transfer tzn zrobić w kontrolerze bufor:)

    w AVT ATTINY2313 kosztuje coś około 4,30zł a PCF8574 6zł:)


    zrobił bym podobnie jak pisze kolega. Wykorzystując tani 8 bitowy uC do tego masz dużo więcej zalet:
    1. oszczędność kodu w głównym uC
    2. Mniejszy czas zajętości głównego uC
    3. Możliwość ustawienia podświetlenia i kontrastu przez pwm
    4. Możesz wykorzystać uC wyświetlacza np do obsługi przycisków i wysyłać ich kody przez i2c.
    4. gratisowy expander portów

    pozdrawiam
  • #4 5921780
    coberr
    Poziom 20  
    Posty: 846
    Pomógł: 21
    Ocena: 435
    Kolego galareta - ile nóg ma AT tiny - a lie LCD - a gdzie jeszcze komunikacja?:)

    Jak dla mnie projekt bardzo praktyczny - faktycznie oszczedność pinow dzisiaj wskazana.
    Pozatym mało elementów (brakuje jeszcze tylko dwóch ceramików po pi x oko 100nF) (chociaz aż tak potworne przebiegi po liniach zasilania to tu hasać nie będą - ale zawsze lepiej dać). małe zwarte :)
    Problemem w sumie będą tylko troche bardziej skomplikowane biblioteki obsługi przez I2C pod LCD :)
    ale cos za coś :)
  • #5 5921957
    Galareta
    Poziom 23  
    Posty: 696
    Pomógł: 14
    Ocena: 182
    kawałek noty katalogowej ATTINY2313:

    18 Programmable I/O Lines


    Odliczając reset zostaje 17 lini;) I2C(TWI) 2 linie wiec I/O do wykorzystania jest 15 liczmy że chcemy adresy powyciągać na zewnątrz (nie wiem po co ale można) 12:) obsługa 4 bit + 2bit sterowanie czyli zostają 4 I/O podświetlanie (można przechowywać w EEPROM coś np ustawienie jasności podświetlania) więc zostają nam 3 I/O wolne:)

    Do tego 5 lini z wyświetlacza można niezależnie używać jeżeli nie wysyłamy nic na wyświetlacz czyli można spokojnie zrobić do tego klawiaturę 4x4:)

    Poza tym z tego co na szybko czytałem ATtiny można obudzić z power down przez TWI:) Więc pobór mocy pomijalny jak nie pracuje;)
  • REKLAMA
  • #6 5922465
    kriss68
    Poziom 20  
    Posty: 369
    Pomógł: 40
    Ocena: 37
    Galareta napisał:

    Odliczając reset zostaje 17 lini;) I2C(TWI) 2 linie wiec I/O do wykorzystania jest 15 liczmy że chcemy adresy powyciągać na zewnątrz (nie wiem po co ale można) 12:) obsługa 4 bit + 2bit sterowanie czyli zostają 4 I/O

    Od kiedy to 12-6 daje 4? Tak poza tym po co wyprowadzać adres? Można go przecież trzymać w eep i programowo zmieniać. Ja bym to widział trochę inaczej - 18 lini - reset(1) - twi(2) - lcd (4+3+1) - linia zgłaszająca przerwanie [(1) może być przydatne] zostaje 6 wolnych linii. Linia zgłaszająca przerwanie gdy zostanie ściągnięta o masy podczas resetu ustawiała by standardowy adres. To chyba tyle.
  • #7 5922704
    kranzio
    Poziom 26  
    Posty: 685
    Pomógł: 91
    Ocena: 139
    W EP 10/2008 był opisywany podobny moduł tylko na ATmega8. W nr 9/2008 moduł wyświetlacza LED sterowany przez I2C.
  • REKLAMA
  • #8 5923987
    bolcio
    Poziom 12  
    Posty: 61
    Pomógł: 3
    Ocena: 6
    Na schemacie ideowym wkradł się mały błąd. Kondensator C1 ma wartość 100nF a nie 100uF...
  • #9 5924167
    Galareta
    Poziom 23  
    Posty: 696
    Pomógł: 14
    Ocena: 182
    kriss68 napisał:

    Od kiedy to 12-6 daje 4?


    No racja nie wiem dlaczego 4 mi wyszło... Pozna godzina może...

    Jak dostane ATtiny to się będę musiał z tym pobawić:)

    Edit:

    ps. ma ktoś pomysł na bufor? :) bo mi się moja wizja głupia wydaje;) tablica z danymi np 96 Bajty i druga tablica 12 Bajtów czyli 96 Bity i każdy bit niósł by informacje o tym czy to polecenie do LCD czy po prostu wysyłamy znak:)
  • #10 5935465
    Konto nie istnieje
    Konto nie istnieje  
  • REKLAMA
  • #12 5935767
    bolcio
    Poziom 12  
    Posty: 61
    Pomógł: 3
    Ocena: 6
    Rozwiązań "problemu" podłączenia wyświetlacza LCD do mikrokontrolera jest wiele. Każdy z nich ma swoje wady i zalety. Jedne są bardziej rozbudowane, inne wymagają bardziej skomplikowanego oprogramowania do obsługi. Ważne żeby znać je wszystkie (lub większość) i umieć w danej aplikacji dobrać rozwiązanie najbardziej optymalne.
  • #13 5936106
    Konto nie istnieje
    Konto nie istnieje  
  • #14 5936739
    Galareta
    Poziom 23  
    Posty: 696
    Pomógł: 14
    Ocena: 182
    Powodem dla którego chciałem zastosować bufor jest to ze at 1 szkoda RAM w Procku a po 2 procek główny może wtedy wysyłać z pełna szybkością I2C i nie martwić się o opóźnienia wyświetlacza:)
  • #15 5937293
    Dr.Vee
    VIP Zasłużony dla elektroda
    Posty: 1784
    Pomógł: 307
    Ocena: 76
    bolcio napisał:
    Na schemacie ideowym wkradł się mały błąd. Kondensator C1 ma wartość 100nF a nie 100uF...

    Poza tym brak rezystora ograniczającego prąd podświetlenia LCD.

    Pozdrawiam,
    Dr.Vee
  • #16 5937471
    bolcio
    Poziom 12  
    Posty: 61
    Pomógł: 3
    Ocena: 6
    Dr.Vee napisał:
    Poza tym brak rezystora ograniczającego prąd podświetlenia LCD.


    Akurat w moim przypadku zastosowany był wyświetlacz z własnym rezystorem ograniczającym wspomniany przez Ciebie prąd ale nie zawsze tak jest więc lepiej go zastosować. Dzięki za zwrócenie uwagi...
  • #17 5939126
    Konto nie istnieje
    Konto nie istnieje  
  • #18 5939702
    Galareta
    Poziom 23  
    Posty: 696
    Pomógł: 14
    Ocena: 182
    Ja myślałem aby zrobić 2 zmienne informujące o miejscu kursora zapisu i odczytu w buforze:) zapis do bufora w przerywaniu od TWI odczyta podczas przerywania generowanego przez gotowość LCD Jeżeli oba kursory są takie same nie wysyłamy nic do wyświetlacza czekamy na dane:) Oczywiście jeżeli kursor ma wartość ostatniego adresu w tablicy nadajemy mu adres początku tablicy

    Kursory najlepiej na stałe w rejestrach:)
  • #19 5952560
    sq6ade
    Poziom 40  
    Posty: 6855
    Pomógł: 482
    Ocena: 286
    A ja sobie robię takie coś co prawda na 3 liniach ale za to ze sprawdzaniem BUSY:
    http://sq6ade.elektroda.eu/pdfy/tdd1742_lcd.pdf
    Na szynie clk i data mogą wisieć następne układy....

    A taka sztuczka z tym PCF8574 była już w pewnych wyświetlaczach dwuwierszowych. Na jednej płytce były bondowane zaglutowane strukturki pcf8574 i hd44780.

Podsumowanie tematu

LABEL_AI_GENERATED
Przedstawiono układ do podłączenia wyświetlacza LCD z kontrolerem HD44780 do mikrokontrolera za pomocą interfejsu I2C, wykorzystujący ekspander portów PCF8574. Układ steruje LCD w trybie 4-bitowym bez odczytu flagi zajętości, kontrolując sygnały RS, E oraz linie danych DB4-DB7, a także podświetlenie przez tranzystor BS170. Dyskutowano alternatywne rozwiązania, m.in. zastosowanie mikrokontrolera ATtiny2313 jako bufora i ekspandera, co pozwala na oszczędność pinów, możliwość sterowania PWM podświetleniem i kontrastem oraz obsługę dodatkowych urządzeń jak przyciski. Poruszono kwestie liczby dostępnych linii I/O w ATtiny2313, zarządzania buforem danych i komend LCD, a także implementacji przerwań i optymalizacji transmisji I2C. Zwrócono uwagę na konieczność stosowania kondensatorów filtrujących (100nF) oraz rezystora ograniczającego prąd podświetlenia LCD, choć nie zawsze jest on wymagany. Wspomniano o podobnych rozwiązaniach z użyciem mikrokontrolera PIC oraz modułach opisywanych w czasopismach Elektronika Praktyczna. Podkreślono, że wybór rozwiązania zależy od wymagań aplikacji, a każdy sposób ma swoje zalety i wady.
Podsumowanie AI na podstawie dyskusji. Może zawierać błędy.
REKLAMA