Fórum témák
» Több friss téma |
Fórum » PIC - Miértek, hogyanok haladóknak
Sziasztok!
Javaslatotokra kipróbáltam a PICPgm-et. Úgy vettem észre, hogy hibásan kezeli a JDM-et, plusz már magában a JDM-ben sem bíztam, így kénytelen voltam összedrótozni egy LPT-s égetőt. Azt már rendesen viszi, és így felprogramozva már tökéletesen működik minden! Szóval tényleg az okozta a hibát, hogy az IC proggal csak 16f877-esként tudtam írni. De álmomban sem gondoltam volna, hogy ez blokkolhatja valahogy a megszakítást. Azt hiszem, a forráskód bemásolására már nincs szükség. Ezer köszönet! Örök hálám! Visszaadtátok az életkedvem. :worship: Idézet: Meg lehet tanulni vele a PIC programozását, lehet csatlakoztatni hozzáPICtail kiegészítő modulokat, s az üres területen is lehet építkezni (prototype area).„Mire jó még ez a panel a felprogramozásom kívül?” Low Pin Count User Guide
A PIC16F676 -al tényleg lett egy kis problémám.
Amikor programozni akartam, akkor megint előjött belőle, hogy nem lehet programozni. Gondolom az előző programomat amit bele töltöttem nem értette meg, vagy félbe szakadt, a PGM PGD pontok konfigurálása miatt. Az betett neki. Ki írta a program, hogy indítsak el egy OSCCAL-t, mondom ok. Arra nem történt semmi változás. Aztán ahogy írtad, először töröltem, aztán kiolvastam. Így ki tudtam törölni belőle a gagyi programomat. Ja, és át tettem az Use VPP First Program Entry-be is, programozás előtt. Át írtam a futófény programomat a 16F676 -ra. Az RC0 - RC5 -ig. Működik rendesen. Megint örülök. A 12F675 is működik, ha úgy programozom föl, ahogy mondtátok (Use VPP First Program Entry) Viszont ahogy icserny írta: Idézet: „Az A3 akkor is csak BEMENET lehet...” Sajnos rájöttem. Gondolom lesz még rengeteg ilyesfajta meglepő tapasztalat szerzésem, ha picezgetni kezdek. Jó dolog ez tetszik nagyon.
Javaslom, hogy szánj időt a PIC megismerésére az adatlapon keresztül. Utána nem lesz meglepetés, és kevesebbet is kell kérdezned. (Nem mintha baj lenne, csak neked is jobb...)
Meg néztem a majd 100 oldalas adatlapot, de az nekem egyelőre kínai. Ha nem baj, kérdezgetek.
Azt szeretném kérdezni, hogy tudtok-e olyan oldalt, ahol van sok példaprogram, és le is írják a működését.
Persze "C" nyelven.
És ráadásul nem olvasol elég figyelmesen.
Idézet: „Amelyiknél kétirányú nyíl van, az a port kétirányú. Azaz lehet bemenet (input) vagy kimenet (output).” Idézet: Az eddigiekből úgy tűnt, hogy neked kifejezetten CCS C nyelvű irodalom kell. Ahhoz eleve adnak egy csomó mintapéldát. Érdemes volna megturkálni a CCS demókártyáinak leírását, hátha abban ismertetik ezeket.„Azt szeretném kérdezni, hogy tudtok-e olyan oldalt, ahol van sok példaprogram, és le is írják a működését. Persze "C" nyelven.” A BlitzLogic honlapján is látok mintapéldákat. Az adatlapok tanulmányozásával remélhetőleg sikerül PIC16F84-ről áttenni. Bővebben: Link Nigel Gardner könyve is a CCS C-ről szól. Bizonyára hasznos olvasmány lehet ez is, bár én nem olvastam. Bővebben: Link Néhány mintapélda forráskódja a CCS honlapján is megtalálható .Bővebben: Link
Mind a 100 oldalt meg akarod kérdezni? Nem élhetsz vissza a válaszolók türelmével azzal, hogy nem vagy hajlandó olvasni(értő olvasás), főleg ha még azt sem amit írunk...
Azt sem értem, hogy kezdők miért egy olyan nyelvet választanak, ami a gyártó által nem támogatott. A másik, hogy a C nyelven keresztül nem lehet megérteni a PIC-et. Az sem árt, ha az ember ért az elektronikához, miután a PIC egy alkatrész, ami köré áramkört kell tervezni. Na de mit számítanak ezek a dolgok, igaz!? Majd megkérdezek mindent...
Helló!
Sajnos a sok zseni a microchip fórumon nem tudott úgy válaszolni, hogy felfogjam. Az áramköröm a PICDEM.NET 2 ill egy saját áramkör aminek 18F97J60 a szíve. RJ1 a led1 lába, valamint ide raktam egy relét az én áramkörömben. A probléma egyszerű: Amikor az áramkört áram alá helyezzük, egy tizedmásodpercig bekapcsolja az RJ lábakat (azt hiszem ezt úgy kell mondani, hogy TRISJ magas lessz). Mivel áramszünet esetén vagy a készülék első bekapcsolásakor nekem nem túl jó az, hogy egy pillanatra bekapcsol a relém, ezt szeretném kiküszöbölni! A software a TPC/IP stack legutolsó verziója Itt a microchip fórumos postom is http://www.microchip.com/forums/tm.aspx?high=&m=528317&mpage=1#528328
Mindjárt az első válaszban leírták, hogy bekapcsoláskor lebegő állapotban van a portláb (tri-state), tehát neked kell külső le- vagy felhúzással határozott állapotba húzni a vezérlést.
A TRISx regiszterek csak az adatáramlási irányt szabják meg (1 = tris-state állapot, ekkor bemenetként használható a port(bit); 0 = tris-state letiltva, kimenet engedéyezve, tehát kimenetnek van állítva a port(bit)). Az, hogy a kimenetnek állított port vagy portbit alacsony vagy magas szinten van, az az adatregiszter (LATx) beállításától függ. A helyes sorrend inicializáláskor:
Ez zseniális, csak nem biztos, hogy értem!! Így, hogy nem angol, hanem magyar, lehet, hogy egy kicsit jobban értem.
Ha minden igaz, te azt próbálod mondani nekem, hogy a TRISJ, azaz az RJx lábra kell raknom egy ellenállást, ami össze van kötve a nullával (GND), annak érdekében, hogy a proci bekapcsoláskor tudja, hogy az a lábsor OUTPUT. Ha rosszúl látom, kérlet válaszolj.
Nem akarom megkérdezni mind a 100 oldalt, ezt nem is mondtam. Csak annit írtam, hogy nem értem azt, amit az adatlapon látok. hiába olvasom el 10szer, akkor se. Értelmetlen dolog. Nem érzem úgy, hogy vissza élnék a válaszolók jó indulatával, mert nem kötelező válaszolni. A kezdők miért választanak olyan nyelvet... Azért, mert nem tudom, hogy egyáltalán milyenek léteznek. Honnan is tudhatnám. Különben azért, mert nagy kedvet kaptam a Vicsys honlapján található "C"Kurzus cikk sorozatból. Ő meg le írta, hogy ezekre a dolgokra lesz szükség, és le is írta, hogy kell. ki gondolja ezek után, hogy egy nehezebb utat választott??
Nem értem miért viselkedsz ilyen cinikusan. Azt kérdeztem, hol lehet ezt meg tanulni, és semmi segítséget nem kaptam. Gondoltam, ami problémákba ütközök, meg kérdezem. Nem tudtam, hogy ezt egy nyílt fórumon nem tehetem meg. Olvastad a topic címét? "PIC - Miértek, hogyanok... " Azt gondoltam, hogy a Miértek, hogyanok a címben azt jelentik, hogy bátran kérdezhetek.
Helló!
A PIC az a TRIS'x' regiszterből tudja hogy az 'x' port az kimenet vagy bemenet. (0=Out, 1=In). Az ellenállás meg azért kell, hogy amíg lebegő állapotban van a port addig a földre húzza azt. Így nem fog egy pillanatra bekapcsolni a reléd. Amennyi ideig bekapcsolt a reléd, annyi ideig tart a PIC-nek átállítani a portot kimenetnek és nulla értékbe állítani. Amúgy megkaptad a választ a microchip-es fórumon is: Idézet: „On the base of the transistor you should have a 10K to ground. This will keep the transistor turned OFF until you have control of the I/O pin.” Azaz: A trazisztor bázisát kösd egy 10KOhm ellenállással a földre. Ez segít kikapcsolva tartani a tranzisztort, amíg át nem veszed az irányítást az I/O lábon. (annyira nem vagyok profi angolból, de ez a lényege)
Különben szívesen veszek mindent, amitől meg tudom érteni a pic programozás menetét. Legyen az példatár, vagy egy Magyarnyelvű leírás, vagy egy irányvonal, amin érdemes elindulni.
Kössz
Az a helyzet, hogy a PIC (vagy bármilyen kontroller) megtanulása nem egyik napról a másikra történik, ez azért mindenkinél egy elég hosszadalmas időszak. Hogy pontosan mennyi, az az előképzettségtől és a hozzáállástól is függ. Mindenesetre elmondható, hogy az a 100 oldal az kb. bolhafing ahhoz a tudnivalóhoz képest, ami szükséges az önálló boldoguláshoz. Ha tényleg komolyan gondolod a dolgot, akkor kezdj neki ezen téma végigolvasásának, és miután végeztél, akkor már sokminden tisztább lesz.
A probléma sokkal általánosabb kérdéseket érint, tulajdonképpen független a PIC-től:
Ha vezérlést tervezel, akkor azt úgy kell kialakítani, hogy a külső vezérlés megszűntekor (vagy feléledéséig) se kerülhessen a vezérelt kimeneted határozatlan, vagy nemkívánatos állapotba. Ezen az oldalon a második ábra talán segít megvilágítani a helyzetet.
Köszönöm először is, hogy cNobody felhívta a figyelmemet arra amit félreolvastam
icsern válasza még értékesebb, mivel a 10K nem volt megfelelő érték. Mindkettőtöknek köszönhetően most ugrásszerűen sokat tanultam a tranzistorok működéséről, amit a jövőben majd kamatoztatni tudok! Így hát mit csináltam? Beraktam egy potmétert. Csak az a baj, hogy ha nyomok egy MCLRt a PICnek és aszerint kalibrálom az ellenállás értékét, úgy működik. Ellenben, ha az áramkört rendeltetésszerűen próbálom használni, akkor a relé nem nyit ki. Nem tudnátok ajánlani valamilyen értéket R-nek és R(B)-nek, melyekkel valószínüleg működni fog? Idézet: Természetesen nem, hiszen sem a kapcsolás, sem a tápfeszültség, sem a kapcsolt relé(?) áramfelvétele, sem a kapcsolótranzisztor paraméterei nem ismertek. „Nem tudnátok ajánlani valamilyen értéket R-nek és R(B)-nek, melyekkel valószínűleg működni fog?” Az sem kizárt, hogy a probléma megoldásához át kell tervezni a kapcsolótranzisztoros fokozatot.
Pedig a 10k-nak jónak kell lenni e a B-E között, és a PIC-bázis közé pedig 1k a szokásos érték. Sőt relé meghajtásánál bipoláris tranzisztor esetén én a 10k-t nemis tartom lényegesnek, hiszen a bipoláris tranzisztor áramvezérelt eszköz, így bekapcsoláskor csak a miller kapacitás nyom bázisáramot, ez viszont olyan rövid idő alatt lefut, ami idő alatt a relé érintkezője meg sem tud mozdulni. Ha ezekkel az értékekkel is bekapcsol a relé, akkor ott valami vagy rosszul van bekötve, vagy a PIC lába még azelőtt kimenetté van kapcsolva, mielőtt a LATx megfelelő bitje nullázva lenne.
Nézz fel az oldalamra, leírom, hogy mi kell a kezdéshez. Természetesen szerintem...
Idézet: „Nem értem miért viselkedsz ilyen cinikusan.” Azért, hogy felkavarjalak, hogy megérstd, ez nem ilyen egyszerű, és nem szabad ilyen egyszerűnek hinni. Sok idő és sok tanulás. A kérdéseidből látszik, hogy nem érted, mennyi minden hiányzik még, és azt nem itt kell beszerezni, itt nem tudunk könyveket írni. Az oldalamon sok liket találsz, rengeteg olvasnivalót. Kezd az alapoknál, nem fogod megbánni! Persze, csak ha komolyan gondolod.
Kössz megnézem az oldalad.
Tényleg nem tudom hol kéne kezdeni a dolgot. Vicsis oldalán olyan egyszerűnek tűnt minden. Igaz csak ledekkel szórakoztam, meg is írtam a futófényemet 4 féle picen. Ahhoz, hogy értsem, átlátom, hogy több kell. Találtam már leírásokat Angolul. Na ott gáz lesz, mert nem vagyok egy nagy angolos. Így Magyarul már jó lesz.
Sokan a LED villogtatás után elakadnak, főleg, ha azt egy C példa programból készítik. A LED villogtató assemblerben is egyszerű! Jó a C nyelv, szeretem(már), de eltakarja a lényeget. Mindaddig nincs is gond, amíg valami nem akar működni. Az ASM nyelv maga a PIC lényege. Minden regisztert "kézzel" kell beállítani az adatlap alapján és minden lépést a PIC szájába kell rágni. Ez látszólag felesleges kínlódás, de ez nem egy PC, ahol több 100 asm utasítás van és több ezer regiszter, itt csak 30 körül használunk a leggyakrabban és funkció regiszter is 100-as nagyságrenben van. Ha átlátod a PIC működését az asm-on keresztül, utána jöhet a C nyelv. Így is nehéz lesz a C, majd kis idő múlva játszi könnyedséggel tudsz haladni és ha elakadsz, simán rájösz, hogy mit nem jól fordít a fordító. A kicsi 16F-ekre(ha nagyobb kell 18F!) ma is asm-ban írom a programokat, mert ott még kevesebb utasítást használ az ember és a kicsi memória miatt hatékonyan kell és lehet programozni.
Az adatlap használatának megtanulása fontos. Van egy magyar nyelvű adatlap az oldalamon 16F84-hez(PIC környezet/PIC infók). Ne vegyél ilyen PIC-et, viszont az adatlapok szerkezetének és a bennük foglaltak felépítésének megértéséhez, nagyon jó tananyag. A többi adatlap is így fog felépülni, legfeljebb több infót találsz bennük. Az összes 16F alapjaiban erre a PIC-re épül. A 18F-ek eltérnek több ponton, de kevesebb az eltérés, mint az azonosság. Szóval adatlap a PIC bibliája. Ha megértetted a PIC felépítését és ráérzel, hogy az asm utasítások mit művelnek valójában (nagyon egyszerű egyébként és a nyelv is részletesen le van írva az adatlapban!), akkor utána már könnyű dolgod lesz, főleg ha van elektronikai tapasztalatod, ami ha jól tudom van. A matekot is érdemes átnézni, halmazelmélet, műveletek, bináris logika. A programozási trükköket pedig számtalan példából el lehet lesni, amíg magad is meg tudod majd írni őket, bár a legtöbb esetben nincs új a nap alatt, csak több időbe telik. Itt persze a sűrűn előforduló konvertálós, és matematikai műveletekre gondolok, mert a feladatok egyediek, a hozzá tartozó kódok soha nem egyformák! Remélem nem untattalak ezzel a hosszúra sikerült hozzászólással!
Szia!
Nagyszerűek a leírások az oldaladon, egy magamfajta kezdőnek, köszönöm Sok dolog kitisztult ami eddig ködös volt.
Dehogyis.
Sőtt egy regényt el tudnék olvasni ilysmikről.
Nehéz, pontosabban nem is lehet univerzális receptet adni, annyira eltérő képzettséggel, tapasztalattal, céllal és gondolkodásmóddal kezdtünk mi is a mikrovezérlőkkel foglalkozni. S amióta a munkamegosztást feltalálták, még az is megeshet, hogy valaki csak a mikrovezérlő programozásával akar foglalkozni (a hardvert más fejleszti, vagy készen kapta). Mindenkinek meg kell találnia tehát a saját útját, amiben próbálunk segíteni, de ez sokszor csak annyit ér, mint amikor a partról/út mellől osztjuk a tanácsot az úszni/biciklizni tanulónak.
Ami a sokféle útban közös, az a sok olvasás, sok idő (és sok kínlódás/töprengés) amit te is említettél és ami sajnos, elkerülhetetlen. Hasonlóan fontos az adatlap és a szoftver leírások tanulmányozása. Szomorú tapasztalat, hogy a különböző fórumokon általam nyújtott "szakmai segítség" az esetek 70-80 %-ában csupán abban merült ki, hogy a delikvens helyett elolvastam az adatlapot vagy felhasználói leírást. Az is lényeges, hogy informatikai alapismeretek (számrendszerek, logikai műveletek) és elektronikai ismeretek nélkül könnyelműség PIC mikrovezérlőhöz nyúlni. Ez tehát alapfeltételnek tekinthető. A megközelítésekben viszont többféle módszer is sikeres lehet. Amit te ajánlottál, az talán "alulról felfelé" történő építkezésnek is nevezhető. Gyökeresen más, de szintén járható út a "felülről lefelé" történő haladás is, amit a különféle BASIC vagy C (különösen a MikroC és a CCS C) fejlesztői környezetek kínálnak. Így is el lehet indulni (én is éltem vele, amikor kevés volt még a tudományom ahhoz, hogy assemblyben formátumozott kiírást vagy soros kommunikációt megírjak, akkor nagyon sok időmet megspórolta a CCS C). Utána aztán neki lehet állni - mindig egy-egy részterületre koncentrálva - a mélyére nézni a dolgoknak. Akkor van baj, ha túlságosan zárt a rendszer, s nem lehet a körmére nézni az egyes könyvtári függvényeknek. Ebben példaértékű a JAL, mert "úrvezetőknek" való magas szintű támogatás is van, de ott a forrás, bármikor lehet tanulmányozni, módosítani vagy fejleszteni. Nekem tetszik és nálam bevált a "harmadik út", amit a Mississippi egyetem PIC18 és PIC24 kurzusaiban találtam meg: ebben párhuzamosan mutatja az elemi programrészek (bitműveletek, aritmetika, összehasonlítás, elágazás, ciklusok, stb) C és assembly megoldásait, s aztán mihamarabb egy kényelmes kommunikácóval és támogatói könyvtárakkal ellátott környezetet tol a tanuló feneke alá. Így elmarad/megspórolható a dolog favágás jellegű része, s mindig csak arra a részletre koncentrálunk, amiről éppen szó van. Talán ennek a megközelítésnek köszönhető, hogy az elmúlt 2-3 év alatt csupán a két kezemen megszámlálható alkalommal kényszerültem hardveres debug-olásra. A szükséges információ többnyire anélkül is rendelkezésre állt az "életjelző LED" vagy a képernyő kiírások jóvoltából. Ezt az utóbbi utat próbálom járni az USB-vel ellátott, vagy az USB-UART konverterrel ellátott PIC18 mikrovezérlőknél is. Most például a legújabb szerzeményemhez állítottam össze az itt talált forráslista alapján UART kommunikációs könyvtárat. Ha ezt kézbe veszi valaki, akkor pillanatok alatt tud kommunikálni a számítógéppel, s ezt már akkor haszos segítség lehet számára, amíg az I/O portok, az időzítők, az interrupt vagy az ADC részleteivel ismerkedik. Utána majd ráér megnézni, hogy mi is az a soros port... A mellékelt példában lekérdezéssel (polling) van kiszolgálva a soros port, de ha definiáljuk a USE_INTERRUPT szimbólumot, és az interrupt kiszolgáló eljárásban meghívjuk ugyanazt a USARTDeviceTasks() eljárást (lásd lentebb!), amivel polling módban a lekérdezést csináljuk a _usart_getc() és _usart_putc() függvényekbe rejtve, akkor a kiszolgálás interrupton történik. Mindkét esetben 16 karakteres (vagy amennyit definiálunk) gyűrűs FIFO buffert használunk.
Sziasztok!
Sajnos nem sikerül a DMX jelfeldolgozás, most picit félre is tettem, mert egy LCD kijelzős órát kell csinálni. A probléma az 1s-os órajel generálás. Ha matematikailag nézem, és 16MHz-es órát használok, akkor a TMR0 Fosc / 4-es, azaz 4MHz-es órát kap meg. Kiválasztottam a 256-os osztást, ami 15625 Hz-ig vezettem. Innen kiszámoltam, hogy a TMR0 számlálója és egy másik számláló egymással szinkronban mennyit kell számolni, így 3db használható eredmény jött ki. Ha a TMR0 25-ig számol, akkor a szoftveres számláló 625-ig kell elszámolni. Ezt nem lehet felcserélni, mert a TMR0 csak 8Bit-es, így 3-ból 1 kiesett. Van még egy pont, ami maradék nélkül működne, ez a 125-ös érték. Ha a TMR0 elszámol 125-ig, majd megszakítással a szoftvereshez ad 1-et, és az is elér 125-ig, akkor elméletileg 1Hz-es órajelet, 1s-os léptetést kapok. Sajnos, ezaz elmélet, mert gyakorlatilag gyorsabb az így megkapott órajel, mint a karórám másodperc mutatója, vagy a számítógépem mutatója, számlálója. Mi lehet a gond? Nekem az jutott eszembe, hogy 16MHz-es óra helyett valami kevesebbet kaphatok, de nem tudom, hogy tudnám ellenőrizni. Van valakinek ötlete? Előre is köszönöm... Idézet: Ha kevesebb volna az órajel,akkor ezzel a leosztással lassabban járna az órád. Most viszont azt mondod, hogy túl gyors. „Nekem az jutott eszembe, hogy 16MHz-es óra helyett valami kevesebbet kaphatok”
Sziasztok! Van egy problémám egy 18F45j10-es PIC-el szeretnék egy 4*20-as LCD-t vezérelni a gond az hogy szrintem kifagy a processzor amint az lcd_int(); vagy a printf(...); utasításhoz ér! Miért van ez? Ugyan ez a program 16f877-es PIC-el működik.
A kikommentezett részt csak a hiba megtalálása érdekében raktam bele! Ha csak az lcd_init(); nem szerepel a programba akkor a led bekapcsol a C2-es kimeneten utána elalszik de nem villan fel újra szóval ott megfagy ha az lcd_init benne van akkor már a led bekapcsolásáig se jut el! Ilyenkor mi lehet a probléma?
Nem, tévedtem, lassabb! A számítás gondolom jó, így kell kiszámolni az idő leosztást?!
PicKit2 táplálja a PIC-et, de külön 7805-ös IC-ről is tápláltam, így a feszültség külömbség sem lehet túl nagy gond. PicKit2 LCD-vel együtt 4,2V-ot tud leadni, 7805-ös meg 4,8V-nál áll... |
Bejelentkezés
Hirdetés |