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   424 / 1210
(#) pajti2 hozzászólása Jún 17, 2013 /
 
Nekiálltam nyúzni egy boardot hibák után kotorászva (az a gyanúm, más schematicot adtak nekem, mint ami valójában van), és szép lassan elkezdett semmi sem működni a boardon. Van egy pic32mx795, rajta 3 led d1, d2, b10 lábakon, és összesen csak annyit gondoltam egy külön programba, hogy kapcsolódjanak be. Ennyi a teljes főprogram (hiba üzenet nélkül fordul, ég be, gyakorlatilag egy demo-bol ollóztam ki, amiben működtek a ledek rendesen):
  1. #pragma config UPLLEN   = ON           // USB PLL Disabled
  2. #pragma config FPLLMUL  = MUL_15        // PLL Multiplier
  3. #pragma config UPLLIDIV = DIV_2         // USB PLL Input Divider (8 MHz kristaly)
  4. #pragma config FPLLIDIV = DIV_2         // PLL Input Divider
  5. #pragma config FPLLODIV = DIV_1         // PLL Output Divider
  6. #pragma config FPBDIV   = DIV_1         // Peripheral Clock divisor
  7. #pragma config FWDTEN   = OFF           // Watchdog Timer
  8. #pragma config WDTPS    = PS1           // Watchdog Timer Postscale
  9. #pragma config FCKSM    = CSDCMD        // Clock Switching & Fail Safe Clock Monitor
  10. #pragma config OSCIOFNC = OFF           // CLKO Enable
  11. #pragma config POSCMOD  = HS            // Primary Oscillator
  12. #pragma config IESO     = OFF           // Internal/External Switch-over
  13. #pragma config FSOSCEN  = OFF           // Secondary Oscillator Enable (KLO was off)
  14. #pragma config FNOSC    = PRIPLL        // Oscillator Selection
  15. #pragma config CP       = OFF           // Code Protect
  16. #pragma config BWP      = OFF           // Boot Flash Write Protect
  17. #pragma config PWP      = OFF           // Program Flash Write Protect
  18. #pragma config ICESEL   = ICS_PGx2      // ICE/ICD Comm Channel Select
  19.  
  20.  
  21. #include "GenericTypeDefs.h"
  22. #include "Compiler.h"
  23.  
  24. int main(void) {
  25.   AD1PCFG = 0xFFFF;  //Analogok lekapcs.
  26.   LATB&=0xFFFF;TRISB&=0xFBFF;LATD&=0xFFFF;TRISD&=0xFFF9;
  27.   while(1);
  28.   return TRUE;}


Jelenség: hát nem kapcsolódnak be. Elvileg mire van még szüksége a 32mx-eknek egy ennyire egyszerű dologhoz, mint lábak kimeneti szintjeit beállítani?

Feltettem egy gyári demót, hogy leteszteljem a boardot, működik rendesen. A hardvernek kutya baja. De az a fenti program se kép se hang se semmi.

Egy kicsike segítségre lenne szükségem, hogy tudjam, épelméjű vagyok-e még?
(#) Hp41C válasza pajti2 hozzászólására (») Jún 17, 2013 /
 
Hova van kötve a LED másik kivezetése? Nem alacsony szint kiadásakor világítana?
(#) mrobi válasza mrobi hozzászólására (») Jún 17, 2013 /
 
Még mindig fenn áll ez a probléma. Ha így csinálom akkor nincs baj:
  1. movlw    b'00000011'
  2. movwf     GPIO

Ilyenkor világít mind a két led. De amint egy bsf, vagy bcf-et használok elszáll az egész és csak az adott láb változik. A többit kikapcsolja.

Mind a két kimeneten egy-egy FET található 470 ohm-os előtéttel.
A hozzászólás módosítva: Jún 17, 2013
(#) pajti2 válasza Hp41C hozzászólására (») Jún 17, 2013 /
 
Az a kódrészlet egy működő programból lett kinyisszantva. Egészen konkrétan a HardwareProfile.h-ból. Biztosan nincsen baja. Egyéb iránt ez volt az eredeti formája:
  1. #define mInitAllLEDs() LATB&=0xFBFF;TRISB&=0xFBFF;LATD&=0xFFF9;TRISD&=0xFFF9
  2.   #define mLED_1              LATBbits.LATB10
  3.   #define mLED_2              LATDbits.LATD1
  4.   #define mLED_3              LATDbits.LATD2
  5.   #define mGetLED_1()         mLED_1
  6.   #define mGetLED_2()         mLED_2
  7.   #define mGetLED_3()         mLED_3
  8.   #define mLED_1_On()         mLED_1 = 1
  9.   #define mLED_2_On()         mLED_2 = 1
  10.   #define mLED_3_On()         mLED_3 = 1
  11.   #define mLED_1_Off()        mLED_1 = 0
  12.   #define mLED_2_Off()        mLED_2 = 0
  13.   #define mLED_3_Off()        mLED_3 = 0
  14.   #define mLED_1_Toggle()     mLED_1 = !mLED_1
  15.   #define mLED_2_Toggle()     mLED_2 = !mLED_2
  16.   #define mLED_3_Toggle()     mLED_3 = !mLED_3


Azzal a programmal valamiért az az érzésem van, hogy egyáltalán el sem indul, vagy nem tudom. A config biteket is a működő hwprofile-ból nyisszantottam ki, azok sem lehetnek elszúrva. Más meg egyáltalán nincs is a programban.
(#) Hilo hozzászólása Jún 18, 2013 /
 
Sziasztok,
most kezdek csak gyakorlatban PIC-ezni, sok hülye kérdésem lesz, előre is elnézést értük.
Mire kell figyelnem ha egy PIC lábaira tesztnek ledeket szeretnék kötni.
Ha jól tudom lehet simán előtét ellenállással kötni. konkrétan 12f683-al kísérletezgetnék. Ha stabil 5V a tápfeszültség akkor logikai kimeneten is 5V lesz vagy valamivel kevesebb? Ha jól tudom max 25mA-t bír lábanként ez a PIC, akkor ha az előtét ellenállást a ledhez úgy számolom hogy 10mA legyen az rendben van elvileg? Mire kell figyelnem?
Előre is köszönöm!
(#) Buvarruha válasza Hilo hozzászólására (») Jún 18, 2013 / 1
 
Valamivel kevesebb lesz, mint 5V, de nem sokkal és a PIC kimeneteire nyugodtan lehet kötni ledet előtétellenállással.
(#) Hilo válasza Buvarruha hozzászólására (») Jún 18, 2013 /
 
Köszönöm, akkor ha jól értem csak arra figyeljek hogy a PIC lábán a max mA alatt maradjak!?
(#) Buvarruha válasza Hilo hozzászólására (») Jún 18, 2013 /
 
Így van.
(#) pajti2 válasza Hilo hozzászólására (») Jún 18, 2013 /
 
Aztán az a max mA igazából peremfeltételek mellett értendő. Például kikábelezel valamit 10 méterre, és amikor feszültséget váltanál rajta, "visszarúg" a kábel (parazita induktivitás). Nem sokat, nem is fog tőle kisülni a pic, éppen csak egy koporsószög a kimeneti meghajtónak piff beverve

Igazából nem túl nagy baj, ha a max áram felébe bele tudsz férni.
A hozzászólás módosítva: Jún 18, 2013
(#) Hilo válasza pajti2 hozzászólására (») Jún 18, 2013 /
 
Köszönöm, ha jól emlékszem 12f683 nak 25mA a maximuma (majd megnézem az adatlapján biztos ami biztos).
10mA-re lőttem be az ellenállás mértékét, ahhoz bőven elég hogy a programot teszteljem és lássam amit kell. Köszönök minden segítséget!
(#) mrobi hozzászólása Jún 18, 2013 /
 
Ezt nem értem még mindig. Bekapcsolok BSF utasítással egy portlábat. Fel is kapcsolja. Ha utána bekapcsolok egy másik lábat BSF utasítással akkor az előtte bekapcsoltat kikapcsolja. Mit rontok el? Felrakom az forrást!

Ezt a programot lefordítva és beégetve azt érem el hogy a két led felváltva villog. Pedig nem azt kellene csinálnia.
A hozzászólás módosítva: Jún 18, 2013

demo.asm
    
(#) nedudgi válasza mrobi hozzászólására (») Jún 18, 2013 /
 
Tárold az port képét egy memóriacellában, módosítsd, és azt írd ki.
  1. ....
  2.  bsf    arnyek,0,f
  3.  movf   arnyek,w
  4.  movwf  GPIO
  5.  call   Delay
  6.  bsf    arnyek,1,f
  7.  movf   arnyek,w
  8.  movwf  GPIO
  9. ....

A bsf utasítás bolvassa a GPIO-t, módosítja a tartalmát, és visszaírja. Valami (=terhelés) miatt a 0 bitet 0-nak látja a kontroller.
A hozzászólás módosítva: Jún 18, 2013
(#) Balagemann2031 hozzászólása Jún 18, 2013 /
 
Sziasztok! Van egy I2C soros eprom IC-m amivel kísérletezek! A típusa 24C16WP . A kérdésem az lenne hogy lehet-e adattokkal feltölteni pickit2-vagy 3 mal? A Pickit3 manual select-nél csak 24LC típusokat találtam... Van jelentős különbség C és LC típusok között?
(#) mrobi válasza nedudgi hozzászólására (») Jún 18, 2013 /
 
Köszi. Így már jó.
Hallottam már erről de még soha nem tapasztaltam ilyet. Sőt. Idáig tökéletesen működött. Egyszer csak megbolondult. Azt hittem hogy a programban van a hiba. Azért is butítottam le ennyire, hogy lássam hogy mi a gond.
(#) Hp41C válasza Balagemann2031 hozzászólására (») Jún 19, 2013 / 1
 
Lehet, az SDA lábat a Vdd -re kell húzni 2k7 ellenállással. 24LC16 beállítással programozható.
A hozzászólás módosítva: Jún 19, 2013
(#) danydosster hozzászólása Jún 19, 2013 /
 
Hello!
Egy olyan kérdésem lenne, hogy pic et lehet úgy programozni, hogy folyamatos olvasson adatokat 1 port 4 lábán. És amennyiben a lábon nem 0000 hanem pl 0001 legyen akkor egy másik port valamelyik lábát kimenetre kapcsolja. De ha pl 0010 át kap akkor egy harmadik port valamelyik lábát kapcsolja kimenetre. És fontos lenne, hogy ez folyamatosan menjen, úgymond állandó ciklusban. Remélem érthető.
(#) kissi válasza danydosster hozzászólására (») Jún 19, 2013 /
 
Érthető. Lehet ( feltétel vizsgálat ! ).
(#) Balagemann2031 válasza Hp41C hozzászólására (») Jún 19, 2013 /
 
Köszönöm szépen!
(#) Bell válasza danydosster hozzászólására (») Jún 19, 2013 /
 
A szabály bármi lehet, Te adod meg egy beégetett program formájában.
A tokba épített összes hardver (I/O portok, AD konverter, komparátor, időzítő, I2C, SPI stb.) a rendelkezésedre áll.
(#) szaffo555 hozzászólása Jún 20, 2013 /
 
PIC18F RTCC modulját próbálom működésre bírni egyenlőre csak szimulátoron.
  1. movlb   d'15'                   ;Bank 15
  2.  
  3.         movlw   0x55
  4.         movwf   EECON2,access
  5.         movlw   0xAA
  6.         movwf   EECON2,access
  7.         bsf     RTCCFG,RTCWREN,banked
  8.        
  9.         movlw   b'00000000'             ;00000000 = No adjustment
  10.         movwf   RTCCAL,banked           ;RTCCAL címe: 0xF3E --> Bank 15
  11.         movlw   b'00100011'             ;RTCCFG konfig: Module disabled
  12.         movwf   RTCCFG,banked           ;RTCCFG címe: 0xF3F --> Bank 15
  13.  
  14.         movlw   b'10010100'             ;ALRMCFG konfig
  15.         movwf   ALRMCFG,access          ;ALRMCFG címe: 0xF91 --> ACCESS BANK
  16.         movlw   b'11111111'         ;Alarm will repeat 255 more times
  17.         movwf   ALRMRPT,access          ;ALRMRPT címe: 0xF90 --> ACCESS BANK
  18.  
  19.         movlw   b'00010011'
  20.         movwf   RTCVALL,access  ;YEAR VALUE REGISTER  2013 ból a 13
  21.         movlw   b'00010011'
  22.         movwf   RTCVALH,access  ;fenttartott: írásakor decrementálódik RTCPTR<1:0>


Sajnos nem látom szimulátorban, hogy az RTCVALL és az RTCVALH regiszterek felvennék a W értékét. Mi lehet az oka?

Másik kérdés, hogy a szimulátorban simán beáll RTCWREN bit ezen kód nélkül is:
  1. movlb   d'15'                   ;Bank 15
  2.  
  3.         movlw   0x55
  4.         movwf   EECON2,access
  5.         movlw   0xAA
  6.         movwf   EECON2,access
  7.         bsf     RTCCFG,RTCWREN,banked

Akkor az adatlap miért ajánlja a fenti megoldást?
(#) norbigal hozzászólása Jún 21, 2013 /
 
Sziasztok!

Egy szervo motort vezérlő programot szeretnék írni, ami 5 uSec-onkénti megszakítással, szoftveresen állítja elő a jelet.

A kontroller a beépített FRC-s 7.37MHz-en fut, vagyis az utasítás végrehajtási frekvencia elvileg ennek a fele.
Az időzítéshez a Timer2-t használtam, PR2-t az alábbi képlettel számoltam, 1-es előosztással: [5uSec * (7,37MHz/2)/Prescale] -1 = 17.

Viszont azt a furcsaságot figyeltem meg, hogy 5uSec helyett 10uSec-onként érkeznek a jelek, vagyis olyan, mint ha 3.685/2-ről futna a kontroller, de nem értem miért, ha nincs előosztás beállítva.
Próbáltam pontos képet kapni a jelről a PK2 logikai analizátorával, de sajnos állandóan megfagy a szoftver mikor elindítom a RUN-t, így oszcilloszkóppal figyeltem meg, hogy a jelek ideje mindig duplája annak, mint ami 5uSec-onként lenne.


Jelen program 5uSec-ra van írva, vagyis a "szamlalo" adja a 20msec-os periódust, a "szervo" pedig az aktív magas jel idejét. Ha az említett két számlálót a felére csökkentem, akkor tudom vezérelni a szervót, viszont nagyon bosszantó, hogy nem értem miért van benne ez a 2-es osztás.
Ha tudtok, kérlek segítsetek, mert nem tudom hol csúszhat el a dolog ennyire.
  1. #include <xc.h>
  2. #include <stdio.h>
  3. #include <stdlib.h>
  4.  
  5. unsigned int szamlalo, szervo, szamlalo2, szamlalo3;
  6.  
  7. int main() {
  8.  
  9.     TMR2=0;
  10.     PR2=17;
  11.     T2CON=0;
  12.     _T2IE=1;
  13.     _T2IF=0;
  14.     T2CONbits.TON=1;
  15.    
  16.     _TRISC6=0; //Kimenet
  17.     szervo=200;
  18.  
  19.     while(1)
  20.     {
  21.     }
  22. }
  23.  
  24. void _ISR _T2Interrupt()
  25. {
  26.     szamlalo=szamlalo++;
  27.     if(szamlalo==4000)
  28.     {
  29.         szamlalo=0;
  30.     }
  31.     if(szamlalo<=szervo) _LATC6=1;
  32.     else _LATC6=0;
  33.  
  34.     _T2IF=0;
  35. }
A hozzászólás módosítva: Jún 21, 2013
(#) Hp41C válasza norbigal hozzászólására (») Jún 21, 2013 /
 
Szia!
Idézet:
„A kontroller a beépített FRC-s 7.37MHz-en fut, vagyis az utasítás végrehajtási frekvencia elvileg ennek a fele.”

Ugyan nem írtad a konkrét típust, de a végrehajtási frekvencia az órajel negyede.
7.37 MHz mellett 1.8425 MHz. Azaz egy utasítás végrehajtási ideje: 542 ns.
A megszakításba legalább két utasítási idő a belépés és az retfie is ennyit visz el. A szükséges mentések még 8 utasítás igényelnek még (movwf WREGSAVE / movf STATUS,w / clrf STATUS / movwf STATUSSAVE / ... / movf STATUSSAVE,w / movwf STATUS / swapf WREGSAVE,f / swapf VREGSAVE,w). Ez maga 4.342 us + 2.17 us = 6.15123 us. Ha jól számolok..
(#) norbigal válasza Hp41C hozzászólására (») Jún 21, 2013 /
 
Ne haragudj, igazad van. 16 bitesről van szó, PIC24HJ128GP504-ről. Ennél viszont FOSC/2 a végrehajtási frekvencia. Tehát még sajnos mindig nem értem honnan jöhet a 2MHz.

PIC-eket nem programoztam ASM-ben sajnos, viszont az általad felvázoltak alapján még ki is csúsznék a megszakításból az 5uSec-mal?!?!
A hozzászólás módosítva: Jún 21, 2013
(#) Hp41C válasza norbigal hozzászólására (») Jún 21, 2013 /
 
Szia!
Ha 24HJ -ről van szó, akkor minden általam kiszámolt idő feleződik.

MpLab szimulátorában tegyél egy töréspontot a megszakítási rutin szamlalo=szamlalo++; utasítására és a _T2IF=0; utasítására. (Apropo szamlalo=szamlalo++; nem szamlalo++; akart lenni?)
Lehet, hogy a T2IF törlése csak akkor történik meg, ha már másodszor is belillent.
(#) norbigal válasza Hp41C hozzászólására (») Jún 21, 2013 /
 
MPLABX-et használok és a szimulátor órajelét nem bírom átállítani 1MHz-ről, ráadásul 1MHz-cel sem tudom rávenni a programot, hogy mutassa a logikai jeleket az analizátorban. Sajnos elég sok nyűgöm van MPLABX-szel, de legalább sok kényelmi funkciója van, ezért maradtam e mellett.

De azért köszi a tippet, akkor valahogy megpróbálom rávenni az analizátort a működésre, hátha az elárulja mi a gond.

De amúgy az akart lenni, csak előtte volt már ott +5, +10, stb, aztán most éppen ++ lett.
(#) cassis válasza szaffo555 hozzászólására (») Jún 22, 2013 /
 
Nem is fogod visszalátni RTCVALH és RTCVALL regiszterekbe írt értéket, mert a PIC adatlapja szerint ezek bitjei: "Unimplemented: Read as ‘0’".
Ettől még íráskor RTCPTR decrementálódhatott volna...

Mondjuk én sem értem pontosan a doksi miért fogalmaz így, utalva arra, hogy RTCVAL olvasható is...
Idézet:

Points to the corresponding RTCC Value registers when reading the RTCVALH<7:0> and
RTCVALL<7:0> registers; the RTCPTR<1:0> value decrements on every read or write of
RTCVALH<7:0> until it reaches ‘00’.
(#) Zsora válasza norbigal hozzászólására (») Jún 23, 2013 /
 
Idézet:
„...nem programoztam ASM-ben...”

Bocsi a kukacoskodásért, de az ASM nem egy programnyelv, hanem csak egy mozaikszó a fordító számára, ami az Assembly nyelvű kódrészletre utal egy C, Basic, stb. nyelvű programban.
(#) gaspar_zsolt válasza Zsora hozzászólására (») Jún 24, 2013 /
 
Szerintem meg az. A gépikód fogyasztható szöveges verziója.
(#) Szpisti hozzászólása Jún 24, 2013 /
 
Szerbusztok!
A következő problémám lenne : Van egy áramkör teljes leírással, csak picit módosítani kellene rajta.
A feladat az lenne, hogy egy kétdigites 7szegmenses kijelzőn meg kell jeleníteni a számokat 0-15-ig úgy, hogy a léptetést egy-egy up/down nyomógombbal lehessen előidézni. Erre van is kész pices megoldás forráskóddal, alapos leírással. A link itt található.
A kapcsolás pedig az alul látható lenne.
Nekem annyival többre lenne szükségem az ott megoldásra kerülthöz képest, hogy a négy szabadon maradt RA4-RA7 lábakon meg kellene jeleníteni a kijelzőn megjelenő szám hexadecimális kódját.
De ha máshonnan közelítem a dolgot, és arra van valakinek kész megoldása, hogyan tudok két nyomógombbal fel/le számoltatni úgy, hogy azt kijelezze egy ilyen ledes displayen, és közben a bináris kódjait is fel tudjam használni - nem lennék hálátlan!
(#) nedudgi válasza Szpisti hozzászólására (») Jún 24, 2013 /
 
Ezzel a kapcsolással csak három szabad kimeneti láb marad, mert az RA5/MCLR láb csak bemenetként használható. Mindenképpen más bekötést kell alkalmazni.
A kijelzést ezzel a kontrollerrel 4 digitre lehet bővíteni két további ellenállás/ tranzisztor beiktatásával. Neked egyszerre kell a decimális/hexadecimális kijelzés, és az x darab kimeneti láb? A PIC18F628A meglevő alkatrész? A PIC16F182x olcsóbb, és első ránézésre megfelel a feladatnak.
A hozzászólás módosítva: Jún 24, 2013
Következő: »»   424 / 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