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   524 / 1210
(#) KaiserA válasza Hp41C hozzászólására (») Máj 17, 2014 /
 
Szia!
Így kell valahogyan?

  1. // Define constants for PINS
  2. #define LCD_DB4         LATDbits.LATD4
  3. #define LCD_DB5         LATDbits.LATD3
  4. #define LCD_DB6         LATDbits.LATD2
  5. #define LCD_DB7         LATDbits.LATD1
  6.  
  7. #define LCD_RS          LATFbits.LATF1
  8. //#define LCD_RW        LATDbits.LATD9
  9. #define LCD_E           LATEbits.LATE0
  10.  
  11. short const LCD_INIT_STRING[4] =
  12. {
  13.  0x20 | (lcd_type << 2), // Func set: 4-bit, 2 lines, 5x8 dots
  14.  0xc,                    // Display on
  15.  1,                      // Clear display
  16.  6                       // Increment cursor
  17.  };
  18.  
  19. //----------------------------
  20. void lcd_init(void)
  21. {
  22.         short i;
  23.        
  24.         //Set D0-4,D9-10 as a digital output, change if you change the pins
  25. ezt a részt nem nagoyn értem
  26.         LATD |= 0x061F; TRISD &= 0xF9E0;
  27.         // works fine off 3.3V, in fact the following line kills the timing
  28.         //mPORTDOpenDrainOpen(BIT_0 | BIT_1 | BIT_2 | BIT_3 | BIT_4 | BIT_9 | BIT_10);
  29.  
  30.         Delayms(30);
  31.  
  32.         LCD_RS = LOW; // Register Select Command Register
  33.  
  34.         //#ifdef USE_LCD_RW
  35.         //LCD_RW = LOW;
  36.         //#endif
  37.  
  38.         LCD_E = LOW; // Disable
  39.  
  40.         Delayms(15);
  41.  
  42.         for(i=0; i < 3; i++)
  43.            {
  44.             lcd_send_nibble(0x03);
  45.             Delayms(4);
  46.            }
  47.        
  48.         lcd_send_nibble(0x02);
  49.        
  50.         for(i=0; i < sizeof(LCD_INIT_STRING); i++)
  51.            {
  52.             lcd_send_byte(0, LCD_INIT_STRING[i]);
  53.            
  54.             // If the R/W signal is not used, then
  55.             // the busy bit can't be polled.  One of
  56.             // the init commands takes longer than
  57.             // the hard-coded delay of 60 us, so in
  58.             // that case, lets just do a 5 ms delay
  59.             // after all four of them.
  60.             //#ifndef USE_LCD_RW
  61.             Delayms(5);
  62.             //#endif
  63.            }
  64.         Delayms(5);
  65.         putsLCD("\f");
  66.         Delayms(5);
  67. }
  68.  
  69. //-------------------------------------
  70. void lcd_send_nibble(short nibble)
  71. {
  72. // Note:  !! converts an integer expression
  73. // to a boolean (1 or 0).
  74.  LCD_DB4 = !!(nibble & 1);
  75.  LCD_DB5 = !!(nibble & 2);
  76.  LCD_DB6 = !!(nibble & 4);  
  77.  LCD_DB7 = !!(nibble & 8);  
  78.  
  79.  Delaytus(1);
  80.  LCD_E = HIGH; // Enable
  81.  Delayus(2);
  82.  LCD_E = LOW; // Disable
  83. }

A D0-D3-ig nem elég hogyha logikai alacsony szintnek definiálom a PIC lábát?
Köszönöm Adrián
A hozzászólás módosítva: Máj 17, 2014
(#) NyariG hozzászólása Máj 17, 2014 /
 
Szeretnék egy fetet meghajtani pic-cel(kb 20kHz).Ez 24V ot és 2A-t kapcsolgatna.

Hogy ill mivel tudom illeszteni a fetet (pl egy irfz44n-t) hogy az is örüljön neki.
(#) vilmosd válasza NyariG hozzászólására (») Máj 17, 2014 / 1
 
Ez egy biztos megoldas. A VG1 a meghajto 5 voltos jel. A meghajto tranzisztorok tapja 12-15 volt korul kell hogy legyen. Nekem mukodik sok ilyen meghajtas 1-10 kHz PWM jellel 20-40 amper arammal.

FETDRV4T.JPG
    
(#) Hp41C válasza KaiserA hozzászólására (») Máj 18, 2014 / 1
 
Jó felé haladsz...
  1. LCD_DB5 = !!(nibble & 1);
  2. LCD_DB5 = !!(nibble & 2);
  3. LCD_DB6 = !!(nibble & 4);
  4. LCD_DB7 = !!(nibble & 8);

Helyett ajánlottam volna a következőt:
LATB ^= (LATB ^ LCD_Table[nibble & 0x0F]) & 0xF0;
Ahol:
  1. LCD_Table[] = {0x00,0x10,0x08,0x18,0x04,0x14,0x0C,0x01C,0x02,0x12,0x0A,0x1A,0x06,0x16,0x0E,0x1E};
A hozzászólás módosítva: Máj 18, 2014
(#) don_peter hozzászólása Máj 18, 2014 /
 
Srácok, Spontán fagyásokat mi okozhat? (P18F4550, 4x4matrix gombsor)
Van amikor nem fagy a program le, de van olyan, hogy pillanatok alatt kifagy.
Legalább is a kijelző frissítése, mert a háttérben a LED tovább villog a hardveren.
Proteusba, ha megfagy akkor a futást jelző LED is megáll.

A matrixra gyanakszom:
A 4x4-es matrix sorait kapcsolgatom magas szintre ami az A PORT 0:3 lábain van és B PORT 4:7 lábain olvasok ami testre van húzva 4.7K-os ellenállással.
Minden PORT digitálisra van állítva.
Előre is kösz..
(#) Hp41C válasza don_peter hozzászólására (») Máj 18, 2014 /
 
MCLR nincs felhúzva, elégtelen tápszűrés, érintkezési hiba.
(#) don_peter válasza Hp41C hozzászólására (») Máj 18, 2014 /
 
MCLR 10K-s ellenállással fel van húzva 5v-ra.
A tápom egy 12v-os kapcsolóüzemű táp. (Kínai)
Az 5v-ot a hardveren egy LM7805-ös IC adja amely 100n kondival és egy 330n kondival van szűrve.
Érintkezési hiba véleményem szerint nem lehet mert Proteus-ba is ugyan ezt produkálja.
(#) zalan888 válasza zalan888 hozzászólására (») Máj 18, 2014 /
 
Mégse vélem hogy elkötés lenne, hiszen jól kötöttem be és egy két karakter tisztán kivehető, majd a futás közepén már csak egy oszlopban scrollozza a szöveget. Gondolom ha elkötés lenne a ledpanelen, akkor össze vissza pontozna. Itt valami program hiba van úgy vélem.
(#) zenetom válasza don_peter hozzászólására (») Máj 18, 2014 /
 
Idézet:
„Proteus-ba is ugyan ezt produkálja”

Akkor egyértelműen programhiba!
Watchdog? Oszci jól van beállítva?
(#) don_peter válasza zenetom hozzászólására (») Máj 18, 2014 /
 
Watchdog kikapcsolva, 20MHz Kristály jól van bekötve.
Legközelebb a PIC lábaihoz 22p-val GND-re lekötve..
Azt hiszem a 4x4 mátrix folyamatos figyelése okozhatja a hibát.
Definíciók:
  1. #define SOROK           LATA            //Sorok 4x4 matrix
  2. #define oszlop1                 PORT_B4         //Oszlopok bemenetek 4x4 matrix
  3. #define oszlop2                 PORT_B5         //-"-
  4. #define oszlop3                 PORT_B6         //-"-
  5. #define oszlop4                 PORT_B7         //-"-

Futás pedig így:
  1. for(i=0; i<4; i++){
  2.                 SOROK = (0x08>>i);      //Léptetjük a sorok szintjét
  3. //További program rész...
  4. }

A végén természetesen SOROK visszaáll és újra kezdődik a lépkedés.
A hozzászólás módosítva: Máj 18, 2014
(#) don_peter válasza don_peter hozzászólására (») Máj 18, 2014 /
 
Még egy kérdés..
Ha bekapcsolom a Watchdog-ot akkor újraindulgat, resetel a cucc Hardveren is és Proteusba is..
Ez miért lehet?
A hozzászólás módosítva: Máj 18, 2014
(#) Dempsey hozzászólása Máj 18, 2014 /
 
Sziasztok!
PIC16F628A-val dolgozok. Találkozott-e már valaki olyannal, hogy amíg nem teszek rá külső kvarcot addig felismeri a Pickit3, de miután csatlakoztatok rá kvarcot, már Target Device ID (00000000) does not match expected Device ID (00001060), hibát dobja, de nem mindig rögtön, van hogy rátöltök pár módosítást a pic-re és csak utána jelentkezik a hiba. Ez mitől lehet? Nagyon idegesítő.
(#) Hp41C válasza Dempsey hozzászólására (») Máj 18, 2014 /
 
Ezen a lapon nézd meg az utosó két bekezdést.
(#) Dempsey válasza Hp41C hozzászólására (») Máj 18, 2014 /
 
Köszi mester!
(#) zenetom válasza don_peter hozzászólására (») Máj 18, 2014 /
 
Mert annak az a dolga.
A beállításoktól függően bizonyos időközönként generál egy resetet. Ezt a programba iktatott CLRWDT utasítással lehet elkerülni, C-ben talán a CLRWDT() utasítás lesz.
De ha ki van kapcsolva, akkor nem kell vele törődni.
Írtad hogy 20MHz-en ketyeg. A konfignál HS módban van? 20MHz-es kavicshoz inkább 15pF javasolt.
(#) don_peter válasza zenetom hozzászólására (») Máj 18, 2014 /
 
icserny féle Piccolo projektes kapcsolás és beállítások alapján készítettem el a sajátomat így gondolom azoknak maximálisan jónak kell lenniük.
  1. #pragma config FOSC     = HSPLL_HS  // HS oszcillátor és PLL az USB-hez is

A Watchdog-nak utána néztem és inkább kikapcsolom. Nem jó nekem...most még.

Esetleg változók nem megfelelő lezárásai nem okozhatnak ilyen hibát?
A hozzászólás módosítva: Máj 18, 2014
(#) vicsys válasza don_peter hozzászólására (») Máj 18, 2014 /
 
HSPLL? A 20MHz-es kavics PLL-el egy kicsit sok lesz nem?
(#) matheattila válasza vicsys hozzászólására (») Máj 18, 2014 /
 
Nem lesz sok, mert a PLL bemenetén 4MHz kell legyen, így ha 20MHz-es a kvarc akkor le kell osztani 5-el, a PLL abbol a 4 megából csinál 96-ot, amit leoszt 2-vel, mert a maximum az 48 mega amit be lehet állítani, így a kvarcod lehet 4MHz-től 40MHz-ig bármi, mert bent úgy is más lesz. Gyakorlatilag így nem is számít milyen kvarcod van, mert úgy is olyan frekit állítasz elő amilyent akarsz (amilyent lehet a leosztásokból és szorzásokból)

Szerk: most látom, hogy don_peter beállításánál tényleg nagy lesz, mivel nincs leosztva )
A hozzászólás módosítva: Máj 18, 2014
(#) don_peter válasza vicsys hozzászólására (») Máj 18, 2014 /
 
Még ezekkel a freki beállításokkal nem vagyok tisztában így szívesen fogadnék egy linket vagy magyar leírást mely kifejti mi miért jó.
Bár lehet a Piccolo oldalon is fent van majd utána nézek. Épp itt lenne az ideje..


Más:
Most Proteus-ba leszedtem a 4.75K-os ellenállásokat a bemenetről és nem fagy a program futás.
Ha vissza teszem elég hamar lefagy.
Na most vagy kicsi az ellenállás vagy nem tudom mi lenne nekem oda a megfelelő lehúzó. (gondolom nem lehet a bemenet lebegőn)
Mi a véleményetek.
(#) icserny válasza don_peter hozzászólására (») Máj 18, 2014 /
 
20 MHz-es kvarchoz PLLDIV = 5 kell, így lesz belőle 4 MHz.
  1. #pragma config PLLDIV   = 5         // PLL osztó 20 MHz-es kristályhoz
  2. #pragma config CPUDIV   = OSC1_PLL2  
  3. #pragma config USBDIV   = 2         // órajel forrása a 96MHz PLL/2
  4. #pragma config FOSC     = HSPLL_HS  // HS oszcillátor és PLL az USB-hez is
  5. #pragma config FCMEN    = OFF       // Fail Safe Clock Monitor tiltása
  6. #pragma config IESO     = OFF       // Belső/külső oszcillátor tiltása
  7. #pragma config PWRT     = ON        // Bekapcsoláskor 62 ms várakozás
(#) don_peter válasza icserny hozzászólására (») Máj 18, 2014 /
 
Igen pont így használom.
Nem módosítottam a tiédet.
Tegnap néztem át a konfigurációs beállításokat és jónak találtam amik be voltak állítva így nem nyúltam hozzá.

4x4 mátrix:
Kipróbáltam 1K, 4.7K, 10K, 15K, 20K-s ellenállássokkal a gombsor bemeneti részét és mindegyikkel lefagy sajnos.
Ha nincs rajta ellenállás akkor nem fagy ki a program.
Készítettem egy képet is amit csatoltam a bekötésről.. (a kép a lefagyott állapotról készült)
A hozzászólás módosítva: Máj 18, 2014

prot.JPG
    
(#) KaiserA válasza Hp41C hozzászólására (») Máj 18, 2014 /
 
Szia!

Köszönöm szépen az eddigí segítségedet!
Olyan kérdésem van, hogyha be van kötve mind a 8 adat lába az LCD kijelzőnek, és megpróbálom 4 bitesként használni, az úgy jó hogyha a PIC-en , földre húzom az RB0-RB3 lábakat? Nekem az Enable lábam a PIC E0 lábára kötöttem és az RS lábat pedig a PIC -F1 lábára. Ahozz hogy jól legyenek deffiniálva, meg kell adjam , vhol hogy Az E porton páldául b00000001 , F port pedig b00000010. A define parancsal mint a 8 lábat kel attól definiálni? #define LCD_DB4 LATDbits.LATD4
#define LCD_DB5 LATDbits.LATD3
#define LCD_DB6 LATDbits.LATD2
#define LCD_DB7 LATDbits.LATD1
#define LCD_DB0 LATDbits.LATE0
#define LCD_DB1 LATDbits.LATD7
#define LCD_DB2 LATDbits.LATD6
#define LCD_DB3 LATDbits.LATD5
itt pedig beállítom, hogy 4 bites legyen?
short const LCD_INIT_STRING[4] =
{
0x20 | (lcd_type << 2), // Func set: 4-bit, 2 lines, 5x8 dots
0xc, // Display on

Amit irtál :
LCD_Table[] = {0x00,0x10,0x08,0x18,0x04,0x14,0x0C,0x01C,0x02,0x12,0x0A,0x1A,0x06,0x16,0x0E,0x1E};
ezeket a Nibble parancsok helyett kellenek?

void lcd_init(void)
{
short i;

LATD |= 0x061F; TRISD &= 0xF9E0;
Ennél a parancsnál , mit definiál, mivel nekem az LCD RB0 lába a PIC E0 lábán van, az RS és AZ Enable lábam is másk porton van mint a többi adatlába a PIC-nek ennél a parancsnál nekem ezt hogyan kell használni?

Köszönöm szépen előre is a segítséget, remélem nem írtam sok hülyeséget, csak szeretném, hogy múködjön az kijelző.
(#) Hp41C válasza KaiserA hozzászólására (») Máj 18, 2014 / 1
 
Sajnos nem ismerem a C32 LCD könyvtárát. De nem olyan rémisztően nagy feladat, hogy nem lehessen megírni pár óra alatt...
- Az LCD D0..D7 lábaira kapcsolódó portbiteket állítsd kimenetnek és alacsony szintre.
- A C/D és az E lábakra kapcsolódó portbiteket állítsd kimenetnek és alacsony szintre.
- Inicializálás, ahogy fent próbáltad.

Adat írása az LCD -re:
- A kiírandó adat felső nibbléjét kiforgatva köld el az LCD D4..D7 lábaira kapcsolódó portbitekre.
- A regiszter kiválasztást állítsd be az LCD C/D lábára kapcsolódó portbitre.
- Várd ki az előkészítési időt.
- Az LCD E lábára kapcsolódó portbitre magas szint.
- Várd ki a minimális E magas szint idejét.
- Az LCD E lábára kapcsolódó portbitre alacsony szint.
- Várd ki a minimális adattartási időt.
- A kiírandó adat alsó nibbléjét kiforgatva köld el az LCD D4..D7 lábaira kapcsolódó portbitekre.
- Várd ki az előkészítési időt.
- Az LCD E lábára kapcsolódó portbitre magas szint.
- Várd ki a minimális E magas szint idejét.
- Az LCD E lábára kapcsolódó portbitre alacsony szint.
- Várd ki a minimális adattartási időt és a parancs végrehajtási időt.
Ennyi..
(#) icserny válasza don_peter hozzászólására (») Máj 18, 2014 /
 
"és mindegyikkel lefagy sajnos."
Mellőzni kellene az ilyen félrevezető megfogalmazásokat. Egy mikrovezérlő program vagy újraindul (Reset, Brown out reset, Watchdog timeout), vagy elakad egy végtelen ciklusban (például várakozik egy eseményre, ami nem következik be).

Ha valahol elakad a program akkor nyomkövetéssel vagy nyomkövető kiíratásokkal ellenőrizhető, hogy meddig jut el, illetve hol van az a pont, amin nem jut túl.
(#) don_peter válasza icserny hozzászólására (») Máj 18, 2014 /
 
Sajnos itt ez a kifejezés a legpontosabb amit megfogalmazhatok.

Nem akad el a ciklusban egyszerűen leakassza random pont úgy mint amikor a PC valamiért megfagy.
Gombnyomáskor random még egyszer írom RANDOM módon, tehát minden esetben máshol, így a nyomon követés nem célra vezető.

Az érdekes az mint már feljebb is leírtam, hogy gombnyomásnál ha nincs a bemeneteken ellenállás akkor nem fagy meg, ha van fent valamilyen 1-20K közt akkor random leakad a program úgy, hogy magas szinten marad az a bemenet amelyen a gombot olvassa. "lásd kép feljebb"
A bemeneteket minden esetben le kell húznom testre?
A hozzászólás módosítva: Máj 18, 2014
(#) vicsys válasza don_peter hozzászólására (») Máj 18, 2014 /
 
Ezt a lehúzást nem is értem... Inkább felhúzó ellenállásokat szoktak használni. A random dolog, csak látszólag random. Lehet az egy verem túlcsordulás is, ami látszólag random, de nem az. Na, erre jó a nyomkövetés.
(#) don_peter válasza vicsys hozzászólására (») Máj 18, 2014 /
 
Igaz, felhúzó.....
És amikor nyomok egy gombot a belső ciklus valahol beragad?

Van egy ilyen pergés mentesítő ciklusom:

  1. while(oszlop1); //Várakozunk a gomb felengedéséig

Ez lehet gond?

ui: De miért van az, ha nincs felhúzó ellenállás a bemeneteken akkor nem akad le?
A hozzászólás módosítva: Máj 18, 2014
(#) CHrissDock hozzászólása Máj 18, 2014 /
 
Sziasztok!

Valaki tudna nekem segíteni egy asm fájl át írásában ami jelenleg közös anódos 7 szegmenses kijelzőhöz van és nekem közös katódoshoz kellene.....?
(#) Pepebá hozzászólása Máj 19, 2014 /
 
üdv.
PIC18f4550 kontrollerrel kellene 1-200hz közötti frekvencia mérését megoldanom.
A PICOLO projekt segítségével megvalósítottam jó néhány feladatot I/O portok témakörben, de az időzítőkkel még nem foglalkoztam. Olvasgatom a projekt ezen fejezetét, ehhez kérek gyakorlati segítséget.
(#) vilmosd válasza CHrissDock hozzászólására (») Máj 19, 2014 /
 
A kikuldes elott negald az erteket.
Következő: »»   524 / 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