Fórum témák
» Több friss téma |
Fórum » PIC programozás
Nézz fel az oldalamra, van néhány link ami segít. Az Assemler nagyon egyszerű, az adatlapokban benne van minden parancs részletesen. Nem a nyelvet kell megérteni hanem a PIC áramkör működését, felépítését. Van magyar adatlap is az oldalamon, ha jól emlékszem, abból ki lehet indulni.
Idézet: Ez attól függ, hogy mit, milyen nyelven és milyen fejlesztői környezetben szeretne programozni a kezdő!„kezdő honnan tudna megtanulni a legegyszerűbb programozási parancsokat?” Magyar nyelvű leírások: - PIC16 assembly - PIC16 Felhasználói Kézikönyv - PIC18 assembly és C - PIC24 assembly és C MPLAB leírás
Hali!
Korábban már felvetettem az alábbi kérdésemet: " Tudna nekem valaki segíteni a következő rövid kis progi megírásában? 16F887-es procihoz Van egy belső időzítő, ami elszámol egy bizonyos összegig, mondjuk 3 másodpercig, akkor kér egy megszakítást és fellvillant egy LED-et, majd folytatódik tovább a program. Köszi előre is a segítségeteket!" És az alábbi választ kaptam rá: A megszakítás beállításához ezek kellenek, ha timer1-et használsz: BANKSEL PIE1 BSF PIE1, TMR1IE ; Enable Timer1 interrupt BANKSEL PIR1 BCF PIR1, TMR1IF bsf INTCON,GIE bsf INTCON,PEIE A megszakításban: regiszterek mentése... clrf TMR1L MOVLW felso ; Value to load into TMR1H MOVWF TMR1H ; Write High byte MOVLW also ; Value to load into TMR1L MOVWF TMR1L ; Write Low byte bsf LED nop nop nop bcf LED bcf PIR1,TMR1IF regiszterek vissza.. retfie Lenne valaki olyan rendes, és leírná egészbe a programot? Mármint, úgy hogy le lehessen fordítani, és rá tudjam küldeni a processzorra, hogy működjön? Tudom elég hülye vagyok hozzá, de sajnos ez lenne egy beadandó feladatom... Nagyon megköszönném Idézet: „Tudom elég hülye vagyok hozzá, de sajnos ez lenne egy beadandó feladatom..” Akkor leszel szives megtanulni! Senki sem szeretne, ha ugy kapnad meg a diplomad, hogy kozben nem ertesz hozza!
Sziasztok!
Fut épp egy projektem, a hardver részével többé-kevésbé készen vagyok, csak a szoftver része okoz egy kis fejtörést. Ebben kérném a segítségeteket. A feladat a következő: Egy feszültség szintet szeretnék a 16f628A-ba beépített komparátor, és a belső referenciafeszültség modul segítségével digitalizálni, és az eredményt decimális formában kiírni. Az eddig - basicben - megírt program kb. így néz ki. device 16f628 config LVP_OFF, BODEN_OFF, PWRTE_ON, MCLRE_ON, DEBUG_ON, WDT_OFF, XT_OSC declare xtal 4 declare i as byte declare a as word init: asm MOWLW 0X02 MOWWF 1F MOWLW 0X07 MOWWF TRISA MOWLW 0Ax0F MOWWF 9F endasm program: for i=0 to 10 a= Az asm kódrészlettel - az init címke alatt - beállítottam a regisztereket a megfelelő állapotba, majd a program címke után a komparátor kimenetét szeretném az "a" nevű változóban eltárolni. Ezután ezt szeretném átalakítani decimális formára, majd később további logikai műveleteket végezni, a beolvasott értéktől függően. C-ben tudom, hogy van olyan, hogy deklarálunk egy n hosszúságú tömböt (változót) és annak a "rekeszeit" egyenként fel lehet tölteni. Pl. a[1]=2 a[2]=5 a[6]=7 és így tovább. Ezt hogy lehet megoldani BASICben? Erre ugyebár azért van szükség, mert amikor az "i" eléri a 10-et, és lefut 10.X-re a kiolvasás, akkor kapok egy 10 bites számot, amit szeretnék konvertálni decimális számrendszerbe. Konkrétan egy termisztoron eső feszültség szintjét kell figyeljem, és ennek hatására a "B" porton a lábakat kell kapcsolgatni egy bizonyos sorrendben. Nagyon alapszinten konyítok valamennyit az asmhez és a C-hez, de inkább BASIC! Az esetleges segítséget előre is köszönöm! Üdv.
Vagy nem értem hogyan szeretnéd, vagy valamit félreértettél, ill. nem tudod mi az a komparátor.
A komparátor kimenetének két szintje(értéke) van. 1, vagy 0. Persze ezt is lehet ábrázolni 10 bites számként, csak minek. Ami neked kéne az A/D konverter, ami a 628-ban nincs. Olyan PIC-et kellene választanod, amiben van. Még annyit, hogy olyan utasítás nincs, hogy MOW.
Sziasztok!
Pedig van lehetőség az analóg mérés megvalósítására minden olyan típussal is, amiben nincs A/D, de van komparátor és referencia modul... Az ötlet: A bemeneti feszültséget vezetjük a(z egyik) komparátor egyik bemenetére, a másikra a referencia (Voltage reference) modul kimenetét vezetjük, vagy kapcsoljuk (komparátor modul üzemmód ábrái szerint). A program valamilyen algoritmussal (az intervallum felezés a leggyorsabb, de megköveteli, hogy ne változzon a bemenet a mérés alatt) beállítja a referencia feszültséget, majd kiolvassa a komparátor kimenetét. A kimenet alapján módosítja a referencia értékét. Így egy 4 (5) bites mérést lehet csinálni.
Én is ilyesmire gondoltam, mikor azt írtam, hogy "nem tudom hogyan szeretnéd", de ez szerintem minden csak nem jó. Ki fog derülni, hogy itt valami félreértés van.
Igen, igazatok van, elnézést, tévedtem. Az pedig emberi dolog. A sündisznó is megmondta, amikor lemászott a WC keféről.
1. Hány topikba akarod még bemásolni a kérdésedet? Az ilyesmit sehol sem díjazzák! by icserny Igazad van, ezért is elnézést! A következőre gondoltam amúgy(most kiderült, hogy rosszul): amikor egy decimális számot (pl. 224) átírunk binárisba, akkor van egy olyan módszer is, hogy megvizsgáljuk, melyik az a legnagyobb helyiértékű hely(1024,512,256,128,64,32,16,4,2,1,0), aminek az értéke (jelen esetben a 128=2^7) még éppen kisebb az átváltandó számnál (128<224). Ezt a számot kivonva az eredeti számból (224-128=96) tovább vizsgálódunk. Minden egyes kivonásnál az adott helyiérték alá egy "1"-est írunk, és mindezt addig folytatjuk, amíg a decimális szám értéke 0-ra nem csökken. Ekkor kapjuk meg az adott decimális szám bináris formáját. (224d=11100000b) Ennek az analógiájára képzeltem el ezt az egészet, csupán azt fejeltettem el, hogy a bemeneti feszültség nem csökken a konverzió során(nem vonja le semmi az értékéből az adott Vref-et), így az egész nem valósulhat meg a jelenlegi formában. Azonban ha csökkenne a feszültség (pont úgy, ahogy az előbb említett decimális-bináris konverzió során a decimális szám értéke) minden egyes billenésnél/kivonásnál, akár még működhetne is. Ebben az esetben már csak a biteket kell eltárolni, és a végén átváltani decimálsba. Nem tudom, mennyire volt EZ érthető, hogy mire is gondoltam eredetileg, remélem nem túl bonyolult... :S Ez esetben, mármint, hogy az eredeti felvetésem/kérdésem értelmét vesztette, tudna nekem adni valaki valami linket, ahol egy egyszerű termisztorral felépített kapcsolással, PIC-el tudom mérni a hőmérsékletet? Konkrétan egy programra gondolok. Előre is köszönöm! Idézet: „Ennek az analógiájára képzeltem el ezt az egészet, csupán azt fejeltettem el, hogy a bemeneti feszültség nem csökken a konverzió során(nem vonja le semmi az értékéből az adott Vref-et), így az egész nem valósulhat meg a jelenlegi formában” Ebben tévedsz, simán megvalósítható. A szukcesszív approximáció elvén működő ADC-k analógiájára. Ott hasonló a felépítése is a konverternek (visszacsatolt struktúra): van egy komparátor, egy vezérlő regiszter meg egy DAC. A regiszter aktuális értékét digitál analóg konverzió után a komparátor egyik bemenetére vezetik, és összehasonlítják a digitalizálandó jellel. A konverzió algoritmusa a következő: Először a DAC MSB bitjét billentjük 1-be (a többi 0) és megvizsgáljuk, hogy az így előállított analóg jel nagyobb-e mint a digitalizálandó jel. Ha nagyobb, akkor a DAC MSB bitjét kikapcsoljuk és következhet a DAC MSB-1. bitje. Ha kisebb akkor pedig hagyjuk az MSB bitet 1-ben, és következhet az MSB-1. bit. Ezt a DAC minden egyes bitjére végig játsszuk az MSB- től az LSB- ig és az algoritmus végén a DAC regiszterében levő szám lesz a digitalizált érték. Hozzátenném, hogy jelen esetben sajnos a felbontás elég kicsi, mert ha jól emlékszem a 16F628-as kontrollernek 5 bites a referencia feszültség modulja, ez pedig nem túl nagy felbontás. Arra kell még kitérni, hogy mintavevő-tartó nélkül sajnos nem alkalmas gyors változású jelek digitalizálására, de a hőmérséklet változása úgyis lassú folyamat. Van másfajta algoritmus is az ilyen felépítésű ADC- hez, ilyen pl. a számlálós ill. követő számlálós megoldás. Remélem nagyjából érthető a leírásom és segíthet a megoldásban. Egyébként halkan megjegyzem, hogy nagyon olcsón lehet beszerezni ADC modullal is rendelkező kontrollert (Pl.: 16F690), talán érdemes lenne megreszkírozni egyet.
Huhh de szépen és szóismétlés nélkül tudsz te káromkodni... Amúgy nagyjából értem, mire gondolsz.
Igen, azokról a különböző ADC algoritmusokról én is tudok, ismerem őket. Akkor megnézem azt a 16f690-et. De ma már nem akarnék ezzel foglalatoskodni, majd holnap talán. Azért köszi a tippet!
Delta-Sigma konvertert is lehet játszani a komparátorral.
Bővebben: Link (#14. példa)
A 16F88 még lábkompatibilis is a 16F628(A)-val és van benne A/D... Csak az uart van más lábra kiosztva.
Olyan kérdésem van, hogy én egy cnc marogépet szeretnék épiteni és a vezérlöjében van egy pic.Na ezt kellene felprogramozni de sajnos a program nincsen hozzá meg nekem és még picet sem programoztam.A pic tipusa pic16f871.Nagyon megtudnám köszönni ha valaki tudna segiteni hogyan kell felprogramozni és hogy honnan tudnám elökaparni ezt a bele valo programot is.A segitséget nagyon meg tudnám köszönni.
Tehát ezt a 16f88-t ugyanazzal az égetővel tudom programozni, mint a 16f628a-t? És az "uart" mire kell/miért szükséges?
Szerintem azt kell megkeresd, aki a marót tervezte és közzétette a dolgot. Mi nem fogunk tudni segíteni, főleg miután azt sem tudjuk milyen maróról van szó...
Ha a program ismeri a 88-at akkor igen(feltéve, hogy nem JDM-et használsz, mert akkor kétesélyes). Az UART nem kell, csak jelezve lett, hogy lábkompatibilis, kivéve az UART kiosztását.
Sziasztok!
A PIC18 sorozattal most ismerkedem. Van egy LowPinCount USB panelem, benne PIC18F14k50. A panellal kapott demókat kipróbáltam, de a C-ben nagyon járatlan vagyok. Írtam egy egyszerű assembly programot, ami egy akku feszültsgét méri és egyebek mellett másodpercenként soros porton kiküldi a kapott értéket. Azt szeretném megoldani, hogy csak az egyszerű assembly fordítás ereményét töltöm be, de az adatok USB-n közlekedjenek. Tehát ahol fixen benn van az IC-ben a Bootloader és az USB is és az USB csak megszakítással foglalja a processzort. Így nekem megmaradna assebly-re a főprogram és az alacsony prioritású megszakítás. A többivel egyáltalán nem kellene foglalkozni. Létezik már ilyesmi? Hogyan lehet ezt megcsinálni?
Kedves fórumozók!
A PicKit2 "Low pin count board"-ot próbálgatom és már vagy egy órája próbálom a HI-TECH C fordítójával a nyomógombot használni. PORTC0-PORTC3 lábakon led van, PORTA3-as lábon van a nyomógomb. A kód a következő:
A gombnyomásra nem reagál semmit a PORTC-n lévő ledsor. Ha a "PORTC = 0b00001111" sor nincs kikommentezve, akkor a led-ek világítanak. Mit rontottam el?
Nem sok az a 100000 egy kicsit a delay-ban? Kommentezd ki és nézd meg úgy.
Nem, nem volt sok. próbáltam futófényként és szépen ment a ledsor.
Szia!
- A kapcsolási rajzon szereplő J5 jumper zárva van? - Ez a megoldás csak az RC3 kivezetésre kötött led-et fogja a gomb lenyomásakor kioltani...
Egyrészt: köszi, valóban nem volt zárva a JP5. Másrészt: továbbra se jó, de már hajlok afelé, hogy a mikrokapcsoló ment tönkre. Feltettem egy példaprogramot, amit a PICKIT2-höz kaptam és azzal se működött.
Ezt könnyű kideríteni. Érints egy drótot a PIC adott lába és a táp, majd az adott láb és a gnd közé. Ha valamelyikre reagál, akkor tényleg valami a nyomógombbal nem stimmel.
Idézet: Felejtsd el! Elvileg megoldható a C program assemblyből való hívása és az assembly eljárások C-ből való hívása, de így, hogy assembly legyen a főprogram és még az USB kezelése is menjen, százszor (ha nem ezerszer) komplikáltabb, mint azoknak az egyszerű C programoknak a megértése, amit pl. a PIC - USB - PC projekt topikban, vagy a PICCOLO projekt honlapján (as USB használata c.fejezetben) bemutattam. Természetesen le kell tölteni hozzá a PIC18 támogatói programkönyvtárat (a code_examples.zip állomány) is, de nem bonyolult, és ott a leírás.„Azt szeretném megoldani, hogy csak az egyszerű assembly fordítás eredményét töltöm be, de az adatok USB-n közlekedjenek.” A tananyag PIC18F14K50 és PIC18F4550 mikrovezérlőkhöz készült, az LPC USB paneleden elvileg módosítás nélkül futnia kell (sohasem volt még ilyen panel a kezemben, ezért mondom, hogy elvileg).
Gond lehet akkor, ha a PICkit2-t rajta hagytad a panelen, s nem mondtad neki, hogy "engedje el" az MCRL lábat. Ilyenkor a nyomógomb hiába erőlködik, az 1 kohm-so ellenálláson keresztül nem bírja lehúzni, mert a PICkit2 Vpp/MCRL kimenete direktbe húzza fel.
Ha ez vígasztaló: én is jártam már így vele...
Szerintem legegyszerubb, ha teszel a PIC melle egy USB-Serial atalakito IC-t. Ekkor a PIC-nel csak UART-on keresztul kell nyulkalni, rendkivul konnyu leprogramozni ASM-ben, es a PC oldalon is soros portkent fogod tudni latmi a PIC-edet.
trudnai:
Gondoltam erre, de ott van az IC-ben ez a lehetőség is, a Chi..ad pedig még nem árulja a Microchip új áramkörét. icserny: Ha az USB csak megszakításból menne, nem lenne szükség másra, csak meghívni a config rutinját és ketyegne a háttérben. Hely van elég. Ha nem indítom el, olyan, mintha ott sem lenne. A PICCOLO-t olvasgatom, sokat tanultam belőle, köszönöm. Néhány dolgot le is töltöttem, kiszedtem a sorszámokat, de valamit elrontottam, így nem fut. Idézet: „Gondoltam erre, de ott van az IC-ben ez a lehetőség is, a Chi..ad pedig még nem árulja a Microchip új áramkörét.” Ertem, es jogos is a dolog, de ha ram hallgatsz nem allsz neki ASM-ben SUB-t faragni Szilvaval anno jocskan kiveseztuk, mar nem emlekszem ra pontosan, de 2-3 heten keresztul szinte minden nap hajnalig faragtunk, es meg napkozben is a leirasokat bongesztem, mire ossze allt a kod. Pedig Szilva hidd el nagyon eles eszu es gyors felfogasu, jomagam pedig mar tobb, mint 20 eve assemblyzem, ugyhogy valoszinuleg nem a szurke allomannyal volt ott a gond, hanem az anyag mennyisegeben ill. hianyaban (merthogy nincs tul jol dokumentalva ha kozvetlenul a SIE-nek esel neki...) Szoval a MicroChipes USB konyvtar valoszinuleg a jarhato ut C18-ban, es ha kell mas amihez kell a sebesseg akkor megfeleloen illeszteni kell az ASM modulokat (ahogy az mar elhangzott itt). |
Bejelentkezés
Hirdetés |