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   820 / 1216
(#) pajti2 válasza Droot hozzászólására (») Júl 2, 2016 /
 
A kerekítést fentebb már írták, egyébként jó. Még annyi tippet adnék, hogy ha sikerül átszokni a 10-es számrendszerbeli gondolkodásról a 2-esre, a műveletek egyszerűbbé is tudnak válni.
(#) Zsora válasza icserny hozzászólására (») Júl 2, 2016 /
 
Idézet:
„Szerintem az összes ARM Cotex-M3 tud RAM-ból futni (hogy ennek van-e gyakorlati haszna, azt ne firtassuk)”
Naná hogy van: amikor külső adattárolón lévő alkalmazásokat kell futásidőben betölteni és futtatni. Ez gyakorlatilag minden számítógépnél, többfunkciós intelligens eszköznél, okostelefonnál, stb. alapvető követelmény, éppen ezért ezen eszközök feldolgozóegységei nem Harvard- hanem Neumann architektúrájúak. A 32-bites mikrovezérlőkkel épp ezt a területet célozzák meg.
(#) icserny válasza Zsora hozzászólására (») Júl 2, 2016 /
 
Idézet:
„amikor külső adattárolón lévő alkalmazásokat kell futásidőben betölteni és futtatni.”
OK, de ez már az alkalmazásprocesszor (ARM Cortex-A) kategória. Én meg mikrovezérlőkről beszéltem. Két külön világ.

Mikrovezérlő kategóriában csak olyan csodabogarak jutna eszembe, mint az Expressif ESP8266EX, amely SPI flash-ból olvassa be a programot a RAM-ba. Vagy a Texas TUSB3410.
(#) kriszrap hozzászólása Júl 2, 2016 /
 
Sziasztok!
tömbökkel aka(d)t problémám(.)
  1. int oszlop[10];
  2. void oszlopok(int oszlop[0],int oszlop[1],int oszlop[2],int oszlop[3],int oszlop[4],int oszlop[5],int oszlop[6],int oszlop[7],int oszlop[8],int oszlop[9]])
  3. {
  4.     Delay_us(10);
  5.     LATC.RC1=1;      
  6.     for(i=0;i<sizeof(oszlop);i++)
  7.     {
  8.       LATC.RC0=oszlop[i]; //clock
  9.       Delay_us(5);
  10.       LATA.RA7=0;//data
  11.       LATC.RC0=0;//clock
  12.     }
  13.     LATA.RA6=1;//lacth
  14. }

hivatkozás rá: oszlopok (1,1,1,1,1,1,1,1,1,1);
miért nem tudom az alprogramba átvinni a tömb érgtékét???
Köszönöm a segítséget elöre.
A hozzászólás módosítva: Júl 3, 2016
(#) giskard válasza Hp41C hozzászólására (») Júl 2, 2016 /
 
Pontosabb mérést nyilván csak átlagolással lehet kihozni a 10 bites AD átalakítókból.
Amit írtam azt a PIC-ek átalakítójának minőségéről írtam a tápfeszből leosztott ref feszültség vonatkozásában. Egy 7805 feszültsége annyi amennyi, de ha fél év múlva megméred egy 1000 forintos műszerrel akkor is annyi lesz, ha nincsenek nagy környezeti hőmérséklet különbségek a két mérés közt (és nem hiszem hogy a két műszer hibája éppen kiegyenlítené egymást). Tehát az én meglátásom az, hogy ezen a pontossági szinten a tápfeszből leosztott ref feszültség sokkal kevésbé befolyásolja a mérés pontosságát, mint maga az átalakító.
A hozzászólás módosítva: Júl 2, 2016
(#) giskard válasza Elektro.on hozzászólására (») Júl 2, 2016 /
 
Nos, megkövetlek. Csak egy kis húzás, egy kis szurka piszka akart lenni, de ezentúl komomolyan, tartózkodni fogok mindenféle húzásoktól (főleg a tolásoktól) (viszont már Einstein is megmondta: ha sokat görbítünk, önmagunkba fordulhatunk).
(#) pajti2 válasza giskard hozzászólására (») Júl 2, 2016 /
 
Ő nem úgy fogalmazott véletlenül, hogy "befordulhatunk"?
(#) pajti2 válasza kriszrap hozzászólására (») Júl 2, 2016 /
 
  1. #define def_oszlop_tomb_len 10
  2. int oszlop_tomb[def_oszlop_tomb_len];
  3.  
  4. void oszlopok(int* enyem_tomb) {
  5.   int i;
  6.   Delay_us(10);
  7.   LATC.RC1=1;      
  8.   for(i=0;i< def_oszlop_tomb_len;i++) {
  9.     LATC.RC0=enyem_tomb[i]; //clock
  10.     Delay_us(5);
  11.     LATA.RA7=0;//data
  12.     LATC.RC0=0;//clock
  13.     continue;}
  14.   LATA.RA6=1;//lacth
  15.   return;}


Ráhívás:
  1. oszlopok(oszlop_tomb);


A neveket majd kedvedre csiszolod. A létrehozott tömb önmagában automatikusan pointer, az oszlop_tomb típusa int*, az elemei pedig integerek, mint például oszlop_tomb[0]. Az első elem címe egyezik a tömb kezdőcímével, &oszlop_tomb[0] és oszlop_tomb azonos címekre mutatnak. Ha átvettél egy pointert, annak simán csak adhatsz egy indexet, és tömbként hivatkozhatsz az értékeire, lásd példa fentebb.

A kódódban egyébként akad egy számomra érthetetlen dolog:
  1. LATC.RC0=enyem_tomb[i]; //clock

Az RC0 szerintem 1 bites érték, így az integerek legalsó bitje fog majd oda kikerülni, a többi pedig figyelmen kívül marad (autocasting), vagy az is lehet, hogy a fordító nem fogja megenni, és jelzi majd, hogy a változó szélességeket explicite kell castingolnod. Fordítója válogatja. Azt a híbát nem javítottam, mert a segítséget a tömb címzésben kérted, és különben sem tudom, mit is kell igazából csinálnia. Talán úgy lesz jó.

Bármi C alapokat érintő egyéb kérdés van még, bőven találni fejtágítót is és példákat is például itt:
http://www.cprogramming.com/tutorial/c-tutorial.html
A hozzászólás módosítva: Júl 2, 2016
(#) kriszrap válasza pajti2 hozzászólására (») Júl 2, 2016 /
 
Shiftelésre használnám:
pl oszlop(1,0,1........)
elso szintet világit(,) második nem(,) harmadik villágit .stb(.)
oszlop(1,0,1,1,1,1,,1) igy sokkal könnyeb(b) lenne megoldani(,) hogy melyik szint villágithat(.) ((
A hozzászólás módosítva: Júl 3, 2016
(#) cross51 válasza kriszrap hozzászólására (») Júl 2, 2016 /
 
Szerintem így egyszerűbb lenne:
  1. void oszlopok(unsigned int oszlop)
  2. {
  3.     //...
  4.     for(unsigned char i = 0; i < 10; i++)
  5.     {
  6.         //...
  7.         oszlop <<= 1;
  8.         if (STATUS.C) LATC.RC0 = 1;
  9.         //...
  10.     }
  11.     //...
  12. }

Az unsigned int oszlop mondjuk 0b1111111110 bitmintát (vagy ahogy a MikroC-ben kell) beírod és így szerintem egyszerűbb. Ahol //... látsz ott nem kell változtatni.
(#) kriszrap válasza cross51 hozzászólására (») Júl 3, 2016 /
 
STATUS.c mi<>az???
A hozzászólás módosítva: Júl 3, 2016
(#) cross51 válasza kriszrap hozzászólására (») Júl 3, 2016 /
 
A Carry bit, nem vagyok a MikroC-be benne ott lehet STATUS.b0 vagy nem tudom, ha nem ismered a Carry bitet az baj, és sok sok kérdésedben alapismeretek hiányát láttam ezért ajánlom ezen oldal erős olvasását a belső felépítésről.

És szerintem nem facebook-on vagyunk..
(#) icserny válasza icserny hozzászólására (») Júl 3, 2016 /
 
Mégegy csodabogár: Microchip CEC1302 Low Power Crypto Embedded Controller. A CPU ARM Cortex-M4, maximális órajel 48 MHz, 128 K RAM: 96 K kódfuttatásra, 32 K adattárolásra.
(#) Moderátor hozzászólása kriszrap hozzászólására (») Júl 3, 2016
 
Most már jó lenne, ha komolyan nekiülnél a helyesírásnak, vagy telepítenél fel egy ellenőrzőt!
Ha nem lesz az elkövetkezőkben változás, a hozzászólásaid nem fognak megjelenni.
(#) rolandgw válasza icserny hozzászólására (») Júl 3, 2016 /
 
Ezek szerint cégvásárlással is lehet ARM licenchez jutni.
(#) mrobi hozzászólása Júl 3, 2016 /
 
Sziasztok.
16f628-on akarom az UART-ot életre kelteni. Egyenlőre a vétel se akar menni megszakításból. Ha a főprogramban vizsgálom a RCIF-et tökéletesen működik. Hiába engedélyezem a megszakítást (RCIE), egyszerűen nem akar bele lépni. Igaz most még csak proteusban tesztelem, de szerintem ott is mennie kellene.
(#) Pali79 válasza mrobi hozzászólására (») Júl 3, 2016 /
 
A forráskód nélkül aligha látjuk, hogy mi a hiba....
Idézet:
„Hiába engedélyezem a megszakítást (RCIE)”
Ahhoz, hogy működjön még legalább 2 megszakítást kell engedélyezni. Azok megvoltak?
(#) mrobi válasza Pali79 hozzászólására (») Júl 3, 2016 /
 
Ez a jelenlegi tesztprogram. TMR0 kikapcsolva.
  1. char bejovo=0;
  2.  
  3.  void interrupt(){
  4.      if(INTCON.TMR0IF==1){
  5.       PORTB.B0=!PORTB.B0;
  6.       INTCON.TMR0IF=0;
  7.      }
  8.      if(PIR1.RCIF==1){
  9.       bejovo=RCREG;
  10.       PORTB.B0=1;
  11.      }
  12.  }
  13.  
  14. void main() {
  15. //Inicializálás
  16.                TRISA=0x00;
  17.                TRISB=0x02;
  18.                PORTB=0x00;
  19. //Timer0
  20.                INTCON.TMR0IE=0;
  21.                OPTION_REG.T0CS=0;
  22.                OPTION_REG.T0SE=0;
  23.                OPTION_REG.PSA=1;
  24.                OPTION_REG.PS2=1;
  25.                OPTION_REG.PS1=1;
  26.                OPTION_REG.PS0=1;
  27. //UART
  28.                SPBRG=25;
  29.                TXSTA.BRGH=1;
  30.                TXSTA.SYNC=0;
  31.                RCSTA.ADEN=0;
  32.                RCSTA.SPEN=1;
  33.                PIE1.RCIE=1;
  34.                RCSTA.CREN=1;
  35.                
  36.                
  37.                INTCON.GIE=1;
  38.                while(1){
  39.                         /*if(PIR1.RCIF==1){
  40.                         bejovo=RCREG;
  41.                         PORTB.B0=1;
  42.                         }*/
  43.                 }
  44. }


Melyik az a két megszakítás amit még engedélyezni kell?
A hozzászólás módosítva: Júl 3, 2016
(#) mrobi válasza Pali79 hozzászólására (») Júl 3, 2016 /
 
Köszönöm a rávezetést. Egy ilyen sor beszúrásával egészen másképp működik:
  1. INTCON.PEIE=1;

(#) cross51 válasza mrobi hozzászólására (») Júl 3, 2016 /
 
Én a PIC16628-as leírásában nem találtam a megszakításról szóló fejezetet, de apró eltéréseket leszámítva ugyan olyan a megszakítási block minden PIC16-ban.
A képen látod, hogy a GIE kell ahhoz, hogy bármilyen megszakítás végrehajtás megtörténjen és mint írtad is a PEIE-vel meg a periferiális megszakításokat engedélyezel.
Amit adott perifériákhoz PIEx regiszterrel engedélyezel és a PIRx regiszterrel vizsgálod, hogy ezen volt e megszakítás (a vége úgy láttam megvolt, csak így lett összefüggő a dolog).

intLog.png
    
(#) mrobi válasza cross51 hozzászólására (») Júl 3, 2016 /
 
Ha ezt a rajzot megtalálom lehet hogy hamarabb sikerül megoldani. Le van írva, hogy hogy kell konfigurálni ha megszakítást akarok (If interrupts are desired, then set enable bit
RCIE.) Én ezzel elintézettnek gondoltam a megszakítást.
(#) Hp41C válasza cross51 hozzászólására (») Júl 3, 2016 /
 
16F627-628: DS40300C-page 101 Figure 14-14
16F627A-628A-648A: DS40044F-page 107 Figure 14-14
(#) Pali79 hozzászólása Júl 3, 2016 /
 
Egy 12V-os motort szeretnék vezérelni PIC-ről. Az ábrán lévő kapcsolás biztonságos vagy mást ajánlatos használni?

fet_kapcs.gif
    
(#) cross51 válasza Pali79 hozzászólására (») Júl 3, 2016 /
 
Azt, hogy mennyire biztonságos arról én nem teljesen tudok nyilatkozni, de ha biztosat akarsz tegyél egy optót oda, onnan (persze ha külön tápról megy a motor) nem fog semmi vissza kerülni a PIC-re.
(#) sonajkniz válasza Pali79 hozzászólására (») Júl 3, 2016 /
 
Szia!
Ha közvetlen a PIC-ről akarod hajtani a fetet, használj logic fetet, ellenkező esetben nem fog teljesen kinyitni, és csúnyán melegedni fog. A rajzon lévő fet 10V-ot kér. Még jobb azonban, ha kimondott fet driver IC-t használsz hozzá. Az optocsatoló is jó választás, ha nem nagy sebességű PWM jellel hajtod.
Csak ott fordítva üzemeltesd. A fetet ellenállással nyittasd, és negatívra húzza le az opto.
(#) pajti2 válasza Pali79 hozzászólására (») Júl 3, 2016 / 1
 
A motorban jellemzően tekercs van, annak pedig áram töltése. Húzni fogja akkor is, ha a fetet már lekapcsoltad. Mindenképpen rakj oda egy ellenirányban bekötött shottky-t is (kicsi nyitás idő kell) legalább dupla akkora árammal, mint amit a motor venni szokott (elhasználódás ellen). A diódát a motor kapcsaira kösd, ami a feten van, az csak a fetet védi, és vagy lesz a tápfesz szűrésben elég nagy kondi arra levezetni, vagy nem.
(#) kriszrap hozzászólása Júl 4, 2016 /
 
Sziasztok ismét én .
Időmultiplexes kérdésem lenne.
5x5x5 Ledkockáról lenne szó és az a bajom hogy ha egy alagzatott szeretnék kirajzolni vele mondjuk 2 másodpercig és 10 lépésböl akkor egésszen türhető a fényerő(több ideje van felvillania a lednek).
Ha megint ugyan az a példa csak most 20 lépésböl akkor drasztikusan esik a fényerő.
Erre van valami megoldás hogy kb azért 2 másodpercig rajzolja ki az ábrát és a fényerőse nagyon csökkenjen??
(#) diablo válasza pajti2 hozzászólására (») Júl 4, 2016 /
 
Köszönjük, az "azért sincs igazad mert csak" című hozzászólást. De ezt betudom annak, hogy szakmai topikban vagyunk, ahol kötelezőnek érzi az ember az érvek nélküli cáfolást.
Érdekes módon a könyveket sem foltozzák, hanem újra kiadják ha kell többször is. De úgy látszik a mérnökök többségének nagy fejtörést okoz egy dokumentáció kiegészítése pár apró szóval (ld. Zsora-nak írt hsz) vagy végfelhasználóként a használt dokumentáció naprakészen tartása. Egy olyan nagy cégnél meg mint a Microchip, ahol profi verziókezelő rendszereket alkalmaznak és nem szóbeszéd útján terjed a frissítés mint ahol te dolgozhattál/dolgozol, illetve ha kéred még e-mail értesítést is küldenek ha frissítenek egy adatlapot (PCN), annál elképzelhetetlen, hogy ezt a szerinted hatalmas logisztikai problémát ne tudnák felhasználóbarátabban megoldani. Szóval emögött inkább a nem akarás van, aminek tudjuk mi a vége...
Mellesleg "aprólék javításról" nem volt szó, ezt te találtad ki.
(#) Pali79 válasza kriszrap hozzászólására (») Júl 4, 2016 /
 
Ha növelni akarod a fényerőt, akkor kisebb ellenállásokat kell tenni a LED-ek elé.
(#) kriszrap válasza Pali79 hozzászólására (») Júl 4, 2016 /
 
20mA nél vagyok már(
Következő: »»   820 / 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