Fórum témák
» Több friss téma |
Na valahogy sikerült az inicializálás
Most már 2 részben fogadja el az ASCII kódokat és jól is jeleníti meg
Csakhogy lássátok nem csak szövegelek...
sziasztok.
nagyjából sikerült szóra bírni ezt a kijelzőt. sajnos azonban csak függőleges csíkokat tudtam vele rajzolni, atmega32-vel kezeltem 8mhz-es belső oszcillátorral. szerintetek elképzelhető hogy ennek az IC-nek túl kevés 8mhz-n az avr? gondoltam rá hogy egy arm-al kipróbálom 40Mhz-s órajellel, hátha, csak még nem épült meg a panelja technikai okok miatt. lehet az a baja, hogy van alsó órajel határa..1.08MHz a pixel shifteléshez. amit 8mhz-n nem tud az avr. mást nem tudok kitalálni.. 4 napot végig szívtam vele, hogy tudjam kezelni, erre semmi csak csíkok. Ha a kezemmel közel vagyok, akkor tudok kockákat is rajzolni, amit furcsállok nagyon. mhz-s jelet csak nem tud leszedni rólam.. ha valakinek van egy jó progija hozzá szívesen venném áttanulmányozásra . köszi!
Hali!
az ilyen kijelzőknél a min/max időzítéseket be kell tartani valami hasonló vezérlésű van a http://www.mikrocontroller.net/topic/25099-en adatlap szerint esetleg kéne mellé egy hd61830 vezérlő, ezt már egyszerűbb kezelni, találsz rá progikat
Bár ez már jobban programozás kérdése, de hátha tud valaki segíteni.
Szóval egy programot írok LPT portra egy LCD kijelzőnek, aminek 4 adatbite van, tehát ha beleszámoljuk az Enable és R/S lábat, akkor is elfér az LPT 8 adatbuszán. Viszont ha az Enable lábat is az adatbuszon viszem, akkor nem tudom hogy jelenik meg a kimeneteten a kiküldött sorozat, tehát pl az LPT-n ha a D0...D3-ig az adatokat küldöm, D4-en az Enable, D5-ön pedig az R/S van akkor hogyan működne ez az egész. Vagy pedig a 8 adatbitet csak adatok átvitelére használnám, és az enable ill. a R/S lábnak a control biteken (abból 4 van az LPT porton) küldeném az utasítást, tehát először kiküldené az adatot az adatbiteken, majd az LCD-n a beolvasáshoz a control biten küldeném a jelet. Remélem érthető voltam.
Maszkolas a titok nyitja.
Vagy hasznalsz siman egy memoriapuffert, oda maszkolsz vagy ott billegteted a bitet, aztan azt a pufferbyte-ot irod ki egy az egyben a portra. De ha jobban megnezed az LPT portot, talalsz ott meg kimeneti biteket. Ketsegkivul az elerhetoseguk bonyolultabb, de ilyenkor neked nem 'zavar be' az adatbit. Idézet: vagyis a control bitek...nem? „De ha jobban megnezed az LPT portot, talalsz ott meg kimeneti biteket”
Mind a vezérlő, mind az adat porton keresztül megoldható a feladat. Egyikre sem tudsz csak egy bitet kiírni. Az előzőleg kiírt byte-ot kell tárolnod (esetleg mindig visszaolvasgatni, de az bonyolult), abban átállítani a megfelelő bitet, majd a megváltoztatott byte-ot kiírod a megfelelő portra.
Úgy döntöttem hogy az adat biteken (tehát a 8 bit-ből csak az alsó 4-et használom, a többi 0 lesz), ott adom ki az adat/parancs-kódokat és a control bit-ből az egyik az Enable lábra megy, a másik a R/S-re. Viszont így talán a sebesség kisebb lesz, mert végülis két portot használok (a control biteknek a címe $37a).
Idézet: „Viszont így talán a sebesség kisebb lesz” Valóban eggyel több regiszter írás műveletet kell végrehajtani, de lehet, hogy még így is be kell majd iktatnod néhány ms várakozást (az "Enable alacsonyra" művelet elé, és/vagy két komplett írási ciklus közé). Nekem legalábbis az volt a tapasztalatom DOS alatt, 8 bites kommunikációval, hogy már a PIII gépek LPT portja is túl gyors(an írható), és kimaradnak/nem törlődnek egyes karakterek, ha késleltetés nélkül vezérlem a kijelzőt.
Na a végleges terv: az 5. adatbit a Register Select (RS), az első négy az adatokért felelős, a control bitek elsője az Enable. Egy régebbi programommal, amivel egyesével lehet pipálgatni a kimeneteket, sikerül minden rajta, inicializálás, írás is, de most egyelőre szenvedek programozás terén, remélem csak elírtam valamit
Milyen nyelven próbálkozol? Esetleg lassítsd le a vezérlést úgy, hogy multiméterrel vagy LEDdel is meg tudd szemlélni a kimeneteket (utóbbi esetben vigyázva arra, hogy ne terheld túl a portot). A parancsregiszter első (=0.) bitje invertál, azaz ide 0-t írva jelenik meg a magas szint a csatlakozón.
Delphi 7-ben programozok.
Régebben nagyájbból valahogy sikerült megállapítani hogy melyik bithez mit kell küldeni, bár lehet hogy csak nállam vagy ennyire össze-vissza. Tehát a control bitek: ---------------------bin dec egyiken sincs: 1011 11 0-ás kimenet: 1010 10 1-es kimenet: 1001 9 2-es kimenet: 1111 15 3-es kimenet: 0011 3 mindegyiken: 0100 4
És most mi nem megy? Azon kívül, hogy a kijelző... Lassítsd le a vezérlést és mérj ki mindent. Pl. iktass be ShowMessage parancsokat vagy ha nagyon vágod a Delphit, akkor használhatod a debuggerét lépésenkénti végrehajtással. Az oldalamon van egy ábra, ami segít láttatni, melyik bit hol és hogy "jön ki". Bár nem tudom, pontosan hol akadtál meg.
A szokásos parajelenség...
Szóval inicialaizálni kéne a kijelzőt (7db kódot kiküldeni egymás után) amiket egy konstans tömbből küldenék ki for ciklussal, de valamiért nem jó, pedig minden egyes kiküldés előtt beraktam egy showmessage-t is (végülis csak eggyet kell ugye mert ciklusba van ) De ha én magam egyesével szépen beírom a decimális számot és úgy küldöm ki akkor működik. Valahol a ciklusban lehet a hiba, dehát ez olyan egyszerű, ebben nem lehet hiba. Hát nekem ez magas, bugos a delphi
Meglepő fordulat: valóban kell egy kis sleep...
szerk.: Meglepő fordulat 2: így se jó
Csatolok egy fájlt. Igaz, Pascalban írtam (úgy 3 éve) és 8-bites vezérléssel, tehát 1:1-ben nem tudod felhasználni, de a lényeg látszik. Most, hogy kipróbáltam, a resetlcd meghívása utáni késleltetést meg kellett növelnem, mert az első sornak kb. a felét lehagyta (6xx MHz-es PIII, talán 133-as FSBs gépen). Tehát oda kell figyelni az időzítésekre. (Nem véletlenül vannak a program elejére kigyűjtve konstansba...)
Tudom, hogy meg tudod csinálni.
Ha minden egyes kiküldött jel után 100 milliszekundomot várok, akkor működnie kéne nem?
Nem értem, minek ennyire sietni. (=100ms ) Mondtam, hogy lassítsd le a kommunikációt annyira, hogy ki tudd mérni. Akár ShowMessage minden port írás után. Biztos meg fogod találni a bibit.
Feladom
Minden egyes kiküldött akármi előtt shomessage, aztán mérés multival a lábakat, aztán showmessage leokézása, aztán következő adat beírása aztán kiküldése, persze közbe showmessage + mérsések. De egyenként állítom be hogy melyik kimenten legyen jel (mint ha manuálisan, Topi cikkei között lévő kapcsolással csinálnám) akkor meg jó. Régen csinált már egy program nekem ekkora fejtörést.
Most ezt nem értem. Ha ugyanazt méred minden lábon, mint amit "kézi vezérlésnél" (ugyanazt méred?), akkor tegyél be minden port írás után 1000ms késleltetést.
Nem elég a showmessage? Az addig szünetelteti amíg le nem okézom, addig meg a multival mértem. Most képzeld el, egy adat kiküldéséhez 3 showmessage és minden showmessage után méregetés minden lábnál
Az 1000ms-t arra írtam, mikor nincs ShowMessage. Egyébként igen, ha egy adat 3 portírás, akkor annyi ShowMessage is kell és ugyanennyi mérés. Valami nagyon egyszerű dolog nem klappol Nálad, és azt csak ilyen szöszmötöléssel fogod tudni kimérni. De ha ezzel kezdted volna, mikor először mondtam, már rég kész lennéll szvsz...
nekem itt valami nagyon gyanús. Inicializálás után ha egy karaktert akarok kiirni akkor először valami furcsa alakzatot ír ki aztán már kiirja a jó betűt
Inicializálás után mennyit vársz? Van közötte ShowMessage? Hány byte-ot kell kiírni az inicializáláshoz? Általában kell valahol hosszabb ideig várni. Ha 1 byte-os az inicializálás, akkor utána. Ha több byte-os, akkor az adatlap szerint kellene eljárni. Ha meg mindig ugyanazt írja ki először, akkor meg lehet keresni, mi a kódja és abból is lehet következtetni a hibára.
érdekes módon 7*4 bitet küldök ki és azt elfogadta manuálisan, de valahol itt a hiba, mintha hiányozna valami. Még nézegetem a programot hátha rájövök.
Szerintem ne a programot nézegesd, hanem ami kijön belőle. És ha fáradt vagy, inkább folytasd alvás után, friss fejjel. Nehogy füstöljön a kijelző. Vki már járt így... :no:
De nem birom abbahagyni. Lehet reggelig itt ülök.
Melyik reggelig? Bocs, de ez nagyon magas labda volt, nem tudtam kihagyni...
Sajnos csak holnapig, vagyis máig Kedden suli
|
Bejelentkezés
Hirdetés |