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   700 / 1208
(#) killbill válasza Pali79 hozzászólására (») Aug 23, 2015 /
 
Bocs. En csak azt latom, hogy egy 5 soros C programon kinlodsz(tok) harom napja, a legegyszerubb megoldasra (a tablazat) nem is reagaltal, es meg mindig nem mukodik. Ezert batorkodtam -egyébként valóban- gyökér lenni. De még egyszer bocs, kiszálltam.
(#) Pali79 válasza ktamas66 hozzászólására (») Aug 23, 2015 /
 
Ja! Én félre értettem a dolgot! Azt hittem, hogy max 42-öt csinál. Mindjárt megpróbálom.
(#) sonajkniz válasza killbill hozzászólására (») Aug 23, 2015 /
 
Nem szeretnélek sem megbántani, sem kioktatni, de az
az 5 soros C program fordítás után koránt sem 5 sor, és attól, hogy C-ben megírva pazarul működik, Pali79 nem éri el a célját, ami a működés megértésére irányul. Azért programozik assemblyben, és nem C-ben.
(#) kriszrap válasza kriszrap hozzászólására (») Aug 24, 2015 /
 
Halli még annyit nem tudom mennyire emlékszel a 3x3x3 led kocka kapcsára meg nyáktervére .
Na mindegy . A 10k felhúzó ellenállás meg van MCLR --> 5v ra meg van 100nf kondi meg van.
Ha nem pickit ről szeretném működtetni ha nem csak 12v tápról 7805 el akkor mit kell változtatnom??
(#) mark.budai hozzászólása Aug 24, 2015 /
 
Minap feltettem egy kérdést RFM12b modullal kapcsolatban.
Pucuka segítségével, pontosabban rávezetésével kiderítettem, hogy a PIC tizede órajelen jár, mint amin kéne neki.
Kitettem kommentbe (/*...*/) az egész main függvény tartalmát és beírtam egy felettébb bonyolult kódot:
  1. while(1)
  2. {LED=1;
  3. DelayMs(100);
  4. LED=0;
  5. DelayMs(1000);}

Beégettem a PIC-be, erre 1mp-ig világít a led, és 10mp-ig nem. Aztán átírtam a kódot 10, meg 100ms-os delay-re, és úgy egy tizedet világít, egy másodpercet nem.
Van egy main.h fileom, nem szeretem a config biteket a main.c-ből betölteni, csak a helyet foglalja, és nem tetszik. Abban így néz ki az utolsó sor: #define _XTAL_FREQ 8000000
Ez 8MHz, nem 800k. Miért tizede az órajel, mint kéne? (Legalábbis a késleltetés tizede, de akkor szerintem az órajel is.) Mit hagyok ki, mit rontok el?
A késleltetés függvényei itt vannak:
  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. }
  13. void DelayMs(uint ms)
  14. {
  15.   uchar i;
  16.   while(ms--)
  17.   {
  18.    i=35;
  19.    while(i--)
  20.    {
  21.      DelayUs(1);
  22.    }
  23.   }
  24. }
A hozzászólás módosítva: Aug 24, 2015
(#) cross51 válasza mark.budai hozzászólására (») Aug 24, 2015 / 1
 
Most így első ránézésre nem tudom neked megmondani, hogy ez a NOP() felépített delay jó-e. De a 8 bites C-ben(XC8) hogyha beszúrsz egy ilyen sort az elején, hogy #include <xc.h> akkor a microchip által megírt delay-t tudod használni ami elég pontos.

A két delay-t ilyen néven éred el: __delay_us(ido_us), __delay_ms(ido_ms) az ido_ms/us PIC18-nál lehet változó is és constans is, alatta meg csak constans (legalábbis amelyik PIC16-hoz használtam).

És az egyszerűség kedvéért én így szoktam használni helymegtakarításból:
  1. void delay_ms(unsigned int delay)
  2. {
  3.     while(delay-- != 0)
  4.         __delay_ms(1);
  5. }
(#) mark.budai válasza cross51 hozzászólására (») Aug 24, 2015 /
 
Igen, ez igaz, tervezem is átírni, mert rájöttem, jobb lesz az így. Viszont egy problémám van, 100ms-ot már nem lehet vele késleltetni, úgy nem akarja lefordítani a programot. Így lehet abból is ciklus lesz, egy változóval, amit csökkent, mindegy, nem ez a lényeg.
Folytatom a történetet:
Átírtam erre a while ciklust:
  1. LED=1;
  2. __delay_ms(10);
  3. LED=0;
  4. __delay_ms(10);

Erre meg elkezdett tized másodperces periódusokkal villogni. Nem is maga a késleltetés miatt lényeg ez, hanem azért, mert az egész processzor 10-ede sebességgel megy, szerintem ezért nem veszi észre az RFM modul SDO kimenetét.
Hogyan élesszem fel normálisan a belső oszcillátort?
(#) ktamas66 válasza mark.budai hozzászólására (») Aug 24, 2015 / 1
 
Nem látjuk hol állítod az órajelet. A #define _XTAL_FREQ 8000000 a fordítónak mondja meg mekkora az órajel, és onnan számolja a késleltetéseket, de szerintem nem állítja be. Alapértelmezetten 1MHz-el jár.
(#) Pali79 válasza ktamas66 hozzászólására (») Aug 24, 2015 /
 
Nos úgy tűnik most már sínen van a dolog. Én voltam a balga. Azért akadt ki folyton mert elírtam egy sort és túlcsordította a kiírandó karakterek számát és kiírt minden ciklusban még pluszba 255 darab üres karaktert. Most potival állítva szépen megy a jel le, fel. Egyenlőre a projekt ezt a részét jegelnem kell, mert el kell készítenem egy illesztő fokozatot amivel az audió jelet a PIC számára emészthetővé teszem. Ha ez megvan, akkor ki tudom próbálni élesben is, hogy melyik módszer működik jobban.
Addig is köszönöm a segítséget mindenkinek!
(#) mark.budai válasza ktamas66 hozzászólására (») Aug 24, 2015 /
 
Köszi a választ, éppen most akartam írni, hogy kimaradt az OSCCON. Látszik, hogy most dolgozok először ezzel a fordítóval, meg 18F picekkel, a CCS-ben nem kellett ezt beírni.
Beállítottam, már helyre jött. Ezek szerint nem tizedén, hanem nyolcadán járt, ezt szemre egy led villogásából nem lett volna egyszerű megmondani.
De nem töretlen a siker, az órajel beállítása nem hozta meg a várt sikert, az RFM modul még mindig nem ad az SDO kimenetére semmit.
(#) cross51 válasza mark.budai hozzászólására (») Aug 25, 2015 /
 
Abból a kódból amit megosztottál velünk az elején ott nem derül ki, hogy software-es SPI-t használsz vagy hardware-s SPI-t? Ha softwares-t használsz próbáld ki hardwares-el.
(#) usane válasza cross51 hozzászólására (») Aug 26, 2015 /
 
Szoftveres. Az adatlapban szoftveres SPI példa van.

mark.budai: Viszont: A példában 10MHz-es kvarcról jár a PIC, ha te 8MHz-re állítod be akkor nem lesz jó az időzítés pont a szoftveres mivolta miatt. A NOP()-ok száma hivatott beállítani a magas és alacsony jel időzítését. Mivel az utasítások ciklusideje órajelfüggő ezért a NOP()-ok számát az órajelhez kell igazítani. Igaz az eltérés nem sok, de lehet, hogy ennyit már nem tolerál az RF modul, nem tudom, ezt nem néztem csak gondolom, mert ha minden más jó akkor miért ne menne?
(#) foxi63 válasza usane hozzászólására (») Aug 26, 2015 /
 
Hibás az elgondolásod, mert az RFM modul akkor dolgozza fel az adatlábon lévő jelet, amikor a CLK magasra vált. Semmi jelentősége nincs a példaprogiban a Nop utaításoknak feleselegesek is.
Az órajel ideje pedig minimum 25 + 25ns .A PIC sokkal lassabban tud csak adatot kiküldeni.
(#) usane válasza foxi63 hozzászólására (») Aug 26, 2015 /
 
Átnézve a dolgokat, igazad van.

mark.budai: Bekötés jó? Portok konfigja bekötéshez igazítva?
A hozzászólás módosítva: Aug 26, 2015
(#) mohapower hozzászólása Aug 27, 2015 /
 
PIC12F1501 vezérlőből szeretnék építeni egy kis, egyszerű FELÜLETSZERELT! áramkört. 4 kimenetet szeretnék használni, így szükségem lesz valamelyik programozó lábra is (MCLR/PGD/PGC). Tudom kimenetként használni valamelyiket ezek közül, és később módosítani a programon?
Köszi előre a választ!
(#) usane válasza mohapower hozzászólására (») Aug 27, 2015 /
 
A MCLR csak bemenetként használható. A PGD,PGC lábat tudod használni kimenetként, de attól függően, hogy mit akasztasz rá kell valami izoláló áramkör, hogy ne zavarja a programozást.
(#) Hp41C válasza mohapower hozzászólására (») Aug 27, 2015 / 1
 
Ha abban a 8 lábú SMD tokban kihasználod a 4 kimenetet és a maradék két bemenetet, gondoskodnod kell a felprogramozás lehetőségéről is. A belső oszcillátoros konfiguráció miatt a program egyből indul a Vdd rákapcsolására. Ha a MCLR láb benenet, a PowerOnTimer le van tiltva, a programozó láb(ak) kimenetnek állnak be rögtön a program elején, az újraprogramozáskor nem tudja felvenni a kapcsolatot a programozó. Engedélyezd a PowerOnTimer -t és tegyél a program elejére néhány ms késleltetést mielőtt a lábakat kimenetne állítanád. Figyelj a MCLR lábat meghajtó áramkörre is. El kell viselnie a Vpp feszültséget - esetleg akkor is, ha nincs még meg a Vdd. (Use Vpp first programming entry).
(#) dudo hozzászólása Aug 29, 2015 /
 
(#) trickentrack hozzászólása Aug 31, 2015 /
 
Ekezetekert elore.is elnezest!

Udv!

Most kezdek ismerkedni a picekkel es nahyon nejonnek!
Az lenne a kerdesem jigy milyen programozot ajanlanatok nekem? Nem kene nagyon komoly dolgokra es ha leet.ne lehyen nahyondraga. Ebayen nezelodtem de.gondolom azok ne mehbighatok.
Elore i.koszonom!
Megehyszer elnezesf a helyesirasert!
(#) Buvarruha válasza trickentrack hozzászólására (») Aug 31, 2015 /
 
Nem nézzük el, az ékezetek hiánya egy dolog, de a betűk hiánya megint más. A Pickit2, vagy Pickit 3 jó kezdésnek.
(#) Pali79 válasza trickentrack hozzászólására (») Aug 31, 2015 /
 
Pickit2 + Mlab IDE 8.92. Pickitet használtan is tudsz venni, eredeti 6000 körül szokott lenni.
(#) Pali79 hozzászólása Aug 31, 2015 /
 
Sziasztok!
Szeretném gombnyomásra ébreszteni a PIC-et sleep-ből. a TEST PIC-es oldalán olvastam erről, de a vége nem teljesen világos. Azt írja, hogy külső megszakítással lehet ébreszteni. Ez OK, a nyomógombot az INT lábra teszem. Viszont a végére ezt írja:
Idézet:
„A SLEEP utasítás végrehajtásakor a következő utasítás már beolvasódik, így ébredés után a programfutás ezzel folytatódik.
SLEEP állapotban bekövetkező engedélyezett megszakítás hatására a GIE (Global Interrupt Enable) globális megszakítás engedélyező bit állásától függően két működési eset lehetséges:
· ha GIE = "0" (megszakítások tiltva), az első (saját engedélyező bitjével engedélyezett) megszakításkérés hatására a mikrovezérlő kilép a SLEEP üzemmódból és a már előolvasott utasítással folytatja a normál működést;
· ha GIE = "1" (megszakítások engedélyezve), akkor a megszakításkérés hatására a mikrovezérlő kilép a SLEEP üzemmódból, végrehajtja a már előolvasott utasítást, majd a 0004h címről folytatja az utasításvégrehajtást. Ilyen esetben célszerű a SLEEP utasítás után egy NOP utasítást elhelyezni, amely megakadályozza, hogy a megszakításkezelő szubrutin előtt más érdemi utasítás is végrehajtódjon.”

Akkor most kell engedélyezni a megszakítást vagy sem? Nekem jobb lenne, ha nem kéne a megszakítást kezelni. Persze nem nagy gond ha kell, de meglennék nélküle.
(#) cross51 válasza Pali79 hozzászólására (») Aug 31, 2015 /
 
Nem kell engedélyezve legyen a megszakítás, ez a kis rész arra vonatkozik, hogy mit csinál a PIC , ha be van kapcsolva vagy ki van kapcsolva a megszakítás.
Szóval GIE = 0 és a gombnyomásra a SLEEP utasítás követő utasítás fog jönni.
(#) Pali79 válasza cross51 hozzászólására (») Aug 31, 2015 /
 
Ez jó hír! Köszi!
(#) kt hozzászólása Aug 31, 2015 /
 
Sziasztok.
Most azon ügyködök hogy 1 Timerrrel 4db négyszögjelet legeneráljak .
Ez fizikailag lehetséges ?
Elméleti síkon már megvan a terv.
első lépés kiszámolom a periódus időket az egyes jelekhez, és ezt elfelezem.
Majd ezeket egy ciklusban ami 10 ig fut beszorzom a ciklusváltozóval és eltárolom egy tömbben , így megkapom a jelek változásának idejét.
Letárolom hogy az egyes idők melyik jelhez tartoznak. Rendezem a az idős tömböt legkisebbtől a legnagyobbig és ahogy ebben a tömbben helyet cserélnek az értékek úgy cserélnek helyet a másik tömbben is.

Ezután kiszámolom az egyes idők közti különbséget, eltárolom egy tömbben.
Elindítok egy időzítőt ami addig fut míg elnem éri a tömb első elemében tárolt időt ott megáll, átállítom a következő elemben tárolt időre, a PIC lábát ellentettjére állítom annak megfelelően hogy abban a tömbben melyik jel sorszáma van megadva ehhez az elemhez. (pl ha 1 akkor az RA1 et változtatom ha 2 akkor RA2 ) ezután ismét elindítom az időzítőt és ezt ismételgetem.

Szerintetek ez jó megoldás, vagy van egyszerűbb módja 4 db négyszögjel generálásának ?
A hozzászólás módosítva: Aug 31, 2015
(#) szabolala hozzászólása Szept 1, 2015 /
 
Szeretnék egy PICkit 3 égetőt, hp típusú laptopról működtetni, vagy külön tápot javasoltok.
Milyen legyen a tápegység : természetesen stabilizált 5V és legyen 12 V
Javaslatokat örömmel fogadom!
(#) Hp41C válasza szabolala hozzászólására (») Szept 1, 2015 /
 
A PICkit3 programozó az USB csatlakozáson keresztül kap tápot, de nagyon szereti, ha a programozandó kontroller a cél rendszertől kapja a tápját. A kontroller típusát figyelembe véve +3.3V -os vagy +5V -os stabilizált tápegység kell. Ha már elkészült áramkörben kell felprogramozni a kontrollert (SMD tok), a legjobb, ha a programozás előtt a tápellátást élesztük fel és azzal történik a programozás.
(#) ativagyok hozzászólása Szept 2, 2015 /
 
Sziasztok!
Egy PIC-ben szeretném eltárolni az eszköz nevét, verziószámát, dátumot, vagy egyéb dolgokat olyan módon, hogy az később kiolvasható legyen valamilyen módon. Ezt hogyan szokták megoldani? A kiolvasást mondjuk I2C buszon keresztül gondoltam, van esetleg jobb megoldás?
Köszönöm előre is a választ.
(#) Zsolt2 válasza ativagyok hozzászólására (») Szept 2, 2015 /
 
Szia. Adjal meg tobb reszletet. Milyen PIC mivel akarod kiolvasni? Elsore belso EEPROM-ot javasolok (ha van az adott PIC-nek) es inkabb soros porton (UART) vagy SPI-n kiolvasni, ezek sokkal gyorsabbak.
A hozzászólás módosítva: Szept 2, 2015
(#) ativagyok válasza Zsolt2 hozzászólására (») Szept 2, 2015 /
 
A PIC még nem adott, bármilyen lehet. A kiolvasást egy másik PIC végezné, ez sem adott még.
Következő: »»   700 / 1208
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