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   515 / 1216
(#) Hp41C válasza don_peter hozzászólására (») Ápr 15, 2014 /
 
25LC640 - 8k*8
25LC512 - 64k*8
(#) icserny válasza don_peter hozzászólására (») Ápr 15, 2014 /
 
Idézet:
„eszembe jutott(ak) a bovites lehetseges modjai.”
Én mondtam, hogy az elérhető legnagyobbat vedd meg!
(#) don_peter válasza icserny hozzászólására (») Ápr 15, 2014 /
 
280Ft/db szoval nem gaz. Csak az elmelet volt erdekes es kerdeses szamomra. Nincs szuksegem most nagyobbra.
(#) don_peter válasza (Felhasználó 15355) hozzászólására (») Ápr 16, 2014 /
 
Köszi a kiigazítást. Még szoknom kell ezeket a rövidítéseket. Itt látszik mennyire kezdő vagyok.
(#) Pet91 hozzászólása Ápr 16, 2014 /
 
segít nekem valaki értelmezni a következő kódot? i miért nem 1000-től indul, miért 35-től?

  1. void DelayMs(uint ms)
  2. {
  3. uchar i;
  4. while(ms--)
  5. {
  6. i=35;
  7. while(i--)
  8. {
  9. DelayUs(1);
  10. }
  11. }
  12. }


mellékelem a delayUS-t is:

  1. void DelayUs( uint us )
  2. {
  3. uint i;
  4. while( us-- )
  5. {
  6. i=2;
  7. while( i-- )
  8. {
  9. NOP();
  10. }
  11. }
  12. }


itt ha jól értem akkor a NOP egy utasítási ciklusban telik le, így ha 8MHz-en megy a pic, akkor ez pont eleget vár. viszont a ciklusban a számolgatás (--) nem rontja ezt el?
A hozzászólás módosítva: Ápr 16, 2014
(#) icserny válasza Pet91 hozzászólására (») Ápr 16, 2014 /
 
Idézet:
„miért nem 1000-től indul, miért 35-től?”
Nyilván azért, mert az 1000 ciklus túl sokáig tartana.

Idézet:
„ha 8MHz-en megy a pic, akkor ez pont eleget vár”
Szerintem meg túl sokat vár. A ciklusszervezés idejét, meg a léptetést is bele kell számítani.
(#) don_peter válasza Pet91 hozzászólására (») Ápr 16, 2014 /
 
Szerintem ezt a kódot valaki magának állította be így, nincs jelentősége.
Annyira állítod a 35-ős ciklust amennyi idő neked kell a késeltetés miatt.
De ez csak az én gondolat menetem...
(#) Pet91 válasza icserny hozzászólására (») Ápr 16, 2014 /
 
ezt kérdeztem magam is hogy a ciklusozgatás nem teszi-e tönkre...
de jómagam ezt egy dokumentációban láttam (37. oldal) és próbálom értelmezni a mintakódot, de ilyesmi nehézségekbe ütközök...

a legnagyobb vicc, hogy a vevőben a delayus 1000 db NOP()-ot csinál... (42.oldal legalja)
most tényleg nem érthetek valamit...

(mondjuk az ottani kristály 10MHz-es, de miért hívna valaki DelayMS-nem egy fv-t ami nem ms-ot késleltet? )
A hozzászólás módosítva: Ápr 16, 2014
(#) Hertz hozzászólása Ápr 16, 2014 /
 
Sziasztok!
12F683-at használok és abba a problémába ütköztem, hogy a GP4 lábat nem tudom digitális bemenetként használni. A GP3, vagy a GP5-öt próbálva gond nélkül sikerül, de a GP4 valamiért nem megy.
Mit kell tenni, ahhoz, hogy ezt a lábat is használhassam bemenetként? Miben különbözik ez a többi lábtól? Ha semmiben, akkor nyilván én bénázok el valamit.

Köszi előre is, ha valaki segít!

Ide teszek egy részletet, itt a GP5 bemenet, a többi mind kimenet. Ez jelenleg működik:
  1. #include <p12F683.inc>
  2.      __config (_INTRC_OSC_NOCLKOUT & _WDT_OFF & _PWRTE_OFF & _MCLRE_OFF & _CP_OFF & _IESO_OFF & _FCMEN_OFF)
  3.  
  4.    org 0                
  5. Start:
  6.      bsf    STATUS,RP0    ; Select Register PAGE 1
  7.      movlw  d'01110000'
  8.      movwf  OSCCON        ; Belső oszcillátor 8Mhz-re állítva
  9.  
  10.         BANKSEL GPIO
  11.         CLRF    GPIO
  12.         MOVLW   B'11111111'             ;AZ ÖSSZES LÁB DIGITÁLIS KI/BEMENET
  13.         MOVWF   CMCON0
  14.         BANKSEL ANSEL
  15.         MOVLW   B'00100000'             ;GP5 BEMENET, A TÖBBI KIMENET
  16.         MOVWF   TRISIO
  17.     BCF         STATUS,RP0    ; Back to Registers at Bank 0
  18.  
  19. GOMBFIGYELÉS
  20.         BTFSC   GPIO,5
  21.         GOTO    $-1
(#) eSDi válasza Hertz hozzászólására (») Ápr 16, 2014 /
 
Üdv!

A "BANKSEL ANSEL" után az adatlap szerint még kell egy "CLRF ANSEL" is.
A hozzászólás módosítva: Ápr 16, 2014
(#) Kapagerenda hozzászólása Ápr 16, 2014 /
 
Hello

Egy 16F887 chippel csináltam egy időzítő áramkört. Az A0 analóg bemenetre kapott megfelelő érték esetén a D7 es kimenet vezérlés alá kerül és egy tranzisztoron keresztül meghúz a relé. 1 perces időzítést programoztam a csipbe, szóval 1 perc után a relének elkéne engednie mivel a D7 kimeneten megszűnik a kimeneti jel. Az a problémám, hogy a D7 es kimenet nullába válltása után is tartja a relé az állapotát. Lemértem és a relén marad nagyábol 4- 5 V feszültség ami miatt gondolom nem ugrik vissza.
Tömören a probléma, hogy a relé behúz, de vissza már nem enged. A megszokott kapcsolást használtam amit michrochipp és reléknél szokás hasnálni. Talán a tranzisztor miatt lehetséges a hiba???
(#) nedudgi válasza Kapagerenda hozzászólására (») Ápr 16, 2014 / 1
 
Egy kép többet mond száz szónál. Kapcsolási rajzot mutass.
(#) Hertz válasza eSDi hozzászólására (») Ápr 16, 2014 /
 
Ó, tényleg! Mit össze szöszöltem, hogy hol a hiba, de nem találtam pedig az adatlap alapján csináltam, csak hát az a sor kimaradt, aztán már nem tűnt fel...

Nagyon köszönöm, most már működik úgy, ahogy szeretném!
(#) Hp41C válasza Kapagerenda hozzászólására (») Ápr 16, 2014 /
 
Watchdog miatt újraindul, a bemenet megfelelő értékű, a relé bekapcsol...
(#) don_peter hozzászólása Ápr 18, 2014 /
 
Uraim, segítséget szeretnék kérni alfanumerikus 4x4-es keypad programjának megírásához c18, c nyelven.
Angol ABC és 0-9-ig számok lennének kb mint a telefonnál vagy hasonlóan gondoltam kivitelezni.
Tudtok segíteni elméletben vagy akár gyakorlatban?
Hogyan lehet ezt legegyszerűbben megírni?
P18F4550-es PIC-em van.
Minden ötletet szívesen fogadok.
Köszi...

keypad2.jpg
    
(#) don_peter válasza don_peter hozzászólására (») Ápr 18, 2014 /
 
A sima 16gomb kezelésére írtam ezt a programot, talán ebből tovább lehetne gondolni csak nem tudom, hogy miként kellene tovább írnom..
Gondolom itt már kellene timer-eket vagy interrupt-ot beleírnom.
Ötletek?
  1. #include <delays.h>
  2.  
  3. #define SOROK LATD     //Sorok
  4. #define oszlop1 PORT_B4  //Oszlopok bemenet
  5. #define oszlop2 PORT_B5
  6. #define oszlop3 PORT_B6
  7. #define oszlop4 PORT_B7
  8. #define MAGAS       1
  9. #define ALACSONY    0
  10.  
  11. /*----- Prototípus --------*/
  12. unsigned char get_key();
  13.  
  14. unsigned int bill_ertek;   //Globális változó
  15.  
  16. void main(void){
  17.  
  18.     unsigned int i,k=0;
  19.  
  20.     ADCON1 = 7;     //Analóg portok digitálisra állítva
  21.     TRISB = 0xf0;   //B port felső 4 bit (nagyobb helyi értéken 7:4) bemenet
  22.                     //alsó 4 bit (kisebb helyi értéken 3:0) kimenet
  23.                     //0b11110000
  24.  
  25.     while(1){
  26.  
  27.         bill_ertek = get_key();
  28.  
  29.         Delay10TCYx(10);
  30.     }//while()
  31. }//main()
  32.  
  33. //Függvények
  34. unsigned char get_key(){
  35.     unsigned int i, k=0;
  36.     for(i=0; i<4; i++){
  37.         SOROK = (0x08>>i);            //Léptetjük a sorok szintjét
  38.         k++;
  39.         if(oszlop1 == MAGAS){
  40.             while(oszlop1==MAGAS);   //Várakozunk a gomb felengedéséig
  41.             return k;
  42.         }
  43.         k++;
  44.         if(oszlop2 == MAGAS){
  45.             while(oszlop2==MAGAS);   //Várakozunk a gomb felengedéséig
  46.             return k;
  47.         }
  48.         k++;
  49.         if(oszlop3 == MAGAS){
  50.             while(oszlop3==MAGAS);   //Várakozunk a gomb felengedéséig
  51.             return k;
  52.         }
  53.         k++;
  54.         if(oszlop4 == MAGAS){
  55.             while(oszlop4==MAGAS);   //Várakozunk a gomb felengedéséig
  56.             return k;
  57.         }
  58.         if(i>0){    //Ha a második lefutásnál sincs találat
  59.             k=(i+1)*4;
  60.         }else if(i==3){ //Ha az utolsó is lepörgött nulláztuk k-t
  61.             k=0;
  62.         }else{  //Első lefutás után a k értéke 4 lesz
  63.             k=4;
  64.         }
  65.     }
  66.     return ALACSONY;
  67. }

Ezt gondolom tovább
(#) tothrdeg hozzászólása Ápr 18, 2014 /
 
Üdv. van egy easypic v7 panelom egy pic30f4013-massal. Van hozzá glcd kijelzőm, de sajna nem tudok kiiratni rá. Valami ötlet? Segítsetek Pls.
// Lcd module connections
sbit LCD_RS at RF0_bit;
sbit LCD_EN at RF4_bit;
sbit LCD_D4 at RD0_bit;
sbit LCD_D5 at RD1_bit;
sbit LCD_D6 at RD2_bit;
sbit LCD_D7 at RD3_bit;

sbit LCD_RS_Direction at TRISF0_bit;
sbit LCD_EN_Direction at TRISF4_bit;
sbit LCD_D4_Direction at TRISD0_bit;
sbit LCD_D5_Direction at TRISD1_bit;
sbit LCD_D6_Direction at TRISD2_bit;
sbit LCD_D7_Direction at TRISD3_bit;
// End Lcd module connections
void main() {
Lcd_Init();
// Write text "Hello!" on Lcd starting from row 1, column 3:
Lcd_Out(1, 3, "Hello world!");





}
(#) icserny válasza tothrdeg hozzászólására (») Ápr 19, 2014 /
 
Ha nem az alfanumerikus kijelzőhöz való LCD_akármi függvényeket hívogatnád, több esélyed lenne...

Én ebben a könyvben nézném meg a mintapéldákat. A 3. mintapélda pont a GLCD kijelzővel foglalkozik, s egy Glcd_Init() függvényhívással kezdődik. Ebből gondolom, hogy az LCD_Init() a programodban eleve félrevitte a dolgokat.
(#) hummer hozzászólása Ápr 19, 2014 /
 
Helló ! Egy kísérleti négyszöggenerátort készítettem 16F628-cal (ezt találtam itthon). A programkódot a mikroelektronika cég mikropascaljában véstem. A lényege az lenne, hogy a Timer1 interruptot használom fel a négyszöggenerálásra. Ez a kis progi egy szimulátor programban (Proteus) kifogástalanul működik, de amint a 16F628-amba beleteszem, azzal egyáltalán nem működik (máskülönben ugyanaz a 16F628 kifogástalan). Kérdésem az lenne, hogy a 16F628 program Timer1 interruptja miért nem működik ? Köszi a segítséget.
A hozzászólás módosítva: Ápr 19, 2014

negyszog.mpas
    
(#) vicsys válasza hummer hozzászólására (») Ápr 19, 2014 /
 
A fenti sárga mezőből, minden teljesül?
(#) hummer válasza vicsys hozzászólására (») Ápr 19, 2014 /
 
Persze. Nem ilyesmivel van baj. A kódban van egy sor, ami egy tömbből veszi az adatokat a PORTB-ről beolvasott értéknek megfelelően. A hardverben a PORTB-n van egy kapcsolósor, amiről a kapcsolóállásoknak megfelelően 2 hatványainak megfelelően olvas be adatokat a rendszer. Elméletben. A baj az, hogy SEMMIT nem olvas be a PORTB-ről az interrupt kezelő eljárás. A kérdésem: hogy miért nem ? Mit szúrtam el a programban ?

A kapcsolósor normálisan fel van húzva áganként 1k-val a tápra. Belső pullupokat nem használok. A kapcsoló úgy van beállítva, hogy alapesetben minden PORTB lábat lowra állít.
A hozzászólás módosítva: Ápr 19, 2014
(#) Hp41C válasza hummer hozzászólására (») Ápr 19, 2014 /
 
A portb lábain van felhúzóellenállás? A belső felhúzó ellenállások engedélyezettek?
(#) hummer válasza Hp41C hozzászólására (») Ápr 19, 2014 /
 
Nem használom a belső pullupokat, mert valahol azt olvastam róluk, hogy nagy a szivárgóáramuk. Külső ellenállásokat használok. De időközben rájöttem a problémára is: fordított logika szerint gondolkodtam. A progi működik szépen.
A hiba a hardverben volt, mégpedig a következő: zongora típusú mikrokapcsolókat használok az egyes négyszögfrekvenciák kapcsolgatására. A zongora mikrokapcsolóimnak a "normális" állása (a vízszintes állás) az a szétkapcsolt állás (a mikrokontroller aktuális kivezetéséről nézve high), a lenyomott állás pedig a rövidzár (low állás).
Miközben ide véstem a választ a kérdésre, az egyik mondatnál eszembe jutott, hogy a mikrokapcsoló állások lehetnek a ludasak. Azóta kimértem és valóban azok a ludasak. Köszi a kérdéseket ! Közben jöttem rá a megoldásra. Szívás volt, de nem bánom.
(#) danydosster hozzászólása Ápr 19, 2014 /
 
Sziasztok!

PIC16f628A esetében milyen beállításokat kell használnom, hogy bemenetként tudjam használni az RA6 és RA7 portokat? Minden más kimenet lenne.

  1. #pragma config BOREN = OFF, CPD = OFF, FOSC = INTOSCIO, MCLRE = OFF, WDTE = OFF, CP = OFF, LVP = OFF, PWRTE = ON
  2.  
  3. void init_ports(void) {
  4.         CMCON = 0x07;
  5.  
  6.         TRISA = 0x00;
  7.         TRISA = (1>>6);
  8.         TRISA = (1>>7);
  9.         PORTA = 0x00;
  10.  
  11.         TRISB = 0x00;
  12.         PORTB = 0x00;
  13. }
  14.  
  15. int get_stepper() {
  16.         if (RA6 == 1) return 1;
  17.         return 0;
  18. }
(#) vilmosd válasza danydosster hozzászólására (») Ápr 19, 2014 /
 
Igy:
  1. TRISA = 0b11000000;
  2. //vagy
  3. TRISA = 0xC0;
(#) danydosster válasza vilmosd hozzászólására (») Ápr 19, 2014 /
 
A config beállításokkal volt a gond, sikerült megoldani

  1. FOSC = INTOSCIO
A hozzászólás módosítva: Ápr 19, 2014
(#) danydosster válasza danydosster hozzászólására (») Ápr 19, 2014 /
 
Abban tudsz esetleg segíteni, hogy hogyan tudom a pic memóriáját írni és olvasni?
16F628 lenne, egy számot akarok eltárolni benne és fontos lenne hogy ki-be kapcsolás után ki tudjam olvasni.
Ja és c nyelven megoldható?
A hozzászólás módosítva: Ápr 19, 2014
(#) Hp41C válasza danydosster hozzászólására (») Ápr 19, 2014 /
 
Az EEProm kezelése olvasjató az adatlapjában. Bővebben: Link
(#) danydosster válasza Hp41C hozzászólására (») Ápr 19, 2014 /
 
Ohhhh, szuper.
Köszönöm szépen!!!
(#) zolek hozzászólása Ápr 20, 2014 /
 
Üdv. Nekem nem sikerül hex-et generálni, meg nézné valaki?
Következő: »»   515 / 1216
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