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

[PIC24H][C+ASM] Kontroler do LCD mono 640x480 (S1D13705)

Freddie Chopin 08 Sty 2008 15:34 15352 83
  • #1 08 Sty 2008 15:34
    Freddie Chopin
    Specjalista - Mikrokontrolery

    idea jest skonstruowanie sterownika do matrycy LCD. matryca wymaga cialego odswiezania. dlatego na obecna chwile sklaniam sie do uzycia w projekcie ukladu sterownika z pamiecia SED1375 / S1D13705, ktory bedzie obslugiwany przez procesor PIC24HJ256GP210 (40MIPS, 100 pin).

    Idea jest taka, zeby sterownik ten odbieral i przetwarzal komendy (znak, linia, kolko, kwadrat, bmp, itd.) od urzadzenia nadrzednego poprzez RS232 albo SPI (tryb transmisji wybierany przy uzyciu jumpera przed uruchomieniem ukladu). po ich przetworzeniu wrzucalby to do pamieci sterownika. uzycie samego procesora i pamieci SRAM jest niemozliwe, poniewaz symulacje pokazuja, ze dla tego LCD procesor mialby wolne przez cale 8 instrukcji miedzy kolejnymi przerwaniami wyrzucajacymi dane na LCD - o ile to by jeszcze dalo rade w miare, jesli chodzi o obliczenia, problemem bedzie konflikt zapisu i odczytu do RAMu, ktorego nie da sie tak prosto rozwiazac /; stad moja decyzja o tym sterowniku.

    w skrocie wiec procesor robi za posrednika miedzy hostem, a ukladem sterownika. jest to potrzebne, poniewaz sterownik ten wymaga podlaczenia chyba ze 40 linii, co raczej zablokowaloby zwykly procesor (brak I/O). dodatkowo - magistrala RS232 lub SPI pozwoli na uzycie tego w dowolnym projekcie - zarowno mikroprocesorowym jak i bezposrednio z PC.

    idea wydaje sie prosta dosyc - uklad po skonfigurowaniu go tona rejestrow zajmuje sie najgorszym, tzn wyrzucaniem danych na LCD, a procek pozwala dorzucac dowolne funkcje rysunkowe. mam juz w glowie zarys ciekawego protokolu komunikacji tych dwoch urzadzen ze soba.

    moze na wstep tyle wystarczy. jesli ktos jest zainteresowany wspoluczestnictwem w tym projekcie, to zapraszam. czekam tez na komenty do tej sprawy, bo na pewno cos pominalem, co sprawia, ze projekt ten jest super skomplikowany i na pewno sie nie uda.

    [powyzszy text przekleilem z drobnymi zmianami z innego forum, moze wiec brzmiec troche dziwnie [; ]

    schemat tegoz potwornego urzadzenia, ponizej mozna obejrzec wstepny projekt glownej czesci plytki (nie zgadzaja sie designatory, brak czesci zasilajacej jak i linii zasilania i masy, traktujcie to pogladowo...)

    [PIC24H][C+ASM] Kontroler do LCD mono 640x480 (S1D13705)

    na schemacie brakuje oczywiscie wyjscia na sam panel LCD, ale to detal - wyjscie jest za buforami HCT ktore sa skrajnie po prawej. nie zdecydowalem sie jeszcze jak to polaczyc z tym panelem. brakuje tez jumperka od wyboru transmisji, bo to rowniez detal chwilowo [;

    fajnie by bylo, gdyby ktos poprzegladal co tam wymodzilem i znalazl ewentualne bledy, ktore sprawia, ze bedzie cos nie tak. chcialbym tego uniknac w miare mozliwosci, bo uklad sterownika kosztuje 60zl i troche ciezko go przylutowac, nie mowiac juz o tym, ze jeszcze ciezej jest go odlutowac. (nie wspominajac juz w ogole o tym, ze nie wiadomo, czy hurtownia mi sprowadzi ten uklad, mam nadzieje ze to zrobia [; ). sam schemat wydaje sie extremalnie prosty, gorzej z PCB, ktore jest extremalnie trudne (raster 0.25mm, sciezki 0.25mm [procesor i sterownik maja footprinty milimetrowe, a nie milsowe, dlatego tez cale PCB jest zaprojekowane milimetrowo]). projekt po zakonczeniu oczywiscie planuje udostepnic - schemat, plytke, kod, wrzuty do procka, dokumentacje protokolu.

    ktos ma jakies dobre komentarze do tego projektu? z gory dzieki za wszelkie przydatne komentarze

    0x41 0x56 0x45!!

    0 29
  • CControls
  • #2 10 Sty 2008 20:11
    Freddie Chopin
    Specjalista - Mikrokontrolery

    czyzby brak zainteresowanych / znajacych sie na temacie?

    0x41 0x56 0x45!!

    0
  • #3 10 Sty 2008 21:24
    Pijopic
    Poziom 17  

    Tez mam taki wyswietlacz i kiedys planuje go wykorzystac, ale troche brak czasu na zajecie sie nim :( Moja koncepcja jest troche inna, polega ona na adresowaniu przez mikrokontroler pamieci w ktorej bylo by wszystko co ma byc wyswietlane, pozwoli to wykorzystac znacznie slabszy mikrokontroler przy takich samych parametrach, ale to narazie tylko pomysl, a kiedy sie do tego dbiore to jest dopiero zagadka :D

    0
  • #4 10 Sty 2008 21:26
    Freddie Chopin
    Specjalista - Mikrokontrolery

    no tak, tez to zauwazylem [;

    niemniej jednak moze ktos sie zna, przeciez bascomuszki siedza tutaj, bo ktos im pomaga, wiec ten ktos musi sie znac.

    EDIT:

    wszystko fajnie - mozna tak zrobic, problemy zaczynaja sie dopiero wtedy gdy chcesz do tej pamieci cos zapakowac, uprzednio cos odczytawszy. tutaj ten slabszy kontroler po prostu NIE WYROBI aby wpasowac sie w okienko podczas ktorego pamiec ma wolne, dlatego tak istotna jest szybkosc... pozatym takie rozwiazanie jest o wiele bardziej skmplikowane [; potrzebne sa wylaczane bufory, jakies zatrzaski, nie mowiac juz o skomplikowanym kodzie (oczywiscie nie musze mowic, ze wszelkie bascomy czy c nie wchodza w ogole w rachube). zastanow sie czy warto tak kombinowac [;

    0x41 0x56 0x45!!

    0
  • CControls
  • #5 10 Sty 2008 22:31
    Pijopic
    Poziom 17  

    Tylko ze ja nie chce nic zapisywac w pamieci, tylko i wylacznie korzystac z tego co w niej bedzie zapiosane na wstepje, a to juz bardzo prosta sprawa. Oczywiscie ogranicza to ogromnie mozliwosci ale jak upraszcza sprawe.

    0
  • #6 10 Sty 2008 22:32
    Freddie Chopin
    Specjalista - Mikrokontrolery
  • #7 11 Sty 2008 10:13
    Ch.M.
    Poziom 27  

    Witaj
    Na wstępie delikatne upomnienie, by nie wrzucać linków do allegro: mogłeś od razu do spec. technicznej.
    Myślę, że jeśli jeszcze nie kupiłeś tej matrycy to tego nie rób. Sterowanie jej jest bardzo upierdliwe ze względu na fakt podziału na górną i dolną część, a także inne aspekty typu konieczność odświerzenia danych (obrazu). Z tego co widzę to jest to demontaż ze starych laptopów i jakość wyświetlanego obrazu pewnie będzie budzić spore zastrzezenia. Jeśli jesteś ambitny to zrób i oprogramuj sterownik do kolorowej matrycy np. na procku AVR32, bo podejrzewam ze najmocniejsza wersja (taz z wbudowanym cashem RAM) jest w stanie sobie z tym poradzić.
    Pozdrawiam

    0
  • #8 29 Sty 2008 16:12
    Freddie Chopin
    Specjalista - Mikrokontrolery

    [11 Sty 2008 11:10]

    matryce juz kupilem [; moj kolega ma taka i wyswietla na niej staly obraz - jest calkiem dobrej jakosci, wiec tym sie nie martwie. kolorki nie sa potrzebne, czarno bialy obraz do mojego zastosowania w zupelnosci wystarczy, kolorowy bylby juz przesada [; Upierdliwosc sterowania rozwiazana jest przez modul sterownika S1D13705 - on zajmuje sie wszystkim, wlacznie z podzialem na dwa ekrany.
    ________________

    [15 Sty 2008 14:52]

    oto zabaweczka [;

    [PIC24H][C+ASM] Kontroler do LCD mono 640x480 (S1D13705)

    teraz tylko skonczyc te projekty glupie i mozna sie wreszcie zabrac za cos ciekawego...
    _______________

    oto link do schematu i wzoru plytek - jesli komus rzucaja sie w oczy jakies mocne bledy, to prosze o info - jutro chcialbym to wytrawic (czy tam sprobowac wytrawic <: )

    http://www.speedyshare.com/884767226.html

    z gory dzieki

    0x41 0x56 0x45!!

    0
  • #9 29 Sty 2008 22:03
    asembler
    Poziom 32  

    Ja przymierzam się do sterowania takiego wyświetlacza za pomocą ATMEGI128 z zewnętrzną pamięcią. Na razie wyliczyłem ze spokojnie da sobie radę. Oczywiscie załozyłem ze matryca ma 8 bitową magistralę.
    Jeszcze 25% czasu zostanie na inne pierdółki

    0
  • #10 29 Sty 2008 22:37
    Freddie Chopin
    Specjalista - Mikrokontrolery

    ja natomiast wyliczylem, ze 40mipsowy PIC24H nie da rady [; nie wiem wiec jak to policzyles <: . symulacja pokazala mi, ze pomiedzy przerwaniami od wyrzucania danych, procesor ma cale 7 wolnych taktow... czyli ogolnie to nic bardziej skomplikowanego nie jest w stanie zrobic raczej.

    naprawde wiec nie wiem jak to wyliczyles dla ATMEGI, ktora pewnie ma z 16mipsow... [;

    0x41 0x56 0x45!!

    0
  • #11 29 Sty 2008 22:48
    asembler
    Poziom 32  

    pętla głowna która potrafi załadowac dwa bajty na ekran składa sie z 11 taktów
    Wyswietlanie jednej lini to 80 bajtów
    mamy do wyswietlenia 240 linii bo równolegle wyswietlamu górna i dolna czesc ekranu

    zakladajac 40 Hz na poczatek

    liczmy 40z 240x80x11=9 000 000 taktów
    w ciagu sekundy mozna miec 16 mips

    Oczywiscie tam jeszcze przychodza dodatkow przyjecia przerwan ale to jest około 200x240x40 i to w wersji maksymalnej czyli jakie 5 mips
    8+5=13 <16Mips 3/16= około 20% wolnego czasu

    Zresztą zobacz

    https://www.elektroda.pl/rtvforum/viewtopic.php?t=927255&highlight=

    a sterowanei jest półbajtowe i na jeden bajt zuzywam 22 takty
    a w tym 640x480 na dwa bajty 11 taktów

    0
  • #12 29 Sty 2008 23:06
    Freddie Chopin
    Specjalista - Mikrokontrolery

    w twoim liczeniu znajduje sie lekka pomylka jak dla mnie - wyswietlenie jednej linii na takim wyswietlaczu to 160 bajtow (bo w istocie wyswietlasz 2 linie).

    w kazdym razie moja wersja obliczen:
    wyswietlanie po 8b na raz (4 na dolna i 4 na gorna linie), po 160 na kazda z linii, po 240 linii. daje to conajmniej 38k przerwan na jedna klatke obrazu. biorac teraz twoje dane - daje to 17MIPSow.

    tak w ogole to moje pierwsze obliczenia dla PICa pokazywaly, ze z pamiecia da rade, jednak zauwaz, ze (zakladajac 60Hz dla dobrego obrazu) dla procesora o 16MIPSach konieczne jest wywolanie przerwania co 6 instrukcji (2.3M przerwan na sekunde)... to jest po prostu niewykonalne <:

    0x41 0x56 0x45!!

    0
  • #13 29 Sty 2008 23:15
    asembler
    Poziom 32  

    Nie wiem z jakim ty sie spotkałes wyswietlaczem ja mam kilka not wyswietlaczy 640x480 i kazy ma dwie oddzielne magistrale 8 bitowe na dolna i na górną połówkę. A przerwania przy 40hz następuja 10 000 na sekunde nich ci bedzie ze 60Hz to sie troszkę atmegę podkręci:-)przy 60Hz 14 400 na sekunde. Czyli nie tak jakos bardzo wyzyłowane.
    Ten mój wyswietlacz ma duzy czas reakcji weic nawet przy 32HZ bie za bardzo miga.
    Program w przerwaniu ma wysłąc 80 bajtów równolegle na dolna i górną połowke czyli 11x80 =880 taktów wiec nei ma pomyłki. teraz przelicz sobie ile trwa przerwanie a ile czas miedzuy przerwaniami. Wyjdzie ze mnóstwo czasu:-)

    0
  • #14 29 Sty 2008 23:21
    Freddie Chopin
    Specjalista - Mikrokontrolery

    ja za to nie wiem z jakimi ty sie spotkales, bo pierwsze slysze o takich, ktore by mialy 16 linii danych. moj wyswietlacz (i setki innych tego typu) ma 8 linii danych - 4 linie od gornej polowy i 4 linie od dolnej polowy

    zaden z widzianych przezemnie sterownikow scalonych nie obsluzylby wyswietlacza o ktorym mowisz, bo np ten ktory ja mam ma maksymalnie 11 linii danych, co i tak nic nie znaczy, bo po prostu nie istnieja wyswietlacze tego typu (pasywne, podwojne), ktore mialyby 16 linii danych.

    0x41 0x56 0x45!!.

    0
  • #16 29 Sty 2008 23:53
    Freddie Chopin
    Specjalista - Mikrokontrolery

    w istocie - przyznaje racje [; niemniej jednak to niezbyt popularna sprawa.

    0x41 0x56 0x45!!

    0
  • #17 04 Lut 2008 19:37
    asembler
    Poziom 32  

    Freddie Chopin napisał:
    uzycie samego procesora i pamieci SRAM jest niemozliwe, poniewaz symulacje pokazuja, ze dla tego LCD procesor mialby wolne przez cale 8 instrukcji miedzy kolejnymi przerwaniami wyrzucajacymi dane na LCD - o ile to by jeszcze dalo rade w miare, jesli chodzi o obliczenia, problemem bedzie konflikt zapisu i odczytu do RAMu, ktorego nie da sie tak prosto rozwiazac /; stad moja decyzja o tym sterowniku.



    Idea jest tak dopuki ktoś nie napisze lepszego programu niż ten na którym ty symulowałes to bedziesz miał racje. mówisz 8 taktów?
    Juz w tej chwili obsługa dwóch lcd 400x160 z róznymi obrazami i pomiar z czujników DS18b20 dodatkowo obsługa klawiszy i głosniczka nie stanowi problemu i to przy kwarcu 11 Mhz. Mam nadzieję z optymalizowac na tyle program, że obsłuzy on kazdą matryce nawet 640x480.
    Symulacja juz mi pokazała ze bedzie sie to dało zrobic stosując kwarz 8MHz Vsync 50Hz.
    Mam zamiar pokusic zastąpić uklad SED w całości razem ze symulacją sterowania. Jakie to da możliwości to chyba sobie mozna samemu dopowiedzieć.
    Pozdrawiam

    0
  • #18 04 Lut 2008 19:54
    Freddie Chopin
    Specjalista - Mikrokontrolery

    no to moze zamiast sie ciagle chwalic co to ty nie zrobiles to powiesz niby na czym to polega? bo LCD to ja moge nawet 10 obslugiwac, za to z matrycami juz jest problem. czyzbys odkryl ameryke i postanowil zrobic bezposrednie polaczenie miedzy pamiecia a matryca, a kontroler tylko steruje adresami? nic nowego - wymaga przeokropnie skomplikowanej plytki i kupy dodatkowych ukladow (buforow).

    programu lepszego do symulacji nie napisze nikt, bo to MPLAB od microchipa. skoro zgodnie z prostymi obliczeniami przerwanie musialoby byc wywolywane co 17 cykli, a wejscie i wyjscie z przerwania troche trwa (tak jak i samo przerwanie), to nawet nie trzeba symulowac, zeby sobie na palcach obliczyc ile wolnego zostanie. no i procentowo to piekna sprawa ogolnie - w koncu az 50% wolnego czasu w zasadzie, tylko co z tego, skoro jest nieziemsko poszatkowany.

    0x41 0x56 0x45!!

    0
  • #19 04 Lut 2008 20:08
    asembler
    Poziom 32  

    Dlaczego co 17 cykli?
    U mnie przerwanie jest zgłaszane 8000 / sek w przerwaniu obsługiwana jest cała jedna linia. Przy taki przerwaniu mam 1750 taktów na obsługę.
    Spróbuj teraz zasymulowac

    0
  • #20 04 Lut 2008 20:27
    Freddie Chopin
    Specjalista - Mikrokontrolery

    no mozna i tak, zgodze sie.

    tylko juz nie przesadzajmy z cudownoscia tego rozwiazania, bo jednak po pierwsze pamiec tez za darmo nie jest, a po drugie wciaz jest to BARDZO DUZY problem, zeby rozwiazac sprawe arbitrazu zapisu i odczytu do pamieci. uklady S1D zalatwiaja ten problem [; w twoim rozwiazaniu przez pewien dlugi czas (1750 taktow) nie ma mozliwosci zapisu niczego do pamieci, a tym czasie uklad nadrzedny musi czekac...

    moze tez sie kiedys pokusze o zrobienie tego w ten sposob, na razie zostane przy S1D, bo nie mam czasu zbytnio na proby. projekt musi byc gotowy najszybciej jak to tylko mozliwe.

    0x41 0x56 0x45!!

    0
  • #21 04 Lut 2008 20:41
    asembler
    Poziom 32  

    Do tego twojego układu tez musisz pamiec dać no i dodtkowo procesor.
    Pamiec 128KB kosztuje 4.20zł
    A co do tego konfliktu to nie ma zadnego problemu.
    Po pierwsze wchodząc w przerwanie natychmiast w odblokowywuje pozostałę przerwania, wiec układ komunikacji działa sobie niezależnie jak ten inne układy w tym głośnik (byłoby słychac w głośniku ze wyświetlana jest informacja na ekranie.
    Po drugie układ komunikacji nie musi zapisywać akurat do tego samego obszaru w pamieci.
    W rzeczywistosci to wygląda tak ze trzeba dbac tylko o to zeby podczas obsługi przerwania danej linii nie nastąpił zapis z zewnątrz do tej linii co mozna załątwic w prosty sposób tworzac dodatkowy bufor o długosci jednej linii czyli ok 80 bajtów max.

    0
  • #22 04 Lut 2008 22:33
    Freddie Chopin
    Specjalista - Mikrokontrolery
  • #23 04 Lut 2008 22:38
    asembler
    Poziom 32  

    No to jesteśmy 4.20 do przodu
    Tylko z niej nie skorzystasz:) korzysta zniej tylik S1 a tu masz 128kB z którymi możesz zrobic co zechcesz.
    Zresztą nie o to chodzi co jest lepsze, a co tansze. To co ja proponuje jest o wiel tańsze pewnie ze 3 razy. Miałem ten układ w ręku raczej tego nie dałbym radę zlutować chyba ze pod mikroskopem:)

    0
  • #24 17 Lut 2008 18:26
    Freddie Chopin
    Specjalista - Mikrokontrolery

    (dawno temu)

    e tam, nie przesadzaj - dzis odlutowalem ARMa7 i potem przylutowalem jeszcze raz, a to dokladnie ten sam raster - 0.25mm (TQFP64). pamieci do niczego innego w zasadzie nie potrzebuje w moim zastosowaniu... pozatym - mozesz skorzystac z pamieci - S1D zachowuje sie jak pamiec - mozesz zapisac i odczytac co chcesz i gdzie chcesz. do wyswietlania obrazu mono wystarczy 39kB, wiec pozostale 41 jest dla ciebie.

    jutro robie plytke - juz opracowalem metode, ktora mozna uzyskac sciezki o szerokosci 0.25mm, wiec mam nadzieje, ze moze juz jutro uda sie uruchomic sama elektronike, bo jeszcze nie mam przejsciowki do samej matrycy <:

    twoje rozwiazanie jest tansze, ale o wiele bardziej skomplikowane. a jak juz powiedzialem - mnie tu zalezy bardzo na czasie, bo taki wyswietlacz jest tylko czescia mojej magisterki, a nie jej zasadnicza trescia. dlatego mam nadzieje zrobic go szybko i bezbolesnie.

    niemniej jednak moze kiedys chetnie bym zrobil i projekt wg twojego pomyslu [; (tyle ze na 16b PICu [; )
    __________________________________________________

    EDIT (06.02.2008):
    plytka zrobiona! procki przylutowane - jeszcze tylko kilkanascie przelotek i ze 3 kondensatory do przylutowania zostaly. co wiecej - procesor glowny DZIALA [; i juz udalo mi sie do migania dioda uzyc 40mipsow (LOL [; ).

    Code:

    Connecting to MPLAB ICD 2
    ...Connected
    Setting Vdd source to target
    Target Device PIC24HJ256GP210 found, revision = Rev 0x3002
    ...Reading ICD Product ID
    Running ICD Self Test
    ...Passed
    MPLAB ICD 2 Ready


    tutaj pare hi-res fotek:

    http://freddie-chopin.fotosik.pl/albumy/365035.html

    EDIT:
    uklad S1D na 99% rowniez dziala [;
    ___________________________________

    (edit: 17.02.2008)

    w koncu udalo sie odpalic ta matryce <: po ciezkich przebojach z roznymi rzeczami (sprzetowymi i programowymi) matryca odpowiedziala <: (az dziw, ze do tej pory nie poszla z dymem)

    teraz musze troche powalczyc z faktem dziwacznie pracujacej przetwornicy (odpowiadajacej za kontrast), ktora - nie wiedziec czemu - po prostu czasem sie wylacza i do tej pory nie wiem co z nia poczac... czasem pomaga jej wylaczenie zasilania, czasem trzeba wszystko porozlaczac, czasem wystarczy reset procka, czasem nic nie pomaga i trzeba poczekac az jej przejdzie... ktos ma pomysl na co zwrocic uwage? mozliwe, ze sie spsula podczas calego procesu (podlaczylem raz odwrotnie wszystkie sygnaly <: ) jednakze dziwi mnie to, ze jednak przez wiekszosc czasu dziala, tylko czasem ... sie wylacza i tyle.

    nie wiem tez, czy to przez ta wlasnie przetwornice, z ktora cos jest nie tak jest taki slaby kontrast, czy moze jakis inny powod powinienem znalezc. moze to juz sprawa samej matrycy, nobody knows.

    anyway - tutaj kilka mniejszych fotek jak to wyglada w kupie i upragniony obraz <: czyli jedna pozioma kreska - troche slabo widac, tra wytezyc oczy (tak w okolo 3/4 wysokosci) [; przyczynia sie do tego fakt, ze trudno w sumie sfotografowac matryce, a do tego jeszcze ten kontrast jest naprawde kiepski...

    http://freddie-chopin.fotosik.pl/albumy/373646.html

    edit: jeszcze jedna - lepsza fotka
    [PIC24H][C+ASM] Kontroler do LCD mono 640x480 (S1D13705)

    0x41 0x56 0x45!!

    0
  • #25 21 Lut 2008 15:54
    DoctorC
    Poziom 10  

    Płytka super wygląda.
    Zdradzisz technikę wykonania takich ścieżek?

    A gdzie można kupić S1D13705?

    Pozdrawiam,
    Enrico

    0
  • #26 21 Lut 2008 18:41
    Freddie Chopin
    Specjalista - Mikrokontrolery

    plytka robiona zelazkiem - termotransfer. sekretem jest papier kredowy i drukarka z dobrym pokryciem. trawione w b327.

    uklad kupilem we wroclawskiej hurtowni proton.

    a tutaj takie cos:
    [PIC24H][C+ASM] Kontroler do LCD mono 640x480 (S1D13705)

    linie oczywiscie generowane przez algorytm na podstawie wsporzednych poczatku i konca. kilkanascie linijek w assemblerze, ale ile siedznia bylo nad tym [;

    0x41 0x56 0x45!!

    0
  • #27 22 Lut 2008 23:16
    Samuraj
    Poziom 35  

    Mógłbyś coś więcej napisać o rejestrach tego kontrolera. Napisałeś że z zewnątrz można go traktować jako zwykła pamięć RAM i tak też ją adresować. Niestety link do schematu jest nie aktualny tak więc więcej się domyślam z Twoich wypowiedzi niż z tego co przedstawiłeś.
    Sam mam w głowie pewien projekt z matrycą LCD lecz bez kontrolera nie mogę ruszyć dalej. Swojego czasu widziałem płytki prototypowe z typowym wyjściem. Było by to dobre rozwiązanie dla zainteresowanych tym układem. Odpada nam konieczność projektowania płytki z takim małym resterem. Wystarczy przylutować kontroler do płytki a dalej już można eksperymentować (i tak też chcę uczynić).

    0
  • #28 23 Lut 2008 01:23
    Freddie Chopin
    Specjalista - Mikrokontrolery

    uklad ten ze strony procesora dziala jak najzwyklejsza pamiec SRAM. posiada on 17 linii adresowych, 16 linii danych, 2 linie Read Enable, 2 linie Write Enable oraz garsc linii sterujacych (chip select, reset, itp.).

    Ze strony procesora widziany jest on wiec jak najzwyklejsza pamiec. mozna zaadresowac 128kB tej pamieci, z tym, ze obszar od 80kB do ~128kB nie istnieje i jak sie tam cos zapisuje, to dzieja sie dziwne rzeczy [; w kazdym razie dolne 80kB pamieci to wlasnie obszar, ktory jest 'odtwarzany' na matrycy, natomiast ostatnie 32b przestrzeni adresowej (~128kB do 128kB) to sa rejestry kontrolne, w ktorych ustawia sie parametry matrycy i sterownika.

    moje minimalistyczne podejscie do sprawy pozwolilo wykorzystac do komunikacji CPU <=> kontroler 'tylko' 37 linii [; uklad adresuje 16-to bitowo, czyli najnizszy bit adresu jest zawsze rowny 0, rowniez pary Read Enable i pary Write Enable sa ze soba polaczone - pozwala to na prace calkowicie 16-to bitowa. poniewaz procek jest 16-to bitowy, to tak bylo tez wygodniej [; . dodatkowo linia Chip Select jest na stale dopieta do masy.

    jesli chcesz, to moge wrzucic raz jeszcze schemat.

    dzis nie mam zadnej nowej fotki, bo walcze z optymalizacja algorytmow rysowania linii wszelakich i z bledami ktore w nich goscily... niemniej jednak uwazam, ze sprawa linii moze zostac zamknieta - wszystko jest juz super optymalne i tym samym totalnie nieczytelne <:

    mala probka assemblerowej extremy w moim wykonaniu (wciaz sie ucze, wiec prosze o ewentualna wyrozumialosc)

    Code:
    ;———————————————————————————————————————————————————————————————————————————————;
    
    ; f_gfx_line_sloped                                                             ;
    ;                                                                               ;
    ; this functions puts a sloped line from (X1_REG,Y1_REG) to (X2_REG,Y2_REG).    ;
    ; valid positions are: x: (0,639), y: (0,479). the line mustn't be vertical!    ;
    ;_______________________________________________________________________________;





    .global f_gfx_line_sloped
           
    .text       
           
    f_gfx_line_sloped:

        push.d  X2_REG                  ; store the ending cooridinates on the stack
        lnk     #8                      ; allocate a memory frame for local variables
        cpsgt   X1_REG,X2_REG           ; if x1>x2 - exchange the coordinates pairs
        bra     1f 
        exch    X1_REG,X2_REG
        exch    Y1_REG,Y2_REG
    1:  sub     X2_REG,X1_REG,GFX_REG0  ; the horizontal distance
        mov     #40,GFX_REG1
        mov     GFX_REG1,[w14]          ; positive increment
        sub     Y2_REG,Y1_REG,GFX_REG1  ; the vertical distance
        bra     NN,2f                   ; if y2<y1 ...
        sub     Y1_REG,Y2_REG,GFX_REG1  ; ... calculate the vertical distance again
        neg     [w14],[w14]             ; negative increment
    2:  push    [w14]                   ; store that for a while
        clr     [w14++]                 ; accumulator
        mov     GFX_REG0,[w14++]        ; half of integer
        sl      GFX_REG0,[w14++]        ; integer
        mov     GFX_REG1,Y2_REG         ; keep the vertical distance for tests
        sl      GFX_REG1,[w14--]        ; fractional part
        sub     #4,w14

        rcall   f_gfx_address           ; calculate the address of the first pixel
        rcall   f_gfx_px_pos            ; calculate the first pixel's position
       
        pop     GFX_REG1                ; restore the positive/negative increment
       
    3:  mov     [w14+6],GFX_REG0        ; get the fractional part
        add     GFX_REG0,[w14],[w14]    ; and add it to accumulator
    4:  rcall   f_s1d_or                ; print a pixel
        cp0     Y2_REG                  ; if all line changes were made - skip the...
        bra     Z,5f                    ; next block
        mov     [w14++],GFX_REG0        ; get accumulator
        cp      GFX_REG0,[w14--]        ; accumulator > (0.5*)integer ?
        bra     LTU,5f                  ; if not - just skip the line change block
        sub     GFX_REG0,[++w14],[--w14]    ; decrease the acc. by (0.5*)integer
        mov     [w14+4],GFX_REG0        ; get the integer
        mov     GFX_REG0,[w14+2]        ; replace half of integer with integer
        dec     Y2_REG,Y2_REG           ; decrement the number of line changes left
        add     S1D_ADR_REG,GFX_REG1,S1D_ADR_REG    ; change the line
        bra     N,5f                    ; (safety)
        mov     [w14++],GFX_REG0        ; get accumulator
        cp      GFX_REG0,[w14--]        ; is the accumulator still bigger than int.?
        bra     GEU,4b                  ; print a pixel just above/below
    5:  inc     X1_REG,X1_REG           ; increase x
        swap    S1D_DATA_REG
        rrc     S1D_DATA_REG,S1D_DATA_REG   ; increase the pixel
        bra     NC,6f                   ; next word?
        rrc     S1D_DATA_REG,S1D_DATA_REG   ; yes -> insert the pixel to next word
        inc     S1D_ADR_REG,S1D_ADR_REG ; and increase the address
    6:  swap    S1D_DATA_REG
        cp      X1_REG,X2_REG           ; is the line over?
        bra     LEU,3b                  ; if not - continue with the loop
       
        ulnk                            ; release the allocated memory frame
        pop.d     X2_REG                ; restore end coordinates
       
        return                          ; return to parent


    0x41 0x56 0x45!!

    0
  • #29 23 Lut 2008 11:37
    Samuraj
    Poziom 35  

    Schemat rzeczywiście by się przydał, choć po to aby podejrzeć jak podpiąć się do procesora.
    Piszesz że kontroler matrycy jest 16bitowy, potwierdza to szyna danych. W związku z tym mam pytanie jak wygląda mapa pamięci przy 16bitowej szynie.
    Czy każdy kolejny bit danej odpowiada za kolejny pixel :?: w przypadku matrycy mono.
    Jeśli zastosuje małą matryce kolorową (320x240) to dane do matrycy muszą być wysyłane w formacie RGB RGB RGB itp. Czy w takim przypadku pierwsza komórka pamięci (16bitów) będzie odpowiadać za pierwsze 5 pixeli,i R 6 pixelu :?:
    Czy ten kontroler ma możliwość pracowania z zewnętrzną pamięci danych, lub czy znasz podobny który mógłby pracować z matrycą 640x480 color :?:
    Wiele pytań ale chyba łatwiej zadawać je komuś kto przetarł już szlaki niż samemu siedzieć godzinami i kombinować.

    0
  • #30 23 Lut 2008 12:30
    Freddie Chopin
    Specjalista - Mikrokontrolery

    ok - oto schemat : http://www.speedyshare.com/667632294.html

    kontroler matrycy jest ... uniwersalny - przy wykorzystaniu wszystkich 17tu linii adresowych (adresacja 17to bitowa) i 8 linii danych jest mozliwa obsluga stricte 8mio bitowa. ja wybralem opcje 16to bitowa, bo moj procek jest 16to bitowy, wiec tak bylo szybciej i wygodniej. mapa pamieci jest konfigurowalna poprzez te 32 rejestry z konca - zasadniczo jednak konfigurujesz sobie po prostu obszar, w ktorym znajduje sie twoj obraz, poprzez takie parametry jak wybor adresu poczatku, wybor offsetu (pozwala wygenerowac 'szerszy' obraz virtualny i przesuwac go na boki), wybor ekranu (bo obslugiwane sa 2 obszary pamieci, mozna je tez ze soba mieszac). jesli jednak wszystko zrobi sie domyslnie, to w istocie od poczatku pamieci mamy poczatek obrazu na matrycy.. co do koloru - niestety wiele ci nie powiem, odsylam do datasheeta ukladu ( http://vdc.epson.com/index.php?option=com_docman&task=doc_download&gid=1428&Itemid=99 ), ktory mozna znalezc na stronie producenta ( http://www.epson.jp/device/semicon_e/product/lcd_controllers/index.htm ) - nie wiem wiele o tym, bo sam patrzalem tylko na tryby czarnobiale. zasadniczo jednak w datasheecie rozrysowane sa tez przebiegi dla kolorowych paneli i chyba jest wlasnie tak jak mowisz [;

    co do pamieci zewnetrznej - ta seria S1D137xx - pracuje tylko z wewnetrzna pamiecia. dostepne sa modele z pojemnoscia do 1MB. seria S1D135xx obsluguje natomiast pamieci zewnetrzne o pojemnosciach do 64mb. lista ukladow jakie tam maja do znalezienia na stronce producenta ( http://www.epson.jp/device/semicon_e/product/lcd_controllers/index.htm ). problemem jest tylko dostepnosc tego w polsce. troche tego maja dostepnego we wroclawskim protonie (na zamowienie, ale sprowadzaja faktycznie, moj sprowadzili w jakies 2 tygodnie), troche jest w TME (na zamowienie), chyba wlasnie ten jeden jest tez na liscie w maritexie (nie wiem jaki jest stan magazynowy)

    czekam na dalsze pytanka jakby co, ale nie bralbym siebie za specjaliste od tych ukladow, bo sam wiem o nich niewiele. moge powiedziec o tym swoim tylko tyle, ze jest calkiem przyjemny i prosty! na stronie producenta jest do zassania programik, w ktorym wybieramy sobie to co chcemy miec, a on nam powie jakie bedzie odswiezanie i jak skonfigurowac wszystkie rejestry. potem tylko wrzucic rejestry do jakiejs tablicy, 5 linijek w assemblerze i cala taka tablice wyrzucamy do kontrolera - konfiguracja gotowa [;

    nawet jednak bez takich zabaw uruchomienie go nie jest szczegolnie trudne. jednak w necie jest o nim bardzo bardzo malo, wiec zawsze jest ryzyko, ze jak cos bedzie nie tak, to ciezko znalezc pomoc. dodam jeszcze, ze zadawalem pytania dzialowi technicznemu EPSONa przez ich stronke i otrzymywalem bardzo szybko odpowiedzi, jednak z typowa przypadloscia, tzn jak zadalem wiecej niz 2 pytania na raz, to otrzymywalem odpowiedz tylko na ostatnie [;

    0x41 0x56 0x45!!

    0