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

[ATTiny2313/C] Komunikacja z LCD - czy poprawny program?

ADI-mistrzu 05 Gru 2009 17:22 1424 6
REKLAMA
  • #1 7348658
    ADI-mistrzu
    Poziom 30  
    Witam!
    Kiedyś dorwałem wyświetlacz typu HLM6323 czy HLM8619 (w sumie to chyba jedno i to samo).
    W dokumentacji (Znajduje się TU) jest taki wykres przebiegów:
    [ATTiny2313/C] Komunikacja z LCD - czy poprawny program?
    I starałem się napisać jakiś byle jaki prosty program, który by mi pokazał pionowe linie na wyświetlaczu:

    	//PORTD |= _BV(PD1) | _BV(PD2); //transmisja jest 4 bitowa, czyli
    	//PORTD &= ~_BV(PD0) | ~_BV(PD3); // 2 bity zapalone, 2 zgaszone
    
    	LCD_ON; //Stan wysoki na pin od włączenia LCD
    while(1){
    	CP2_ON; //Wygenerowanie sygnały zatrzasku 4 piskesli
    	CP2_OFF;
    	S_ON; //Sygnał S
    	CP1_ON; //Sygnał nowej linii
    	CP1_OFF;
    	S_OFF;
    	for(k=239; k>0; --k){ //pętla do przejścia przez wszystkie 240 linii
    		for(i=79; i>0; --i){
    			CP2_ON; //Pętla do generowania zatrzaśnięcia
    			CP2_OFF; // 320 pikseli (80x4)
    		}
    		CP1_ON; //przejdź do nowej linii
    		CP1_OFF;
    	}
    }

    Program miał działać tak, że na początku zatrzaskuje pierwsze 4 piksele, potem wysyła sygnał S i schodzi linie niżej. Dalej zapala po kolei piksele, i wraca na początek i wykonuje wszystko ponownie.

    Elekt jest taki, że przez wyświetlacz przechodzą pasy, tak jak są zakłócenia czasem w TV tak u mnie coś takiego powstało.
    Niektóre wyświetlacze mają tak, że komendy wysyła im się w czasie wyłączonego wyświetlacza, potem go si.ę na chwile zapala i znowu gasi w celu wyświetlenia następnych.
    Próbowałem i tak tutaj zrobić, wtedy na samym dole wyświetlacza pojawił się pasek który migał w takt częstotliwości jego załączania i wyłączania.

    Wiem że są specjalne sterowniki do sterowania tym wyświetlaczem, ale chciałem go najpierw sprawdzić czy jest sprawny.

    Tak więc jeśli ktoś mógł by sprawdzić kod czy dobrze jest i co może być źle.

    Pozdrawiam
  • REKLAMA
  • #2 7349034
    H0miczek
    Poziom 20  
    A zauwazyłes ze twoje for'y:
        for(k=239; k>0; --k){ //pętla do przejścia przez wszystkie 240 linii 
          for(i=79; i>0; --i){ 

    kręcą sie o jeden raz za mało (obydwa)? Dokładnie to powoduje "jakby zakłócenia" :)
  • REKLAMA
  • #3 7349285
    ADI-mistrzu
    Poziom 30  
    To akurat zamierzone, bo pierwszy cykl na samym początku się wykonuje, czyli sygnał dla 4 pierwszych pikseli, sygnał S i dalej reszta pikseli, dlatego zabrałem jedną pętle.
  • REKLAMA
  • #4 7349335
    H0miczek
    Poziom 20  
    hmm, ale co Ci mają dać 4 piksele jak w for'ach w kazdej linii brakuje 4 i jeszcze calej linii? moze ja czegos nie rozumiem ale zdaje sie ze zbyt "doslownie" potraktowales wykres.
    pelny jeden cykl sklada sie z 240 linii razy 80 czteropikselowych danych. Ty masz 239x79+1...
  • REKLAMA
  • #5 7351376
    ADI-mistrzu
    Poziom 30  
    Kurcze, masz rację, tego nie zauważyłem.
    while(1){
    for(i=80; i>0;--i){
    	CP2_ON;
    	CP2_OFF; //wysłanie 320 pikseli 1 linii
    }
    	S_ON;
    	CP1_ON; //sygnał S i przejście do 2 linii
    	CP1_OFF;
    	S_OFF;
    	for(k=239; k>0; --k){ //pętla dla pozostałych 239 linii
    		for(i=80; i>0; --i){
    			CP2_ON; //wysłanie 320 pikseli w linii
    			CP2_OFF;
    		}
    		CP1_ON;
    		CP1_OFF;
    	}
    }

    Czyli teraz jest tak, że na początku jest wysłany stan na pierwszej linii, potem sygnał S i reszta 239 linii po 80 zatrzasków.
    Efekt działania wyświetlacza niestety jest taki sam, albo latający pas z góry na duł lub migająca w takt odświeżania jedna linia na dole (w czasie załączania i wyłączania LCD w czasie transmisji).

    Poniżej, w dokumentacji, jest wykres długości trwania czasów itp. Tam trochę inaczej jest pokazane kiedy ma się pojawić S względem CP1. Zmieniłem tak jak jest tam pokazane ale efekt pozostał bez zmian.
    ...
    	CP1_ON; //sygnał S i przejście do 2 linii
    	S_ON;
    	CP1_OFF;
    	S_OFF;
    ...
  • Pomocny post
    #6 7355105
    H0miczek
    Poziom 20  
    Dobra. Przejrzalam datasheeta i nie widze uchybien ;]
    Z wyswietlaczami, jak nie dzialają, robi sie tak:
    1. wyswietlasz tylko jeden piksel w (0,0)
    2. jesli go widac, patrzysz w ktora strone sie przesuwa
    3. wyciagasz wnioski co skopales i poprawiasz (np. jak chodzi w pionie to masz błędną ilosc linii)
    4. jesli nie widac wyswietlasz gdzie indziej (idziesz do pktu 2.)
    5. jesli nadal nie siedzi na swoim miejscu, tylko chodzi, idziesz do pktu 3 i kombinujesz do zaje.. do skutku.
    Albo sie poddasz albo zacznie chodzic, nie ma innej opcji ;]
  • #7 7355406
    ADI-mistrzu
    Poziom 30  
    Zrobiłem mu właśnie taki generalny test, jedynie co udało mi się wyświetlić co bym chciał to te pionowe małe kreseczki obok tych wielkich grubych poziomych krech :wink:
    [ATTiny2313/C] Komunikacja z LCD - czy poprawny program?

    Więc wyświetlacz raczej na straty, a szkoda...

    Dzięki wielkie za pomoc!
    Pozdrawiam
REKLAMA