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   606 / 1210
(#) don_peter válasza spgabor hozzászólására (») Dec 16, 2014 /
 
Az első kérdésem , hogy milyen fordítót használsz?
Nos a megszakítás azért nem megy mert jelenleg nem kezeled le.
  1. // ---------------------------- //
  2. //  Interrupt service routine   //
  3. // ---------------------------- //
  4. extern interrupt isr(void) {
  5.         timer_count++;    // Számolod a megszakításokat
  6.         if(timer_count == 1000){    // Ha 1000 szer lefutott akkor telt el 1mp
  7.             // Ide jöhetnek a további globális változok melyek a mp, percet fogják számlálni
  8.             timer_count = 0;   // Nullázzuk a globális számlálót
  9.         }
  10.         TMR2IF = 0;    // Timer2 flag törlése
  11. }

A globális változókat mindig a main() függvény elé vesszük fel.
Ez nem kell.:
  1. T0IE = 1; //enable TMR0 overflow interrupts

Szerintem használj szimulátort kezdésnek sok időt és energiát spórolhatsz meg.. (Proteus)
A hozzászólás módosítva: Dec 16, 2014
(#) don_peter válasza spgabor hozzászólására (») Dec 16, 2014 / 1
 
Idézet:
„A timert amúgy úgy szeretném megvalósítani, hogy ha az RA2-n lévő gombbal a pic lábát a földre húzom, akkor induljon a visszaszámlálás.”

A PIC lábát felhúzod 5v-ra.
Majd a gomb és a láb közé teszel egy 10K-os ellenállást.
Mikor megnyomod a gombot 10k-os ellenálláson keresztül húzod le földre, így nem lesz rövid zárad..
Rögtönzött kód a vizsgálatra és a timer2 indítására.
Először is a main() fgv-ben a timer2-őt le kell állítsd:
  1. TMR2IE = 0;    // Timer2 kikapcsolva
Utána jöhet a gomb ellenőrzés:
  1. #define GOMB x? // x? helyén az a láb amit figyelsz, ezt az utasítást a globális változók elé tedd
  2. if(!GOMB){    // ha gombnyomás történt
  3.         while(!GOMB);    // várakozunk gomb felengedéséig (pergésmentesítő)
  4.         timer_count = 0;   // Nullázzuk a globális számlálót
  5.         TMR2IE = 1;    // Timer2 engedélyezése (indul a számlálás)
  6. }
A hozzászólás módosítva: Dec 16, 2014
(#) Pali79 válasza don_peter hozzászólására (») Dec 16, 2014 /
 
Idézet:
„A PIC lábát felhúzod 5v-ra. Majd a gomb és a láb közé teszel egy 10K-os ellenállást. Mikor megnyomod a gombot 10k-os ellenálláson keresztül húzod le földre, így nem lesz rövid zárad..”

Ezt nem fordítva kéne? Mármint az ellenállással 5V-re húzni a PIC lábát és a gombbal GND-re húzni? Biztonságosabbnak tűnik, bár lehet, hogy nincs igazam.
(#) don_peter válasza Pali79 hozzászólására (») Dec 16, 2014 /
 
De igen, igazad van, már nem tudtam javítani.. Köszi..
(#) AZoli válasza usane hozzászólására (») Dec 16, 2014 /
 
Idézet:
„Debug előtt debug módban leforditod és felprogramozod?”

Igen, persze, végig is debuggolom az egész programot, tele van máshol is breakpoinal, minden rendben megy, amíg nem próbálom a config regisztereket írni.
(#) spgabor válasza don_peter hozzászólására (») Dec 16, 2014 /
 
Mplab XC8-at használok.
Proteusban fogom tesztelni majd, de először el kellene jutnom odáig, hogy legyen mit tesztelni. A hétvégéig remélem már a fő része a segítségetekkel menni fog.
A gomboknak már utánanéztem, de az könnyebbnek tűnt megvalósítás szempontjából, ezért hagytam ki első körben.
Átnézem a kódomat, a tanácsok feldolgozása után és ha megint elakadok írok. Addig is köszönöm a segítséget.
(#) don_peter válasza spgabor hozzászólására (») Dec 16, 2014 /
 
No igen azért volt ismeretlen a #FUSES utasítás.
Nem biztos, hogy maradéktalanul menni fog a kódom.. Hi-Tech fordítóval dolgozom, 10-12-16-os családoknál.
(#) benjami válasza spgabor hozzászólására (») Dec 16, 2014 /
 
Lehet ám 32768Hz-es órakvarcot is használni, ekkor a PIC járhat a sima belső 4MHz-es oszcillátoráról is, a pontosság az órakvarctól fog függeni.
  1. volatile char idoimp;   // azért volatile, mert megszakításból
  2.                         // és azon kívülről egyaránt használjuk
  3. unsigned long masodperc;// a 32 bites másodperc azért kitart egy darabaig
  4. void main(void)
  5. {
  6.   T1CONbits.T1OSCEN = 1;// órakvarc engedélyezés
  7.   T1CONbits.TMR1CS = 1; // forrás órajel = T1CKI (órakvarc)
  8.   T1CONbits.T1CKPS = 0; // előosztó = 1:1
  9.   T1CONbits.TMR1ON = 1; // TIMER1 időzítő start
  10.   PIE1bits.TMR1IE = 1;  // TIMER1 megszakítás eng
  11.   INTCONbits.PEIE = 1;  // periféria IRQ eng
  12.   INTCONbits.GIE = 1;   // globális IRQ engedélyezés
  13.   while(1)
  14.   {
  15.     if(idoimp)
  16.     {
  17.       masodperc++;
  18.       idoimp = 0;
  19.     }
  20.  
  21.     if(TMR1H < 128)
  22.       writelcd(masodperc);
  23.     else
  24.       writelcd(masodperc + 1);
  25.   }
  26. }
  27.  
  28. void interrupt isr(void)
  29. {
  30.   if(PIE1bits.TMR1IE && PIR1bits.TMR1IF)
  31.   { // TIMER1 interrupt (2 másodpercenként)
  32.     idoimp = 1;
  33.   }
  34. }

A witelcd itt fiktív függvény, csak felhasználási példának írtam bele.
Valaki árulja el, hogy a kódban miért tesz minden sor közé egy üres sort, akár enterrel, akár shift+enterrel hozom létre az új sort.
Megjegyzés: szerencsére ez csak az előnézetben volt így.
A hozzászólás módosítva: Dec 16, 2014
(#) benjami válasza benjami hozzászólására (») Dec 16, 2014 /
 
A masodperc++ sort kétszer kell betenni, mert két másodpercenként ugrik az értéke.
(#) lastewer hozzászólása Dec 17, 2014 /
 
Üdv!


Szeretnék egy olyan programot írni pic16f628a - ra , ami azt csinálná , hogy 12v - ot adna ki 3 lábra akkor ha a 4. láb bemenő feszültsége nagyobb mint 10V.

Ez mennyire lenne bonyolult ? Tudnátok valami oldalt linkelni , ehhez honnan tudnék elindulni ?

Előre is köszönöm.
(#) don_peter válasza lastewer hozzászólására (») Dec 17, 2014 /
 
Ennek csak nagyon kicsi része lenne programból megvalósítható, a többit elektronikailag kell összehoznod..
Ilyenkor jönnek szóba a tranzisztorok és relék....

Nem szabad elfelejteni, hogy a szóban forgó PIC-el maximum ~5v 25mA-et tudsz kiadni.
Innentől vagy tranzisztorokkal erősítesz vagy tranzisztorral kapcsolsz mondjuk egy relét..
Van neki topikja ott jól kibeszéltük ezt a témát: Bővebben: Link
A hozzászólás módosítva: Dec 17, 2014
(#) lastewer válasza don_peter hozzászólására (») Dec 17, 2014 /
 
Uhh , köszönöm , akkor pihentetem a dolgot egyenlőre még
(#) usane válasza lastewer hozzászólására (») Dec 17, 2014 /
 
Először is a PIC 5V vagy 3.3V. Ha nagyobbat akarsz akkor kiegészítő alkatrészek kellenek, pl tranzisztor. A bemenő ellenőrzéséhez több lehetőség van. Pl: PIC A/D-je, vagy egy sima küszöbfeszültség figyelő kiegészítő áramkör.
(#) lastewer válasza usane hozzászólására (») Dec 17, 2014 /
 
Köszönöm neked is , pihentetni kell a dolgot ehhez még akkor , mert ekkora tudásom nincs a témában
(#) usane válasza lastewer hozzászólására (») Dec 17, 2014 /
 
Nem kell nagyon pihentetni, ha van egy kis elektronikai ismereted akkor mennin fog, de mondjuk ha lenne a tranzisztort magadtól is kitaláltad volna. Ilyesmiket kell a PIC kimeneteire tenned, hogy 12V-ot kapcsolgass. Ami a bemenetet illeti az is megvalósítható szerintem 2 tranzisztorból meg 1-2 ellenállsából.
(#) lastewer válasza usane hozzászólására (») Dec 17, 2014 /
 
Esetleg ha nem lenne nagy kérés , azt össze tudnád nekem írni , hogy ehhez a "project"-hez , milyen alkatrészekre lenne szükségem ?

Akkor elmennék megvenném őket , mert ez a beszerzés is nem olyan egyszerű (30+km)

Köszi.
(#) matheattila válasza lastewer hozzászólására (») Dec 17, 2014 /
 
A PIC-et fel is kell programozni valamivel (pl. PICkit2/3), de az elhangzottak alapján kétlem, hogy neked lenne ilyensmid
Ha nem feltétlen szükséges a PIC és a program megírása akkor szerintem egyszerűbb lenne teljesen analóg módon megoldani tranzisztorokkal és ellenállásokkal...így megspórolod a PIC-et és a neki szükséges 5V előállításához a 7805-ös stabilizátort.
Ezzel nem akarom elvenni a kedved a PIC-ek programozásátol, csak annyira egyszerű a dolog, hogy nem feltétlen szükséges hozzá egy mikrovezérlő
(#) lastewer válasza matheattila hozzászólására (») Dec 17, 2014 /
 
Azért valamennyi programozói tudásom van (webprogramozó). Jelenleg van 3 db pic mikrovezérlőm is :

pic16f628a,pic18f4520,pic16f877a

Van programozóm is , fel is tudom programozni a kódot a mikrovezérlőbe.

C-ben ...
(#) don_peter hozzászólása Dec 17, 2014 /
 
Uraim, le ellenőrizne valaki?
Nem rég készítettem egy MosFET-es PWM meghajtást és említették, hogy nem árt minél alacsonyabb frekivel küldeni a cuccot.
Ez a része már inkább PIC és programozás, így gondolom ide tartozik.
Nos mos volt időm vele foglalkozni és megnéztem, a gyári beállításokat mivel azzal állítom be a PWM jelet.
A következőket bogoztam ki: (MPLAB+C18+18F4550)
  1. #define TIMER_INT_OFF  0b01111111  //Disable TIMER Interrup
  2.     #define T2_PS_1_4      0b11111101  //Timer2 Prescale 1:4
  3.     #define T2_POST_1_8    0b00111000  //Timer2 Postscaler 1:8
  4.      
  5.     OpenTimer2( TIMER_INT_OFF & T2_PS_1_4 & T2_POST_1_8 );

Ezek a gyári beállítások a PWM1-hez.
A számolásom a gyári függvényekből kiemelt elemekkel behelyettesítve, így néz ki:
titt2 = 1 / (Fosc / 4 / <T2_prescaler> / (PR2+1) / <T2_postscaler> )
T2CON = (0xfb & config) == 0xfb & (TIMER_INT_OFF & T2_PS_1_4 & T2_POST_1_8) tovább ->
T2CON = 0b00111001, hexában 0x39
Számokkal:
1 / (48000000/4/4/256/8) == 1465Hz == 1,465kHz
Tehát a gyári beállításnál maradva a PWM frekije ~1,5kHz?
Jó a számolásom?
A MosFET meghajtásnak ez a frekvencia gondolom már elegendő és jó...
Előzmények, ha valaki részleteiben akarna elmerülni: Bővebben: Link
Köszi..
(#) lastewer hozzászólása Dec 17, 2014 /
 
Helló!

Szerintetek miért nem világít a ledem a B1 es lábon?


  1. #include <htc.h>      
  2.           #define _XTAL_FREQ 4000000
  3.  
  4.           __CONFIG(UNPROTECT & UNPROTECT & LVPDIS & BORDIS & MCLRDIS & PWRTEN & WDTDIS & INTIO);
  5.    
  6.  
  7. // delay ( késleltető ) rutin ----------------------------------
  8.  
  9.                                 void delay(char szam){
  10.                                 char i;
  11.                                 for(i=0; i<szam; i++){
  12.                                 __delay_ms(255);
  13.                                 }
  14.                                 }
  15.  
  16. // Meghívás pedig :   delay(10);    
  17.  
  18. //----------------------------------------------------------------
  19.      
  20.          void main(void){
  21.              
  22.             CMCON = 0x07;
  23.             CCP1CON = 0;        // Capt/Comp/PWM kikapcsolva      
  24.             INTCON = 0;        // Összes interrupt láb kikapcsolva
  25.             TRISA = 0;        // A port lábak kimenetere állítva
  26.             TRISB = 0;        // B port lábak kimenetere állítva
  27.                
  28.                
  29.        
  30.             while(1){
  31.    
  32.             RB0 = !RB0;        // B0-ás láb invertálása (villogtatása)
  33.                 delay(1);  
  34.                         RB2 = !RB2;
  35.                        
  36.             }//while
  37.  
  38.                                 while(1) { RB1!=RB1; }
  39.             }//main
(#) Pali79 válasza don_peter hozzászólására (») Dec 17, 2014 /
 
Hát én úgy tudom, hogy motorok hajtásánál a PWM frekit 20 kHz fölé szokták állítani azért, hogy nem lehessen hallani a sípolást.
(#) lastewer válasza lastewer hozzászólására (») Dec 17, 2014 /
 
Megvan , nem while-ba kell tenni , hanem csak egy 1 -es értéket adni neki .
(#) don_peter válasza lastewer hozzászólására (») Dec 17, 2014 /
 
A második while() ciklus sosem fut le mert az első végtelen..
Illetve nem világítana, ha nem villogna mivel invertálódik minden lefutásnál.
A hozzászólás módosítva: Dec 17, 2014
(#) usane válasza lastewer hozzászólására (») Dec 17, 2014 /
 
Ha nem sürgős akkor összedobom a kapcsolást ha ráérek, de az sem mindegy mit akarsz kapcsolni a tranzisztorok végén a 12V-al.
Másik, hogy a bemenő fesznél 10V a kapcsolási limit, de milyen határok között mozog a fesz.?
Mennyi a minimum és a maximum?
(#) ktamas66 válasza don_peter hozzászólására (») Dec 17, 2014 /
 
Én ezt szoktam használni.
A FET-nek jó lenne, az a kérdés amit a FET-tel hajtasz, annak jó-e .
(#) don_peter válasza ktamas66 hozzászólására (») Dec 17, 2014 /
 
DC motor meghajtáshoz készítettem a PWM-es MosFET meghajtást, csak nem tudom, mekkora PWM freki kell neki ezért kérdezem, hogy jó e az a gyári ~1,5kHz.
(#) lastewer válasza usane hozzászólására (») Dec 17, 2014 /
 
Nem sürgős . Autóba lenne , erre kötnék rá pár fogyasztót , pl rádiót . Ez azért lenne jó , mert álló helyzetben lekapcsolná a villanyt a rádióról pl. hogy az autó indítható maradjon. A 10V csak egy példa szám volt. A fesz meg max 15 V lehet a generátor töltése miatt.

Erre azért szerettem volna pic-et használni , mert ezt a feszültség értéket amit ha elér lekapcsol , amennyire csak lehet könnyen módosíthatóvá szeretném tenni a későbbiekben és úgy gondoltam , hogy a pic programjában lenne a legegyszerűbb ezt lekezelni .
A hozzászólás módosítva: Dec 17, 2014
(#) lastewer válasza don_peter hozzászólására (») Dec 17, 2014 /
 
Köszönöm a magyarázatot , rájöttem hogy világít csak simán
(#) Qju hozzászólása Dec 17, 2014 /
 
Sziasztok! Szeretnék érdeklődni, hogy ismeri-,használja-e valaki a baji féle "PIC égető2 USB portra (felprogramozott vezérlővel)" égetőt?
(#) Hp41C válasza Qju hozzászólására (») Dec 18, 2014 /
 
A ChipCad -nál most évvégi árleszállítási akció van: Ezzel jobban járnál.
Következő: »»   606 / 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