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

Maksymalna długość przewodów do LCD alfanumerycznego przy 4-bitowym sterowaniu?

dwitek 28 Lis 2008 19:59 3364 13
REKLAMA
  • #1 5794634
    dwitek
    Poziom 12  
    Posty: 92
    Ocena: 3
    Jak w temacie, czy ktoś testował jaka może być maksymalna długość przewodów do LCD alfanumerycznego przy sterowaniu 4-ro bitowym ???

    Muszę podłączyć LCD do '51 na kablu ok. 10mb. Czy jest to realne?

    W tej chwili mam kabel (skrętka FTP) o długości ok. 7mb i niestety nie działa. To znaczy wyświetla nieprawidłowo znaki, czasem pół lini jest porawnie, a drugie pół "krzaczki", a najczęściej cała linia to same "krzaczki".
    Nie wiem czy pomogą zmiany w programie (jakieś delay'e), czy po prostu na takiej odległości nie ma szans aby to działało.

    Jeśli nie ma szans to jakie ewentualnie wyjście jest możliwe przy takiej odległości ???
  • REKLAMA
  • #3 5795126
    dwitek
    Poziom 12  
    Posty: 92
    Ocena: 3
    Więc jakie inne wyjście ???

    Nie mogę przenieść ani uC ani LCD.
    A jakieś inne podłączenie LCD ?? I2C ??
  • #4 5795170
    elektryk2000
    Specjalista urządzeń chłodniczych
    Posty: 5136
    Pomógł: 221
    Ocena: 576
    U mnie też się wykrzaczał.
    Przestał po dołączeniu kondensatora ceramicznego 10nF między Enable a GND.
    Ważne - kondensator na płycie LCD, nie przy uC...
    Przy około 1m leczy takie problemy, 10m nie przyszło mi do głowy testować, bo nie było takiej konieczności ;)
  • REKLAMA
  • #5 5795213
    antrykot
    Poziom 20  
    Posty: 470
    Pomógł: 27
    Ocena: 27
    W ostateczności można by dać drugą płytke do lcd, 'na kanapke' a na niej jakiś mały procek w smd. A komunikacja między nimi po RS232.

    Ale sądze że kondy na linie, koraliki ferrytowe i mała częstotliwość wysyłania znaków powinny wystarczyć.
  • #6 5795243
    don diego
    Poziom 32  
    Posty: 1557
    Pomógł: 165
    Ocena: 63
    Mikrokontroler, albo ekspander przy wyświetlaczu. Nie wiem, czy I2C się sprawdzi na takiej odległości. Chyba jest dedykowane do krótszych dystansów. Ja bym próbował raczej SPI albo 1wire, ale ciężko mi powiedzieć co się lepiej sprawdzi.
  • REKLAMA
  • #7 5795262
    dwitek
    Poziom 12  
    Posty: 92
    Ocena: 3
    A ewentualne zmiany w procedurkach:

    
    //Delay 1ms
    void delay(unsigned int a)
    {
     unsigned int b,c;
     for(c=0;c<a;c++)
     for(b=0;b<=112;)b++;
    }
    
    //LCD Display
    void LCDWriteByte(unsigned char a)
    {
     P2|=0xF0;
     P2&=(a|0x0F);
     LCD_E=0;
     LCD_E=1;
     a<<=4;
     a|=0x0F;
     P2|=0xF0;
     P2&=a;
     LCD_E=0;
     delay(2);
    }
    void LCDWriteRegister(unsigned char a)
    {
     LCD_RS=0;
     LCD_RW=0;
     LCD_E=1;
     LCDWriteByte(a);
    }
    void LCDWriteData(unsigned char a)
    {
     LCD_RS=1;
     LCD_RW=0;
     LCD_E=1;
     LCDWriteByte(a);
    }
    void LCDClrScr(void)
    {
     LCDWriteRegister(0x01);
    }
    void LCDInitialize(void)
    {
     unsigned char b;
     LCD_RS=LCD_RW=LCD_E=0;
     for(b=0;b<3;b++)
     {
      LCD_E=1;
      P2&=0x3F;
      LCD_E=0;
      delay(2);
     }
     LCD_E=1;
     P2&=0x2F;
     LCD_E=0;
     delay(2);
     LCDWriteRegister(0x2F);
     LCDWriteRegister(0x0C);
     LCDWriteRegister(0x06);
     LCDWriteRegister(0x01);
    }
    void LCDGotoXY(unsigned char a, unsigned char b)
    {
     switch(b)
     {
      case 0:
             a+=0x80;
             break;
      case 1:
             a+=0xC0;
             break;
      case 2:
             a+=0x94;
             break;
      case 3:
             a+=0xD4;
             break;
     }
     LCDWriteRegister(a);
    }
    void LCDWriteText(unsigned char txt)
    {
     LCDWriteData(txt);
    }
    


    ???

    Jutro popróbuję jeszcze z kondensatorami.
  • #8 5795399
    marek_Łódź
    Poziom 36  
    Posty: 3103
    Pomógł: 208
    Ocena: 66
    Tego typu testy są o tyle bez sensu, że i tak zawsze mogą się zdarzyć okoliczności, gdy układ przestanie działać. I co wtedy?
    Dać np. RS485, przy wyświetlaczu mały procesorek i problem z głowy. Pewność działania wzrośnie wielokrotnie.
  • #9 5795529
    dwitek
    Poziom 12  
    Posty: 92
    Ocena: 3
    Problem w tym, że w uC UART już mam zajęty. Do LCD jak najbardziej mogę dołożyć uC, np. AT89C4051, który mi go w pełni obsłuży, tylko jak te uC ze sobą skomunikować nie używając UART oraz przerwań zewnętrznych (również zajęte).

    Dla mnie, jeśli nie uda się to rozwiązać programowo (w co wątpię) chyba najwygoniejszy byłby jeszcze jakiś I2C, choć też nie wiem czy będzie to pewne rozwiązanie ???
  • REKLAMA
  • #12 5796229
    nouki
    Poziom 25  
    Posty: 1222
    Pomógł: 28
    Ocena: 97
    Ja podłączyłem kiedyś wyświetlacz zwykłą taśmą do stacji dyskietek ok 20cm ( piny powiedzmy parzyste to masa a nie parzyste to sterowanie było wiec na przemian linia i masa) układ - wyświetlacz i uc były w aluminiowym ekranie lecz układ działał w ładowarce w której prąd wyjściowy dochodził do 70A i zawsze wyświetlacz wykszaczało w chwili uruchomienia trafa głównego bądź pojawiały się jakieś dziwne dodatki a po jakimś czasie kończyła sie praca jego - nie pokazywał nic bądź chińskie znaki:)

    Pomogła zmiana długości taśmy zawsze lepiej i szybciej było zastosować gotową która była za długa i była zwinięta i upchana ( dając zwoje) wystarczyło obciąć ja i skrócić do wymaganej długości i problem rozwiązał się)
  • #13 5796328
    marek_Łódź
    Poziom 36  
    Posty: 3103
    Pomógł: 208
    Ocena: 66
    Balu napisał:
    Użyj UARTu softwareowego, Wstaw bufory na linie wyjściowe, napisz własny dość wolny protokół 2-wire, możliwości co niemiara.
    UART softwarowy + drivery różnicowe RS485 są najpewniejsze. Z kilku linii wyświetlacza wystarczy praktycznie jedna, czy dwie (jeśli chcemy mieć potwierdzenia)+2 przewody zasilania. Procedur emulacji UARTA w necie znajdzie się pewnie parę.
  • #14 5825732
    dwitek
    Poziom 12  
    Posty: 92
    Ocena: 3
    Z racji że całość musiała być w miarę szybko uruchomiona, po wielu próbach doszedłem do następującego rozwiązania tymczasowego (prowizorki :-)), ale w miarę skutecznego.
    Zastosowanie kondensatorów nie dawało niestety żadnej zmiany. Próbowałem i na RS i RW i E, i praktycznie nie było żadnej różnicy, ani lepiej ani gorzej. Widocznie już przy tak dużych odległościach nie daje to żadnej poprawy.

    Pierwszą rzeczą, którą zrobiłem to powstawiałem w procedurkach obsługi LCD, po każdej z operacji dotyczących obsługi LCD 1ms delay'e, co w znaaaaacznym stopniu poprawiło już wyświetlanie tekstów, a tylko baaaardzo mninimalnie "zwolniło" wyświetlanie. W chwili obecnej tekst jest już prawie idealnie wyświetlany, sporadycznie (czasem raz na minutę, czasem dopiero po kilku godzinach) zostanie wyświetlony jakichś "krzaczek".
    Więc dodatkowo wstawiłem procedurkę co 1 min. LCDClrScr.

    Rozwiązanie było w miarę szybkie, skuteczne, ale zdaję sobie sprawę, że zdecydowanie tymczasowe, więc najbliższym wolnym czasie będę musiał to przerobić już "hardware'owo".

    Dziękuję za opinie i pozdrawiam

Podsumowanie tematu

✨ Maksymalna długość przewodów do alfanumerycznego LCD sterowanego w trybie 4-bitowym jest bardzo ograniczona – testy wykazały problemy już przy około 1,5 m przewodu, a 7 m skrętki FTP powoduje nieprawidłowe wyświetlanie znaków. Próby poprawy działania poprzez dodanie kondensatorów ceramicznych 10nF między linią Enable a masą na płytce LCD dały poprawę przy długości około 1 m, ale nie rozwiązały problemów na większych odległościach. Zwiększenie opóźnień w procedurach sterujących LCD (np. 1 ms delay po każdej operacji) znacząco poprawiło stabilność wyświetlania, choć sporadyczne błędy nadal występują. Zalecane jest stosowanie komunikacji szeregowej z małym procesorem przy wyświetlaczu, np. z wykorzystaniem protokołu RS485 lub własnego, wolnego protokołu 2-wire, co pozwala na znaczne wydłużenie odległości i stabilność transmisji. I2C jest mniej polecane na duże dystanse, a SPI lub 1-wire mogą być alternatywą, jednak ich skuteczność zależy od konkretnej implementacji. Softwarowy UART z driverami RS485 jest uznawany za najbardziej niezawodne rozwiązanie przy długich przewodach. W przypadku braku wolnych linii UART i przerwań, można rozważyć własne protokoły komunikacyjne lub dodatkowy mikrokontroler przy LCD. Skracanie długości przewodów i unikanie zwiniętych pętli kabla również poprawia stabilność działania.
Wygenerowane przez model językowy.
REKLAMA