Fórum témák
» Több friss téma |
Fórum » PIC vs. T6963C alapú grafikus LCD
Hali minden kedves olvasónak!
PIC mikrovezérlővel (16F877) szeretnék meghajtani egy T6963C chip-pel szerelt 240 x 128 karakteres grafikus LCD-t. Kérdésem az lenne, hogy valaki csinált-e már valami hasonló projectet? Hogyan kell felkonfigurálni az LCD-t, hogy sima karakteres üzemmódban fusson és bármiféle karaktereket tudjak ráírni? Van három doksim, amik alapján próbálkozom, de sajnos nem igazán sikerül. doksi_1 doksi_2 doksi_3 A legutóbbi alapján konfiguráltam fel és nem jó. Úgy néz ki, mintha a kijelzőnek nem lenne ideje dolgozni, de nem tudom. És a status vizsgálat után azt adja vissza, hogy a kijelző ki van kapcsolva. (STA7=0) (Szerintem a három közül ez a legjobb.) Ilyen a kijelzőm. Egyébként asm-ben írom a kódot. Ha valaki tudna segíteni, azt nagyon megköszönném.
Hali!
Én PONT ugyanebben a gondban vagyok, nehéz ezeket a nagy kijelzőket működésre bírni. Én egylőre még nem is próbálkoztam vele...(nekem is T6963-ra épülő 240x128-as kijelzőm van) Te egyébként használsz szoftveres késleltetést a programodban, vagy csak írod egymás után kifelé az utasításokat? Mert annyira rájöttem, hogy átlagosan 80msec az az idő, hogy az adatsínek rájöjjenek, hogy nekik szól valaki. Nameg ott van a C/D (parancs/adat) mód is...annak is megfelelően be kell állnia, hogy tudd konfigurálni.
HI!
Most, hogy mondod lehet, hogy kéne késleltetéseket használni, mivel, ha MPLAB ICD-vel debug-olok és lépésről-lépésre hajtom végre a program sorokat, akkor a status regiszterből döntő többséggel jó adatokat kapok vissza. (STA7=1) Mindjárt meg is próbálkozok valami nagyobb késleltetéseket beállítani!
Raktam bele egy kis időt.
Így már sokkal jobb. A progit ahányszor lefuttatom mindig ugyan azt az eredményt kapom, nagy valószínűséggel késleltetés szükséges.
Az nagy baj lenne, ha elkérném a forráskódot?
![]() Nem lemásolni akarom, csak próbálkozni, átnézni, kb. hogyan is lehetne működésre bírni. Én még ugyanis nem kezdtem el megírni a programot hozzá, pár napja csak az írott dokumentációival vagyok elfoglalva.
Persze, odaadom, illetve felrakom az oldalamra még egy pár másik grafikus LCD-s forráskóddal együtt.
A pontos linket majd ide kiírom.
egyébként lemásolhatod. Úgy se mükődik
![]() ![]()
Hello!
Köszi szépen, hogy megosztottad ezeket a dolgokat, nameg a programodat is ![]() Ezer köszönet... Egyébként nem tudom, hogy kötelező-e a programok elejére mindig odaírni az: org 0 goto main org 4 main START ... "bekezdést", de a te programod elején nem találtam ilyet, más programoknál viszont láttam ezt a megoldást. Lehet, hogy ezért nem működik a programod?
Ott van az!
Csak egy makro-ban van, amit nem csatoltam. ![]() Itt csak a boot cimkével helyetesítettem.
Háj!
Ma írtam meg hozzá hajnal 4-kor az első programomat...reméljük, működni fog ![]()
Elsőre így nem szeretne nekem se működni
![]() Húúú, nagyon nehéz ezt a gagyit működésre bírni!
Milyen tipusú kijelződ van?
Szerintem próbáld meg EXOR vagy AND modban a kijelzést.
Powertip PG-240128BRS-ATA-B
240x128-as, zöld háttérrel, sötétkék pixelekkel.
Itt van még egy oldal, amin T6963c vezérlő chip-re épült grafikus LCD-t hajtanak meg 16F877-tel. Forráskód is van, hex, meg asm is, de nekem ezek se mennek.
Hátha valakinek?
Köszi szépen a linkeket
![]() Nekem sikerült működésre bírni az LCD-met, de igen egyedi módon ![]() DIP kapcsolókat építettem be, és minden egyes bitet én állítottam be rajta, és én engedélyeztem az írást, stb. Érdekes és lassú megoldás, de így legalább elindult a kijelzés ![]() Egy nagy gondom viszont van...nem találtam se leírásban, se sehol, hogy hogyan lehet ezeken a modulokon komplett képernyőtörlést csinálni...mert mikor bekapcsolom a képernyőt egy megfelelő paranccsal (talán 9Fh, de ez nem lényeg), akkor olyan kuszaság van a képernyőn, mintha rászórtak volna mákot a kijelzőre...abszolut fel van borulva a belső egyensúlya ![]() És ezt kellene valahogy megoldani! Gondoltam arra, hogy nem elég hosszú a reset...de ha nem resetelne rendesen az LCD, akkor ha kiolvasom az STA0-t és STA1-et, akkor nem szabadna 1-est visszaadniuk, tehát hogy készen áll a műveletekre... ...foggalmam sincs, mit csináljak :no:
Gratula!
A legtöbb kódban ezt úgy csinálják, hogy a kijelzőt tele irják null karakterrel. Ez mikrovezérlőben megvalósitva relativ egyszerű valami számlálót alkalmazva megoldható. Szinte mindeggyik kódban amit én néztem volt clrscr. Milyen parancsokkal konfiguráltad fel? Tudsz rá karaktereket is irni CG-ROM-ból? És milyen parancsal kapcsoltad be a kijelzőt? Azt javaslod, hogy legalább 1sec időzitéssel kezdjem el én is és ha majd mükődik akkor csökkentsem az időt?
Igen, jogos megoldás ez a nullával teleírás, de akkoris...sokkal szebb lenne, ha lenne mondjuk direkt egy ilyen utasítás, hogy akkor most "törölj mindent".
Igen, javaslom azt az 1sec-es késleltetést, de szerintem tutira nem azzal lesz gond, hisz egy átlagos PIC 4MHz-en hajtva 1usec-ig dolgozik, ami alatt bármilyen utasítást végre kellene tudni hajtania, mert ahogy néztem, 80-100 nanosec-ok vannak az adatlapjain. Először meg kell adni a kijelzés módját, tehát AND, OR, vagy EXOR illetve csak CG-ROM, vagy CG-RAM is legyen. Aztán két bájtnyi adat jön, ezeket te állítod be (pl. mind a kettő 00h), aztán egy paranccsal megírod neki, hogy ez lesz a Graphic Home addres. Következő lépés a Graphic Area Set beállítása ugyancsak 2 bájtnyi adattal. Ennek a legmegfelelőbb értékét megtalálod az utasításlistában, vagy ki is számolhatod akár ![]() Ugyanez, csak a Text home address-re, és Text Area-ra vonatkoztatva. (Lényeg, hogy ne legyen a Text Home Addres és Graphic Home Address ugyanazon a címen!) Aztán most következik egy lényeges lépés: Address pointer beállítása! Ezt célszerű első próbálkozásnál a Text Home Address-el megegyező címre beállítani! Aztán pedig jöhetnek az első betűk :yes: Betűkód >> aztán C0h parancs (vagyis Data Write Auto Increment)...ez azt jelenti, hogy beírja a memóriájába az első betűt, aztán a következő memóriacellára áll, hogy újból tudj neki egy betűkódot adni. És végül a legfontosabb lépés: Bekapcsolod a kijelzőt a 9Ch paranccsal! Ez persze más is lehet, de ebben a formában most azt jelenti, hogy be van kapcsolva mind a grafikus rész, mind a szöveges rész is. Valamint nem fog látszódni a kurzor, és nem is fog villogni a kurzor helye. Lényeg, hogy minden egyes adatbeírás és parancsbeírás után aktívvá kell tenni az írást és a Chip Enable vezérlőjeleket. Tehát a Chip Enable-t nem csak egyszer kell aktiválni a program elején, hanem minden egyes adat vagy parancs adatvezetékre kerülése után aktiválni kell, aztán deaktiválni...aztán megint ráteszel valami parancsot az adatvezetékre, aztán megint benyomatod a CE-t és az írást. Egyébként először én is azzal rontottam el, hogy azt hittem, a Chip Enable az egész LCD-t vezérli, közben pedig nem is. Tehát nem csak program elején kell beállítani aktívba, hanem azzal is szórakozni kell a program futása közben; magyarul ki-be kapcsolgatni, mint az írás, vagy olvasás jelet.
Igen és még egy dolog lemaradt
![]() Tehát igen, tudok írni CG-ROM-ból karaktereket, de az a baj, hogy ez is elég furcsa módon történik. Nem egymás utáni helyre írja valamiért a karaktereket, hanem úgy néztem, hogy 2-2 karaktert kihagy minden egyes általam írt betű után. Ezt is meg kell még oldanom ![]() Biztos a Text area set-nél lesz valami gubanc ![]()
Köszi.
Nemsokára ki is próbálom aztán majd megosztom a tapasztalataimat. ![]() A chip enable-t már ismertem a karakteres kijelzők világából is. Nekem csak ezekkel a cimekkel meg adatokkal volt a bajom. Remélem most már tudok rá irni. ![]()
Közben ma is az előbb próbálkoztam vele, és arra jutottam, hogy hülyeséget írtam fent egy alkalommal
![]() Tehát a CE lábat nem kell mocorgatni...egyszer beállítod aktívba az elején, aztán úgy maradhat míg ki nem kapcsolod. Ezt is csak most próbáltam ki először, és így is működik. Úgy csinálom, hogy előbb beadom neki, hogy parancs vagy adat jön-e...aztán ráteszem a 8 bites sínre az adatokat, és végül rányomom, hogy írás. És akkor csinál valamit (amire kértem). De arra sajnos még mindig nem jöttem rá, hogy miért nem egymás után írja a karaktereket, miért hagy ki helyet az irományaim között :no::no::no:
szerintem szükséges a CE!
2.1 Write data - The data to be written should be set on D0 - 7 and C/D taken low, /WR taken low (/RD should be high) /CE pulsed low for greater than 80ns Lehet, hogy nélküle is mükődik, de nem igazán hiszek bennne.
Na most már én is kiprobáltam amit mondtál!
Igy se sokkal job a helyzet. :no: De legalább már a kijelző be van kapcsolva. ![]() igy álitom be az lcd-t: 1, RST 2, RV=1 - black char. FS=1 - 6x8 3, 80h - "OR" mode, "CG-ROM" mode stb.. 4, 00h 00h 42h - graphic home address 5, 28h 00h 43h - graphic are 6, 20h 00h 40h - text home address 7, 28h 00h 41h - text area 8, 9Fh - display mode, minden bekapcsolva 9, 00h - address pointer (egy nyomógomb segíségével folyamatosan nővelem 255-ig és közben minden pozicióba egy "A" betüt probálok irni (21h => c0h) 10, C1h - olvas az előző pozicióból. mindig d3h kapok vissza eredményül. (nem jó) 9 - 10 gombnyomásra ciklusban. Nem ir semmit. ![]() A status check eredménye meg, hogy hol kikapcsol a kijelző hol meg bekapcsol. Általában többet van bekapcsolva mint kikapcsolva. Az időzítés meg kb 1sec. vagy kicsit kevesebb, de 100msec biztosan megvan (annak meg hát elégnek kéne lennie).
a hiba egy része megvan...
(24h parancs helyett 00h volt) Már ha vissza olvasom az elküldőtt karaktert akkor vissza is kapom, de még mindig nem látok semmit a kijelzőn! Esetleg valami ötlet? Statusz szerint be van kapcsolva.
Szerintem talán (lehetséges), hogy az address pointert a text home address-re állítsd be, merthogy karaktert írsz neki...lehet, hogy ez a baj...
Egyébként azt ugye tudtad, hogy a Home address parancs elé 2 bájtnyi adat kell? Vagy csak időt/helyet spórolva írtál egyszeri 00h-t a fentebbi leírásodban Address pointer elé?
Ja értem, mostmár megvan az egyik hiba...én értelmeztem félre most ezt az Address pointeres 00h-t...
Szóval Address pointert Text Home Address-re állítani! Lehet, hogy az a baj... |
Bejelentkezés
Hirdetés |