Elektroda.pl
Elektroda.pl
X
Please add exception to AdBlock for elektroda.pl.
If you watch the ads, you support portal and users.

LCD TQL16D2-1 bascom

jacobsek 24 May 2006 10:58 2329 9
  • #1
    jacobsek
    Level 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
    Attachments:
  • Helpful post
    #2
    guteczek
    Level 11  
    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
  • Helpful post
    #3
    M. S.
    Level 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.
  • #4
    jacobsek
    Level 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.
  • #5
    M. S.
    Level 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.
  • #6
    jacobsek
    Level 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
  • Helpful post
    #7
    M. S.
    Level 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

    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ś.
  • #8
    jacobsek
    Level 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
  • #9
    M. S.
    Level 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.
  • #10
    jacobsek
    Level 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.