Fórum témák

» Több friss téma
Fórum » LCD kijelző vezérlése, életre keltése
Lapozás: OK   8 / 72
(#) zenetom válasza zenetom hozzászólására (») Aug 31, 2009 /
 
Valószínűleg az inicializálással van probléma.
(#) frecsko hozzászólása Aug 31, 2009 /
 
Sziasztok,
van egy kijelzőm egy Siemens C75-ből. Hogyan tudnám működésre bírni?
Csak ennyi írás van rajta :LPH9157-2 G5371226
(#) zenetom válasza zenetom hozzászólására (») Aug 31, 2009 /
 
Feladom

procedure TForm1.Button5Click(Sender: TObject);
begin
sleep(100);
out32(cim,strtoint(edit1.Text)+t);
sleep(100);
out32(cim2,10);
sleep(100);
out32(cim2,11);
end;

Az edit1-be írom be decimálisan a kódokat és igy egyesével elküldve se jó. A "t" változó értéke 16 lesz ha megnyomok egy gombot, ami jelet ad az 5. kimenetre, ami az RS-el van össekötve. A Control bitek elsője van összekötve az Enable-val. Próbáltam már a sleep-et ezerrel és showmessagével de semmi. Csak úgy működik ha egyesével álligatom a kiemeneteket ezzel a programommal: Bővebben: Link
Erre szerintem nincs reális válasz,
(#) zenetom válasza zenetom hozzászólására (») Aug 31, 2009 /
 
Hát amire jutottam:
Ha az inicializálás után kiküldük egy 4 bitet (adatmódban) akkor kiír egy furcsa jelet, viszont utána elfogadja az adatot és a parancsokat is. Szerintem ez tényleg valami rejtett delphi/oprendszer hiba. Hát ilyen nincs, ez lehetetlen hogy így működne, nincs ott semmi más ami kimehetne az LCD-re. Ez nagyon durva bug.
(#) Stadi válasza zenetom hozzászólására (») Aug 31, 2009 /
 
Ilyen bugot nem csinál szoftver szvsz*. Ha 4 bit küldése után ír szemetet, akkor az azt jelenti, hogy 4 bit már benne van a memóriájában, ami csak úgy lehet, hogy már ment utána egy Enable is. Én mondjuk "csupa 0" 4 bitet küldenék inicializálás után, és megnézném, milyen karakter jelenik meg. Ha mindig ugyanaz, akkor kideríteném, hogy mi a kódja. A kód alapján be lehet azonosítani, hogy mi volt az első 4 bit, ami hibásan ment át (valószínűleg az inicializálás utolsó 4 bitje). Szóval gyanítom, hogy valahol/valahogy kimegy egy Enable feleslegesen.

Szerk.: *: mármint helyesen megírt szoftver...
(#) zenetom válasza Stadi hozzászólására (») Aug 31, 2009 /
 
Mindig más-más furcsa izék jelennek meg (még az ASCII kódtáblába sincsenek benne).
További észrevétel, hogy amikor az utolsó incializáló kódot (a 15-öt) kiküldöm, előtte ugye teljesen üres a kijelző, majd már úgy megjelenik a kurzor hogy még az enable-t le se nyomtam. Ezt a félelmetes az egészben.
(#) zenetom válasza (») Aug 31, 2009 /
 
Na akkor arra varrjatok gombot hogy ha a másik programommal, egyesével küldözgetem a 4 biteket akkor jó.
(#) Stadi válasza zenetom hozzászólására (») Aug 31, 2009 /
 
Akkor derítsd ki, mi a különbség...
(#) zenetom válasza Stadi hozzászólására (») Aug 31, 2009 /
 
Annyi hogy a másik progriban nincs semmi késleltetés mert idő kell hogy rákkattints a checkboxra
(#) Stadi válasza zenetom hozzászólására (») Aug 31, 2009 /
 
Nézd, ezzel az állításoddal az a baj, hogy a kijelző determinisztikusan működik, tehát egy adott bemenő jelsorhoz egy adott kimenet(i sor) tartozik. Tehát ha különbséget tapasztalsz, akkor mégsem azonos a kétféle bemenő jelsorozat.

Javaslom, küldd el az inicializáló kódokat PÜ-ben, és este rittyentek egy Delphi konzol alkalmazást (azért nem VCL-t, mert azt nehezebb átdolgoznod az én Delphi2007-es formátumomból Delphi 7 alá), aztán felteszem ide.
(#) zenetom hozzászólása Aug 31, 2009 /
 
Közbe sikerült megtalálni a hiba okát: semmiféle speckó inicializálós kód nem kellett neki, a szabványos 0000 0010-t elfogadja, ami 2-t jelent decimálisan, de én nagyon okos valószínűleg a nullát elfelejtettem kiküldenei és azért volt rossz
Köszönöm mindenkinek a segítséget!
(#) Stadi válasza zenetom hozzászólására (») Aug 31, 2009 /
 
Mondtam, hogy pofonegyszerű lesz a megoldás. Végre egy kis siker!
(#) zenetom válasza Stadi hozzászólására (») Szept 2, 2009 /
 
Ez már tényleg teljesen programozós rész, de az LCD-hez fűződik
Szóval ez a fránya ASCII kódlap megviccel, mert az ord és chr függvények csak 127-ig használhatók. Próbáltam más kódlappal is (DOS-ossal) de az se teljes siker.
Valószínűleg egy ciklussal kiíratom a számokat rá 255-ig és megnézem mi micsoda és írok egy saját kódlapot neki
Na ez aztán a szép project
(#) Stadi válasza zenetom hozzászólására (») Szept 2, 2009 /
 
Na, ebből a hsz-ből nem sokat értettem. Amit talán igen: az a bajod, hogy az LCD karakterkészlete eléggé sokban különbözik az ASCII-tól. Ez már csak így van, el kell fogadnunk. A magyar karaktereket pedig csak úgy lehet kiíratni, ha a vezérlőprogrammal minden bekapcsolás után feltöltöd őket a karaktergenerátor memóriába. (CGRAM)

Az Ord és Chr függvények Pascalban még tuti biztos egy egyszerű typecast-ot végeztek a Byte és a Char adattípusok között. Hogy Delphiben felturbózták-e őket valami ország- vagy karakterkészlet-függő dologgal, nem tudom.
(#) zenetom válasza Stadi hozzászólására (») Szept 2, 2009 /
 
Közbe megoldódott a probléma, le is írtam ide, meg még valaki írt ide, de úgylátszódik eltűntek a hozzászólások
(#) zenetom válasza zenetom hozzászólására (») Szept 2, 2009 /
 
Ja az másik téma volt
(#) zenetom válasza zenetom hozzászólására (») Szept 3, 2009 /
 
Viszont 33 karakter fér bele egy sorba, aztán a másik sorba folytatja a szöveget... Tudhat ennél többet, vagy ez a max?
(#) Stadi válasza zenetom hozzászólására (») Szept 3, 2009 /
 
Nem 32 az a 33? Mert a 33 az nem "szabványos". Amúgy meg, ha már nincs több hely jobbra, akkor ez a vége.
(#) zenetom válasza Stadi hozzászólására (») Szept 3, 2009 /
 
Elszámoltam. 40 karakter fér egy sorba.
(#) zenetom válasza zenetom hozzászólására (») Szept 5, 2009 /
 
Jól elvagyok magammal
Na most ott tartok problémába, hogy ugye ha van egy 24 krakternél hosszabb szövegem (és a zenecímeknél ez elég gyakori) akkor "görgetni" kell a szöveget, amit a kijelző eltolásával oldok meg, de így az alsó sor is eltolódik. De ha én pl azt akarom hogy alul a lejátszási idő jelenjen meg akkor az is "megy" oldalra. Erre tud valaki valamit?
(#) Stadi válasza zenetom hozzászólására (») Szept 5, 2009 /
 
Mármint most a kijelzőnek adsz parancsot, hogy görgesse a szöveget? Felejtsd el. Csináld meg szoftveresen. Magyarul mindig egy egész sort írj ki, és a programban "görgesd" a sorokhoz tartozó String változókat. Úgy is mondhatnám, hogy csinálj puffert a programodban a kijelző minden sorához, és a kijelzés változásakor ezeket a puffereket írd ki.
(#) zenetom válasza Stadi hozzászólására (») Szept 5, 2009 /
 
Csakhogy nem lehet egyszerre kiiratni szöveget, mert olyan lassan írja ki a betűket hogy lehet látni (az 1ms miatt valószínűleg)
(#) zenetom válasza zenetom hozzászólására (») Szept 5, 2009 /
 
Bár így most próbáltam csak egy egyszerű szöveget kiíratni, nem volt semmi probléma hogy ki vettem a sleep(1)-et, lehet át írom a motorját, és kiveszem belőle a kijelző eltolást.
Egyébként úgy csinálok szövegből bináris kódot, hogy a szöveg[ i] elemét ord fügvénnyel átalakítom ASCII kódra (ha ékezetes, akkor egy tömbből szedem ki a megfelelő kódot) és azt bontom felsó, illetve alsó bitekre, majd kiküldöm, persze köztük az enable-t zárom/nyitom.

szerk.: akkor egyszerre csak 24 karaktert irjak ki?
(#) Stadi válasza zenetom hozzászólására (») Szept 5, 2009 /
 
Elvileg a karakterek kiírása rövid időt vesz igénybe (<100us), tehát meg lehetne próbálkozni 0-ra venni (kihagyni) a késleltetést, ahol lehet. Ahol nem lehet, ott úgyis észreveszed, mert karaktereket fog kihagyni. Esetleg lehetne még ciklikus késleltetéssel próbálkozni, amit ugye nem szeretünk, mert függ a gép sebességétől, vagy meg lehet próbálni keresni olyan timer komponenst, ami 1ms-nál nagyobb felbontásra képes. Vagy hozzá kell nyúlni a hardverhez, hogy ki tudd olvasni a Busy Flag-et a kijelzőből.

A másik hsz-edre: Egyszerre mindig egy egész sort írj ki. Ha vége a szövegnek, a fennmaradó helyet töltsd ki szóközzel, így egyben törölni is fogsz a kijelzőről.

Az előzőleg csatolt Pascal forrásomban ott az Extend függvény, tehát még meg sem kell írnod a kódot a kiegészítősdihez. :yes:
(Paraméterezés: s: bementő szöveg, len: kívánt hossz, ch: karakter, amivel kiegészít (itt szóköz), d=true: jobbról toldozgatja s-t, =false: balról...)>
(#) zenetom válasza Stadi hozzászólására (») Szept 5, 2009 /
 
Mégis muszáj két karakter kiírása közé berakni egy ezredes sleep-et, különben zagyvaság lesz az egész. Ekkora késleltetéssel pedig nagoyn kb (stoperral mérve) 1-1,2 sec-be telik mire kiírr 80 karaktert (tehát a kijelzőt csumára teleírja)
(#) Stadi válasza zenetom hozzászólására (») Szept 5, 2009 /
 
Valószínűleg az a baj, hogy a Sleep eljárás nem tud 1ms-ot "aludni", csak többet. Gondolj bele, mondjuk egy karakternél (mivel 2 részletben küldöd) vársz mondjuk 2x(1+1)ms-ot, az 80 karakternél is csak 320ms azaz ~ 1/3s.
(#) zenetom hozzászólása Szept 9, 2009 /
 
Probléma másik megközelítése: állítóllag az LCD tudja jelezni ha ready, tehát ha mehet a következő utasítás. Ha igen akkor hogyan?
(#) Stadi válasza zenetom hozzászólására (») Szept 9, 2009 /
 
Az MSN-es beszélgetésünkkor linkelt LCD2.PDF-ben van róla infó. A 4-bites módról nem ír az olvasásnál, de feltehetőleg megoldható a kérdés. A következő hardver módosításra van szükség: a kijelző R/W bemenetét rá kell kötni a párhuzamos portra és vezérelni kell, valamint meg kell oldani a bejövő adatok beolvasását, méghozzá megfelelő időzítéssel, hogy ne legyen szembekapcsolva az LCD és a párhuzamos port úgy, hogy mindkettő kimenetként működik. A párhuzamos port parancsregiszterének egyik bitje hivatott arra, hogy a kimeneteket átkapcsolja bemenetté. A fenti PDF szerint ugyanakkor a kijelzőnek mintegy 320ns-ba is kerülhet, mire átállítja az adatvonalait bemenetről kimenetre, szóval ha ennél gyorsabban tudja meghajtani a programod a portot, akkor lehet, hogy nem lesz szerencséd. De egy próbát talán megérhet a dolog.
(#) zenetom válasza Stadi hozzászólására (») Szept 9, 2009 /
 
Szóval minden egyes parancs kiadása után átállítom a port kimenetét olvasásra (meg az LCD-t is) és beolvasom az LCD kijelző-n lévő szöveget, majd ha egyezik azzal amit eddig kiirtam akkor visszaállítom az LPT-t írásra (meg az LCD-t is) és utána adom ki a parancsot az LCD-nek? Kezd egyre bonyibb lenni
(#) zenetom válasza zenetom hozzászólására (») Szept 9, 2009 /
 
Valóban, találtam egy táblázatot. Tehát ha az R/W láb tápot kap, az RS testet, akkor a D7 bitet kell figyelni hogy 0 vagy 1-e, ha 0 akkor írható rá adat/parancs, ha 0 akkor nem, mert elfoglalt. Az LPT felé a küldés hogyan jön létre? Gondolom két nibble-ben küldi el.
Következő: »»   8 / 72
Bejelentkezés

Belépés

Hirdetés
XDT.hu
Az oldalon sütiket használunk a helyes működéshez. Bővebb információt az adatvédelmi szabályzatban olvashatsz. Megértettem