eGospodarka.pl
eGospodarka.pl poleca

eGospodarka.plGrupypl.misc.elektronika › HD44780 i szybkie MCU
Ilość wypowiedzi w tym wątku: 10

  • 1. Data: 2024-01-23 17:53:07
    Temat: HD44780 i szybkie MCU
    Od: Atlantis <m...@w...pl>

    Ktoś z was ma doświadczenie z uruchamianiem wyświetlaczy HD44780 na
    (relatywnie) współczesnych mikrokontrolerach?
    Mam urządzenie zbudowane w oparciu o PIC32MX795F512L. Do tej pory
    korzystałem z wyświetlacza HD44780 (4x20) za pośrednictwem ekspandera na
    I2C. Niestety komunikacja była dość wolna - tym bardziej, że układ
    reprezentuje rewizję, która miała hardware'owego buga i na tym
    konkretnym porcie I2C trzeba było ponawiać konfigurację przed każdą
    kolejną transmisją.

    W wolnej chwili postanowiłem więc przeprojektować moduł wyświetlacza i w
    miejscu ekspandera zastosowałem dwukierunkowy translator poziomów
    TXB0108. Dwukierunkowy, bo zamierzam korzystać z funkcji odczytu flagi
    zajętości (była ona również wykorzystywana w wersji z I2C).

    Przepisałem sterownik, wywalając z niego obsługę I2C. Zamiast tego
    komunikację oparłem na na GPIO. Po podpięciu nowej wersji interfejsu LCD
    okazało się, że działa on tylko częściowo. Mianowicie jeśli wyłączę
    obsługę linii RW (i zamiast sprawdzania flagi zajętości dam
    standardowego delay'a 120 us) to wszystko działa zupełnie poprawnie. A
    to oznacza, że GPIO są skonfigurowane poprawnie i komunikacja w stronę
    wyświetlacza działa.

    Problem pojawia się, gdy próbuję włączyć obsługę RW i czytać flagę
    zajętości. Wtedy wyświetlacz niby się inicjuje i nawet jest w stanie
    poprawnie wyświetlić kilka tekstów, ale w chwilę później układ się
    zawiesza (podejrzewam, że własnie na pętli sprawdzania bitu zajętości) i
    zalicza reset WDT. I tak w kółko...

    Próbowałem dodawać delay'e 1-10 us po zmianach stanów linii RW i EN, a
    także po zmianie konfiguracji pinów skaładających się na czterobitową
    magistralę danych (wejście lub wyjście), jednak nie przyniosło to
    żadnego rezultatu.

    Ktoś ma pomysł co może być nie tak?


  • 2. Data: 2024-01-23 19:12:25
    Temat: Re: HD44780 i szybkie MCU
    Od: Marek <f...@f...com>

    On Tue, 23 Jan 2024 17:53:07 +0100, Atlantis <m...@w...pl>
    wrote:
    > Ktoś ma pomysł co może być nie tak?

    Czy translator nie przekłamuje poziomów w drugą stronę podczas
    odczytu bitu zajętości?

    --
    Marek


  • 3. Data: 2024-01-23 21:26:31
    Temat: Re: HD44780 i szybkie MCU
    Od: Zbych <z...@n...org>

    On 23.01.2024 17:53, Atlantis wrote:
    > Ktoś z was ma doświadczenie z uruchamianiem wyświetlaczy HD44780 na
    > (relatywnie) współczesnych mikrokontrolerach?

    > Problem pojawia się, gdy próbuję włączyć obsługę RW i czytać flagę
    > zajętości. Wtedy wyświetlacz niby się inicjuje i nawet jest w stanie
    > poprawnie wyświetlić kilka tekstów, ale w chwilę później układ się
    > zawiesza (podejrzewam, że własnie na pętli sprawdzania bitu zajętości) i
    > zalicza reset WDT. I tak w kółko...

    Podłącz Jtag i sprawdź gdzie program utyka.

    > Próbowałem dodawać delay'e 1-10 us po zmianach stanów linii RW i EN, a
    > także po zmianie konfiguracji pinów skaładających się na czterobitową
    > magistralę danych (wejście lub wyjście), jednak nie przyniosło to
    > żadnego rezultatu.
    >
    > Ktoś ma pomysł co może być nie tak?

    Sprawdź analizatorem/oscyloskopem, czy odczyt flagi na pewno działa. Po
    obu stronach translatora poziomów.
    Zdarzają się chińskie implementacje 44780, które mają skopaną flagę
    zajętości np. jest ustawiana z opóźnieniem.




  • 4. Data: 2024-01-23 21:45:48
    Temat: Re: HD44780 i szybkie MCU
    Od: "Grzegorz Niemirowski" <g...@g...net>

    Atlantis <m...@w...pl> napisał(a):
    > Ktoś z was ma doświadczenie z uruchamianiem wyświetlaczy HD44780 na
    > (relatywnie) współczesnych mikrokontrolerach?

    A jakie to ma znaczenie czy mikrokontroler jest szybki? Z HD44780 poradzi
    sobie każdy.

    > Problem pojawia się, gdy próbuję włączyć obsługę RW i czytać flagę
    > zajętości. Wtedy wyświetlacz niby się inicjuje i nawet jest w stanie
    > poprawnie wyświetlić kilka tekstów, ale w chwilę później układ się
    > zawiesza (podejrzewam, że własnie na pętli sprawdzania bitu zajętości) i
    > zalicza reset WDT. I tak w kółko...
    > Próbowałem dodawać delay'e 1-10 us po zmianach stanów linii RW i EN, a
    > także po zmianie konfiguracji pinów skaładających się na czterobitową
    > magistralę danych (wejście lub wyjście), jednak nie przyniosło to żadnego
    > rezultatu.
    > Ktoś ma pomysł co może być nie tak?

    Tak jak Zbych podejrzewam chińszczyznę. Sprawdzałeś na innych wyświetlaczach
    z tym sterownikiem? Bo ogólnie to powinno działać. Robiłem sprawdzanie flagi
    na STM32: https://pastebin.com/qr0A3CnK

    --
    Grzegorz Niemirowski
    https://www.grzegorz.net/


  • 5. Data: 2024-01-24 08:11:57
    Temat: Re: HD44780 i szybkie MCU
    Od: Atlantis <m...@w...pl>

    On 23.01.2024 21:45, Grzegorz Niemirowski wrote:

    > A jakie to ma znaczenie czy mikrokontroler jest szybki? Z HD44780
    > poradzi sobie każdy.

    Moja robocza hipoteza była taka, że pewnie jakiś sygnał jest wystawiany
    na magistralę zbyt szybko. Zgadzałoby się to z faktem, że na I2C
    wszystko działało poprawnie - pewnie dlatego, że komunikacja szeregowa
    wprowadzała dodatkowe opóźnienia pomiędzy kolejnymi zmianami stanów na
    liniach. Z drugiej strony ręczne dodanie opóźnień 10 us niczego nie
    zmieniło.
    Jest bardzo prawdopodobne, że sterownik wyświetlacza pochodzi z jakiegoś
    starego projektu na AVR, który potem zmodyfikowałem na I2C, aby w końcy
    teraz znów powrócić do bezpośredniej magistrali na PIC32, który jest
    zauważalnie szybszy.


    > Tak jak Zbych podejrzewam chińszczyznę. Sprawdzałeś na innych
    > wyświetlaczach z tym sterownikiem? Bo ogólnie to powinno działać.
    > Robiłem sprawdzanie flagi na STM32: https://pastebin.com/qr0A3CnK

    Niestety, w tej chwili nie mam pod ręką innego egzemplarza. Musiałbym
    dopiero zamówić. Polecasz jakieś zaufane źródło?


  • 6. Data: 2024-01-24 10:26:17
    Temat: Re: HD44780 i szybkie MCU
    Od: "Grzegorz Niemirowski" <g...@g...net>

    Atlantis <m...@w...pl> napisał(a):
    > Moja robocza hipoteza była taka, że pewnie jakiś sygnał jest wystawiany na
    > magistralę zbyt szybko.

    Chodziło mi o to, że na każdym MCU mamy dostępne różne metody odmierzania
    czasu i dzięki nim możemy generować opóźnienia o takiej wielkości jaka jest
    potrzebna. Kiedyś robiłem obsługę LCD na Blackfinie (taktowanie chyba 400
    MHz) i nie było problemów.

    > Zgadzałoby się to z faktem, że na I2C wszystko działało poprawnie - pewnie
    > dlatego, że komunikacja szeregowa wprowadzała dodatkowe opóźnienia
    > pomiędzy kolejnymi zmianami stanów na liniach. Z drugiej strony ręczne
    > dodanie opóźnień 10 us niczego nie zmieniło.

    Na I2C sprawdzałeś flagę zajętości?
    Przy szybkich MCU dochodzi jeszcze stromość zboczy, na STM32 można ją
    konfigurować.

    >> Robiłem sprawdzanie flagi na STM32: https://pastebin.com/qr0A3CnK

    Przepraszam, pomyliłem pliki, w tym nie ma sprawdzania flagi. Poprawny jest
    tu: https://pastebin.com/vUCVDp1Q

    > Niestety, w tej chwili nie mam pod ręką innego egzemplarza. Musiałbym
    > dopiero zamówić. Polecasz jakieś zaufane źródło?

    Nie pamiętam już gdzie kupowałem.

    --
    Grzegorz Niemirowski
    https://www.grzegorz.net/


  • 7. Data: 2024-01-24 12:59:23
    Temat: Re: HD44780 i szybkie MCU
    Od: "J.F" <j...@p...onet.pl>

    On Tue, 23 Jan 2024 17:53:07 +0100, Atlantis wrote:
    > Ktoś z was ma doświadczenie z uruchamianiem wyświetlaczy HD44780 na
    > (relatywnie) współczesnych mikrokontrolerach?

    oryginały były dosc powolne, ale ... powinny być juz dawno, nowe,
    lepsze, szybsze.

    Tylko ktore to, szczegolnie jak pod wyswietlaczem kropla tworzywa :-)

    > Mam urządzenie zbudowane w oparciu o PIC32MX795F512L. Do tej pory
    > korzystałem z wyświetlacza HD44780 (4x20) za pośrednictwem ekspandera na
    > I2C. Niestety komunikacja była dość wolna - tym bardziej, że układ
    > reprezentuje rewizję, która miała hardware'owego buga i na tym
    > konkretnym porcie I2C trzeba było ponawiać konfigurację przed każdą
    > kolejną transmisją.
    >
    > W wolnej chwili postanowiłem więc przeprojektować moduł wyświetlacza i w
    > miejscu ekspandera zastosowałem dwukierunkowy translator poziomów
    > TXB0108. Dwukierunkowy, bo zamierzam korzystać z funkcji odczytu flagi
    > zajętości (była ona również wykorzystywana w wersji z I2C).
    >
    > Przepisałem sterownik, wywalając z niego obsługę I2C. Zamiast tego
    > komunikację oparłem na na GPIO. Po podpięciu nowej wersji interfejsu LCD
    > okazało się, że działa on tylko częściowo. Mianowicie jeśli wyłączę
    > obsługę linii RW (i zamiast sprawdzania flagi zajętości dam
    > standardowego delay'a 120 us) to wszystko działa zupełnie poprawnie. A
    > to oznacza, że GPIO są skonfigurowane poprawnie i komunikacja w stronę
    > wyświetlacza działa.
    >
    > Problem pojawia się, gdy próbuję włączyć obsługę RW i czytać flagę
    > zajętości. Wtedy wyświetlacz niby się inicjuje i nawet jest w stanie
    > poprawnie wyświetlić kilka tekstów, ale w chwilę później układ się
    > zawiesza (podejrzewam, że własnie na pętli sprawdzania bitu zajętości) i
    > zalicza reset WDT. I tak w kółko...

    Ten np
    https://www.tme.eu/pl/details/eadip205b-4nlw/wyswiet
    lacze-lcd-alfanumeryczne/display-visions/ea-dip205b-
    4nlw/

    ma wymagany "setup time" 140ns. Ale np dane na wyjsciu mogą sie
    pojawic po 320ns.

    Z kolei operacja czyszczenia ekranu i Cursor at Home to az 1.64ms.

    > Próbowałem dodawać delay'e 1-10 us po zmianach stanów linii RW i EN, a
    > także po zmianie konfiguracji pinów skaładających się na czterobitową
    > magistralę danych (wejście lub wyjście), jednak nie przyniosło to
    > żadnego rezultatu.
    >
    > Ktoś ma pomysł co może być nie tak?

    Na mój gust - 10us to az za duzo. Ale działac powinno.
    Na początek moze być, potem można dobrać ile wymaga .

    Ale skoro nie działa ... WDG resetuje na pierwszym
    czyszczeniu/inicjacji?

    I tu widzę dwa Enable ...

    A napisz jakis testowy program, ktory pokaże, czy BF w ogóle się
    zmienia ...

    J.


  • 8. Data: 2024-01-24 13:44:38
    Temat: Re: HD44780 i szybkie MCU
    Od: Atlantis <m...@w...pl>

    On 24.01.2024 12:59, J.F wrote:

    > Ale skoro nie działa ... WDG resetuje na pierwszym
    > czyszczeniu/inicjacji?

    Właśnie nie, i to mnie zastanawia. Wyświetlacz działa jeszcze przez
    jakiś czas po inicjacji. Jest w stanie wysłać trochę danych - mam m.in.
    procedurę, która raz na sekundę aktualizuje czas na wyświetlaczu. I
    przez tych kilka sekund widzę, jak wartość sekund się zmienia. Potem
    jednak wyświetlacz zamiera, a po chwili reaguje watchdog.

    Ponieważ wyłączenie define'a odpowiedzialnego za obsługę linii RW
    rozwiązuje problem, pętla oczekiwania na wyczyszczenie flagi wydaje się
    być głównym (jeśli nie jedynym) kandydatem na miejsce, w którym program
    utyka.

    Obecną wersję kodu można zobaczyć tutaj:
    https://github.com/marekw1986/InternetRadioPIC32DP83
    848/blob/harmony/firmware/src/lcd/hd44780.h
    https://github.com/marekw1986/InternetRadioPIC32DP83
    848/blob/harmony/firmware/src/lcd/hd44780.c

    Wstępna inicjalizacja pinów GPIO jest robiona w innym miejscu, przy
    okazji inicjalizacji wszystkich peryferiów.


  • 9. Data: 2024-01-25 15:51:08
    Temat: Re: HD44780 i szybkie MCU
    Od: "J.F" <j...@p...onet.pl>

    On Tue, 23 Jan 2024 21:45:48 +0100, Grzegorz Niemirowski wrote:
    > Atlantis <m...@w...pl> napisał(a):
    >> Ktoś z was ma doświadczenie z uruchamianiem wyświetlaczy HD44780 na
    >> (relatywnie) współczesnych mikrokontrolerach?
    >
    > A jakie to ma znaczenie czy mikrokontroler jest szybki? Z HD44780 poradzi
    > sobie każdy.

    No ale własnie może być za szybki :-)

    J.


  • 10. Data: 2024-01-26 21:57:36
    Temat: Re: HD44780 i szybkie MCU
    Od: "J.F" <j...@p...onet.pl>

    On Wed, 24 Jan 2024 13:44:38 +0100, Atlantis wrote:
    > On 24.01.2024 12:59, J.F wrote:
    >
    >> Ale skoro nie działa ... WDG resetuje na pierwszym
    >> czyszczeniu/inicjacji?
    >
    > Właśnie nie, i to mnie zastanawia. Wyświetlacz działa jeszcze przez
    > jakiś czas po inicjacji. Jest w stanie wysłać trochę danych - mam m.in.
    > procedurę, która raz na sekundę aktualizuje czas na wyświetlaczu. I
    > przez tych kilka sekund widzę, jak wartość sekund się zmienia. Potem
    > jednak wyświetlacz zamiera, a po chwili reaguje watchdog.
    >
    > Ponieważ wyłączenie define'a odpowiedzialnego za obsługę linii RW
    > rozwiązuje problem, pętla oczekiwania na wyczyszczenie flagi wydaje się
    > być głównym (jeśli nie jedynym) kandydatem na miejsce, w którym program
    > utyka.
    >
    > Obecną wersję kodu można zobaczyć tutaj:
    > https://github.com/marekw1986/InternetRadioPIC32DP83
    848/blob/harmony/firmware/src/lcd/hd44780.h
    > https://github.com/marekw1986/InternetRadioPIC32DP83
    848/blob/harmony/firmware/src/lcd/hd44780.c
    >
    > Wstępna inicjalizacja pinów GPIO jest robiona w innym miejscu, przy
    > okazji inicjalizacji wszystkich peryferiów.

    Ja bym tu dorzucil jakies opóznienia między zmianami bitów.
    i sprawdził wymagane zaleznosci czasowe chocby z tym
    https://www.tme.eu/pl/details/eadip205b-4nlw/wyswiet
    lacze-lcd-alfanumeryczne/display-visions/ea-dip205b-
    4nlw/

    i moze nawet przeniosł ustawienie danych

    CLR_RW;
    data_dir_out();
    ?delay

    lcd_sendHalf(_data >> 4);
    ?delay
    SET_E;
    delay
    CLR_E;
    delay

    lcd_sendHalf(_data);
    ?delay
    SET_E;
    delay
    CLR_E;
    ?delay

    Niby dane są zapisywane/pobierane na opadającym zboczu E, ale po co
    czekac.

    uint8_t _lcd_read_byte(void) {
    uint8_t result=0;
    data_dir_in();

    SET_RW;
    delay

    SET_E;
    delay

    result = (lcd_readHalf() << 4);

    CLR_E;
    delay

    SET_E;
    delay
    result |= lcd_readHalf();
    CLR_E;
    delay

    return result;
    }

    nieduzy ten delay - a, na początek testów z 1us, powinno wystarczyc z
    nadmiarem.

    I jeszcze jedno ... nie przeskakuja ci się gdzies w programie połówki?
    Wystarczy, ze raz pykniesz E, i potem reszta programu będzie odwrotnie
    połówki czytała czy zapisywała.

    J.

strony : [ 1 ]


Szukaj w grupach

Szukaj w grupach

Eksperci egospodarka.pl

1 1 1

Wpisz nazwę miasta, dla którego chcesz znaleźć jednostkę ZUS.

Wzory dokumentów

Bezpłatne wzory dokumentów i formularzy.
Wyszukaj i pobierz za darmo: