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   710 / 1210
(#) ktamas66 válasza Pali79 hozzászólására (») Okt 14, 2015 /
 
Tegnap kerestem egy floppy vagy CD fejmozgató motort. Ez már kis feszültséggel is működik, szerintem a 20mA talán elég is lenne, hiszen csak mutatót mozgat, így talán a pic kimenete is el tudná vezérelni, viszont úgy láttam csak 20 lépés/fordulatot tud, így ha pwm-es mikrolépést is kellene programozni, valami egyszerű tranzisztoros H-hidat kell neki csinálni. A végállás érzékelést is meg kellene oldani, esetleg áramfigyeléssel a pic komparátorával.
(#) Pali79 válasza ktamas66 hozzászólására (») Okt 14, 2015 /
 
Én is ezen gondolkodtam, ezért volna talán jobb a microservo. Lehet kipróbálom mindkettőt, annyira nem drága. Léptetőben is lehet kapni áttételest, annak elég jó a felbontása. Viszont az jutott eszembe, hogy a kettő kombinációja lenne a megfelelő talán. A léptetőmotor mellé kellene applikálni egy potit aminek az állását ADC-vel figyelném, így pontosan tudnám, hogy hol áll.
(#) sonajkniz válasza Pali79 hozzászólására (») Okt 14, 2015 /
 
Szia!
Mennyire érdekes számodra, egy mutatós fordulatszám esetén a felbontás?
Mert a microszervó jó esetben 2-3 fokot tud. A mechanikája ennél többet nem tesz lehetővé.
A CD-k ben található léptetőmotorok szintén elég kis felbontásúak, mert csak a lemez forgatására használják. A fej mozgatása áttételes, kefés motorokkal van megoldva. Kivéve az LG és a SONY. Ezekben léptetőmotor van, menetorsóval. Nem mértem még ki, de gyanítom, hogy rosszabb a felbontásuk a szervóénál. A normál léptetőmotorok viszont méretileg elég nagyok és drágák.
(#) Pali79 válasza sonajkniz hozzászólására (») Okt 14, 2015 /
 
Szia!
A mellékelt képen láthatóra gondoltam, szerintem nem olyan nagy és az áttételnek köszönhetően 0,7°-ot fordul egy lépésre.
(#) sonajkniz válasza Pali79 hozzászólására (») Okt 14, 2015 /
 
Szia!
Ezt hol találtad?
Mert ilyet CD-ben még nem láttam.
A potit hogy akarod hozzákapcsolni?
Egyébbként léptetőmotorral mutatós műszert készíteni vezérlésileg nem egyszerű feladat.
A léptetőmotoroknak nem véletlenül van külön elektronikája, aminek csak az irányt adod meg és a lépésszámot.
(#) Lamprologus válasza ktamas66 hozzászólására (») Okt 14, 2015 /
 
Köszönöm a válaszokat!
( A napokban 450Ft körül rendeltem 16F887-et ... szóval lehet még olcsóbb is két (vagy több) PIC-et dolgoztatni, mint bővítőt használni... a bővítők 1Euro környékén lennének... )
Csupa jó ötlet! most van házifeladatom bőven!
Utána nézni, hogyan tudnék deforrasztani "egy soklábú" PIC-et egy adapterba ...
A "két PIC-et összekötök" a gyakorlatba arról szól, hogy I2C (vagy ISP) porton küldözgetem a váltózókat egyikből a másikba? ... Akkor tanulhatom a soros kommunikációt is! (bár az már a protbővítőhöz is kell! )
(#) Pali79 válasza sonajkniz hozzászólására (») Okt 14, 2015 /
 
Beütöd a gugli, hogy léptetőmotor és teli van vele. Maga a vezérlés szerintem annyira nem bonyolult, mert amelyik tekercsre adod a delejt oda fog a forgórész lépni. Persze nem ennyire egyszerű, de mások is csináltak PIC-es léptetőmotor vezérlést.
A potit, hogyan fogom ráapplikálni még nem tudom, nemrég jutott csak eszembe.
(#) sonajkniz válasza Pali79 hozzászólására (») Okt 14, 2015 /
 
Idézet:
„Maga a vezérlés szerintem annyira nem bonyolult, mert amelyik tekercsre adod a delejt oda fog a forgórész lépni.”


Azért ezt nem árt áttanulmányozni hozzá:
Léptetőmotorok működési elve
(#) Pali79 válasza sonajkniz hozzászólására (») Okt 14, 2015 /
 
Ezt már olvastam korábban. Pont azt mutatja az ábrán is amit én írtam. Persze én csak egyész lépésben gondolkodom, az 512 lépés így is több mint elég. Viszont azon agyaltam, hogy a szervó 270°-os poti fordulását ha 100 részre fel tudom bontani az már jó.
(#) sonajkniz válasza Pali79 hozzászólására (») Okt 14, 2015 /
 
Épp a felbontás finomításán dolgozok.
Ha sikerül, feltöltöm.
(#) Pali79 válasza sonajkniz hozzászólására (») Okt 14, 2015 /
 
Okay. Felhajtok valahonnan egy szervót meg egy léptetőt is aztán a hosszú téli estéken majd játszok vele.
(#) Pali79 válasza sonajkniz hozzászólására (») Okt 14, 2015 /
 
Nem jó a link.
(#) sonajkniz válasza Pali79 hozzászólására (») Okt 14, 2015 /
 
Remélem most jó lessz.
Bővebben: Link
Bár én inkább a TOWER PRO szervót ajánlanám.
A hozzászólás módosítva: Okt 14, 2015
(#) Pali79 válasza sonajkniz hozzászólására (») Okt 14, 2015 /
 
Én tudok TowerPro SG90-t 750.-/db áron. Az jó nekem?
(#) sonajkniz válasza Pali79 hozzászólására (») Okt 14, 2015 /
 
A próbákhoz mindenképp.
Később azért egy nagyobb szervót válassz a 9 grammosnál, mert könnyebb szerelni.
(#) icserny válasza don_peter hozzászólására (») Okt 14, 2015 /
 
"LCD-nél 4bit-es üzemmódban nem lehet olvasni igaz?"
Foglaltság ellenőrzése lehetséges. Adat visszaolvasással (CGRAM) nem próbálkoztam.
(#) Droot hozzászólása Okt 14, 2015 /
 
Sziasztok!

Frissen vásárolt PICkit3-mammal szeretnék egy 12F508-at felprogramozni úgy, hogy egy LED-et villogtasson C-ben.
Programozáskor az alábbi hibát kapom:
Target has invalid calibration data (0x00).

A kód:
  1. /*
  2.  * File:   main.c
  3.  * Author: Szabolcs
  4.  *
  5.  * Created on 2015. október 14., 12:29
  6.  */
  7.  
  8. #include <stdio.h>
  9. #include <stdlib.h>
  10. #include <xc.h>
  11. #pragma config OSC = IntRC // Oscillator Selection bits (internal RC oscillator)
  12. #pragma config WDT = OFF // Watchdog Timer Enable bit (WDT disabled)
  13. #pragma config CP = OFF // Code Protection bit (Code protection off)
  14. #pragma config MCLRE = OFF
  15. /*
  16.  *
  17.  */
  18. //__CONFIG(MCLRE_OFF & CP_OFF & WDTE_OFF & OSC_IntRC); 
  19. //Master clear off, code protection off, watch dog timer off
  20. #define _XTAL_FREQ 4000000      // 4 Mhz       
  21. //To reference speed with __delay_ms() or __delay_us()
  22.  
  23. void main(){
  24. // you have to specify which port to be out put eg: port A: TRISA = 0b11110111;
  25. TRIS = 0b11110111;      //set GP1 as an OUTPUT
  26.  
  27. for(;;){        //loop forever
  28. // and here PORTA = 0b00001000; and 0b00001000 is for 8 bit processors
  29. GPIO = 0b000010;        // GP1 HIGH
  30. __delay_ms(500);        // 1/2 s delay
  31. GPIO = 0b000000;        // GP1 LOW
  32. __delay_ms(500);        // 1/2 s delay
  33. }
  34. }


A legújabb mplab-banés xc8-alprogramozok.
Mi a gond?
A hozzászólás módosítva: Okt 14, 2015
(#) nedudgi válasza Droot hozzászólására (») Okt 14, 2015 /
 
A memória legutolsó címén egy "retlw xx" utasításnak kellene lenni. Ez tartalmazza a kalibráló adatot, amivel pontosan beállítják a gyárban az kontroller órajelét, talán 4MHz-ra. Ha az órajel pontossága nem szempont, akkor beírhatsz egy retlw 00h utasítást, és a hiba eltűnik. A PICkit2 el tudja végezni ezt a kalibrációt, talán a PICkit3 is, de ebben nem vagyok biztos.
A hozzászólás módosítva: Okt 14, 2015
(#) Droot válasza nedudgi hozzászólására (») Okt 14, 2015 /
 
Tehát ettől még elvileg ugyanúgy elindul a processzor ha nem kalibrálom?

A fenti kódot valaki ki tudná javítani, hogy működjön?
Abból meg tudnám érteni, AVR-eket 6 éve programozok, de a PIC-et most kezdem.
(#) cross51 válasza don_peter hozzászólására (») Okt 14, 2015 /
 
Az olvasásra vonatkozó szekcióban én azt láttam, hogy az első olvasás egy nem valós értékkel tér vissza 4 és 8 biten is és a második olvasás adja vissza a RAM értékét, ha jól értelmeztem.
4 biten az első valótlan érték felső és alsó részét is vissza kell olvasni aztán a RAM érték felső és alsó részét is olvasni és ennek így elviekben működnie kell.
(#) Droot hozzászólása Okt 14, 2015 /
 
Sziasztok!

dsPIC33EP512GP502-n gyakorlok. Az oszcillátort beállítottam külsőre, PLL-el, 25MHz-es kvarc, 2db 22pF-os kondival. Egy LED-et villogtatok. PLL nélkül szépen, egyenletesen villog a LED, viszont amint a PLL-t is engedélyeztema Configuration bits-ben, a videón látható módon villog (tehát nem szabályosan, mintha néha 1-2 órajelciklust nem venne figyelembe).

A forráskód az alábbi:
  1. #pragma config FWDTEN = OFF // Watchdog Timer Enable bit (Watchdog timer enabled/disabled by user software)
  2.  
  3. // FOSCSEL
  4. //#pragma config FNOSC = FRCPLL           // Oscillator Source Selection (Fast RC Oscillator with divide-by-N with PLL module (FRCPLL))
  5. #pragma config FNOSC = PRIPLL           // Oscillator Source Selection (Primary Oscillator with PLL module (XT + PLL, HS + PLL, EC + PLL))
  6. #pragma config IESO = ON                // Two-speed Oscillator Start-up Enable bit (Start up device with FRC, then switch to user-selected oscillator source)
  7. #pragma config POSCMD = XT
  8. #pragma config OSCIOFNC = ON            // OSC2 Pin Function bit (OSC2 is general purpose digital I/O pin)
  9.  
  10. #include <stdio.h>
  11. #include <stdlib.h>
  12. #include <xc.h>
  13. #include<p33ep512gp502.h>
  14. #include<libpic30.h>
  15.  
  16. int main() {
  17.    
  18.     CLKDIVbits.DOZE = 0;
  19.     CLKDIVbits.PLLPOST0 = 0;
  20.     CLKDIVbits.PLLPOST1 = 0;
  21.    
  22.     TRISBbits.TRISB5 = 0; //RB5 kimenet
  23.     TRISBbits.TRISB6 = 1; //RB6 bemenet
  24.     CNPUBbits.CNPUB6 = 1; //RB6 felhúzó ellenállás
  25.  
  26.     while(1)
  27.     {
  28.        /* if(PORTBbits.RB6 == 0)
  29.         {*/
  30.             __delay32(1500000);
  31.             LATBbits.LATB5 = 1;
  32.             __delay32(1500000);
  33.             LATBbits.LATB5 = 0;
  34.         //}
  35.     }
  36.     return (EXIT_SUCCESS);
  37. }

IMG_0246.MOV
    
(#) KaiserA hozzászólása Okt 15, 2015 /
 
Sziasztok!

main.c: In function 'main':
main.c:107:7: warning: passing argument 1 of 'putsLCD' makes pointer from integer without a cast
lcd2.h:29:6: note: expected 'char *' but argument is of type 'unsigned char'

Azt szeretném megkérdezni, hogy az LCD konfigurálásánál mit álitsak, át hogy ne jöjjön ki ez a hibakód!
változo kiiratása, sprintf-el nem mükődik, lefut a program , csak a kijelzp hülyeséget ír ki, viszont ha azt irom be hogy PutsLCD ( " kutya " ) pl akkor kiirja helyesen hogy kutya, csak mikor sprintf-et használom, értelmetlent mutat a kiejelző ,leginkább villog a kurzór.
Köszönöm
(#) Zsolt2 válasza Droot hozzászólására (») Okt 15, 2015 /
 
Szia!
A 8. sorban az OSCIOFNC konfiguraciot OFF-ra kell allitani. Ha jol emlekszem eloszor el kell inditani PLL nelkul a processzort, majd utana atvaltani PLL-re. Nincs beallitva a PLLFBD regiszter.
  1. #pragma config PLLKEN = ON
  2. #pragma config OSCIOFNC = OFF
  3. #pragma config POSCMD = XT
  4. #pragma config FCKSM = CSECMD
  5. #pragma config FNOSC = PRI
  6. #pragma config IESO = ON
  7. main()
  8. {
  9. ....
  10. PLLFBD = 38;
  11.     CLKDIVbits.PLLPRE = 0;
  12.     CLKDIVbits.PLLPOST = 0;
  13. __builtin_write_OSCCONH( 0x03 );
  14. __builtin_write_OSCCONL( OSCCON || 0x01 );
  15. while( OSCCONbits.COSC != 0b011 );
  16. while (1)
  17. ...
(#) Droot válasza Zsolt2 hozzászólására (») Okt 15, 2015 /
 
Köszönöm, sikerült!
(#) Pali79 válasza sonajkniz hozzászólására (») Okt 15, 2015 /
 
Megjöttek a szervók, indulhat a játék.
(#) sonajkniz válasza Pali79 hozzászólására (») Okt 15, 2015 /
 
Mennyi szervót akarsz egyidejűleg használni?
(#) Pali79 válasza sonajkniz hozzászólására (») Okt 15, 2015 /
 
Egyet.
(#) Droot válasza Zsolt2 hozzászólására (») Okt 15, 2015 /
 
Így sikerült feléleszteni:
  1. #pragma config FWDTEN = OFF // Watchdog Timer Enable bit (Watchdog timer enabled/disabled by user software)
  2. #pragma config FNOSC = PRIPLL           // Oscillator Source Selection (Primary Oscillator with PLL module (XT + PLL, HS + PLL, EC + PLL))
  3. #pragma config IESO = ON                // Two-speed Oscillator Start-up Enable bit (Start up device with FRC, then switch to user-selected oscillator source)
  4. #pragma config POSCMD = HS
  5. #pragma config OSCIOFNC = OFF            // OSC2 Pin Function bit (OSC2 is general purpose digital I/O pin)
  6. #pragma config PLLKEN = ON
  7. #pragma config FCKSM = CSECMD
  8.  
  9. #include <stdio.h>
  10. #include <stdlib.h>
  11. #include <xc.h>
  12. #include <p33ep512gp502.h>
  13. #include <libpic30.h>
  14.  
  15. void __attribute__((interrupt, auto_psv)) _T1Interrupt( void )
  16. {
  17.    
  18.         if(PORTBbits.RB5 == 0)
  19.         {
  20.             LATBbits.LATB5 = 1;
  21.         }else
  22.         {
  23.             LATBbits.LATB5 = 0;
  24.         }
  25.        
  26.   IFS0bits.T1IF = 0;  // reset timer interrupt flag
  27. }
  28.  
  29.  
  30. int main() {
  31.    
  32.     CLKDIVbits.DOZE = 0;
  33.     CLKDIVbits.PLLPOST = 1;
  34.     CLKDIVbits.PLLPRE = 2;
  35.     PLLFBDbits.PLLDIV = 52;
  36.     /*FIN       25
  37.       M     52
  38.       N1        4
  39.       N2        4
  40.       FPLLI     6,25
  41.       FVCO      325
  42.       FPLLO     81,25MHz
  43.     */
  44.     __builtin_write_OSCCONH( 0x03 );
  45.     __builtin_write_OSCCONL( OSCCON || 0x01 );
  46.     while( OSCCONbits.COSC != 0b011 );
  47.    
  48.     T1CON = 0;
  49.     T1CONbits.TCS = 0;      
  50.     T1CONbits.TCKPS0 = 1;                          
  51.     T1CONbits.TCKPS1 = 1;                          
  52.     T1CONbits.TGATE = 0;                          
  53.     IFS0bits.T1IF = 0;  
  54.     IPC0bits.T1IP = 6;
  55.     IEC0bits.T1IE = 1;  
  56.     PR1 = 39672;    
  57.     T1CONbits.TON = 1;
  58.    
  59.     TRISBbits.TRISB5 = 0; //RB5 kimenet
  60.     TRISBbits.TRISB6 = 1; //RB6 bemenet
  61.     CNPUBbits.CNPUB6 = 1; //RB6 felhúzó ellenállás
  62.    
  63.     while(1)
  64.     {
  65.        ;
  66.     }
  67.     return (EXIT_SUCCESS);
  68. }


Azt számoltam, hogy ezzel a beállítással 81,25MHz az Fpllo és egyben a processzor órajele is. Jól számolom?

Megy a Timer 1, 256-os előosztóval és PR1 = 39672. Tehát Ftimer1=81250000/256/39672=~8Hz. Viszont a LED 1 másodperc alatt így kb. 1-et villan (amiből félmásodpercig be van kapcsolva, fél másodpercig ki), tehát ~2Hz. Mi miatt osztódik el néggyel a kiszámolt érték?
(#) Zsolt2 válasza Droot hozzászólására (») Okt 15, 2015 /
 
Rosszul szamoltad az orajelet, a processzor orajele 84.375. A PLLDIV ertekehez meg hozza kell adni kettot (equation 9-2, adatlap 154. oldal). A timer a periferias orajelrol mukodik (Fp), aminek erteke Fosc/2, vagyis hozzavetoleg 42.19Mhz.
A timer megszakitas Ftimer1=42187500/256/39672=4.14Hz kell legyen. Arra viszont nincs otleltem, hogy miert villog 2Hz-el a LED.
A hozzászólás módosítva: Okt 15, 2015
(#) Droot válasza Zsolt2 hozzászólására (») Okt 15, 2015 /
 
ÁHÁ! Így már világos, köszönöm!
Mekkora magimális órajelig lehet felmenni?

Az Fosc a processzor órajele, az Fp-ről mennek a Timer-ek és gondolom a PWM órajelforrása is, az Fcy-ről mi megy?
Következő: »»   710 / 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