Fórum témák

» Több friss téma
Fórum » PIC kezdőknek
 
Témaindító: Placi84, idő: Okt 3, 2005
Témakörök:
- A PIC ÖSSZES Vdd és Vss (AVdd és AVss) (tápfeszültség) lábát be kell kötni!
- A táplábak mellé a lehető legközelebb 100nF-os KERÁMIA kondenzátorokat kell elhelyezni.
- Az MCLR lábat, 10kohm-mal fel kell húzni a Vdd tápfeszültségre.
- Külső kvarc használatakor 4MHz-ig XT, a fölött pedig HS konfigurációt kell beállítani.
- Stabilizált tápegységet kell használni, a kapcsoló üzemű "telefon töltő" adapterek okozhatnak hibákat.
- Programozáshoz, használj lehetőleg PICKIT2 vagy 3 programozót. Kerülendő a JDM (soros porti) programozó.
- A PIC adatlapja (PDF), tartalmazza a lábak kiosztását és a PIC minden paraméterét. Az adatlap ingyen letölthető!
- Egyes PIC típusoknál az RA4 nyitott nyelőelektródás (Csak lefelé húz L szintre, H szintet nem ad ki!)
- Ha a PGM lábat digitális ki-/bemenetnek használod, az alacsony feszültségű programozási lehetőséget le kell tiltani.
Lapozás: OK   60 / 1210
(#) vilmosd válasza zenetom hozzászólására (») Márc 27, 2010 /
 
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
(#) gtk hozzászólása Márc 27, 2010 /
 
Valaki egetett-e sikeresen 16F876 PIC-et oshon programozoval?
(#) zenetom válasza vilmosd hozzászólására (») Márc 27, 2010 /
 
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.
(#) vilmosd válasza zenetom hozzászólására (») Márc 27, 2010 /
 
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
(#) szilva válasza zenetom hozzászólására (») Márc 27, 2010 /
 
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.
(#) t-dani válasza zenetom hozzászólására (») Márc 27, 2010 /
 
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.
(#) szilva válasza zenetom hozzászólására (») Márc 27, 2010 /
 
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.
(#) szilva válasza t-dani hozzászólására (») Márc 27, 2010 /
 
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.
(#) zenetom hozzászólása Márc 27, 2010 /
 
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.
(#) szilva válasza zenetom hozzászólására (») Márc 27, 2010 /
 
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.
(#) zenetom válasza szilva hozzászólására (») Márc 27, 2010 /
 
Idézet:
„Egyébként az sem biztos, hogy 8 bitesben indul”
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!!
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?
(#) szilva válasza zenetom hozzászólására (») Márc 27, 2010 /
 
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.
(#) szilva válasza zenetom hozzászólására (») Márc 27, 2010 /
 
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.
(#) Hp41C válasza zenetom hozzászólására (») Márc 27, 2010 /
 
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

Mplab1320.JPG
    
(#) zenetom válasza Hp41C hozzászólására (») Márc 27, 2010 /
 
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
(#) Hp41C válasza zenetom hozzászólására (») Márc 27, 2010 /
 
Használd egészséggel....
(#) zenetom hozzászólása Márc 27, 2010 /
 
Á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.
(#) zenetom válasza zenetom hozzászólására (») Márc 27, 2010 /
 
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
(#) vilmosd válasza zenetom hozzászólására (») Márc 27, 2010 / 1
 
Hali
Udvozlom a gyomaiakat. En is onnan kerultem ki
Udv Vili
Ps Azert legyel mindig turelmes.
(#) zenetom válasza vilmosd hozzászólására (») Márc 27, 2010 /
 
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).
(#) Thowra válasza zenetom hozzászólására (») Márc 27, 2010 /
 
Ü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).
(#) zenetom válasza Thowra hozzászólására (») Márc 28, 2010 /
 
A sorrenddel (is) volt nállam baj, de így már megy, itt már egy porton van minden.
(#) zenetom hozzászólása Márc 31, 2010 /
 
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) ?
(#) El_Pinyo válasza zenetom hozzászólására (») Márc 31, 2010 /
 
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!
(#) icserny válasza zenetom hozzászólására (») Márc 31, 2010 /
 
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:

  1. movlw  .140
  2.    subwf   k,w
  3.    bnc  end_if
  4.    bz   end_if
  5.    .....  ; itt teljesült a feltétel
  6. end_if:
  7.    ....   ; további utasítások


Az említett lapon találsz még két másik megoldást is a k>j feltétel vizsgálatára.
(#) Sendi hozzászólása Márc 31, 2010 /
 
Ü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.
(#) icserny válasza Sendi hozzászólására (») Ápr 1, 2010 /
 
Idézet:
„gyakorlati (oktató) példát hol találok?”
Google
Idézet:
„A számítógépről honnan tudom küldeni az adatokat?”
Interaktív módon: Hyperterminal, putty.exe, stb.
Programból: pl. Liberty Basic (ingyenes demó)
  1. open "COM1:19200,8,N,1" for random as #com
  2. print #com, "Hello world";

Idézet:
„Mit kell beállítani?”
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).
Idézet:
„A PIC ....”
Komolyatalan a kérdés!
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)
(#) Sendi válasza icserny hozzászólására (») Ápr 1, 2010 /
 
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.
(#) Hp41C válasza Sendi hozzászólására (») Ápr 1, 2010 /
 
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 :
  1. banksel TXSTA
  2.         if      BaudRate<.9600                  ; Baud rate
  3.                 bcf             TXSTA,BRGH
  4.                 movlw   (F_OSC/.64/BaudRate)-1
  5.         else
  6.                 bsf             TXSTA,BRGH
  7.                 movlw   (F_OSC/.16/BaudRate)-1
  8.         endif
  9.  
  10.                 movwf   SPBRG
  11.                 bsf             TXSTA,TXEN              ; Adó eng.
  12.                 banksel RCSTA
  13.                 bsf             RCSTA,SPEN              ; Folyamatos vétel eng.
  14.                 bsf             RCSTA,CREN


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

Wand_886.GIF
    
(#) djpman hozzászólása Ápr 1, 2010 /
 
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?
Következő: »»   60 / 1210
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