eGospodarka.pl
eGospodarka.pl poleca

eGospodarka.plGrupypl.misc.elektronikaHD44780 i szybkie MCURe: HD44780 i szybkie MCU
  • Data: 2024-01-26 21:57:36
    Temat: Re: HD44780 i szybkie MCU
    Od: "J.F" <j...@p...onet.pl> szukaj wiadomości tego autora
    [ pokaż wszystkie nagłówki ]

    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.

Podziel się

Poleć ten post znajomemu poleć

Wydrukuj ten post drukuj

Najnowsze wątki z tej grupy


Najnowsze wątki

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: