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   471 / 1211
(#) janimester válasza Prendick hozzászólására (») Dec 24, 2013 /
 
Köszönöm a válaszod, megint tanultam valamit. Ezt ki is fogom próbálni, mert van ithol tl-em de ha ezzel sikerül azt elérnem hogy 1-2 tizedet másszon el maximum akkor jó lesz nekem nem kell még pontosabb mcp.
(#) c27 hozzászólása Dec 25, 2013 /
 
Sziasztok!
MPlabba, hogy lehet mérni az időt? Azt szeretném tudni, hogy egyes programrészek lefutása kb. mennyi ideig tart ezt hol lehet megnézni?
(#) Hp41C válasza c27 hozzászólására (») Dec 25, 2013 /
 
Debugger / Select tool / MpLAB SIM. Debugger / Settings / Osc - Trace lapon a Processor frequency beállítása. Debugger / Stopwatch ablakban olvasható a szimulációs idő. Ha egy programrészlet előtt lenullázod, az alsó sorban a nullázástól eltelt idő olvasható.
(#) progee hozzászólása Dec 25, 2013 /
 
Univerzális ICSP adaptert szeretnék készíteni Pickit3-hoz.
Jelenleg dugdosós próbapanelon csatlakoztatom egy karos IC-foglalat felhasználásával a PIC-et, és ha eltérő típust használok, akkor mindig újrahuzalozom. Ezen szeretnék egyszerűsíteni.
Neten találtam többféle kapcsolást, de valahogy egyik sem tűnik "kereknek".
Link 1
Link 2
Link 3
Link 4
Link 5
Link 6
A legtöbbnél az Mplab példában korrekt bekötésként ábrázolt 10k ellenállást hiányolom a VDD-VPP lábaknál.
Tudnátok segíteni, hogy melyiket érdemes megépíteni, ami üzembiztos is lesz, vagy ajánlani hibamentesen működő áramkört? Nyákterv lenne a leg fontosabb.
Érdekes, hogy Magyarországon nem találni gyári kivitelezésűt, külföldről pedig nem szeretnék rendelni.
(#) Pali79 válasza progee hozzászólására (») Dec 25, 2013 / 1
 
Ez már többször volt téma, de mindig az a vége, hogy ha nem akarsz megmaradni egy típusnál akkor felejtős az ilyen univerzális eszköz. Vagy breadboard és 5 kábel vagy az áramkörökre ICSP csatit kell tervezni.
(#) Hp41C válasza progee hozzászólására (») Dec 25, 2013 /
 
Többször leírtam már, hogy a "Univerzális ICSP adapter" korszaka lejárt. Egy nem teljeskörű ábrát szerkesztettem az ismertebb DIP tokozású típusokra... Csak 18 féle bekötés adódott a DIP tokokra.

Érdemesebb kiépíteni a tényleges In Circuit Serial Programming módszerrel programozni. Sokkal egyszerűbb, könnyebb, gyorsabb ... De ezt többször leírtuk teljesen hiába... (Egy kivételt tudok elképzelni, a másoknak eladott, átadott kontrollerek felprogramozása.)
Egy kapcsolás és panel tervezésénél könnyen be lehet tervezni a 6 pólusú jumpert (furatfémezett technológia esetén 6 db furatot). Ettől kezdve nem kell kivenni a foglalatból az (át)programozáshoz. Csak rádugod a PICKit2 -t vagy PICKit3 -at a csatlakozóra és már mehet is a programozás. Sok típussal ezzen a csatlakozáson keresztül nyomkövetést is lehet végezni. Ha egy kicsit nagyobb kontroller kell (44, 64, 80, 120,... ), azok már csak SMD tokokban kaphatók... A 6 pólusú csatlakozással ezek is kezelhetők.

Sok kontrollernél nem csak a Vdd, Vss, MCLR / Vpp, PGD, PGC lábat kell bekötni, hanem az összes Vdd és az összes AVdd, az összes Vss és az összes AVss, a ENVREG, DISVREG, Vcap, VBus stb. Ezeket sokkal egyszerűbb a cél áramkörben bekötni.

A kölönböző családba tartozó de azonos tokozású kontrollerek kezelése az adapterrel megbízhatalan: A foglalat vonzza a nem bele való kontrollert.

A programozás alatt a kontroller többször ki / be lép a programozási üzemmódból. Egy belső oszcillátoros, MCLR funkciót letiltó konfiguráció azonnal el is indulhat. Ha egyes lábai az adapterben - más típusok kezelése miatt - össze vannak kötve, kimeneteket kapcsolhatna egymással szembe. Az "Univerzális ICSP adapter" korszakában nem volt belső oszcillátoros kontroller, a mai típusokban már teljesen általános.
A hozzászólás módosítva: Dec 25, 2013
(#) progee válasza Hp41C hozzászólására (») Dec 25, 2013 /
 
Köszönöm mindkettőtöknek a részletes útmutatást. Ez megmagyarázza miért van ennyi féle megoldás a neten. Nem találkoztam még itt ezzel a témával.
Jobban utánakeresek.
A hozzászólás módosítva: Dec 25, 2013
(#) baloka válasza progee hozzászólására (») Dec 26, 2013 /
 
Én ezt használtam sokáig, amíg ki nem nőttem.
(#) nagzso hozzászólása Dec 26, 2013 /
 
Sziasztok! Az Interruptokról szeretnék többet megtudni. Van kettő interruptom, egy UART meg egy Timer3 Overflow. Miért van az, hogy a kettő üti egymást? Arra már rájöttem, hogy az interrupt prioritásnak van köze hozzá, de nem értem, miért nem megy, mindig csak az egyik(attól függően, h melyiknek a nagyobb a prioritása). Adott példa: Timer3 villogtat egy ledet, közbe ha UART-on küldök egy adatot, akkor kapcsoljon be egy másik ledet. Ha a Timer3Overflow a HighPriority, akkor az UART teljesen kiesik. Ha az UART a high, akkor viszont, ha folyamatosan küldök adatot neki(lenyomva tartom a billentyűt), akkor a Timer3Overflow működik, de egyébként, ha nincs UART adat, akkor nem. Hogy tudnám ezt kiküszöbölni?
(#) Balagemann2031 válasza nagzso hozzászólására (») Dec 26, 2013 /
 
Szia! Adatátvitelt biztos hogy jóötlet félbeszakítani? Úgyemlékszem mintha átvitelkor a megszakításokat tiltani kellene.
Üdv: Balázs
(#) nagzso válasza Balagemann2031 hozzászólására (») Dec 26, 2013 /
 
Letiltottam az megszakításon belül a globális megszakításokat, majd mielőtt kilép, újra visszakapcsolom.
(#) nagzso válasza nagzso hozzászólására (») Dec 26, 2013 /
 
Meg van a gond. A TransmitInterruptFlag értéke 1 volt, és amikor küldtem az adatot, akkor nullázódott csak.
(#) Rocsli hozzászólása Dec 26, 2013 /
 
Sziasztok.
Van egy néhány ilyen: Pic17C756A-16/L PIC-em. A kérdésem az lenne, hogy ezek csak 1x írhatóak vagy többször is. Ha többször is akkor, PICKit 2-vel lehet kezelni?
(#) brato válasza Rocsli hozzászólására (») Dec 26, 2013 /
 
A C jelűeket csak egyszer lehet írni. Hacsak nem ablakos a tokozása. Akkor törölhető UV-vel.
(#) icserny válasza Rocsli hozzászólására (») Dec 26, 2013 /
 
Meg kell nézni a PICkit2 által támogatott eszközök listáját. Tudtommal PIC17C nem programozható vele sem egyszer, sem többször.
(#) c27 hozzászólása Dec 26, 2013 /
 
Sziasztok!
Egy 16f684-es piccel próbálok egy fordulatszám mérőt/számlálót csinálni.
Első problémám az, hogy konfigurálom az A és C portot digitálissá, de az A porttal van némi probléma már az mplabban. Az 5-ös számút nem lehet 1-re váltani, ha mindet kimenetnek állítom akkor sem, de ha mind bemenet akkor meg az 5.-en kívül mindegyik állítható. A programrészlet:
CLRF PORTC ;Init PORTC
MOVLW 0X07 ;comparators off
MOVWF CMCON0
BSF STATUS,RP0 ;Bank 1
CLRF ANSEL ;digital I/O
MOVLW 0X00
MOVWF TRISC ;set RC<5:0> as outputs

BCF STATUS,RP0 ;Bank 0
CLRF PORTA ;Init PORTA
MOVLW 0X07 ;comparators off
MOVWF CMCON0 ;digital I/O
BSF STATUS,RP0 ;Bank 1
; CLRF ANSEL ;digital I/O
MOVLW 0X00
MOVWF TRISA ;set RA<ALL> as outputs RA<> as Inputs
BCF STATUS,RP0 ;Bank 0

CLRF PORTA
CLRF PORTC


BSF PORTA,0
BSF PORTA,1
BSF PORTA,2
BSF PORTA,3
BSF PORTA,4
BSF PORTA,5

Erre a porta redménye 1F, elvileg nem lehetne írni, de ugyan ez az eredmény ha mind kimenet.

A másik problémám a timer0-val van:
;TIMER INI
BCF STATUS,RP0 ;BANK0
CLRF INTCON
CLRF TMR0
BSF STATUS,RP0 ;Bank 1
MOVLW B'00000101' ;Select TMR0,
; prescale, and
; ELŐOSZTÁS 1:64
MOVWF OPTION_REG
BSF INTCON,GIE ;IT engedélyezés
BSF INTCON,T0IE
RETURN

Ha kiveszem az intcon,gie globális it-t akkor nem okoz megszakítást a timer0, de így meg minden megszakítás engedélyezve van ami nem túl szerencsés, csak a timer0 megszakítását akarom bekapcsolni.

Végül pedig nem tud valaki egy kis segítséget az lcd kezeléshez? Pl. egy példaprogram, hogy is lehetne egy konkrét számot kiírni az lcd-re. Eddig olyanba gondolkodtam, hogy 0-9-ig letárolom a megfelelő kódokat egy táblázatban, de például egy egyszerű értéknövelésnél pl. 6024 6025-re így léptetni az értéket nem túl egyszerű feladat sztem.
(#) Prendick válasza c27 hozzászólására (») Dec 26, 2013 /
 
A RA5-el az lehet a gondod, hogy a konfigurációs biteknél nincs beállítva az INTOSCIO és emiatt RA5 helyett CLKIN a láb, ami bemenet.

A megszakításoknál mindig kell a GIE, mert nélküle nincs interrupt. A többi megszakítás nem fog ettől még elindulni, azokat egyenként be kell kapcsolni. Különben is szükséges minden megszakításnál megvizsgálni, hogy mi is jött. TMR0 esetén ez a T0IF bit, amit törölni is kell azonnal.
Valahogy így kell több megszakításnál megállapítani, mi jött:

  1. ORG     4
  2. ;--------------------------------------------------
  3. Interpt btfss   PIR1,TMR2IF     ;Óra megszakítás TMR2-n?
  4.                 goto    Imas0        ;ha nem ugrás masikra
  5.                 goto    Itmr2
  6. Imas0   btfss   INTCON,INTF     ;RB0 megszakítás?
  7.                 goto    Imas1       ;ha nem ugrás masikra
  8.                 goto    Irb0
  9. Imas1   btfss   INTCON,T0IF     ;Óra megszakítás TMR0-n?
  10.                 goto    Inincs      ;ha nem ugrás masikra
  11.                 goto    Itmr1
  12. Inincs  retfie                       ;kínos :)
  13.  
  14. Itmr0   bcf         INTCON,T0IF
  15.  
  16. ;... kód ...
  17.  
  18.         retfie


Ne felejtsd el minimum a W mentését az elején és visszaállítását!

Az LCD-hez kicsit álmos vagyok már, talán holnap, ha addig nem fut be valaki, aki frissebb.
(#) c27 válasza Prendick hozzászólására (») Dec 26, 2013 /
 
Kösz.
Ráér holnap is a válasz az lcd-re annyira azért nem sürgős.
(#) bbalazs_ válasza c27 hozzászólására (») Dec 26, 2013 /
 
Az adatlap tanulmanyozasa kozben elolvashatod, hogy az RA3 CSAK bemenet lehet.
(#) lajos1969 hozzászólása Dec 27, 2013 /
 
Sziasztok!
Lenne egy problémám csinálok egy órát nagy 7 szegmenses kijelzővel, annyi gondba ütköztem hogy a 16F877 Rb0-5 lábai negativ feszt küld ki program szerint ez jó is lenne de többel szeretném terhelni mint amit a kimenete bír. Ezt hogy tudnám a legegyszerűbben megoldani? Tranzisztorokra gondoltam de annak plusz kellene nem igaz? Ha valaki tud segíteni azt megköszönném.
(#) nedudgi válasza lajos1969 hozzászólására (») Dec 27, 2013 /
 
Ezt a negatív feszültséget fejtsd ki bővebben, lehetőleg rajzzal. A PIC mikrokontrollerek a földhöz képest pozitív tápfeszültséggel működnek.
A hozzászólás módosítva: Dec 27, 2013
(#) lajos1969 válasza nedudgi hozzászólására (») Dec 27, 2013 /
 
Köszi oké egy pillanat, Csak így tudom. A tranzisztorokra +12 voltot adok, úgy jó az anódok hajtása, De a katódokat hogy oldjam meg?
A hozzászólás módosítva: Dec 27, 2013

SDC10596.JPG
    
(#) Bakman válasza lajos1969 hozzászólására (») Dec 27, 2013 /
 
Így csináld. Ha a kijelző szegmensében több LED van sorba kapcsolva, értelemszerűen a 820 Ohm-os ellenállást módosítani kell.

Shot_609.jpg
    
(#) lajos1969 válasza Bakman hozzászólására (») Dec 27, 2013 /
 
Köszönöm szépen!
Az anódok úgy jók lesznek ha a pnp tranzisztorokra +12 voltot adok?
(#) c27 hozzászólása Dec 27, 2013 /
 
Egy kis segítséget kérnék, nem feltétlen kell konkrét program elég lenne egy kis gondolkodásmenet is.
Tehát mint korábban említettem, hogy fordulatszámmérőt szeretnék csinálni és kicsit elakadtam, hogy is kéne az lcd-re kijeleztetni a számokat.
Eddig úgy csináltam (gondoltam), hogy elindítom a timer1-et 100ms-ig számol (lényegében 500ms-ra gondoltam mivel az lcd-re írásnál ha jól tudom 2-3ms-t kell várni minden parancskiadás/karakterírás után így felesleges lenne 100ms-ként mindig írogatni az lcd-re, de végül is még később módosítható) így amikor megszakítást generál a timer1 mindig léptet egy változót, minden 5. megszakítás után fog csak kiírni a kijelzőre. Közbe a főprogram figyeli az egyik bemenetet és amikor az értéke 0-1-re és 1-0-ra vált akkor növel egyet egy másik változón. Amikor eltelik az 500ms (5. megszakítás következik) meghív egy függvényt ahol be kéne írni a kijelzőbe a megfelelő értéket abból amit addig összeszámolt. pl. 200-as értéknél másodpercenként 400-at fordulna percenként 24000-et. (Persze normál körülmények között nem igen lesz 24000 fordulatszám legalább is nem tudom mivel lehet előállítani, de a lényeg, hogy viszonylag nagy értéket is lehetne vele mérni, de ténylegesen még a 10000-se igen fogja elérni soha.) Szóval abban kérnék segítség, hogy az eddigi gondolkodásmenetem jó volt e illetve a példában megadott 200-as értéknek megfelelő 24000-et hogy lehet kiírni az lcdre. Egy táblázatban letárolom a számokat 0-9-ig eddig jutottam és itt elakadtam. Esetleg egy másik táblázatban lehetne tárolni valamit pl. egy 256 elemű táblázatban és az összeszámolt fordulatok függvényében meghívja a táblázatot és a megfelelő elem tartalmával tér vissza, de sajnos nem nagyon tudom letárolni egy ilyen táblázatban az összes szükséges kódot. Ráadásul ez egy 16f684 elég szűkös memóriával EEPROM 256bájt. (Azért is lenne jó használni ez a mikroprocit mert kimaradtak van 4-5db így másra nem igazán tudom használni, még egy ilyen viszonylag könnyebb feladat is érdekes lehet.)
(#) progee válasza c27 hozzászólására (») Dec 27, 2013 /
 
A gondolatmenet nagyjából jó.
Azt nem értettem, hogy a bemenetnek miért mindkét állapotváltozásánál számolsz. Ha egy impulzust kap minden fordulatnál, akkor csak a 0-1 váltásoknál kell számolnod.
A kiíratás között eltelt időn meghatározásánál nem csak az lcd írási idejét kell figyelembe venni, hanem a fordulatszám változás sebességét is. Ha túl gyorsan változik a fordulat, és eközben viszonylag gyorsan is íratod ki, akkor olyan mértékben fognak pörögni a számok, hogy az utolsó 2-3 számjegyet el sem lehet olvasni. Én másodpercenként jeleníteném meg az 1mp alatt mért fordulatszámot, ha ez elegendő a feladatodhoz.
Fontos, hogy az 1mp az pontosan 1mp legyen, ugyanis ha 1mp alatt csak 1-2 impulzust is kihagysz a számolásból, mert gyorsabb a timer1 megszakítása, akkor az percenként 60-120-as eltérést is eredményezhet.
Én mikropascalban írok programokat. Ott a kiíratáshoz szükséges szám-szöveg konvertálás egy egyszerű inttostr függvénnyel elvégezhető.
A hozzászólás módosítva: Dec 27, 2013
(#) Bakman válasza lajos1969 hozzászólására (») Dec 27, 2013 /
 
Nem értem pontosan, mit szeretnél. A rajzban, amit küldtem, a katód és az anód is be van kötve. Anód kapja a + 12 V-ot, katód pedig megy egy ellenálláson keresztül a tranzisztorra.
(#) brato válasza progee hozzászólására (») Dec 27, 2013 /
 
Bocs, hogy beledumálok de én úgy csináltam fordulatszámmérőt, hogy a két impulzus közt eltelt időt mérem. Több mérés átlagát veszem és ebből számolom a fordulatot.
Ez talán pontosabb mérést ad.
(#) nedudgi válasza lajos1969 hozzászólására (») Dec 27, 2013 /
 
Ha multiplexelt vezérlést akarsz, akkor ez így nem egészen jó.
Az anódokat, és a katódokat külön kell kapcsolni. Az anód 12V feszültségét érdemes PNP tranzisztorral kapcsolni, de a vezérlőjel csak a 0-5V tartományban lehet. Ezt valamilyen szintáttevővel kell megoldani.
A hozzászólás módosítva: Dec 27, 2013
(#) lajos1969 válasza Bakman hozzászólására (») Dec 27, 2013 /
 
Az anód 5 voltot kap a rajz szerint oda 12 voltot kötök az oké, közös anódos kijelző. a szegmenseket közvetlenül a pic hajtja RB0-RB kimeneteivel. Innen kapják a negatívot a szegmensek. Ide akkor most jó az npn tranzisztor amit rajzoltál?
Következő: »»   471 / 1211
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