Fórum témák
» Több friss téma |
Idézet: „Ilyen gondok megoldására van a UserId nevű terület. Ebbe a 4 memrória rekeszbe egy emlékeztetőt lehet programozni. Kiolvasás után az emlékeztető alapján azonosítani lehet a programot.” Hogyan lehet erre a területre írni? Nézegettem az adatlapokat nem nagy nagyon lettem okosabb. Mondjuk egy 16F628A-nál?
Ezt az idézetet a PIC assemblyben topic fejlécébe kellene berakni!
A PIC alapnyelve nem az assembly, hanem a gépi kód. Az assembly forrásba a gépi kódú utasítások neveit írjuk be (ha nem éppen egy makrót használunk), de az ugrások/szubrutinhívások/változók címeit már a cimkék alapján a fordítóprogram fogja kiszámolni nekünk. Egyébként már egy assembly-ben megírt programot visszafordítva és abba minimálisan belenyúlva sem biztos hogy jól fog működni a programunk, mert a disassembly nem feltétlenül tudja eldönteni, hogy pl. egy konstans értéke fix, vagy egy cimke címéből keletkezett.
A hitvitát meg azzal zárnám rövidre, hogy azt a nyelvet kell használni ami az adott feladathoz a legcélszerűbb (na meg amit ismerünk). Lehetséges persze keverni is a nyelveket (főleg a C és az assembly-t szokták), ahol a sebességkritikus részt írhatjuk assembly-ben, a többi meg lehet C-ben. A C-ben meg érdemes a fordító körmére nézni miből mit is fordított, és ha valamit többféle módon is meg tudunk írni azt a változatot használjuk, ami a legoptimálisabbra fordult.
Assembler 16F628(A): MpLab Assembly kompatibilis, csak az alsó 8 bitet használja
XC8 16F1459:
C18 18F2550:
A kontrollerek és processzorok alapnyelve az assembly. Egy programsor, az egy gépi utasításnak felel meg. A feltételes fordítás, és a makró csak a palettát színesítő üde színfolt.
Szerintem kevered a forrásprogram és a lefordított program fogalmát.
Szerintem olvasd el még egyszer Az assembly is fordító program.
Idézet: „Az assembly is fordító program.” Ez erős kapufa ha már enyire szörszálhasogatunk, mert az assembly egy programnyelv, fordító az assembler.
Sziasztok! Szeretnék interruptot írni egy nyomógombhoz, de sosem csináltam még ilyet, és fogalmam sincs, hogy hogyan kellene. 16F1709 a mikrovezérlő, és MPLAB + XC8-ban írok. Tud valaki segítséget adni benn? Sajnos nem találtam hozzá magyar nyelvű anyagot, angolul pedig annyira nem értek, hogy abból megtanuljam.
Köszönöm!
PIC mikrovezérlők alkalmazástechnikája, pdf-ben, keresd meg a sok hasznos irodalom között: Bővebben: Link
Ez kellett nekem! Köszönöm szépen!
Üdv!Néhány napja tettem fel egy kérdést itt egy DS18B20 hőmérő szenzorral kapcsolatban.Egy elméleti kérdés jutott eszembe , még pedig az , hogy az volt a gondom a szenzorral , hogy néha ugrált a kijelzés , amikor lenyomtam a gombot , hogy jelezze ki a hőmérsékletet a hétszegmenses kijelzőn.A probléma az volt , hogy a timer néha akkor kért megszakítást , amikor épp kiakartam jeleztetni a hőmérsékletet , és épp zajlott a kommunikáció a one wire-en , ezért ugrált a kijelzőn.Közben egy óra fut folyamatosan , ami egy ds1307-es rtc-ből kérdezi le az időt i2c-n keresztül.A kérdésem pedig , az lenne , hogy az rtc kiolvasásnál(i2c) , hogy , hogy nem zavart be a timer megszakítás?Az idő kijelzésnél nem "ugráltak" a számok , csak a one wire-t zavarta meg a timer interrupt.
Gondlom az I2C hardveresen van lekezelve, Míg az 1-Wire szoftveresen. Minekután az 1-Wire időalapú, ráadásul nem éppen villámgyors, ezért eléggé zokon veszi, ha adatátvitel közben megszakítják.
Az ilyesmit én úgy szoktam megoldani, hogy nem megszakításból vezérelem a multiplexelést, hanem csak egyszerűen timerrel. Indítom a timert, call utasítássl elugrok, megcsináltatok egy részfeladatot, majd vissza, és várom hogy lejárjon. Ezután szegmensváltás, újabb timer indítás, újabb call, most másik feladatra, vissza, várakozás. Így a szegmensek várakozásai között minden feladat elvégezhető. (legalábbis erős átlagban)
Sziasztok
Azt hogy lehet megoldani, hogy van egy forgó alkatrészem és attól függően hogy merre forog egy számláló felfele vagy lefele számol? Abból indulok ki hogy van két érzékelő és az egyik hamarabb kap jelet mint a másik akkor már az irány meglenne. Csak ezt hogy lehet felprogramozni? Ha lehet basicben.
Az I2C és SPI, LCD stb. kommunikációnál egy vezetéket a szinkronizálásra használnak fel. I2C -nél a SCL, az SPI -nél a SCK, az LCD -k esetében az E jel. Az eszközök a többi jel értékét a szinkronizáló jel váltásaikor veszik figyelembe, így ha a szinkronizáló jel nem változik, nincs adatvesztés. A kommunikáció tetszőleges ponton barmilyen időtartamra megszakítható, ha ezen idő alatt a szinkronizáló jel nem változik. Bárhol érkezhet megszakítás, még akkor is, ha szoftveresen valósították meg a protokollokat.
A 1-Wire felület elhagyja a szinkronizáló jelet. A kommunikációban a szinkronizációt az egyetlen vezeték jelváltása (a slot indulásakor a master alacsony szintre húzza) és az idő veszi át. A slot alacsony szintjének idejét mérve az eszközök el tudják dönteni, milyen vezérlés (reset vagy adat), milyen adat (0 vagy 1) érkezik. Mivel az időzítés fontos az adatok, parancsok dekódolásában, a kommunikáció nem szakítható meg tetszőleges helyen. Az adatlap egy kis lehetőséget biztosít csak, a Trec időnak nincs felső határa.
C példa van Topi nulláról a robotokig cikkében, igaz ott két optokaput használ, de én ugyan azt használom rotary encoderre is. Bővebben: Link
Sziasztok! Azt szeretném megkérdezni, hogy ezzel az adapterrel meghajthatom fesz. szabályzó nélkül a PIC-et? Mert hely szűke miatt jobb lenne ha nem kéne fesz. szabályzót is rakjak az áramkörbe
Allen-Bradley-t? Ugyanaz, mint a Moeller easy.
Nem. A magyar fejlesztésű PicoPLC-t. Arduino kompatibilis panelen is kapható, létrával lehet programozni.
Ha megy az assembly, abba tudok segíteni.
Nem igazán de lehet, hogy megértem.
Köszi
A jeladó mibenléte másodlagos. Lehet optikai, hall szenzoros és mechanikai. Bár az optikai a legjobb.
A lényeg, hogy van két érzékelő, ami az elmozdulás mértékében ugyanannyi távolság megtételéig van zárt és nyitott állapotban. A két érzékelő egymáshuz képest a teljes intervallumban (nyitástól újabb nyitásig) 25%-ban van eltolva egymáshoz képest. Így forgatás közben a következő jelek érkeznek: Egyik irány-00 10 11 01 00 Másik irány-00 01 11 10 00 Az egyik bemenetet a PIC egy olyan lábára kösd, ami tud IOC-t. A másikat akárhová kötheted. Az IOC-re kötött jel állapotváltozását kell érzékelni. Mégpedig megszakítási rutinban. Valamint kell egy belső kapcsoló, azaz egy memóriabit. Ezt nevezzük billegő bit-nek. A továbbiakban én így szoktam: Miután bekövetkezett a megszakítás és nyugtáztam, megnézem, milyen állapotú a megszakítást kiváltó bemenet. Ha magas, ellenőrzöm a másik bemenetet. Ha az is magas, ellenőrzöm a billegő bitet. Ha az is magas 1-el növelem a számlálót, majd átbillentem a bitet. Ha a bit alacsony, akkor csak a bitet billentem át. Ha a másik bemenet alacsony, ellenőrzöm a billegő bitet. Ha alacsony, levonok 1-et a számlálóból, majd átbillentem a bitet. Ha a billegő bit magas, akkor csak átbillentem a bitet. Ha a megszakítást kiváltó bemenet alacsony, a másik magas, billegő bit alacsony, kivonok egyet, majd átbillentem a bitet. Ha a billegő bit magas, átbillentem kivonás nélkül. Ha a megszakítást kiváltó bemenet alacsony, a másik is alacsony, billegő bit magas, hozzáadok egyet, majd átbillentem. Ha billegőbit alacsony, csak átbillentem. Íly módon, a prellező érintkező csak a billegő bitet forgatja. Ez így leírva lehet, hogy hosszúnak tűnik, de a valóságban kb 25 sor, amiből ciklusonként kb 15-ön fut át. Tehát villámgyors.
Mondjuk egy PLC is mikrokontrolleren alapul. PICO programozható relé
Itt egy példa MicroBasic-ben:
Így kell hozzá összerakni az érzékelőket:
LCD kijelző frissítésével kapcsolatban kérdezném mi a bevet gyakorlat?
Milyen gyakorisággal érdemes frissíteni a kijelzőt? Valamelyik Timer segítségével mondjuk 100ms-ként? Vagy csak akkor, ha válltozik valamelyik kijelzett adat? És pl egy 4 soros kijelzőnél csak azt a sort kiiratni újból ami válltozott, vagy csak magát a megváltozott értéket (pl hőmérséklet)? A hozzászólás módosítva: Jan 9, 2016
|
Bejelentkezés
Hirdetés |