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   535 / 1210
(#) or70eg hozzászólása Jún 8, 2014 /
 
Kedves Hp41C, nagyon szépen köszönöm, hogy szakítottál időt problémámmal kapcsolatos tájékoztatásomra!!! Nekem ez sokat jelentett! Üdvözlettel.
(#) mps hozzászólása Jún 8, 2014 /
 
Sziasztok! Némi segítségre lenne szükségem, van egy progim ami teljesen jól megy 16F886-on, de most szeretném átírni 16F1516-ra. De nem bírok egy bill. mátrixszal, ami a B portra van kötve. Gondolom a konfignál szúrok el valamit.
A kód:
  1. //Initializalasok
  2. //config
  3.  
  4. __CONFIG (FOSC_INTOSC & WDTE_OFF & PWRTE_ON & MCLRE_OFF & CP_OFF & BOREN_OFF &
  5.                 CLKOUTEN_OFF & IESO_OFF & FCMEN_OFF );
  6.  
  7. __CONFIG (BORV_19 & WRT_OFF & VCAPEN_OFF & LVP_OFF & LPBOR_OFF);               
  8.  
  9.  
  10.  
  11.  
  12. #define lcd_port_ini()  TRISA=00000000;
  13. #define lcd_port                LATA
  14.         #define lcd_e                   LATA4
  15.         #define lcd_rs                  LATA5
  16.  
  17.         #define lcd_d1                  LATA0
  18.         #define lcd_d2                  LATA1
  19.         #define lcd_d3                  LATA2
  20.         #define lcd_d4                  LATA3
  21.        
  22. #define csip    LATC4
  23. #define rell    LATC5
  24. #define keyport LATB
  25.  
  26.  
  27.  
  28. ini_main(){
  29.  
  30. //Oscillátor freki 8MHZ:
  31. SCS1=1;
  32. SCS0=0;
  33. IRCF3 =1;
  34. IRCF2 =1;
  35. IRCF1 =1;
  36. IRCF0 =0;
  37.  
  38. //portok
  39. TRISC = 0b11000011;
  40. ANSELC =0b00000000;
  41.  
  42. ANSELA =0b00000000;
  43. TRISA = 0b00000000;
  44.  
  45. ANSELB =0b00000000;
  46. TRISB = 0b00001111;
  47. WPUB  = 0b00001111;     //Felhúzás 1: tilt; 0: enged
  48.  
  49.  
  50. //Option register
  51. PSA=0;                  //1:WDT; 2:TMR0
  52. T0SE=0;                 //TMR0 él 0: emelkedő; 1:csökkenő
  53. TMR0CS=0;               //0:osc/4; 1:T0CKI=>pin6-RA4
  54. INTEDG=0;               //Megszakítás él
  55.  
  56. PS0=1;                  //előosztó
  57. PS1=0;
  58. PS2=0;
  59.  
  60. /*
  61.  w      |       timer0  |       WDT
  62. 000     |       1:2             |       1:1
  63. 001     |       1:4             |       1:2
  64. 010     |       1:8             |       1:4
  65. 011     |       1:16    |       1:8
  66. 100     |       1:32    |       1:16
  67. 101     |       1:64    |       1:32
  68. 110     |       1:128   |       1:64
  69. 111     |       1:256   |       1:128
  70. */
  71. nWPUEN=1;
  72.  
  73. //Intcon
  74.  
  75. INTF=0;         //
  76. T0IF=0;         //
  77.  
  78. INTE=0;         //kulső megszakítás
  79. T0IE=0;         //TIMER0 en
  80. PEIE=1;         //
  81. GIE=0;          //
  82. IOCIE=0;
  83.  
  84. }
  85.  
  86. void timer1_init(){
  87. TMR1ON  = 0;            //engedélyez
  88. TMR1CS1 = 1;            //belső oszci, a külső: 1
  89. TMR1CS0 = 0;            //belső oszci, a külső: 1
  90. nT1SYNC = 1;            //szinkron, most nem
  91. T1OSCEN = 1;            // lp oszci
  92. T1CKPS0 = 1;            //előosztó -
  93. T1CKPS1 = 1;            //előosztó -
  94. TMR1GE  = 0;            //kapuzás, most tiltva;
  95. //T1G_IN        = 0;            //kapuzás aktív, vagy alacsony jelre 0 az alacsony
  96. TMR1H   =0b11101111; //
  97. TMR1L   =0b11111111; //
  98.  
  99.  
  100.  
  101.  
  102. }

A kapcsolók kezelése:
  1. char key(void)
  2. {
  3. char ki_id=0;
  4. volatile char ki=20;
  5.  
  6. for (ki_id=0; ki_id<3; ki_id++)
  7. {
  8. switch (key_rows)
  9.         {
  10.                 case 1: keyport=0b00110000;
  11.                                 key_rows=2;
  12.                                 break;
  13.                 case 2: keyport=0b01010000;
  14.                                 key_rows=3;
  15.                                 break;
  16.                 case 3: keyport=0b01100000;
  17.                                 key_rows=1;
  18.                                 break;
  19.         }
  20.  
  21.  
  22. switch (PORTB)
  23.         {
  24.                 case 0b00111110:        ki=19; break;
  25.                 case 0b00111101:        ki=9; break;
  26.                 case 0b00111011:        ki=6; break;
  27.                 case 0b00110111:        ki=3; break;
  28.                
  29.                 case 0b01011110:        ki=0; break;
  30.                 case 0b01011101:        ki=8; break;
  31.                 case 0b01011011:        ki=5; break;
  32.                 case 0b01010111:        ki=2; break;
  33.                
  34.                 case 0b01101110:        ki=18; break;
  35.                 case 0b01101101:        ki=7; break;
  36.                 case 0b01101011:        ki=4; break;
  37.                 case 0b01100111:        ki=1; break;
  38.  
  39.  
  40.         }
  41.  
  42. }
  43. return ki;
  44. }//key

A main ide vonatkozó része:
  1. key_press=key();
  2.  
  3.        
  4. if (key_press!=20)
  5.         {
  6.                 if ((key_press==key_tmp)&&(key_new!=1))
  7.                 {
  8.        
  9.                         key_count++;
  10.                         if (key_count==prell)
  11.                         {
  12.                                 key_count=0;
  13.                                 key_res=key_press;
  14.                                 lefutott=1;
  15.                                 key_new=1;
  16.                                
  17.                         }
  18.                 }
  19.                         else
  20.                 {
  21.                         key_count=0;
  22.                         key_tmp=key_press;
  23.                 }      
  24.        
  25.        
  26.        
  27.         }
  28.         else
  29.         {
  30.                 key_count=0;
  31.                 key_new=0;
  32.         }

Néha egy egy gombnyomást észre vesz, de hogy melyik számot teszi hozzá az már elég véletlenszerű.
Ha beteszem a 886-ot teljesen jól működik.
Előre is köszönöm a segítséget!
(#) mps válasza mps hozzászólására (») Jún 8, 2014 /
 
Bocsi! Megoldódott, sikerült a nWPUEN értékét egyre tenni. Már vagy két órája ezzel harcolok
De aki nem vesz észre egy n betűt meg egy felső vonalat az meg is érdemli.
(#) Pali79 hozzászólása Jún 8, 2014 /
 
Szeretnék 16f877A-val sebességet és km-et mérni csak sajnos fogalmam sincs hogyan fogjak hozzá. Hall szenzorral venném a jelet a forgó tengelyről. Ahogy néztem ezt az int lábra szokás vezetni, hogy megszakítást okozzon. De nem tudom az elvet, hogy miként lesz ebből sebesség érték. Mit kell ehhez használni? Valaki lenne szíves pár mondatban leírni az elvet?
Köszönöm szépen előre is!
(#) brato válasza Pali79 hozzászólására (») Jún 8, 2014 /
 
Itt Bővebben: Link van egy kis leírás.
(#) Pali79 válasza brato hozzászólására (») Jún 8, 2014 /
 
Igen ezt láttam, de ez AVR-es. Nem tudom mennyire kompatibilis egymással a két dolog.
(#) brato válasza Pali79 hozzászólására (») Jún 8, 2014 /
 
A mérés elve nem kell, hogy változzon a feldolgozáskor vagy a kijelzésekor.
(#) Pali79 válasza brato hozzászólására (») Jún 8, 2014 /
 
Bocsi, kicsit pongyolán fogalmaztam: assembly-ben próbálom írni a kódot, ezért nem segít.
(#) brato válasza Pali79 hozzászólására (») Jún 8, 2014 /
 
Időmérésen alapul a sebességmérés. Időt a CCP bemenettel tudsz mérni.
(#) Pali79 válasza brato hozzászólására (») Jún 8, 2014 /
 
Ezen elrágódom egy kicsit. De a cikkben ezt írja:
Idézet:
„A körülfordulási idő mérése, és a sebesség számolása megszakításokkal történik.”
és a hall az INT0 lábra van vezetve, ami gondolom szintén külső megszakításra van kitalálva. Vagy nem?
(#) brato válasza Pali79 hozzászólására (») Jún 8, 2014 /
 
A CCP bemenetre érkező jel is megszakítást okoz és automatikusan tárolja az aktuális timer állást is. Az adatlapban megtalálható a leírás vagy itt magyarul is.
(#) Pali79 válasza brato hozzászólására (») Jún 8, 2014 /
 
Köszi, ezt áttanulmányozom, de egy apró bökkenőt látok benne már az elején: a PWM-et már használom belőle.
(#) brato válasza Pali79 hozzászólására (») Jún 8, 2014 /
 
2 db ilyen modul található az adott picben.
(#) Pali79 válasza brato hozzászólására (») Jún 8, 2014 /
 
Valóban! Köszönöm a segítséget egyenlőre! Belemerülök aztán meglátjuk mi lesz belőle!
(#) akos11 hozzászólása Jún 9, 2014 /
 
A topicban tilos hirdetni!!!
A hozzászólás módosítva: Jún 9, 2014
(#) t_oszi hozzászólása Jún 9, 2014 /
 
Sziasztok!
Kérdés a következő: 16F84-et programoztam fel. A szimulátoron rendesen végigfutott a program. Amikor a fizikai valóságban futtattam, az RB6 port kikapcsolásakor (PORTB.6 = 0) a program leállt, ill. kilépett. Pedig volt még utána kódrészlet, így:

.
.
PORTB.6=0
Delay_ms(4000)
PORTB.7=0
.
.
Már a Delay-t sem hajtotta végre, azonnal kikapcsolta az összes portot. A nyelv, mikrobasic.
A hozzászólás módosítva: Jún 9, 2014

F84a_spc.mbas
    
(#) Bakman válasza t_oszi hozzászólására (») Jún 9, 2014 /
 
Csak tippelek. A "Delay_ms" értéke nem 255 lehet maximum?
(#) HerrTopi hozzászólása Jún 9, 2014 /
 
Sziasztok!

Egy megszakítást szeretnék írni. Első körben nincsenek nagy igényeim: Haegy adott lábról lehúzom a tápot, akkor kapcsoljon ki egy ledet és mindezt csinálja egy megszakításon keresztül.

Írtam némi kódot is, főleg a microchip mplab fgv könyvtárára alapozva.
A kód a következő képpen néz ki:
  1. #include <portb.h>
  2. void main()
  3. {
  4.         TRISA= 0; //PORTA kimenet
  5.  
  6. OpenRB0INT( PORTB_CHANGE_INT_ON & FALLING_EDGE_INT & PORTB_PULLUPS_ON); //megszakitas konfiguralasa
  7.         PORTAbits.RA4=1; //LED be
  8.         while(1){} //vegtelen ciklus
  9. }
  10.  
  11. void interrupt (void) //a megszakitas fgv-e (próbáltam low_interrupttal is)
  12. {      
  13.                 PORTAbits.RA4=0; //LED ki      
  14. }


Ezt egyelőre sajnos csak a proteus isis tesztkörnyezetben tudtam kipróbálni, ahol nem működött. Mellékelem a kapcsolást, ahol, mivel már teljesen tanácstalan voltam minden B és C port beli lábat fel-le húzgálok, hátha valamelyik megszakít. Hát nem, nem szakítanak meg.
Tud valaki segíteni, hogy mit szúrok el?
Előre is köszönöm!
Picem: pic18f14k50

pic.png
    
(#) Pali79 válasza HerrTopi hozzászólására (») Jún 9, 2014 /
 
Miért van az a sok láb Vdd-re húzva? Bár nem sokat értek ebből a kódból, de az INT láb nem az RB0 hanem az RC0. Külső megszakítást tudtommal azon keresztül szoktak megvalósítani: Bővebben: Link
(#) vicsys válasza HerrTopi hozzászólására (») Jún 9, 2014 /
 
Előtét nélkül ne nagyon használd azt a ledet...
(#) HerrTopi válasza vicsys hozzászólására (») Jún 9, 2014 /
 
Persze, nem is használom. Ez csak a szimulátorban van így bekötve.
(#) HerrTopi válasza Pali79 hozzászólására (») Jún 9, 2014 /
 
Csak azért, mert nem tudtam, hogy most akkor melyik lábon lesz megszakítás, így kipróbáltam mindet.

Amit linkeltél (és amit olvastam korábban is) ott is RB0 van. Nos abban igazad van, hogy ezen PIC esetében úgy tűnik, hogy a megszakítás az RC0-n van, de az mplab-os fgv könyvtár szerint csak olyan fgv van, hogy: void OpenPORTB( unsigned char config); (36. oldal)
(#) Pali79 hozzászólása Jún 9, 2014 /
 
Érdekes problémám akadt: MPLAB X alatt akarok felprogramozni 16f628A-t. A kód lefordul és programozás közben az alábbi üzenetet dobja:
Idézet:
„Unexpected device ID, expected ID=0x1060, IDread=0x0, do you want to continue?”
Van Yes és No gomb, de hiába nyomok bármelyikre ugyanúgy nem tölti be a pic-be a programot. Mi lehet a hiba?
(#) nedudgi válasza Pali79 hozzászólására (») Jún 10, 2014 /
 
Tápot adtál a kontrollernek? a programozó lábak kimenetre állítása előtt tettél be késleltetést?
A hozzászólás módosítva: Jún 10, 2014
(#) Pali79 válasza nedudgi hozzászólására (») Jún 10, 2014 /
 
Nem csináltam semmi ilyesmit, ahogy eddig sem. Létrehoztam a projektet, hozzáadtam egy meglévő asm-et, rányomtam az ikonra amin egy nyíl mutat egy IC felé és kész. Eddig ez mindig működött.
(#) nedudgi válasza Pali79 hozzászólására (») Jún 10, 2014 /
 
A hibaüzenetet érted? Azt jelenti, hogy nem találja a 0x1060 azonosítójú kontrollert. Ez lehet azért, mert nem kap tápot, lehet azért, mert a táp megjelenésekor kimenetre van állítva a programozó láb, vagy valami nagyon beterheli a programozólábat. Sok más is okozhat ilyesmit, de ezek a leggyakoribbak.
(#) Pali79 válasza nedudgi hozzászólására (») Jún 10, 2014 /
 
Ezt étrem, csak az okot nem. A pic benne van egy foglalatban, 5 szál vezetékkel össze van kötve a PICKIT2-vel és ennyi. A pic-re kötve semmi sincs. 2 db 628A-val próbáltam, mindkettővel ugyanaz a helyzet.
(#) usane válasza HerrTopi hozzászólására (») Jún 10, 2014 /
 
Az RA4 láb analóg csatornával is osztozik ami magasabb rendű, bár nem néztem az adatlapot, de általában alapból be van kapcsolva ,tehát az analógot kapcsold ki, vagy
használj olyan kimenetet ami nem osztozik analóggal vagy egyéb magasabb rendű funkcióval.
A másik, hogy nincs a PIC-ed felkonfigurálva. Nem csak a portot kell beállítani. Órajel, egyebek, bár lehet, hogy a proteus nem igényli az összes beállítást, nem tudom.
Ezen kívül nem hiszem hogy mindegyik láb megszakítást tud generálni.
Ezenkívül még sok egyébre is fel lehetne hívni a figyelmet, de főleg arra, hogy először olvasd át a PIC adatlapját legalább 5x, aztán a feladatra vonatkozó részeket még külön is, és akkor kezd valami fogalmad lenni miket kell állítgani.Íme az adatlap.
A hozzászólás módosítva: Jún 10, 2014
(#) usane válasza Pali79 hozzászólására (») Jún 10, 2014 /
 
Az mplab ide alatt is próbáltad, vagy csak az x-el?
(#) Pali79 válasza usane hozzászólására (») Jún 10, 2014 /
 
Az IDE nem működik nálam valamiért, elkezdi betölteni a fordítót és meg is áll az egész. Ezért is használom az X-et, az még eddig működött.
Következő: »»   535 / 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