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   681 / 1210
(#) lastewer válasza foxi63 hozzászólására (») Jún 20, 2015 /
 
Szia , köszönöm . Ezen a vonalon indultam el , de nem jó. Igaz timer0 -val.

  1. int count = 0;
  2.  
  3. void InitTimer0(){
  4.   T0CON  = 0x84;
  5.   TMR0H  = 0x0B;
  6.   TMR0L  = 0xDC;
  7.   GIE_bit        = 1;
  8.   TMR0IE_bit     = 1;
  9. }
  10.  
  11. void Interrupt(){
  12.   if (TMR0IF_bit){
  13.     TMR0IF_bit = 0;
  14.     TMR0H        = 0x0B;
  15.     TMR0L        = 0xDC;
  16.  
  17.                while(1)
  18.                {
  19.                count++;
  20.                
  21.                 if(count == 20 )
  22.                 {    PORTB.F7 = ~PORTB.F7;           // B lábak villogtatása
  23.                 count=0;
  24.                 }
  25.                 }
  26.   }
  27. }
  28.  
  29.  
  30.  
  31.  
  32. void main() {
  33.  
  34.                 portb = 0x00;
  35.                 trisb = 0x00;
  36.  
  37.            InitTimer0();
  38.  
  39.  
  40.         while(1){
  41.         }
  42. }


Villódzik folyamatosan össze vissza.
(#) kissi válasza lastewer hozzászólására (») Jún 20, 2015 /
 
Szia!
Nem a leírtat csináltad, olvasd el mégegyszer ( a megszakításban nem legyen while!) !
(#) lastewer válasza kissi hozzászólására (») Jún 20, 2015 /
 
Igazad van , köszönöm , közben találtam egy megoldást is :
  1. unsigned int cnt;
  2.  
  3. void interrupt()
  4. {
  5.   if (TMR2IF_bit)
  6.   {
  7.     cnt++;                    // Számláló növelése 1 -el
  8.     TMR2IF_bit = 0;           // Clear TMR2IF
  9.     TMR2 = 0;
  10.     PIR1.TMR2IF = 0;          //clear
  11.   }
  12. }
  13.  
  14. void main() {
  15.   cnt = 0;                    // Számláló kezdő értéke 0
  16.  
  17.   PORTB = 0;                  // PORTB 0
  18.   TRISB =   0;                // PORTB kimenetre állítva
  19.   T2CON = 0b00000100;         // TR2 settings- postscale 1:1, TMR2 ON, prescale 1:1
  20.   TMR2  =   0;                // Initialize Timer2 register
  21.   PR2 = (200-1);              // this sets TMR2 to make interrupt every 200 ticks
  22.   TMR2IE_bit = 1;             // Enable interupt
  23.   PIE1 = 0b00000010;          //TMR2IE = ON
  24.   INTCON = 0b11000000;        //  GIE = ON, PEIE = ON
  25.  
  26.   while (1)
  27.   {
  28.     if (cnt >= 50000)
  29.       {
  30.       PORTB.F7 = ~PORTB.F7;           // B lábak villogtatása
  31.       cnt = 0;                // Számláló reset
  32.       }
  33.   }
  34. }


Köszönöm
A hozzászólás módosítva: Jún 20, 2015
(#) lastewer válasza kissi hozzászólására (») Jún 20, 2015 /
 
Viszont ez meg mintha csúszna egy picit , mitől lehet ?
(#) kissi válasza lastewer hozzászólására (») Jún 21, 2015 /
 
Nem látom, hogy csúsznia kellene a LED villogtatásnak ( ha pontos időt számoltál, úgy lehetne egy kis eltérés a számolthoz képest, de a villogásban ez nem látszik!)!
Miért törlöd kétszer is a "TMR2IF_bit"-t ?!
A hozzászólás módosítva: Jún 21, 2015
(#) Taki33 válasza lastewer hozzászólására (») Jún 21, 2015 /
 
Attól hogy nem számoltad ki a Timer2 megszakítási idejét!
  1. unsigned int cnt;
  2.  
  3. void interrupt()
  4. {
  5.   if (TMR2IF_bit)
  6.   {
  7.     cnt++;                    // Számláló növelése 1 -el
  8.     TMR2 = 0;
  9.     TMR2IF_bit = 0;           //A TMR2IF_bit és a PIR1.TMR2IF ugyan azt a bit-et jelöli
  10.   }
  11. }
  12.  
  13. void main() {
  14.   cnt = 0;                    // Számláló kezdő értéke 0
  15.   PORTB = 0;                  // PORTB 0
  16.   TRISB =   0;                // PORTB kimenetre állítva
  17.   T2CON = 0b00000100;         // TR2 postscale 1:1, TMR2 ON, prescale 1:1
  18.   TMR2  = 0;                  // Initialize Timer2 register
  19.   PR2 = 200;                          // itt miért 200-1 van? 200-1 akkor 0.0995 ms ha 200 akkor 0.1 ms a megszakítási idő
  20.   TMR2IE_bit = 1;             // Enable interupt
  21.   // PIE1 = 0b00000010;   ugyan az mint TMR2IE_bit = 1;
  22.   INTCON = 0b11000000;        // GIE = ON, PEIE = ON
  23.  
  24.   while (1)
  25.   {
  26.       if (cnt >= 10000)           // 10000 * 0.1 ms = 1 mp
  27.       {
  28.                 PORTB.F7 = ~PORTB.F7;   // B lábak villogtatása
  29.                 cnt = 0;                // Számláló reset
  30.       }
  31.   }
  32. }
(#) Hp41C válasza Taki33 hozzászólására (») Jún 21, 2015 /
 
A TMR2 -t egyáltalán nem szabad törölni a programból. azt maga a timer elintézi.
(#) lastewer válasza Taki33 hozzászólására (») Jún 21, 2015 /
 
Szia!

Szerintem ebben is benne van az a kis csúszás , de nem kell olyan pontosság szóval oké lesz , köszönöm
A hozzászólás módosítva: Jún 21, 2015
(#) don_peter válasza lastewer hozzászólására (») Jún 21, 2015 /
 
Nem értelek, nem kell késleltetés.
Készítesz egy 1mp-es megszakítást.
Aztán a megszakításon belül használsz egy mondjuk mpszamol globális változót.
Minden megszakítás végén növeled egyel: mpszamol++;
Készítesz egy másiv változót amiben megadod, hogy hány másodpercenként akarod a kíván rutint (led, rele...stb kapcsolgatását) mondjuk legyen ez bealitottmp.
A megszakítás mindig egy feltéttel indítód.
  1. if(bealitottmp==mpszamol){
  2.         // Itt végzi a kíván műveleteket
  3.         mpszamol=0;    //nullázzuk mpszamol értékét
  4. }
  5. // minden más esetben pedig emeli mpszamol értékét egyel

Az 1mp-es megszakítást pedig az adatlapból kell kilesni, és ki kell számolnod és aszerint beállítani a timert.
Ha nem lehet pontos 1mp-et beállítani, akkor más időkkel is meg lehet oldani a fenti elveket követve...

Szerk: hupsz, közben látom, hogy volt következő oldal és kaptál segítséget
A hozzászólás módosítva: Jún 21, 2015
(#) lastewer hozzászólása Jún 21, 2015 /
 
Igen , de azért köszönöm neked is
(#) lastewer hozzászólása Jún 21, 2015 /
 
Sziasztok!

Megépítettem Ezt a tápegységet .

A gondom az , hogy kellene még egy 3.3 V kimeneti feszültség , amit Ezen a módon valósítottam meg . Csak hogy amint teszek rá fogyasztót leesik a 3.3V feszkója és nem hajtja meg a fogyasztómat.

Miképp lehetne ezt megvalósítani ? Előre is köszi.
(#) nedudgi válasza lastewer hozzászólására (») Jún 21, 2015 /
 
Mielőtt válaszolnánk, áruld el, mi az a fogyasztó?
Nagyobb teljesítmény esetén ilyesmit válassz.
A hozzászólás módosítva: Jún 21, 2015
(#) Marko Ramiusz hozzászólása Jún 21, 2015 /
 
Sziasztok! Következőben kérnék segítséget. MikroC-ben programozva egy MikroElektronika Easy6-osom van, de ez talán lényegtelen. Megírtam a rém egyszerű programot a D portra, ami normálisan működik is. De az a, B, C portokon rendezetlenül aktív néhány LED. Gondolom, hogy ezt a 3 portot előzőleg törölnöm kellene. Kérdésem az ,hogy a programban mit és hová kellene beírnom, hogy az a,b, c portok előzetesen törölve legyenek. Egy Print screen-t küldök a mellékletben. Köszönöm a segítséget. Üdv.: Meszes József

MikroC.JPG
    
(#) lastewer válasza nedudgi hozzászólására (») Jún 21, 2015 /
 
Egy enc28j60 + pic mikrovezérlő , ledek , relék.
(#) nedudgi válasza lastewer hozzászólására (») Jún 21, 2015 /
 
Az ellenállásosztó állandó fogyasztás, vagy az osztó áramához képest elhagyható áramfelvétel esetén használható. Minden más esetben szabályzott, félvezetős kapcsolás kell.
(#) zenetom válasza Marko Ramiusz hozzászólására (») Jún 21, 2015 /
 
Szia!
Egyszerűen, ahogyan a főciklusban is, de még előtte. Tehát a trise = 0x00; rész utáni sorba.
  1. porta = 0x00;
  2. portb = 0x00;
  3. portc = 0x00;


És bár nem tudom milyen PIC, de ha 18F, akkor érdemes a kimenetnél a "PORTx" regiszter helyett a "LATx" regisztert használni. Ahol az "x" a portot (a,b,c.. stb.) jelöli.
Tehát a porta = 0 helyett lata = 0.
(Bár lehet ezt megcsinálja a fordító, ha elég "okos").
(#) lastewer válasza nedudgi hozzászólására (») Jún 21, 2015 /
 
Értem , tehát akkor egy másik fesz szabályzó IC -vel gondolod nem lenne gondom ?
(#) zenetom válasza lastewer hozzászólására (») Jún 21, 2015 /
 
Ha mindent jól csinálsz (amit nem nehéz ), akkor jó lesz.
(#) lastewer válasza zenetom hozzászólására (») Jún 21, 2015 /
 
Köszönöm szépen
(#) Marko Ramiusz válasza zenetom hozzászólására (») Jún 21, 2015 /
 
A PIC tipusa egy 16F887-es.
(#) Marko Ramiusz válasza zenetom hozzászólására (») Jún 21, 2015 /
 
Húúúú, van sikerélményem, mivel működik. Köszönöm a segítséget.
A hozzászólás módosítva: Jún 21, 2015
(#) Pali79 hozzászólása Jún 21, 2015 /
 
Meg tudná valaki mondani, hogy mit jelent az alábbi hibaüzenet?
  1. PK2Error0027:  Failed verify (Address = 0x300008 - Expected Value 0xFF - Value Read 0xF)

Egy 18F6622-vel játszom éppen.
(#) morzsa15 hozzászólása Jún 21, 2015 /
 
Sziasztok!

Szeretnék építeni egy pic-es vakond riasztót. Ami változtatja a frekvenciáját 100-700hz-ig ezt valahogyan meg lehet valósítani?

Válaszotokat előre is köszönöm!
(#) kameleon2 válasza morzsa15 hozzászólására (») Jún 21, 2015 /
 
Ez engem is érdekelne, mert lassan úgy járok a kertben, mint a tengerész...
(#) pjg válasza kameleon2 hozzászólására (») Jún 21, 2015 /
 
Olvastam valahol. Egy olyan vastag műanyagcső amibe belefér egy konzervdoboz. Kb. 40cm hosszú. A cső ellentétes végén a palástba körbe 10-es furatok. A konzervdobozba egy mobiltelefonból kitermelt vibrátor motor. A PIC az időzítést vezérli. Mennyi időnkén mennyi időre kapcsoljon be. Nem azonos ismétlődéssel. A motor által keltett zaj iritálja az állatot. Ja! A cső végét a vakondtúrás nyílásába kell beállítani.
(#) zenetom válasza Pali79 hozzászólására (») Jún 21, 2015 /
 
Elvileg azt, hogy a PICkit2 programozás után, ellenőrzéskor rossz értéket olvasott ki. Mégpedig a 0x300008 címről. 0xFF helyett 0xF-t olvasott ki. De nekem gyanús az a cím.. Egy picit mint ha nagy lenne. Erre kíváncsi vagyok, miért ír ilyet nagyot.
Szerk.: valószínűleg van rá valami magyarázat, és csak most tűnt föl ez nekem...
A hozzászólás módosítva: Jún 21, 2015
(#) Pali79 válasza zenetom hozzászólására (») Jún 21, 2015 /
 
Akkor már csak az a kérdés, hogy mitől van ez. Zsír új a pic, én vettem ki a szalag csomagolásból.
(#) zenetom válasza Pali79 hozzászólására (») Jún 21, 2015 /
 
Minden írásnál ezt írja ki?
Szerk.: Blank check-re mit csinál?
A hozzászólás módosítva: Jún 21, 2015
(#) Pali79 válasza zenetom hozzászólására (») Jún 21, 2015 /
 
Igen minden írásnál ezt csinálja.
Blank check:
  1. PK2Error0027:  Failed verify (Address = 0x0 - Expected Value 0xFFFF - Value Read 0xEF02)

Szerk: most nem üres a pic. az számít?
A hozzászólás módosítva: Jún 21, 2015
(#) Buvarruha válasza Pali79 hozzászólására (») Jún 21, 2015 /
 
Olykor megesik, hogy egy új alkatrész nem jó, manapság egyre gyakrabban.. A PIC MCLR lába fel van húzva 10K-val ahogy kell, illetve biztos, hogy jól van bekötve a programozó?
Következő: »»   681 / 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