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   1061 / 1203
(#) glaci válasza BenőAladár hozzászólására (») Dec 25, 2018 /
 
Szia!
Mikroc-ben programozok, illetve most tanulgatok én is. A c-t is most kezdem tanulni. Az RB0-RB7 a regiszterek lábait jelenti mikroc-ben bizonyosan, de a c-ben is. Ahogy pl. a Porta.RB0 az A port 0. bitjét jelenti.
Szerintem az RB a regiszter bitet jelenti, de ha nem majd kijavítanak és ebből mindketten tanulunk.
A hozzászólás módosítva: Dec 25, 2018
(#) Hp41C válasza glaci hozzászólására (») Dec 26, 2018 /
 
?.? Porta.RB0 ?.?
Inkább nayg betükkel PORTA.RA0 illetve PORTB.RB0
(#) BenőAladár válasza glaci hozzászólására (») Dec 26, 2018 /
 
Azt hiszem félreértés történik,
Azzal érthető, hogy az "ADCON1.RA0" az a PORTA0 digitális vagy analóg beállítását teszi lehetővé
csupán azzal nem vagyok tisztában, hogy van e erre bármilyen "tananyag" ami részletezi, hogy ezt így össze lehet párosítani,hogy ADCON1.RA0. Mert az adatlapban így nem tér ki rá főleg hogy assembly-ben vannak a példák. A C90-es fordítókörnyezet megengedi hogy csak "RA0 = 1;" használj nem kell külön leírni, hogy "PORTA.RA0 = 1;" pl.
A tizennégyes szám mikéntje pedig továbbra sem értelmezhető nekem. ADCON1 = 14;
Ebben az esetben hogy fog alakulni a teljes adcon regiszter tartalma binárisan?
Már pedig amit írtál működik...
A hozzászólás módosítva: Dec 26, 2018
(#) Hp41C válasza BenőAladár hozzászólására (») Dec 26, 2018 / 1
 
Idézet:
„ADCON1 = 14;
Ebben az esetben hogy fog alakulni a teljes ADCON1 regiszter tartalma binárisan?”

A 14 ebben az esetben decimálisan értendő. 14 = 0x0E = b'00001110'
Azaz a ADCON1 regiszter tartalma binárisan 00001110 lesz az utasítás végrehajtása után.
ADFM = 0; ADCS2 = 0; PCFG3 = 1;
PCFG2 = 1; PCFG1 = 1; PCFG0 = 0; // RA0 analóg, RA7.. RA1 digitális
A C (-k)ben az egyes regiszterek bitjei struktúrában vannak definiálva. Az olyan hivatkozások, mint "PORTA.RB0" vagy "ADCON1.RA0" szerintem hibásak, mivel a struktúrásukban nincs olyan mező, amire hivatkozunk.
(#) benjami válasza BenőAladár hozzászólására (») Dec 26, 2018 / 1
 
A fordítóprogram include mappájában jellemzően szokott lenni minden mikrovezérlő típushoz header fájl (pl. pic16f876a.h). Abból ki lehet puskázni az elnevezéseket. Hogy melyik mit csinál, azt meg a konkrét chip adatlapjából lehet kilesni.
(#) glaci válasza Hp41C hozzászólására (») Dec 26, 2018 / 1
 
A mikroc-ben van egy ilyen fájl PIC18F46K80.cp. Ebben úgy látom minden regiszterről leírást végez. Ebből úgy értelmezem, hogy pl. a PORTA regiszter 5. lábára, ha hivatkozunk, ezt megtehetjük a PORTA.B5, vagy az RA5_bit, de nálam a fordító elfogadja a PORTA.RB5-öt is meg az PORTA.RA5-öt is.
(#) Hp41C válasza glaci hozzászólására (») Dec 26, 2018 / 1
 
Idézet:
„Azzal érthető, hogy az "ADCON1.RA0" az a PORTA0 digitális vagy analóg beállítását teszi lehetővé...”

ADCON1.RA0 már hibát dob.
(#) glaci válasza Hp41C hozzászólására (») Dec 26, 2018 /
 
Nálam simán fordul. Bár, hogy program futás alatt mi történik azt nem tudom.
(#) BenőAladár válasza Hp41C hozzászólására (») Dec 26, 2018 /
 
Na igen erre voltam kíváncsi, de a többiek is sokat segítettek. A header file-okat át szoktam nézni ha pl egy kijelző vagy uart vagy egyéb dolgokkal próbálkozom. De a legegyértelműbb a PIC header-ét meg soha....pedig ott van minden. Köszönöm egyenlőre mindenkinek.
(#) dokidoki hozzászólása Dec 26, 2018 /
 
Sziasztok. Sajnos megöltem egy F876A RB6 portlábát. Minden más működik rajta, sajnos csak a .hex fájl van hozzá meg. Így nem tudom átírni más portlábra a funkcióját, az a kérdés, hogy a .hex -t visszafejtve van -e esély mégiscsak átírni? Ezen a portlábon csak a menübelépés gombja volt programozott felhúzóellenállással... Szabad láb lenne RA3 -4, de eredeti forrásnál nem lenne nagy kaland, de ilyen visszafejtettnél esélytelen egy olyan kezdőnek mint én, jól gondolom?

szerk: Hát most látom az rb6 az rossz ómen, mert már így programozni sem tudom a hibája miatt... Ó
A hozzászólás módosítva: Dec 26, 2018
(#) jocka0012 hozzászólása Dec 26, 2018 /
 
Üdv!
A mellékelt képen látható h hidat szeretném meghajtani egy DSPIC33FJ16MC102 típusú mikrokontrollerrel, ami tartalmaz MCPWM(Motor Control PWM Modul) modult. Ennek segítségével állítom elő a PWM jeleket. A hidat úgy vezérelem, hogy egyik forgásiránynál a jobb oldali meghajtó IC kapja meg a PWM jelet és a bal oldali fix logikai jelet kap és ezáltal az alsó oldali FET-et fixen kinyitja. Ellenkező forgásiránynál ezt pont fordítva valósítom meg. Abba a problémába ütköztem, hogy a PWM1L2 vonalon az oszcilloszkópos képen látható jelalak jelenik meg. A másik forgásiránynál a PWM1L1 vonalon tökéletes PWM jel jelenik meg. Tudna esetleg valaki segíteni, hogy mi lehet a probléma? Sajnos én most azt se tudom eldönteni, hogy szoftveres vagy hardveres probléma lehet.
(#) glaci hozzászólása Dec 27, 2018 /
 
Sziasztok!
Mint már korábban írtam a c-vel is és mikroc-vel is most ismerkedek. Egy 4x20 karakteres LCD-re szeretnék kiíratni különböző szövegeket. A kiírandó szöveget struktúrába szervezném és a kiírást a program különböző, a program által meghatározott helyein, függvényből meghívott Lcd_Out(sor,oszlop,kiírandó szöveg) rutinnal íratnám ki. Egyenlőre a struct sem akar összejönni.

  1. [code=c]//LCD kiíratás sorai
  2. char *text1,*text2,*text3,*text4; // LCD sorai
  3. struct kiir
  4. {
  5.    char text1;
  6.    char text2;
  7.    char text3;
  8.    char text4;
  9. };
  10. struct kiir  fomenu;
  11.  
  12.   fomenu.text1="Menu";
[/code]

fordításkor a fomenu.text1 nek való értékadáskor hibaüzenettel leáll.

uzenet.jpg
    
(#) rolandgw válasza glaci hozzászólására (») Dec 27, 2018 /
 
Pointerrel vagy tömbként [] kell deklarálnod a text-et.
Bővebben: Link
Ez a megoldás elegánsabb:
Bővebben: Link
(#) bbatka válasza dokidoki hozzászólására (») Dec 27, 2018 /
 
Assemblyre vissza tudod fordítani. PICDisasm
(#) rolandgw válasza rolandgw hozzászólására (») Dec 27, 2018 /
 
Bocs, az első sort nem figyeltem, azokat a mutató deklarálásokat tedd be a struct-ba.
(#) glaci válasza rolandgw hozzászólására (») Dec 27, 2018 /
 
Ugyanúgy leáll a fordítás.
Viszont nézegetem ezt
Idézet:
„Ez a megoldás elegánsabb:
Bővebben: Link”


ebben a deklarálásban elég lenne a sports[5][9] is nem?

tömb.jpg
    
(#) rolandgw válasza glaci hozzászólására (») Dec 27, 2018 /
 
Nem erre gondoltam, hanem a következőre példára. Kevesebb helyet foglal.
  1. char *sports[] = {
  2.                      "golf",
  3.                      "hockey",
  4.                      "football",
  5.                      "cricket",
  6.                      "shooting"
  7.                  };
(#) glaci válasza rolandgw hozzászólására (») Dec 27, 2018 /
 
Világos. Épp ezért kérdeztem, csak addig még nem jutottam.
Folytatom az ismerkedést.
(#) usane hozzászólása Dec 27, 2018 /
 
Üdv és utólagos boldog karácsonyt!

Erősítsetek meg. Jól látom, hogy a 74HC595 nem bír el 7 optocsatolót egyszerre? (MOC3020)
A VCC és GND max árama 70mA-re van megadva. Ha 10mA-el hajtom az optot akkor is maxon járatom ami nem egészséges és a 10mA a MOC3020-nak nem biztos, hogy elég.
(#) Bakman válasza usane hozzászólására (») Dec 27, 2018 /
 
Rakj a kettő közé egy ULN2003-as tranzisztormezőt, az bírja. Esetleg DM13A igaz, kicsit macerább beszerezni és 16 kimenete van...
(#) Hp41C válasza usane hozzászólására (») Dec 27, 2018 /
 
74HC595 helyett az STP08C596 vagy valamilyen verziója pl.: STP08CP05, stb. Így nem kell újabb tok.
A hozzászólás módosítva: Dec 27, 2018
(#) usane válasza Hp41C hozzászólására (») Dec 27, 2018 /
 
Ez jó lenne, csak mikorra és honnan?
Az ULN2003 az beláthatóbb, de még az is kérdés mikor így szilveszter környékén. Bár lehet, hogy valamilyen ULN-em van itthon maradék.
Van itthon 74HC541 vonali meghajtóm, de adatlap szerint össztápáramban az meg még annyit sem tud mint az 595 . Nem értem akkor miért meghajtó....
Na mindegy, megnézem, ezt az STP-t mikorra tudom beszerezni, vagy előkotrom milyen ULN-em van.
Köszönöm a linkeket.
A hozzászólás módosítva: Dec 27, 2018
(#) Hp41C válasza usane hozzászólására (») Dec 27, 2018 /
 
FDH.hu
Más: TPIC6B595, TPIC6B596
A hozzászólás módosítva: Dec 27, 2018
(#) dokidoki válasza bbatka hozzászólására (») Dec 27, 2018 /
 
Erre gondoltam én is, csak nehezen emészthető a visszakapott asm kód, főleg annyi tudással amennyi nekem van. De mivel a cél az elrontott kontroller megmentése lett volna, más portlábra helyezni a hibásat. Csak sajnos a PGC láb halt el, így értelmetlenné vált, mert nem lehet újraírni a programját ez miatt.
(#) usane válasza Hp41C hozzászólására (») Dec 27, 2018 /
 
Ez a TPIC jó ötlet. Köszönöm.
(#) rolandgw válasza glaci hozzászólására (») Dec 27, 2018 /
 
Idézet:
„Ugyanúgy leáll a fordítás.”

Szerintem globális a struct, akkor így iniciálhatod:
  1. struct kiir{
  2. char *text1;
  3. char *text2;
  4. };
  5. struct kiir fomenu={"Menu1","Menu2"};
  6. //vagy így:
  7. struct kiir fomenu={.text1="Menu1",.text2="Menu2"};

Ha nem adod meg NULL mutató lesz.
Hozzárendelést függvényen belül tehetsz: fomenu.text1= "MenuX";
(#) glaci válasza rolandgw hozzászólására (») Dec 28, 2018 /
 
Köszi!
Ez a jó.
Idézet:
„struct kiir fomenu={"Menu1","Menu2"};”


Ez lefordul hiba nélkül.

A másik leáll hibával.
Idézet:
„struct kiir fomenu={.text1="Menu1",.text2="Menu2"};”
(#) rolandgw válasza glaci hozzászólására (») Dec 29, 2018 /
 
Nem tudom melyik ANSI C szabványnak próbál megfelelni a fordító. Ha C89 akkor értető, hogy nem fogadja el az utóbbi inicializálást.
(#) BenőAladár hozzászólása Dec 29, 2018 /
 
Sziasztok!
Le tudná írni valaki ennek a működését? Nem bírok adatot kihozni belőle, valószínűleg valamit nagyon nem jól értek. Örülnék ha valaki el tudná mondani mit kell tennem ahhoz, hogy például az "TLC" első analóg lábát beolvassa egy tárolóba. A "#define PORTx" sorokat természetesen hozzá igazítottam az áramköröm felépítéséhez. MplabX-et használom C90 fordítókörnyezettel. A kód pedig egy állítólag működő dolog.A PIC pedig 16F876
  1. #include        <pic.h>
  2.  
  3. /*
  4.  
  5. Freely distributable in this original form.
  6. (c) Feb 2000 Shane Tolmie
  7. (c) KeyGhost, now you can record keystrokes on PC with tiny device
  8. Any questions or comments?  shane@keyghost.com
  9. Updates to FAQ available from http://www.keyghost.com/htpic
  10.  
  11. Routines to setup and use the TLC2543 serial 11channel 12bit a/d converter.
  12.  
  13. For Hi-Tech C v7.85, on a generic PIC micro.  
  14.  
  15. Tested with PIC16F84, PIC12CE674, and PIC16F876 all @ 4Mhz, should work at 16Mhz
  16.  
  17. Code status: tested and works beautifully.
  18.  
  19. - the current channel is set by the previous channel supplied
  20. - initially two calls must be made to ad_setgetchannel(), or use slower ad_getchannel(x)
  21.  
  22. Sample C:
  23.  
  24. ad_setup();                                                                             //sets up port directions
  25.  
  26. garbage=ad_setgetchannel(0);    //sets up current channel to zero, garbage returned
  27. data=ad_setgetchannel(1);                       //data now has channel 0.  Channel for next call is 1
  28. data=ad_setgetchannel(2);                       //data now has channel 1.  Channel for next call is 2
  29.  
  30. alternatively, use the slower, but more intuitive
  31.  
  32. ad_getchannel(x).                                               //this uses two calls to return data at channel x.
  33.  
  34. WARNING: these chips are static sensitive - I had two cease to work on me for some reason.
  35.  
  36. */
  37.  
  38. #define io_clk                                  RB0                                     //clock on port B bit 7
  39. #define io_clk_dir                      TRISB0                  //clock on port B bit 7
  40. #define ad_data_in                      RB1
  41. #define ad_data_in_dir  TRISB1
  42.  
  43. #define ad_data_out                     RB2                                     //data on port A bit 1
  44. #define ad_data_out_dir TRISB2                  //data on port A bit 1
  45. #define ad_cs                                           RB3
  46. #define ad_cs_dir                               TRISB3
  47.  
  48. #define port_out                                0
  49. #define port_in                                 1
  50.  
  51. //call this once to set it up
  52. void ad_setup()
  53. {
  54.         //these in/outs are a bit confusing - its from the TLC2543's perspective
  55.         ad_data_in_dir = port_out;     
  56.         ad_data_out_dir = port_in;
  57.        
  58.         io_clk_dir = port_out;
  59.         ad_cs_dir = port_out;
  60. }
  61.  
  62. unsigned int ad_setgetchannel(unsigned char channel)
  63. {
  64.         signed char i;
  65.         unsigned int data = 0x0;
  66.         unsigned int ch_config;
  67.  
  68.         ch_config = channel<<8;
  69.        
  70.         io_clk = 0;                                                                                                                     //ensure clock is low
  71.         ad_cs = 0;
  72.         for(i=11; i>=0; i--)
  73.         {
  74.  
  75.                 ad_data_in = ((ch_config>>i) & 0x01);   //bit to send
  76.  
  77.                 data <<= 1;                                                                                                             //read the next bit
  78.                 data |= ad_data_out;
  79.                 io_clk = 1;                                                                                                             //ensure clock is high
  80.                 io_clk = 0;                                                                                                             //ensure clock is low
  81.         }
  82.         ad_cs = 1;
  83.         return data;
  84. }
  85.  
  86. //recommended routine to call, its only a little slower
  87. unsigned int ad_getchannel(unsigned char channel)
  88. {
  89.         unsigned int dummy;
  90.         // call it twice to get and set the channel
  91.         dummy=ad_setgetchannel(channel);        //get garbage channel, but set next one
  92.         dummy=ad_setgetchannel(channel);        //get current channel
  93.         return dummy;
  94. }


Köszönöm azoknak türelmét akik belenéznek!
(#) szucsistvan123 hozzászólása Dec 31, 2018 /
 
Helo!

Nem tud valaki valami jó könyvet / egyetemi jegyzetet 8 bites PIC-ek programozására C vagy assembly nyelven? Leginkább magyar nyelven lenne jó.

Köszi!
Következő: »»   1061 / 1203
Bejelentkezés

Belépés

Hirdetés
Lapoda.hu     XDT.hu     HEStore.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