Fórum témák
» Több friss téma |
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.
Ja! Én félre értettem a dolgot! Azt hittem, hogy max 42-öt csinál. Mindjárt megpróbálom.
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.
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??
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:
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:
A hozzászólás módosítva: Aug 24, 2015
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:
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:
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?
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.
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!
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.
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.
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?
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.
Á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
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!
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.
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).
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!
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.
Pickit2 + Mlab IDE 8.92. Pickitet használtan is tudsz venni, eredeti 6000 körül szokott lenni.
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.
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.
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
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!
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.
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.
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
A PIC még nem adott, bármilyen lehet. A kiolvasást egy másik PIC végezné, ez sem adott még.
|
Bejelentkezés
Hirdetés |