Fórum témák

» Több friss téma
Fórum » PIC programozás
 
Témaindító: G-Lex, idő: Okt 24, 2005
Lapozás: OK   25 / 66
(#) watt válasza knobor hozzászólására (») Máj 4, 2010 /
 
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.
(#) icserny válasza knobor hozzászólására (») Máj 4, 2010 /
 
Idézet:
„kezdő honnan tudna megtanulni a legegyszerűbb programozási parancsokat?”
Ez attól függ, hogy mit, milyen nyelven és milyen fejlesztői környezetben szeretne programozni a kezdő!

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
(#) csabino hozzászólása Máj 5, 2010 /
 
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
(#) potyo válasza csabino hozzászólására (») Máj 5, 2010 /
 
Apróhirdetési rovatban próbálkozz.
(#) trudnai válasza csabino hozzászólására (») Máj 23, 2010 /
 
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!
(#) fraba hozzászólása Jún 3, 2010 /
 
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.
(#) watt válasza fraba hozzászólására (») Jún 3, 2010 /
 
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.
(#) Hp41C válasza fraba hozzászólására (») Jún 3, 2010 /
 
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.
(#) watt válasza Hp41C hozzászólására (») Jún 3, 2010 /
 
É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.
(#) fraba válasza watt hozzászólására (») Jún 3, 2010 /
 
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!
(#) El_Pinyo válasza fraba hozzászólására (») Jún 3, 2010 /
 
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.
(#) fraba válasza El_Pinyo hozzászólására (») Jún 3, 2010 /
 
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!
(#) icserny hozzászólása Jún 3, 2010 /
 
Delta-Sigma konvertert is lehet játszani a komparátorral.
Bővebben: Link (#14. példa)
(#) Hp41C válasza fraba hozzászólására (») Jún 3, 2010 /
 
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.
(#) uramesi89 hozzászólása Jún 3, 2010 /
 
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.
(#) fraba válasza Hp41C hozzászólására (») Jún 3, 2010 /
 
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?
(#) watt válasza uramesi89 hozzászólására (») Jún 4, 2010 /
 
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ó...
(#) watt válasza fraba hozzászólására (») Jún 4, 2010 /
 
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.
(#) Bell hozzászólása Jún 4, 2010 /
 
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?
(#) unicorn hozzászólása Jún 4, 2010 /
 
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ő:

  1. #include <htc.h>
  2. __CONFIG(INTIO & WDTDIS & PWRTDIS & MCLRDIS & UNPROTECT & BORDIS & IESODIS & FCMDIS);
  3.  
  4. char counter;
  5.  
  6. void main(void)
  7. {
  8.         PORTA = 0b00000000;
  9.         ANSEL = 0x00;
  10.         // port directions: 1=input, 0=output
  11.         TRISA = 0b11111111;
  12.         TRISC = 0b00000000;
  13.         while (1){
  14.                 PORTC = PORTA;
  15. //              PORTC = 0b00001111;
  16.                 _delay(100000);
  17.         }
  18. }


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?
(#) potyo válasza unicorn hozzászólására (») Jún 4, 2010 /
 
Nem sok az a 100000 egy kicsit a delay-ban? Kommentezd ki és nézd meg úgy.
(#) unicorn válasza potyo hozzászólására (») Jún 4, 2010 /
 
Nem, nem volt sok. próbáltam futófényként és szépen ment a ledsor.
(#) Hp41C válasza unicorn hozzászólására (») Jún 4, 2010 /
 
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...
(#) unicorn válasza Hp41C hozzászólására (») Jún 4, 2010 /
 
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.
(#) potyo válasza unicorn hozzászólására (») Jún 4, 2010 /
 
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.
(#) icserny válasza Bell hozzászólására (») Jún 4, 2010 /
 
Idézet:
„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.”
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.

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).
(#) icserny válasza unicorn hozzászólására (») Jún 4, 2010 /
 
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...
(#) trudnai válasza Bell hozzászólására (») Jún 4, 2010 /
 
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.
(#) Bell válasza icserny hozzászólására (») Jún 4, 2010 /
 
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.
(#) trudnai válasza Bell hozzászólására (») Jún 4, 2010 /
 
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).
Következő: »»   25 / 66
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