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   519 / 1210
(#) don_peter válasza don_peter hozzászólására (») Máj 3, 2014 /
 
Közben rájöttem, hogy nem jól fordítottam le: 900 16bites bináris értéke == 0000 0011 1000 0100
A hozzászólás módosítva: Máj 3, 2014
(#) Hp41C válasza don_peter hozzászólására (») Máj 3, 2014 /
 
Idézet:
„Van egy bits adatstruktúra is. Az mit csinál?”

Lehetővé teszi, hogy a szó 16 bitjét külön tudd kezelni:
  1. if (temp.bits.b15) negative(); else positive();
(#) don_peter válasza Hp41C hozzászólására (») Máj 3, 2014 /
 
Köszönöm a türelmed és az érthető magyarázatokat is.
Így már menni fog a dolog....
(#) don_peter válasza Hp41C hozzászólására (») Máj 4, 2014 /
 
Közben még azt nem értem miként töltődik fel az adatstruktúra két változója.
Tehát ha mondjuk:
temp.Val = 900;
A kérdés: miért és milyen elv szerint rendezi el önkényesen az átadott adatokat?

Tehát betöltődik az első 8bit az .LB változóba és túlcsordulás esetén a maradék 8bit az .RB változóba töltődik?
Tehát 900 16bites bináris megfelelője == 0000001110000100
A feltöltés tehát úgy jön létre, hogy az .LB = 00000011 és itt túlcsordul, de mivel van alatta is egy változó oda tölti be a maradékot?
.RB = 10000100
Előre is köszi...
(#) foxi63 válasza don_peter hozzászólására (») Máj 4, 2014 /
 
Az union azért union, mert használhatod 16 bitesnek is, 2x 8 bitesnek is és 16x 1 bitesnek is.
A fordító is így kezeli. Ha temp.VAL néven hivatkozol rá, akkor 16 bitesnek értemezi a fordító

Ha temp.BYTE.LB vagy temp.BYTE.HB akkor 2db 8 bitesként akármelyiket írhatod függetlenül.
Persze feltöltheted a 900-as értéket így is:
temp.BYTE.HB= 900/256; temp.BYTE.LB= %256;

Ha csak valamelyik bitet akarod piszkálni, akkor pl.:
temp.bits.b15 =1;
Ha nem union lenne a fordító állandóan kukorékolna.
üdv.: Foxi
(#) don_peter válasza foxi63 hozzászólására (») Máj 4, 2014 /
 
Köszi... közben kísérleteztem és rájöttem, hogy az érték amelyet megkap azt hexában tárolja és leosztja a 16bitet 2külön 8bites egységgé.
Így már értem miként töltődnek fel a változók..ez volt a lényeg, ...
(#) icserny válasza don_peter hozzászólására (») Máj 4, 2014 /
 
- Binárisan tárolja
- Bájtokban kezeli, s az unionban deklarált "darab" vagy "nagyobb egység" változóid ugyanannak a memóriaterületnek a más-más módon történő hozzáféréseit jelentik - majd a C fordító dolga, hogy ezt megszervezze.
(#) don_peter válasza icserny hozzászólására (») Máj 4, 2014 /
 
Köszi a kiigazítást. Így már teljesen világossá vált a működése.
Közben a sok segítség amit kaptam már pár dolgot megtanított, ha van kedvetek nézzétek meg miket alakítottam
PS3 ventilátor szabályozás
Led digitális PWM vezérléssel
4x4-es mátrix keypad PIC-el
Nyilván 2hónap tanulás után még nem nagy dolgok, de próbálkozom erősen.
A hozzászólás módosítva: Máj 4, 2014
(#) t_oszi hozzászólása Máj 5, 2014 /
 
Szervusztok!
A mellékletben kapcsolási rajzon 2db 887-es UART kommunikációba kötve.
Az egyik program fájl az adóé, a másik a vevőé.
A cél, hogy minél több bemenet állapotát tudjam átvinni az U1 PIC-ről az U2 PIC-re. A jelenlegi megoldásban csak RB0-RB7-ig megy át UART-tal. Legalább 16 bitet szeretnék átvinni U1-ről U2-re és vissza ugyanígy. Persze, eddig akárhogy variáltam a programot, nem jött össze.
Kérem a segítségeteket! Köszönöm!
(#) Bell válasza t_oszi hozzászólására (») Máj 5, 2014 /
 
Több byte átvitele is megoldható, ha az adó és vevőoldalon is gondoskodsz a küldésről és a fogadásról. Például az adó oldalon egymás után küldöd az A, majd a B port adatait, a vevőben pedig figyeled a sorrendet, az első adatot az A portra, a másodikat a B-re küldöd.

A mikrovezérlők közötti kommunikációra lényegesen hatékonyabb megoldás az I2C és az SPI. Utóbbiaknál az adatátvitel kötegelve történik, így nem kell bíbelődni az adatok sorrendjével, sokkal gyorsabb, biztonságosabb.
(#) proksa1 hozzászólása Máj 5, 2014 /
 
A következő problémám lenne, adott egy tengely ami jó esetben 90rpm-mel forog. Készítenem kell egy kütyüt amin van 3 led, ha a fordulatszám 85 és 95 között van akkor a középső világít, ha alatta akkor a bal oldali ha felette akkor a jobb oldali. Hogy tudnám ezt legegyszerűbben kivitelezni?

Én arra gondoltam, hogy indítok egy timert és megvárom amíg beérkezik mondjuk 45 impulzus. Igy a frissitési gyakoriság fél perc lenne, mert ha csak 1-2 beérkezett impulzust várnék meg akkor nagy lenne a hiba.(persze ha tul sokáig nem érkezik meg a 45 impulzus akkor is kigyujtom a jobb oldali ledet) Érzékelőnek egyenlőre egy reed relé van berakva, de eléggé prelleg, ha külső megszakítás lábra küldöm rá , elhúzok előtte egy mágnest és a megszakítás rutinban növelek egy változót 1el, akkor egy mágneselhuzásnál random 1-3 közötti értékkel növekszik a változó.
(#) vicsys válasza proksa1 hozzászólására (») Máj 5, 2014 /
 
Szerintem hall elemet használj. Ha nem ragaszkodsz a mágneshez, használhatsz reflexiós optót is, ekkor elég egy fehér (vagy fekete) pöttyöt tenned. A legjobb és leggyorsabb feldolgozási eredményt akkor kaphatnád, ha 2 bejövő impulzus közötti időt mérnéd meg. Ebből 2 dolog következtethető: 1. van forgás, 2. mérhető a fordulatszám (idő).
(#) t_oszi válasza Bell hozzászólására (») Máj 5, 2014 /
 
Igen ám, csak egyelőre nem tudom, hogy oldjam meg. Küzdöttem az I2C-vel, de sokra nem mentem vele. Egy nyúlfarknyi kis programot, ha mellékelnél példának, azt megköszönném. Összefoglalva, nem tudom megoldani, hogyan címezzem meg egyik PIC kimeneteinek megcímzését a másikból.
(#) proksa1 válasza vicsys hozzászólására (») Máj 5, 2014 /
 
Igen gondoltam én is, hogy hall elemet kellene használni, van is itthon TLE4935. Akkor azt mondod csak a két impulzus közti időt mérjem? egyébként ez valami biciklire lesz, hogy lássák megfelelő ütemben tekernek e.
(#) ktamas66 válasza t_oszi hozzászólására (») Máj 5, 2014 /
 
Itt találsz példaprogramot: AN734. Itt egy memóriatömböt tudsz írni-olvasni, hogy oda milyen adatokat teszel a Te dolgod.
(#) Hp41C válasza ktamas66 hozzászólására (») Máj 5, 2014 /
 
Idézet:
„Using the Mid-Range Enhanced Core PIC16 Devices’ MSSP Module for Slave I2C Communication”

Ez egy új application note, a 16F1xxx -ekhez. 16F887 hagyományos midrange kontroller.
AN735 - Using the PICmicro MSSP Module for I2C Communications
A régi application note pedig hibás volt... Ráadásul egyes 16F88x verzióknál nem működott az órajel nyújtás (clock stretching).
Uart -tal sem bonyolult: Egy távirat formát kell definiálni. Mondjuk
"AbfBed" legyen a távirat: a nagy betük azonosítsák a portot, a kis betük pedig az értéket két byte -on hexában kódolva. Ha a vétel rendben megy, az érték a helyére tehető. Ha a vétel során hiba keletkezett, a következő nagybetűig el kell dobni a karaktereket.
A hozzászólás módosítva: Máj 5, 2014
(#) usane hozzászólása Máj 5, 2014 /
 
Hello!

Egy röpke kérdés.
Szükségem van a PIC ICSP lábbaira, (DAT és CLK).
Analóg bemenetként, vagy digitális kimenetként OPTO meghajtására.
Melyik a célszerűbb? A lényeg, hogy minél kevesebb legyen az izolációs alkatrész (ha lehet semmi )
A hozzászólás módosítva: Máj 5, 2014
(#) Hp41C válasza usane hozzászólására (») Máj 5, 2014 /
 
Analóg bemenetként - Egy soros elválasztó elleállás kell az analóg forrás és a láb közé, de a mintavevő kapacitás töltésénél az ellenálláson eső feszültség rontja a pontosságot.
Digitális kimenetként OPTO meghajtására - Csak akkor okoz problémát, ha a MCLR láb is le van tiltva. Célszerű a LED meghajtását egy közbenső meghajtóval leválasztani. Az optók által vezérelt áramkör megkaphatja a programozási jeleket.
A hozzászólás módosítva: Máj 5, 2014
(#) usane válasza Hp41C hozzászólására (») Máj 5, 2014 /
 
Köszönöm a választ, közben átgondoltam, én is az analóg bemenet mellet szavazok, kapacitív érintőgombként használom a bemenetet ,elhagynám azt az ellenállást is, programozáskor úgysem érintgeti senki. Viszont közben felvetődött egy női probléma(a méret a lényeg).Még egy i/o kellene, csakhogy az említett funkciók közül az MCLR egyikre sem használható.
Mivel kimenetként nem tudom semmiképp használni, az a kérdés, hogy tudom megoldani fényérzékelésre digitális bemenetként. Ha lett volna még szabad lábam akkor egy fototranyó az analóg bemenetre és kész, többit a szoftver megoldja, így viszont hardveres probléma lett. Vagy építek a fototranyó és a PIC közé valami küszöbérték kapcsolót, hogy az MCLR-t tudjam használni, vagy másik PIC. Tudsz olyan 8 bites 28 lábú PIC-et amiben benne van a touch modul, minimum 9 analóg csatorna, és legalább 8 MIPS-es de 12-nek jobban örülnék. Ezen agyalok most. 20-ról 28 lábra váltani még mindíg kisebb helyet foglalna mint a küszöbkapscsoló, gondolom. Ám mégegy ötletem támadt, a 8db analóg touch bemenetet mátrixba kötöm, és így megspórolok 2 lábat, ám ezt még nem csináltam, nem tudom hogy működik majd.
A hozzászólás módosítva: Máj 5, 2014
(#) Hp41C válasza usane hozzászólására (») Máj 5, 2014 /
 
Belső oszcillátorral két láb felszabadulhat. Itt kikeresheted a megfelelőt.
(#) usane válasza Hp41C hozzászólására (») Máj 5, 2014 /
 
Belső oszcival van tervezve, viszont én nem találtam, csak 16 bitesben, lehet, hogy pic24 lesz a pic16-ból. Na mindegy. Még keresem. Köszönöm az eddigi infókat.
(#) Hp41C válasza usane hozzászólására (») Máj 5, 2014 /
 
Az még egy láb (Vcap) veszteség a 28 lábú tokoknál. 16F193x
A hozzászólás módosítva: Máj 5, 2014
(#) t_oszi válasza Hp41C hozzászólására (») Máj 5, 2014 /
 
Mi sem egyszerűbb?! Sok egyértelmű dolgot leírtatok. Az I2C-vel is jutottam valamire, de nem mikroC-ben íródott és így néhány függvény megfelelőjét nem találtam meg.
Ahogy mondod, az UART-tal sem bonyolult, csak egy távirat formát kell definiálnunk...csak! De hogyan?
Kedves Barátaim, benne vagyok a topikcímben: KEZDŐ! Ha valóban segíteni akartok, akkor vegyétek figyelembe, ha meg nincs hozzá(-m) türelmetek, akkor megköszönöm az eddigi segítségeteket!
(#) NyariG válasza Hp41C hozzászólására (») Máj 5, 2014 /
 
Megnézve az általad linkelt pic adatlapját láttam hogy van benne LCD driver. Ez mit jelent?
Ha fogok egy 7szegmenses kijelzőt és rákötöm akkor csak a megfelelő regiszterbe beírok egy számot és ennyi? nem kell tovább törődnöm vele?
Ilyennel akkor egyszerűen tudnék vezérelni 2db 4x7 szegmenses kijelzőt is?
(#) ktamas66 válasza NyariG hozzászólására (») Máj 6, 2014 /
 
Ha ilyen LCD-re gondolsz, akkor elvileg igen, csak az a probléma, hogy a 16F1939 csak 24 szegmenst tud vezérelni, ennek az LCD-nek 32 szegmense van (mondjuk választhatsz 16F1947-et, ami 46 szegmenst tud ). Ha az LCD multiplexálva lenne akkor tudna több szegmenst is (max. 4x). Nekem a másik problémám az volt, hogy rengeteg lábat elvisz egy ilyen kialakítás, jól végig kell gondolni milyen egyéb perifériákat "áldozol" be.
(#) NyariG válasza ktamas66 hozzászólására (») Máj 6, 2014 /
 
Nem arra gondoltam hanem erre! De most látom hogy ez nem is Lcd.
Ebböl lenne 4 egymás mellett és ebböl lenne még egy, meg kellene 2 analog bemenet.
Egyik a feszültséget mutatná a másik meg az áramerösséget.
(#) vicsys válasza NyariG hozzászólására (») Máj 6, 2014 /
 
Ez elég olcsó: Bővebben: Link
(#) Hp41C válasza vicsys hozzászólására (») Máj 6, 2014 /
 
Ha galvanikusan összefügg a feszültség és az áram és a feszültség mérés a mérőben, akkor egy kis külön áramkör kell az áramból származó jel átalakítására.
(#) usane válasza vicsys hozzászólására (») Máj 6, 2014 /
 
Ez tök jó, amit én vettem az csak áramot, vagy csak feszt tud.
Elteszem ezt a linket.
(#) usane hozzászólása Máj 6, 2014 /
 
Hello!
MPlab-al, debug módban lépésenként vagy animálva vizsgálva a PIC timerei valós időben futnak?
Következő: »»   519 / 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