Elektroda.pl
Elektroda.pl
X
Proszę, dodaj wyjątek www.elektroda.pl do Adblock.
Dzięki temu, że oglądasz reklamy, wspierasz portal i użytkowników.

LCD TQL16D2-1 bascom

jacobsek 24 Maj 2006 10:58 2116 9
  • #1 24 Maj 2006 10:58
    jacobsek
    Poziom 22  

    Witam.
    Uruchomiłem wyświetlacz negatywowy i niestety widoczny jest tylko 1 rząd prostokątów.
    W dokumentacji mam typ sterownika KS0076B.
    Konfiguracja w programie:

    Config Lcd = 16 * 2
    Config Lcdpin = Pin , Db4 = Portb.0 , Db5 = Portb.1 , Db6 = Portb.2 , Db7 = Portb.3 , E = Portd.6 , Rs = Portd.4
    Wyprowadzenie Vo podłączone do perka(to zdaje się kontrast bo bez niego nie świeci).
    Wyprowadzenia DB0-DB3 i RW połączone z gnd.W opcjach kompilatora porty ustawione zgodnie z deklarowanymi.Używam bascom-avr.

    W załączniku jest rozpiska od tego wyświetlacza.
    Do podświetlania podpiołem r=270 ohm ale zauważyłem że czasami nie chce startować,startuje dopiero w momencie podpięcia mniejszej rezystancji,jak wystartuje na mniejszej rezystancji to później chodzi,być może trzeba dać mniejszą jej wartość?
    Jeśli ktoś mógłby pomóc w uruchomieniu tego lcd to bardzo proszę.
    Pozdrawiam

    Wiem już że sterownik jest zgodny z HD więc bascom powinien sobie poradzić,nie wiem tylko czy może być rozbite sterowanie na częściowo port B i D,czy też musi być cały lcd dołączony do jednego portu,np.B?

    Posty scaliłem, używaj przycisku "Zmień"
    McRancor

    0 9
    Załączniki:
  • Pomocny post
    #2 24 Maj 2006 19:55
    guteczek
    Poziom 10  

    Witam.
    Mam podobny problem,nie inicjuje się lcd w bascom,podpięte mam pod jednakowy port tzn.B i nic.
    Szukam tego tematu ale wszędzie wskazówki co zrobić gdy kontrast nie podpięty itd. ale mam wszystko podpięte i nie działa.
    Też mam go podpiętego do attiny2313 i kwarc 8Mhz,procedurka z bascoma jak u Ciebie i też jeden rządek tylko świeci,wygląda tak jak gdyby nie przeszedł inicjacji.
    Poczekam może ktoś Tobie odpowie co dalej choć widzę że albo bascomowców tu mało albo nikt nie chce podpowiedzieć co dalej.
    Do tej pory używałem led 7-segment a teraz chciałem unowocześnić zabawki i zapalić lcd.
    Pozdrawiam

    0
  • Pomocny post
    #3 24 Maj 2006 23:46
    M. S.
    Poziom 34  

    Było sporo informacji na tym forum o podobnych problemach.
    Wyprowadzenia tego wyświetlacza są identyczne jak stosowanych przeze mnie z pozytywnym skutkiem. Raz tylko złapałem się na podobnej nieprawidłowości bo nie podłączyłam końcówki 5 wyświetlacza do masy. Niektórzy twierdzą ponadto, że końcówki DB0 - 3 przy sterowaniu 4 bitowym też powinny być zwarte z masą.
    W Bascomie nie ma osobnej instrukcji do inicjalizacji LCD. Stosuje się Config Lcd, a i to czasami nie jest wymagane jeśli przypiszemy końcówki uC do LCD w opcjach Bascoma. Co do przypisania to jest ono dowolne (wystarczy wskazać która końcówna uC jest podpięta do której końcówki LCD-ka.

    W takim przypadku sprawdziłbym dokładnie połączenia (np podgięte nóżki pod uC). Jeśli to nie pomoże to wskazywałoby to na niezgodność sterownika z HD (choćby czasową). Trzeba by wtedy wykombinować inicjalizację tak jak robi się to w "C". Ostatecznie można próbować zadeklarować w programie nieco większą częstotliwość generatora taltującego uC tak aby transmisja do LCD była wolniejsza.

    0
  • #4 25 Maj 2006 06:54
    jacobsek
    Poziom 22  

    co do połączeń to wszystko mam ok.
    R/W mam na masie,wolne Dbo-Db3 też.Być może masz rację z tymi niezgodnościami,wiem że było to na forum bo przeglądałem to lecz przeważnie ograniczały się te problemy do tego że ktoś zapomniał coś podłączyć.Odnośnie częstotliwości to jeśli ją zwiększę tak jak pisałeś to szybkość transmisji spadnie?
    Pozdrawiam.

    0
  • #5 25 Maj 2006 07:36
    M. S.
    Poziom 34  

    Tak. Bascom dostosuje czasy wykonywania programu do większej szybkości pracy procesora przez co przy takiej samej czestotliwości taktowania czasy oczekiwania wplecione w program ulegną wydłużeniu, co może usprawnić transmisję. Reasumujac: próbowałbym zwiększyć wartośc przy $crystal pozostawiając dotychczasową fizyczną częstotliwość pracy uC. Jeżeli się nie uda bedzie trzeba przestudiować note katalogową i napisać odrębny podprogram inicjujący podobnie jak robi się to w C. Powodzenia.

    0
  • #6 25 Maj 2006 08:13
    jacobsek
    Poziom 22  

    Zmiana $crystal nic nie daje,jeśli chodzi o program inicjacji to ma być pisany w bascom czy w asm,bo asm nie znam

    0
  • Pomocny post
    #7 25 Maj 2006 08:31
    M. S.
    Poziom 34  

    Język nie jest ważny. Polega to na odpowiednim ustawieniu sygnałów na wejściach LCD czyli sterowania rejestru Port. Jak wrócę z pracy to wstawię tu kod napisany w C dla zwykłego LCD ( z lekkim tłumaczeniem). Może uda się to przerobić na Bascom. Wtedy uzyska się dostęp do czasów. Do tego czasu spróbuj wyssać procedurę inicjacji z noty katalogowej.
    P.S. Ja też nie trawię Asm.

    To co napiszę niżej nie będzie dla Bascomowca łatwe ani przyjemne

    Code:
    void lcd_init(void)      // procedura inicjalizacji wyświetlacza LCD
    
    {unsigned char LCD = 255 //Zmienna z bajtem do zaposania w LCD
       delayms(100);    // czekaj 15ms na ustabilizowanie się napięcia zasilającego
       CLR_E;    // Ustaw E na 0
       CLR_RS; // Ustaw RS na 0
       char i; // zmianna licznikowa
       for(i = 0; i < 3; i++) // trzykrotne powtórzenie bloku instrukcji
       {
          LCD &= 0x3F;// Zachowaj w zmiennej LCD bity w miejscach gdzie w masce (00111111) są jedynki, resztę wyzeruj.
          SET_E;       // E = 1
          ustaw(LCD);   // Wyślij daną do LCD
          CLR_E;       // E = 0
          waitms(5);    // czekaj 5ms
       }
       LCD &= 0x2F;   // Zachowaj w zmiennej LCD bity w miejscach gdzie w masce (00101111) są jedynki, resztę wyzeruj.
       SET_E;          // E = 1
       ustaw(LCD);      // Wyślij daną do LCD
       CLR_E;          // E = 0
       waitms(1);       // czekaj 1ms
       // Konfiguracja
       write_command(0x28); // interfejs 4-bity, 2-linie, znak 5x7
       write_command(0x08); // wyłącz LCD, kursor i miganie
       cls;              // czyść LCD
       write_command(0x06); // bez przesuwania w prawo
       write_command(0x0C); // włącz LCD, bez kursora i mrugania
    }

    void write_command(char x) // procedura zapisu instrukcji do wyświetlacza LCD
    {
       CLR_RS;          // niski stan na RS -> zapis instrukcji
       write_to_lcd(x);    // zapis do LCD
    }

    void write_to_lcd(char x) // procededura zapisu bajtu do wyświetlacza LCD
    {
       SET_E;               // ustaw na E stan wysoki
       ustaw(x);           // Wyślij daną do LCD
       CLR_E;               // opadające zbocze na E -> zapis do wyświetlacza
       SET_E;               // ustaw na E stan wysoki
       ustaw(x<<4);        // Wyślij daną do LCD przesuniętą o 4 miejsca w lewo
       CLR_E;               // opadające zbocze na E -> zapis do wyświetlacza
       delayms(1);         // czekaj 1ms
    }


    ale tak się w prosty sposób inicjuje w C wyświetlacz LCD ze sterownikiem HD... Jesli Twój wyświetlacz wymaga innych zabiegów to trzeba je zrobić.

    Siła BASCOMA polega na tym że podobnych rzeczy nie trzeba robić, a słabość leży w tym, że jeśli konieczne są zmiany w sterowaniu to rozklada ręce - coś za coś.

    0
  • #8 27 Maj 2006 07:09
    jacobsek
    Poziom 22  

    Witam.
    Z niewiadomych(niestety) przyczyn wyświetlacz ruszył i od tej pory działa cały czas,inicjuje się bez problemu.Zauważyłem przy okazji że jeśli wyświetlam zmienną której wartość zmieniana jest w przerwaniu to lcd migocze,musiałem dać instrukcję opóźnienia w procedurze wyświetlania,natomiast gdy wartość tej zmiennej przepiszę w procedurze wyświetlania do zmiennej pomocniczej to działa bez instrukcji opóźnienia i bez migania,czy tak należy robić czy też są jakieś inne sposoby?.Zrobiłem też takie cosik:napisy stałe pozostawiam bez zmian a nową wartość zmiennej wymazuję poprzez wyświetlenie na jej miejscu odpowiedniej liczby spacji i wstawienie w to miejsce nowej wartości,a to dlatego że używając polecenia cls na poczatku procedury wyświetlania cały wyświetlacz pomruguje denerwująco,czy na to są jakieś inne sposoby?.
    Pozdrawiam

    0
  • #9 27 Maj 2006 12:29
    M. S.
    Poziom 34  

    W podprogramie obsługi przerwania powinno się wstawiać tylko niezbędne instrukcje, tak aby nie blokować na dłuższy czas innych przerwań. Wyświetlanie lepiej przenieść do pętli głównej lub umieścić w podprogramie.
    Metoda wyświetlania bez CLS jest dobra, jednak nie trzeba "kasować"wyświetlacza spacjami. Należy nadpisać dany fragment. Spacje można wyświetlić dodatkowo jeśli zmienna może mieć różną długość. Pozbywamy się właściwie migotania.
    Zdarzało mi się wyświetlać zmienną w instrukcji warunkowej - Jeśli nastąpiła zmiana to wyświetl. Nie trzeba wtedy katować wyświetlacza w każdym przebiegu pętli.

    0
  • #10 28 Maj 2006 10:38
    jacobsek
    Poziom 22  

    Właśnie o to chodzi że zmienna ma ciągle inną długość,jest to licznik rewersyjny i dlatego wymysliłem kasowanie spacjami w ilości maksymalnego rozmiaru wyświetlanej liczby.W przerwaniu mam zrobione liczenie do enkodera a wyświetlanie jest wywoływane z pętli głównej jako procedura więc nie ma kolizji.

    0