Fórum témák
» Több friss téma |
Hali
Haat ? Eloszor is probald meg a LCD inicializast normalisan megirni ( az idozitesek nem viccbol vannak ott). Pontosan azokat az idoket tartsd be amit irnak. Nem kell varni 1/2 masodpercet, csak a megadottakat. (olvasd el a LCD adatlapjat) A masik : ha 4 bites uzemmodot hasznalsz ki kell kuldeni mind a ket fel byte-ot. harmadik: az LCD ASCII adatot var nem decimalisat. Tehat ha ki akarsz irni egy '7' szamot akkor a 0x37 adatot kell kiirni a kijelzore, nem 0x07-et. A 4 bites uzemmodban eloszor a felso felbyte majd az also felbyte kerul a kijelzore. Tehat a '7' kiirasahoz eloszor b'0011' , majd b'0111' adtot kell kiirni az adatvezetekre. Ugy nagyjabol ennyi. Esetleg a neten lehet talalni 1-2 mintapeldat PIC-es LCD kezelesrol :PIClist LCD. Probalgasd ezeket. Udv Vili
Ha megnézted volna a csatolt programot akkor láthattad volna hogy két részben küldöm ki.
Egyébként elolvastad amiket írtam? A majd 2000 soros (delphiben!) LPT-s program tökéletesen működik, ne gyertek már ezzel az időzítés dumával, hagy tudjam már mit tud ez a kijelző. Elnézést ha nyers voltam, csak már annyiszor írtam le.
Hali
Nekem szimulaturban nem latszik a ket felbyte kikuldese. Elegge atlathatatlan a programod. Probald meg az inicializalast ahogy megirtak az okosok. Utana irj egy fuggvenyt az adatkuldesre. Amit eddig irtal torold ki az emlekezetedbol. Itt ( PIC ASM) nem szukseges 2000 sort irnod. Elegendo 50-60 , es ezzelszepen le lehet kezelni a LCD-t. Remelem atnezted a mintapeldakt. Ezek mind mukodoek. Ha valami nem megy ujra kell probalni. Nem egy ordongosseg vezerelni az LCD-t. Gondolom itt a forumban sikerult mar 1-2 embernek. Lehet hogy ok is szivtak eloszor, de nem adtak fel. Tehat probald meg ujra es ujra amig nem megy. Turelem. Udv Vili
Hülyeségeket ki lehet jelenteni, attól az még nem lesz igaz. Mindamellett, hogy az "init"-ed még mindig nem ér egy hajítófát sem, azért én nem vagyok biztos benne, hogy olyan nagyon jó ötlet az RS-t billegtetni kommunikáció közben a két félbyte között.
Normálisan annak úgy kellene kinéznie, hogy a kiküldendő adat vagy parancs előtt beállítod az RS-t (és az R/W-t ha használva van), majd a DB7-DB4 lábakon lehet folytatni a kommunikációt két EN segítségével. Írás után meg kell várni a megfelelő időt, hogy a kijelző feldolgozza a neki küldött dolgokat, vagy figyelni a BUSY bitet olvasgatásokkal. Az időzítésekkel valószínűleg most nincs gond, a bitbillegtetés sorrendjével lehet. Oldd meg, hogy a félbyte kiírása ne bántsa a LATB többi bitjét, amit már korábban beállítottál! Egyébként még most is csak a dokumentációt tudom javasolni, google-ba beírod, hogy HD44780U, az első találat egy pdf. Az initet írd meg rendesen, mert ez így semmit nem ér, nagy mázlid van, hogy egyáltalán szóba áll veled a kijelző. Mellesleg nem emlékszem, hogy a hardveres környezetről mennyire volt szó, de akár még ott is lehet keresgélni hibaügyileg.
Sajnos vannak olyan LCD-típusok, amelyek 4-bites üzemmódban nem mindig hajlandóak megfelelő módon inicializálódni. És ennek nem a PIC-hez van köze igazából... ha más típussal próbálkoznál, feltehetőleg ugyanez lenne az eredmény. Viszont azza sokat segítenél, ha le tudnád venni logikai analizátorral az LPT-port jeleit. Lehet, hogy sok ember gondja megoldódhatna a 4-bites üzemmódot tekintve.
Vakószínűleg eddig szerencséd volt a kijelzőkkel, mert ha ezt Delphiben is így kódoltad le, akkor az csak a szerencsén múlik, hogy működik-e vagy sem.
Nincs ebben olyan nagy csoda. Ott a doksi, el kell olvasni. Az init nem véletlenül van olyan "bonyolultan" megírva, az eredeti HD44780 tényleg nem ért egy-két gyors "pofonból", hogy neki most 4 bitesen kellene mennie. Ott meg kell csinálni azt a korrekt init szekvenciát, ami a doksiban van, ellenkező esetben előfordulhat, hogy semmit sem fogsz látni. Ja és némelyeknél a "display on" parancsot is ki kell adni, mert hiába van az a kijelzőn, amit akarsz, ha nem mutatja.
Mivel van jópár HD44780-kompatibilis vezérlő, és az újabb, más gyártók által gyártottak esetleg könnyebben megértik a pongyola initet, ez sajnos jópár programban meg is látszik. Én már számtalan olyan kódot láttam itt a fórumon is meg a neten is, ami rigolyás volt a kijelző típusára, mert az init nem volt tisztességesen megírva.
Köhömm... Ennek a kijelzőnek alapból csak 4 kivezetése van az adatbiteknek, tehát lehet nem kell 4 bites üzemmódba rakni, mivel alapból csak 4 bitet tud egyszerre fogadni?
Gondolom mivel ezt is HD44780 ica hajtja, ugyanúgy kikéne neki adni a 4 bites inicializációt, de akkor LPT-ről miért működik azzal az egyetlen egy árv aparanccsal hogy: 0000 0010 ?! Még talán megpróbálom hogy az enablet átpakolom a PortA-ra, meg az RS-t is.
Nekem is van olyan kijelzőm, amiből csak 4 adatbit jön ki, de attól még a panelben ugyanaz, a 8 bitre is alkalmas vezérlő van. Az, hogy attól az egy árva félbyte-tól 4 bitesbe kapcsol, meg attól van, hogy 8 bitesen beküldöd neki a 4 bitre váltó parancsot. Igaz, hogy az alsó bitek össze-vissza állhatnak, de lehet, hogy szerencséd van, és azok a bitek nullára vannak kötve a kijelzőben, nem csak lebegnek a levegőben. Az EN-t és RS-t másik portra tenni jó ötlet, bár egy porton is meg lehet írni a billegtetést jól.
Egyébként az sem biztos, hogy 8 bitesben indul, vagy hogy az initet éppen pont bekapcsolás után kell kiadni, többek között emiatt is van az az init szekvencia. Idézet: Hát ezaz! De annak idején (tavaly nyáron) az adatlap alapján próbáltam, igaz még kapcsolókkal (csináltam hozzá pergésmentesítőt) és nem működött!!„Egyébként az sem biztos, hogy 8 bitesben indul” Egyszer felfigyeltem rá hogy a sima alaphelyzetbe álíltás parancstól beindul, és fogadja a parancsokat, meg mindent és egyszer sem hibázik, szóval szerintem ezt így kell beröffenteni!? szerk.: mármint HD44780 adatlapját néztem. Egyébként nem lehetséges az hogy ebben valami másolmány van, azért működik így?
Ja és még valami: nem "0000 0010" a 4 bitesbe váltó parancs, hanem "0010 NF00", ahol az N és F bitek üzemmód-beállítók (1/2 sor; 8/10 magas karakterek). amikor te azt hiszed, hogy kiküldöd 4 bitesen a "0000 0010" parancsot, akkor tulajdonképpen kiküldesz a kijelzőnek 8 bitesen egy "0000 xxxx" parancsot, majd egy "0010 xxxx" parancsot. Az első a doksi szerint nem értelmezett, valószínűleg nem csinál semmit, a második átvált 4 bites üzemmódba, de nem határozza meg, hogy 1 vagy 2 soros-e a kijelzés, és a karakterek 8 vagy 10 magasak-e. "xxxx" helyén bármi állhat, ami éppen a levegőből odakerül, mivel a DB0-DB3 bitek nincsenek bekötve. Jó esetben valami fix szintre vannak kötve, pl. a GND-re, és akkor 0-nak tekinthetők. Szóval ez minden, csak nem inicializálás.
Hát akkor meg már meg is tapasztaltad, hogy initelni kell, hogy csináljon is valamit. Ott az adatlap, tessék aszerint csinálni, akkor menni fog!
Azt meg megnézheted, hogy mi van benne, hátha találsz valami feliratot. Ha panelre "taknyolt", akkor lehet, hogy nem lesz semmi azonosítás.
Szia!
Meredeknek hangzik, de gondolj csak bele... A 80x86 processzorod sokkal ritkábban képes az LPT portra írni, mint a PIC (még a 4MHz órajellel is gyorsabb). Abban teljesen igazad van, ha most azt mondod nekem, hogy miért lenne lassabb a több GHz-es processzor mint a 4 MHz-es. - Az ok az operációs rendszer. Hála Kertkapu Vilmos-nak és cégének, az újabb (> Win98) Window$ rendszerben nem lehet direktben elérni a portokat. Ezekhez a műveletekhez magasabb privilégium szint kell (kernel mode). Ahhoz, hogy a delphi programod elérje az LPT port regisztereit, egy DDL függvényt hív meg, abban taszkot vált, megszerzi a privilégium szintet elvégzi a port műveletet, visszatér a normál privilégium szintre, taskot vált, visszatér a DLL-be, onnan a delphi programba. Szegény processzor eljár néhány 100us - ms násztáncot egy kb. 33 nS-os port írási / olvasási műveletért. Közben a rendszer más taskjai is futnak, a megszakításokat lekezelik, stb... A pic ezzel szemben két E pulzust ki tud adni 4 us alatt. Ezt kellene a programodban figyelembe venni. Többünknek sikerült 40MHz órajelű (10Mips) és még gyorsabb pic-kel LCD-re írni. Próbáld ki, amit már fél napja ajánlunk... Nálam 40Mhz Pic18F252 vidáman ír 2*20 karakteres LCD-re, a te beállításaid szerint, a programod módosításával a 18F1230 is tud már a szimulátorban... Szia
A sebességekkel tisztába vagyok, azzal is hogy az "adatot kiküldöm LPT-re" parancs megkerüli a fél világot mire tényleg kikerül LPT-re (nézegettem a DLL működését).
Bő fél éve is elhangzott nem reális szó egy másik totyikban, szintén ezzel a kijelzővel kapcsolatban (és igen, azóta nem vettem egy normálisat ami úgy működik ahogy kéne, most lehet szidni ), de megoldódott a probléma: Bővebben: Link Van pár oldal előzménye is. Normális ember lehet venne egy újat, de nem vagyok milliomos, szóval marad ez a kókány
Átraktam az enable-t a PortA-ra és kiírja a 7-est :hide:
Ezért megérnemelnék egy kis piros háromszöget (ha ezt modi olvassa akkor kérek eggyet!) Bár még nem akarom elkiabálni, de szerintem így már jó lesz. Gyorsan írok egy normális eljárást karakter kidobálásra. Megnézem hogy miújság van a többi karakterrel. Teljesen egyetértek azzal ha most szidtok, de nem gondoltam volna hogy ez lehetett a probléma. Egyébként ez a hozzászólás miatt gondoltam meg magam megint hogy azért mégse kéne föladni : Idézet: „Tehat probald meg ujra es ujra amig nem megy. Turelem.” Eddig is köszönöm mindenkinek a kitartó türelmét!!! Most pedig tömény ASM programozás következik (illetve folytatódik, tegnap (vagyis ma) hajnali 5-kor feküdtem le, bár már annyira álmos voltam hogy reggel amikor felkeltem és csináltam tovább, azt vettem észre hogy össze-vissza van bekötve az LCD, szóval az lett volna a csoda ha működik. No, most pedig munka.
Köszi, vicsys
Node a sok munka meghozta gyümölcsét. Köszönöm a kitartást: (lásd képek ) Sajnos Thowra már nem fért ki
Hali
Udvozlom a gyomaiakat. En is onnan kerultem ki Udv Vili Ps Azert legyel mindig turelmes.
Hali!
Nekem túl nyugodt néha ez a város. Most azt írom át amit linkeltél kíváncsi vagyok hogy ez műkodik-e. Egyébként a GOTO $+1 utasítás mit jelent? Én úgy olvastam hogy ilyenkor a $ jel az relatív hivatkozás, és csak páros számot lehet mellé írni (attól függ hova akarunk ugrani).
Üdv!
Örülök, hogy sikerült Az, hogy azonos porton van minden eddig nem okozott nekem gondot. Az E porttal már jártam úgy, hogy nem állítottam be az adcon t és nem ment a kijelző (8 bites mód, portc 0-7 ig adat, port E 0-3 rs, rw, e).
A sorrenddel (is) volt nállam baj, de így már megy, itt már egy porton van minden.
Hali!
Ha vizsgálni akarok egy változót (byte) hogy nagyobb-e mint pl.: 140, akkor úgy a legegyszerűbb hogy a változó értéke alapból 116 (=256-140), és vizsgálom a STATUS regiszter Z bitjével, hogy mikor csordul túl (persze előtte beviszem a Workbe, mert azt nézi a STATUS Z bite ha jól tudom) ?
Szia!
Ha még mindig a 18F1320- ról van szó, akkor az utasításkészletben már vannak komparáló utasítások. Nézd meg az adatlapban az utasítások áttekintésénél!
Ha előjel nélküli számokról van szó, akkor ezt az oldalt nézegesd!
A k>j feltétel többféleképpen is vizsgálható. Mivel itt j egy konstans, kézenfekvőnek látszik a k-j kivonás használata. Igen ám, de ekkkor két feltételt is vizsgálni kell: C=0 és Z=1 estén át kell ugrani az if törzset:
Az említett lapon találsz még két másik megoldást is a k>j feltétel vizsgálatára.
Üdv Mindenkinek.
A következő kérdésem van, kezdő létemre. A soros kommunikáció elméletéről már olvastam, de a gyakorlati (oktató) példát hol találok? Ilyen gyakorlati kérdéseim lennének: A számítógépről honnan tudom küldeni az adatokat? (hiperterminál, egyéb prg? ) Mit kell beállítani? A PIC memóriáját hol címzem meg? Kell törölni a memória részt, vagy simán felülírja? Szóval: alap soros kommunikáció a gyakorlatban. Példákkal. Köszönettel. Idézet: Google„gyakorlati (oktató) példát hol találok?” Idézet: Interaktív módon: Hyperterminal, putty.exe, stb.„A számítógépről honnan tudom küldeni az adatokat?” Programból: pl. Liberty Basic (ingyenes demó)
Idézet: Adatátviteli sebesség, bitek száma, paritás, stop bitek száma, esetleges hardver kézfogójel, vagy XON/XOFF protokoll (vagy egyik sem).„Mit kell beállítani?” Idézet: Komolyatalan a kérdés!„A PIC ....” Milyen PIC-et akarsz használni? Milyen kapcsolásban? Milyen programfeljelesztői környezetet használsz? A PIC logikai jelet használ. A számítógép soros portja RS-232 szerinti jelszinteket használ. A kettő közé szintkonverter kell (pl. MAX232). Alternatív lehetőség: egy olyan USB-UART átalakító építése vagy beszerzése, amelyből nem RS-232 jelszint jön ki. Ez esetben az USB-re dugott eszköz virtuális soros portként kezelhető a PC felől (pl. COM5-nek látszik)
Helló Icserny.
Elnézést a "tökéletlen" kérdésekért, de így közeledvén a 60 felé, kezdek rájönni, hogy sok minden kimaradt az életemből. Tehát csináltam egy pontmátrixos futó szöveget, 16F876-tal. De a szöveg csak a programból változtatható. MPLAB-t, assembly-t használok Tudom, hogy kell soros illesztő, (MAX 232), de még sohasem használtam. Eddig még egy betűt sem küldtem (saját tudásomból) a soros vonalon. Ezért kértem, valami egyszerű kapcsolást tanulmányozni az adat küldést, illetve, hogy mivel tehetem.(program) Gondoltam, hogy akik ezt tanulták az iskolában, azoknak van kapcsolása, leírása, programja a méréshez. (a gyakorlat érdekel) Ebben várnék még segítségedet, segítségeteket. Köszönettel. Sorry, de egyszer mindenki megöregszik, de az érdeklődés, a tanulási kedv, még megmaradhat.
Szia!
Van egyszerűbb illesztési lehetőség is, a mellékelt ábrán a piros keretben levő elemek megoldják az RS232 illesztést. (A szükséges negatív tápfeszültséget egy modem vezérlő jelről vesz.) A soros adás - vétel megkezdése előtt az uart egységet be kell állítani: - Kivezetések beállítása: RC7 és RC6 bemenetnek kell beállítani a 16F876 - 16F886 -on, - A sebesség (baud rate) beállítása :
Soros vétel: A PIR1 regiszter RCIF bitjét kell figyelni (1 ha van vett adat), a RCSTA regiszterben kolvasható az esetleges hiba (FERR - keretezési hiba, OERR - egymásra futási hiba), az RCREG -et kiolvasva kapható meg a vett adat. Ha hiba volt, akkor is ki kell olvasni az RCREG-et, mivel az olvasás törli a RCIF bitet. Az egymásra futási hiba csak a vevő letiltásával és újra engedélyezésével törölhető. Adás: Akkor lehet az újabb adatot elküldeni, ha a PIR1 regiszter TXIF bitje 1. Az adni kívánt adatot a TXREG regiszterbe kell beírni (az írás törli a TXIF-et). A soros vonalon történő adatkapcsolat sajnos nem ennyire egyszerű: 1 - Ki kell találni, hogy milyen táviratokkal történjen az adatok átvitele, 2 - Meg kell oldani a visszajelzést: Az adónak valahogy értesülnie kell, hogy az előző távirat feldolgozása megtörtént... 3 - Megfejthetőnek kell lennie a táviratozásnak: Ha kimarad (hibás vétel miatt) egy két karakter, akkor előbb - utóbb újra kell tudni értelmezni a táviratokat... A soros adatátvitel a kontrollerhez képest nagyon lassú. Ha csak várakozással figyeljük az adatforgalmat, a kontroller teljes kapacitását elpocsékoljuk. Sokkal hatékonyabb a bufferelt adás - vétel módszere: Megszakítással figyeljük az adó és a vevő állapotát. A megszakítási rutin a vett karaktereket egy körforgó bufferbe helyezi el, az adandó karaktereket egy másik körforgó bufferból veszi ki (ha elfogy letiltja az adás megszakítás kérését). A buffereknek legalább 1 táviratot kell tudni tárolni. A főprogram ezután már csak a táviratok értelmezésével és a válasz összeállításával foglalkozik. Az értelmezéshez kiolvassa a vételi bufferből a távirat adatait, a választ az adási bufferbe beírja (és az adási megszakítás kérést engedélyezi). A bufferekben tárolt karakterek számának kezelése un. kritikus művelet - egy utasítással (incf ...,f - decf ..., f) kell végezni. Ezzel a módszerrel még az igencsak leterhelt kontroller is képes a hatékony kommunikációra. Szia
Sziasztok!
Egy nagyon amatőr kérdésem lenne. Nem találtam sehol sem erre utalást ezért teszem fel. Mi történik amikor a pic-be írt programunk a végére ér és nem írtunk végtelen ciklust. Megáll, újraindul vagy folytatja a program memóriában a beolvasást-végrehajtást? |
Bejelentkezés
Hirdetés |