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   738 / 1210
(#) Pali79 válasza Hp41C hozzászólására (») Jan 4, 2016 /
 
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?
(#) sonajkniz válasza Pali79 hozzászólására (») Jan 4, 2016 /
 
Ezt az idézetet a PIC assemblyben topic fejlécébe kellene berakni!
(#) benjami válasza Pali79 hozzászólására (») Jan 5, 2016 /
 
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.
(#) Hp41C válasza Pali79 hozzászólására (») Jan 5, 2016 /
 
Assembler 16F628(A): MpLab Assembly kompatibilis, csak az alsó 8 bitet használja
  1. __idlocs                0x1234

XC8 16F1459:
  1. #pragma config IDLOC0 = 0x000B
  2. #pragma config IDLOC1 = 0x000A
  3. #pragma config IDLOC2 = 0x0014
  4. #pragma config IDLOC3 = 0x0059

C18 18F2550:
  1. #pragma romdata IdLocs = 0x200000
  2.  const rom char Id[8] = {'P','r','o','p','C','l','k'};
(#) nedudgi válasza benjami hozzászólására (») Jan 5, 2016 /
 
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.
(#) rolandgw válasza nedudgi hozzászólására (») Jan 5, 2016 /
 
Szerintem olvasd el még egyszer Az assembly is fordító program.
(#) Pali79 válasza rolandgw hozzászólására (») Jan 5, 2016 / 2
 
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.
(#) mark.budai hozzászólása Jan 7, 2016 /
 
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!
(#) _BiG_ válasza mark.budai hozzászólására (») Jan 7, 2016 /
 
PIC mikrovezérlők alkalmazástechnikája, pdf-ben, keresd meg a sok hasznos irodalom között: Bővebben: Link
(#) mark.budai válasza _BiG_ hozzászólására (») Jan 7, 2016 /
 
Ez kellett nekem! Köszönöm szépen!
(#) jocka0012 hozzászólása Jan 8, 2016 /
 
Ü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.
(#) sonajkniz válasza jocka0012 hozzászólására (») Jan 8, 2016 / 1
 
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)
(#) jany1966 hozzászólása Jan 8, 2016 /
 
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.
(#) Bakman válasza jany1966 hozzászólására (») Jan 8, 2016 /
 
A kulcsszó amit keresel az az encoder.
(#) Hp41C válasza jocka0012 hozzászólására (») Jan 8, 2016 / 1
 
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.
(#) jany1966 hozzászólása Jan 8, 2016 /
 
Senki sem tud rá válaszolni? Assembly vagy C?
(#) kameleon2 hozzászólása Jan 8, 2016 /
 
PicoPLC-t ki ismeri?
(#) Pali79 válasza jany1966 hozzászólására (») Jan 9, 2016 /
 
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
(#) pcroland hozzászólása Jan 9, 2016 /
 
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
(#) Marko Ramiusz válasza kameleon2 hozzászólására (») Jan 9, 2016 /
 
Allen-Bradley-t? Ugyanaz, mint a Moeller easy.
(#) Bakman válasza pcroland hozzászólására (») Jan 9, 2016 /
 
Ha a PIC bírja az 5 V-ot, akkor igen.
(#) kameleon2 válasza Marko Ramiusz hozzászólására (») Jan 9, 2016 /
 
Nem. A magyar fejlesztésű PicoPLC-t. Arduino kompatibilis panelen is kapható, létrával lehet programozni.
(#) sonajkniz válasza jany1966 hozzászólására (») Jan 9, 2016 /
 
Ha megy az assembly, abba tudok segíteni.
(#) jany1966 válasza sonajkniz hozzászólására (») Jan 9, 2016 /
 
Nem igazán de lehet, hogy megértem.
Köszi
(#) sonajkniz válasza jany1966 hozzászólására (») Jan 9, 2016 /
 
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.
(#) Marko Ramiusz válasza kameleon2 hozzászólására (») Jan 9, 2016 / 1
 
Mondjuk egy PLC is mikrokontrolleren alapul. PICO programozható relé
(#) Prendick válasza jany1966 hozzászólására (») Jan 9, 2016 /
 
Itt egy példa MicroBasic-ben:

  1. if (TestBit(INTCON,IOCIF))  then   'QE kiértékelés megszakításban
  2.      IOCIF_bit=0
  3.      newX = (PORTA and %00110000)  '2 encoder bemenet: xxABxxxx
  4.       if (newX.B5 <> lastX.B4) then
  5.          Inc(x_value)
  6.       else
  7.          Dec(x_value)
  8.       end if
  9.       lastX = newX
  10. end if
(#) Prendick válasza Prendick hozzászólására (») Jan 9, 2016 /
 
Így kell hozzá összerakni az érzékelőket:
(#) jany1966 hozzászólása Jan 9, 2016 /
 
Köszönöm mind kettőtöknek.
Így már értem.
(#) Lamprologus hozzászólása Jan 9, 2016 /
 
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
Következő: »»   738 / 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