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   695 / 1210
(#) cross51 válasza dinokal hozzászólására (») Aug 7, 2015 /
 
Egy gép 4 féle azonosítót rendelhet egy eszközhöz VID(vendor ID) PID(product ID) az eszköz verzió száma (0-255) és egy serial number(string). Általában a serial number "értékét" változtatják hogy egyszerre több ugyanolyan eszköz csatlakoztatható legyen a buszra.
(#) janikukac hozzászólása Aug 8, 2015 /
 
Sziasztok!
Ezt a projektet bele lehet rakni 18F4525-be? Ha igen, akkor ti hogyan építenétek meg mátrix nélkül, tehát 64 saját kézzel beépített LED-ből?
(#) Bakman válasza janikukac hozzászólására (») Aug 8, 2015 /
 
Minden bizonnyal igen, módosításokkal. Shift regiszterrel, a 64 LED-es pálya viszont éppen fele akkora, mint amekkora az oldalon van.
A hozzászólás módosítva: Aug 8, 2015
(#) dinokal válasza cross51 hozzászólására (») Aug 8, 2015 /
 
Bár régebben utána néztem, de nem igazán értek hozzá, ráadásul NickE programját sem ismerem. Csak ahogy én gondolom, többféle variáció létezik. Vagy nem jó a programozás, vagy nem jó a meghajtó program. Nem véletlenül adtak ki hozzá Configuration Utility programot, ezzel teszik lehetővé hogy biztos legyen az MCP kiválasztása ha több van csatlakoztatva, mert lehet hogy mindre más hardver van csatlakoztatva. Olvastam erről az interneten, már sajnos nem tudom hol, de ez volt a megoldás.
Egy hátránya van, hogy az inf fájlon is változtatni kell, és mivel új hardverként ismeri fel, ha USB csatlakozót váltasz újra installálni kell a drivert, pedig az összes ugyan azt a meghajtó programot használja.
Innen el lehetne indulni: Bővebben: Link
(#) Pali79 hozzászólása Aug 8, 2015 /
 
Sziasztok! Egy TDA7318-as vezérlését próbálom megoldani, de a mély és magas állításánál picit elakadtam. A koncepció az, hogy encoderrel növelek vagy csökkentek egy változót, attól függően, hogy merre tekerem. A mély és magas állítása 16 lépésben történhet. Az adatokat 8 bitenként fogadja, amiből jelen esetben a felső 4 bit a regiszter címe, tehát az állandó. A problémát az okozza, hogy az értékek az alábbiak szerint változnak a minimálistól a magasabb felé:
  1. 0000
  2. 0001
  3. 0010
  4. 0011
  5. 0100
  6. 0101
  7. 0110
  8. 0111
  9. 1111
  10. 1110
  11. 1101
  12. 1100
  13. 1011
  14. 1010
  15. 1001
  16. 1000


Mint látható a középértéktől van egy nagyságrendi ugrás és ráadásul onnan csökken is az érték nem pedig növekszik, pedig gyakorlatban az encodert még mindig egy irányba tekerem. Ráadásul az is meg kellene oldani, hogy a maximális értéken ne fusson túl.
Van valakinek ötlete a megoldásra?
A hozzászólás módosítva: Aug 8, 2015
(#) vicsys válasza Pali79 hozzászólására (») Aug 9, 2015 /
 
Ezek binárisan kódolt értékek. Ha nem tetszik a formája, lehet oda-vissza konvertálni.
(#) killbill válasza Pali79 hozzászólására (») Aug 9, 2015 /
 
A legegyszerubb megoldas a tablazat. Az enkoderrel 0-15 kozotti erteket csinalsz, es ott figyelsz ra, hogy "ne fusson tul". A TDA-nak kuldendo szamokat pedig leteszed egy 16 elemu tombbe, es az tomb annyiadik elemet kuldod ki az IC-nek, ahol a fenti 0-15 valtozod van.

A tablazatban csak 15 ertek szerepel, mert az adatlap szerint a 7 es a 15 ugyanaz (0 dB).

  1. static const char btconv[] = {0, 1, 2, 3, 4, 5, 6, 7, 14, 13, 12, 11, 10, 9, 8};
  2. static signed char bass;
  3.  
  4.  ...bass allitasa az enkoder szerint...
  5.  
  6.  if(bass < 0)
  7.     bass = 0;
  8.  else if(bass > 14)
  9.    bass = 14;
  10.  tdabyte = 0x60 | btconv[bass];
A hozzászólás módosítva: Aug 9, 2015
(#) Hp41C válasza Pali79 hozzászólására (») Aug 9, 2015 /
 
A magas encoder állapota a magas nevű változóban tárolt 0..15 közötti érték. A kód végén a küldendő adat a W -ben lesz.

  1. movf  magas,w
  2. btfsc magas,3
  3. xorlw 0x07
(#) szucsistvan123 hozzászólása Aug 9, 2015 /
 
Üdv! lenne egy hülye kérdésem!
Ez csak most nem rég ötlött fel bennem:
Amit meg lehet csinálni AVR-el, azt mind meg lehet csinálni PIC-el is? Vagy hogy is van ez?
Köszi!
(#) killbill válasza szucsistvan123 hozzászólására (») Aug 9, 2015 / 1
 
Hát, ez tényleg hülye kérdés. Még két konkrét típus esetén sem lenne ennek az összehasonlításnak sok értelme, de így végképp semmi.
(#) icserny válasza szucsistvan123 hozzászólására (») Aug 9, 2015 / 1
 
Hasonló feladatra találták ki ezeket, tehát többé-kevésbé igen a válasz (főleg ha gyorsabb PIC18-as termékcsaládra gondolsz). De az ördög a részletekben rejlik, s nincs tökéletes megfelelés közöttük. Egyik ebben jobb, a másik amabban...
(#) szucsistvan123 válasza icserny hozzászólására (») Aug 9, 2015 /
 
Igazából arra voltam kíváncsi, hogy a PIC tudja e azt mint az AVR és fordítva.
Köszönöm a válaszokat! most már világos!
(#) Pali79 válasza vicsys hozzászólására (») Aug 9, 2015 /
 
Nem formájával van a baj, hanem, hogy az elején a két változó együtt növekszik. A középértéken túl meg az egyik növekszik a másiknak meg csökkennie kellene.
(#) Pali79 válasza killbill hozzászólására (») Aug 9, 2015 /
 
Végső megoldásként én is erre gondoltam, csak én assemblyben dolgozom.
(#) Pali79 válasza Hp41C hozzászólására (») Aug 9, 2015 /
 
Ez kezdetnek nem rossz, de nekem csak addig működik, amíg eléri a 8-as értéket, vagyis még eggyel tovább, mert akkor nagyon jól átvált 15-re, de ha a következő ciklusba a magas értékét tovább növelem, akkor a küldendő adat már nem jó értéket vesz fel, mert a 15 után 14-nek kéne jönnie és így meg 16 lesz ami már nem megfelelő érték.
(#) sonajkniz válasza Pali79 hozzászólására (») Aug 9, 2015 /
 
Nem egészen, mert a xor egy irányított komplementelés, tehát elvileg úgy forgatná át, ahogy neked kell, csak a PIC16 nem biztos, hogy ismeri.
(#) Pali79 válasza sonajkniz hozzászólására (») Aug 9, 2015 /
 
Leszimuláltam 18F-en is. De ha végig gondolod akkor látszik is. 15 után az ecoder egyet növel és 16 lesz az érték amikor a 3 bit már megint 0, tehát átugorja az xor-t.
(#) ktamas66 válasza Pali79 hozzászólására (») Aug 9, 2015 /
 
A 16 értéknek a 0-15-ig számok felelnek meg, a 16-ot már nem kell megengedni. A minimum a 0 a maximum a 15. Igaz így a 0dB kétszer van benne, de sokkal egyszerűbbek a min.-max. vizsgálatok.
(#) Pali79 válasza ktamas66 hozzászólására (») Aug 9, 2015 /
 
Ezt így értem, de nem tudom mit kezdjek vele, mert a 15 nem a maximum, hanem a közép érték. Eléri a számláló a 7-et, átfordul 15-re. Aztán az encoderrel még mindig ugyanabba az irányba tekerem, tehát az abból jövő érték növekszik. Hp41C azt írta, hogy az aktuális encoder állása a magas változóban. Akkor mit csináljak vele ha már elérte átfordult 15-re?
A hozzászólás módosítva: Aug 9, 2015
(#) ktamas66 válasza Pali79 hozzászólására (») Aug 9, 2015 /
 
Az magas változó egy 0-15-ig szám, a kiküldendő értéket adja meg Hp41C módszere, ahol a kiküldendő érték a W-ben alakul ki. Tegyél a végére egy movwf bass és azt az értéket figyeld, mert azt kell kiküldeni.
(#) benjami válasza Pali79 hozzászólására (») Aug 9, 2015 /
 
Az átkonvertáláshoz a legegyszerűbb, ha az alsó három bitet ellentétesre állítod abban az esetben, ha a negyedik bit == 1.
(#) Pali79 válasza ktamas66 hozzászólására (») Aug 9, 2015 /
 
Értem, így már világos! Ott szúrtam el, hogy én egy változóval akartam megoldani és a végén visszatöltöttem a magas változóba az eredményt. Ha az encoder adatát és a kiküldendő adatot két külön változóban tárolom akkor szépen működik!
(#) benjami válasza benjami hozzászólására (») Aug 9, 2015 /
 
Ja, most vettem észre, hogy Hp41C az ehhez tartozó kódot is közölte.
(#) Pali79 válasza benjami hozzászólására (») Aug 10, 2015 /
 
Igen, csak én félreértelmeztem a kapott infót! De most már minden szép és jó!
Mindenkinek köszönöm a segítséget!
(#) Pali79 hozzászólása Aug 13, 2015 /
 
Sziasztok!
Lehet, hogy láma a kérdés, de biztosra megyek inkább. Ha beállítom az RB0 megszakítást egy 16F877A-n mondjuk felfelé futó élre, és ha megnyomom a gombot és utána nyomva tartom, a megszakítási rutin csak egyszer fut le?
(#) foxi63 válasza Pali79 hozzászólására (») Aug 13, 2015 /
 
Szia!
Igen, csak egyszer fut, de ha a megszak. rövid idő alatt lefut, a gombod pedig prellez, akkor újabb megszakítást generál.
(#) Pali79 válasza foxi63 hozzászólására (») Aug 13, 2015 /
 
Világos! Köszi!
(#) Pali79 hozzászólása Aug 14, 2015 /
 
Urak!
Az alábbira keresek egyszerű megoldást: 2×16-os LCD + 16F877A. Alap esetben egy információt jelenít meg a kijelző, az egyszerűség kedvéért legyen ez MENU 1. Egy nyomógomb megnyomására egy másik kijelzésre vált (MENU 2), újabb megnyomásra tovább (MENU 3) és így tovább. Egy menüben egy funkció állapotát jelzi az LCD. Azt szeretném megoldani, hogy ha egy ideig (pl. 10 s) nem történik a menü funkciójában változás, akkor visszalépjen az első menüpontra.
Nekem az jutott eszembe, hogy minden gombnyomásra növelek egy számlálót, ezt vizsgálom a fő ciklusban. A számláló értékének megfelelő menüre ugrik a program. Egyben Timer1-el megszakításban szintán növelek egy számlálót. Minden megszakításban megvizsgálom, hogy a számláló elérte-e a 0x14 értéket. Ha elérte, akkor nullázom a menü számlálóját. Ez így talán működne is, de nekem valahogy mégsem tetszik, mert nem csak az adott menün belül dolgozik a program, hanem a menü számlálójának figyelését is folyamatosan végeznie kell.
Erre szeretnék egy ötletes megoldást találni. Köszönöm előre is!
(#) bbalu92 hozzászólása Aug 15, 2015 /
 
Sziasztok!

Olyan ügyben írok, manapság kezdem olyan dolgokba ütni az orrom, ami szinte kivétel nélkül PIC-es megoldással születne meg. A probléma, hogy már olyan hosszú ez a topik, őszintén megvallva nem tudok kihámozni belőle sok mindent. Nem beszélve arról, hogy több megoldás van boncolgatva egyszerre.

Ha lenne bárki, aki egy biztosan működő, lehetőleg egyszerű saját gyártmányú PIC égetővel rendelkezik, ebből adódóan ért is hozzá, nagyon hálás lennék ha szánna rám egy kis időt

(Mezei villanyszerelő vagyok, elektromosságért nem megyek a közértbe, de kérlek ne úgy írjatok, mintha minden idők elektronikusa volnék)

Köszönöm előre is! Üdvözletem
A hozzászólás módosítva: Aug 15, 2015
(#) Pali79 válasza bbalu92 hozzászólására (») Aug 15, 2015 /
 
Szia!
A cikkek között találod Hp41C furatszerelt PICKIT2 klónját. A rákfenéje a dolognak, hogy abban is van PIC. Magán véleményem, hogy ha csak nem az alkotás öröme miatt csinálod akkor inkább vegyél egyet. Kapható jó minőségű klón 5-6 ezer körül. Ha megveszed az alkatrészeket az sem lesz sokkal kevesebb. Lehet kapni sokszor eredeti használtat is jó áron. Illetve az eredeti PK3 is alig több mint 10 ezer.
Következő: »»   695 / 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