Fórum témák

» Több friss téma
Fórum » PWM mikrokontrollerrel
 
Témaindító: Magor, idő: Nov 5, 2006
Témakörök:
Lapozás: OK   1 / 9
(#) Magor hozzászólása Nov 5, 2006 /
 
Sziasztok!

Szeretnék egy kis segítséget kérni. Szeretnék PWM jelet előállítani PIC16F877-el. A PIC-et Assembly-ben programozom.

Kérésem a következő lenne, akinek lenne PWM-et előállító programja, programrészlete, mely kommentezve van, kérem küldje el.
Ha esetleg valaki csinált már ilyesmit, azzal is szívesen beszélnék az ügyben.

Köszönöm a segítséget előre is!

MaGor
(#) Slope hozzászólása Nov 6, 2006 /
 
Hardveres, vagy szoftveres PWM-et akarsz?
(#) Magor válasza Slope hozzászólására (») Nov 6, 2006 /
 
Szia!

Hardveres PWM megoldás érdekelne, mivel a PIC-nek mellette eléggé sok dolgot kell csinálnia.
(#) Báddzsó válasza (») Nov 6, 2006 1 /
 
Google sokat segít Magor, írd be pic pwm, és lesz német angol stb találat, tutorial.
pl ez
(#) gtk válasza Magor hozzászólására (») Nov 6, 2006 /
 
Magor:

Ezt talaltam.
(#) watt válasza Magor hozzászólására (») Nov 23, 2006 /
 
Dehiszen a hardveres PWM benne van ebben a PIC-ben? Mi a gond? Csak be kell állítani és elindítani! Ezt nem nevezném programnak, ez konfiguráció. Azt hogy hogyan kell az adatlap leírja. Minden adatlap letölthető a www.microchip.com -ról.
(#) Magor válasza watt hozzászólására (») Nov 23, 2006 /
 
Kedves Watt!

Az adatlapot is megnéztem és neki álltam a program írásának, csak bonyolult a beállítása ezért kértem segítséget. Ha csak be kell állítani és elindítani, akkor kérlek írd meg a programrészt, ha ennyire egszereű! Emellett megszakítás kezeléssel akarom csináni a programot, mivel ahogy már említettem több dolgot is kell csinálni a a PIC-nek.
(#) kyrk hozzászólása Nov 23, 2006 /
 
Nem bonyolult az. Van a PWM doksi resz vege fele egy pelda is. A lenyeg, hogy be kell allitani valamilyen frekire. Ezt vagy kiszamolod vagy abbol a par beldabol kiveszel egyet. Van egy masik reg amivel a kitoltesi tenyezot lehet allitani. Pofon egyszeru! Tessek elolvasni alaposan!!! Elsore neheznek tunhet de nem az!
(#) gtk válasza Magor hozzászólására (») Nov 23, 2006 /
 
Idézet:
„Emellett megszakítás kezeléssel akarom csináni a programot, mivel ahogy már említettem több dolgot is kell csinálni a a PIC-nek.”


Nem tudom ,hogy itt idoosztasra gondolsz-e?En azt javaslom.Nekem mindig bevalt Igaz en C-ben irok,asm-ben lehet h nehezebb
(#) watt válasza Magor hozzászólására (») Nov 23, 2006 /
 
Szia Magor!
Létod többiek is azon a véleményen vannak, hogy ez egyszerű, és van példa az adatlapban. Azt ne kérd senkitől, hogy írjon neked egy programrészt, mert nem tudunk semmit arról, hogy Te mit akarsz megoldani.

Azt írod, hogy más dolgot is fog csinálni a PIC miközben PWM-ezel. Nos a PWM modul teljesen különálló egység, nem kell vele foglalkozni.

A TMR2 adja a periódus időt, a CCPR1 az első félperiódus idejét. Nézd meg a Figure 8-4:-et jól látható miről beszélek.
Aztán nézdmeg a Table 8-3:-at, néhány beállítási példa van ott.
Gondolom a MOVLW, MOVF utasításokat ismered, ezzel nem traktállak. :papakacsint:
(#) kartoon hozzászólása Ápr 24, 2008 /
 
Udv, nem nyitnek uj topikot a kerdesemnek, ide pont beleillik. Remelem olvassatok is.
Egy robotot keszitek aminek a meghajtasat egy pic pwm-en keresztul ket h-hiddal oldanam meg. Itt vannak a kapcsolasok es a
pic program.
A pwm kapcsolasban a pic egy 19.6608MHz-es kristalyal uzemel, gondolom csak ez volt keznel, azonban ilyet talalni nem konnyu. Egy 20MHz-es kr.al is mukodik csak felrehuz, legalabbis a leiras szerint. Van valaki aki at tudja irni ezt egy 20-as kristalyra? Mivel tanulni is szeretnek az ugybol, esetleg kommentezve vagy itt a forumon feltalalva.
Tul nagy keres?
Udv.
(#) kobold válasza kartoon hozzászólására (») Ápr 24, 2008 /
 
Nem tudom megnyitni, mert a tűzfal nem engedi, de ha tudod a működési paramétereket (frekvencia, kitöltés), akkor a meglévő programban be tudod azonosítani a szükséges kódrészeket, illetve generálhatod az új értékeket is ezzel a segítséggel
(#) proba válasza kartoon hozzászólására (») Ápr 24, 2008 /
 
Nem tudom a .C forráskódban ha átírod a frekit (az első pár sor közül az egyik) és lefordíttatod újra , a cikk szerzője szerint legalábbis működik.(ha próbáltad és nem ment akkor bocs.)
(#) kartoon válasza proba hozzászólására (») Ápr 24, 2008 /
 
Udv, nem probaltam, de valoszinuleg nem menne. Ha megnezed a 284-287 sorokban meghatarozza az atviteli sebesseget ami 9600 baudra jon ki neki, es meg valamit amit nem ertek. Itt hasznalja fel a valtozo erteket amit korabban a kristaly meretvel definialt. En igy latom.
(#) kartoon válasza kobold hozzászólására (») Ápr 24, 2008 /
 
innen talan mar sikerul megnyitni:
Bővebben: link
(#) kobold válasza kartoon hozzászólására (») Ápr 24, 2008 /
 
Igen, így már sikerült.
Valószínűleg azért használt ilyen kristályt, mert nagyon szépen kijött vele a 9600 Hz, 20 MHz-es órajellel nem fog sikerülni. Az általad is említett soroknál át kell írni a regisztereket az új órajelnek megfelelően, és szerintem a deklarációknál a CCPCENTER meghatározását is módosítani kell, hogy precízen kijöjjön az 1.5 ms időtag, amitől pont középre áll majd a motor.
Ki lehet ezt próbálni, de lehet, hogy megoldható volna egy trimmer kondit tenni a 20 MHz-es kristály egyik lábához, és az eredeti kódot futtatva addig "hangolni", amíg a motor nullája stabil nem lesz (már ha lehet ennyit állítani, kb. 2 % eltérés).
(#) kartoon válasza kobold hozzászólására (») Ápr 24, 2008 /
 
A valaszt koszonom, azonban a trimmer kondit nem tartom tul jo otletnek, mert konnyen elhangolodik. Erzekeny a rezgesre, merpedig abbol lesz resze boven a szerkezeten. Inkabb kiszamolom valahogy, egyelore azonban meg nem ertem a kodot. Ha elakadtam majd felteszem a mentokerdest. Koszonom a hozzaszolasokat.
(#) kartoon hozzászólása Ápr 24, 2008 /
 
sikerult addig eljutnom, hogy kiszamoltam 1ms 20MHz-es kristalyal 5000, es 1,5ms 7500 az alapjan, ha 7373 1,5ms 19,6608MHz-en. Hogy ez mi azt nem ertem, itt a programreszlet:

#define XTAL 196608000 //crystal frequency
#define CCPSCALE 18 //divisor scales to pwm
#define CCPCENTER (7373 / CCPSCALE) //this should be 7373 for 1.5 millisec at 19.66 MHZ
#define MINPWM 10 //add some deadband
#define CLDELAY 2 //delay before monitoring transistor saturation
#define MINGOOD 4000 //4915 is 1 millisecond


hogy ezek a valtozok mi celt szolgalnak nem ertem.
ezek a sorok sem vilagosak:

// baud rate = xtal/(64(SPBRG+1)) for BRGH = 0 or xtal/(16/(SPBRG+1)) for BRGH = 1
SPBRG = 0x1F; //0x1F = 31 = 9600 baud with BRGH = 0 with 19.66 MHz xtal
RCSTA = 0x90;
TXSTA = 0xA2; //brgh = 0
//get timer0 going
TMR0 = 0;
CLRWDT();
OPTION = 0b11011100; //prescaler = /16 assigned to WDT .018 * 16 = .288 sec typ
//WDT cold 16 * .009 * sec, hot 16 * .028 sec
//bit 6 hi: RB0 INT is rising edge triggered
TMR0 = 0;


ha megmagyarazna valaki annak orulnek.
A kodreszlet ebbol a forraskodbol lett kimasolva:
Bővebben: Link
(#) Báddzsó válasza kartoon hozzászólására (») Ápr 25, 2008 /
 
ezek nem változók hanem regiszterek amiket be állít indulásnál a PIC,
  1. // baud rate = xtal/(64(SPBRG+1)) for BRGH = 0 or xtal/(16/(SPBRG+1)) for BRGH = 1
  2. SPBRG = 0x1F; //0x1F = 31 = 9600 baud with BRGH = 0 with 19.66 MHz xtal
  3. RCSTA = 0x90;
  4. TXSTA = 0xA2; //brgh = 0

ezekkel a sorokkal a sorosport sebességét és a indulásást állítja be.
többi emg a timer0 -át nullázza
wachdogtimert is
belövi az option regisztert azon belül a timer preszkálerét.... szerintem nézegesd az adatlapját és rá fox jönni hogy mi mi, keress rá a szavakra, benne van!
(#) watt válasza kartoon hozzászólására (») Ápr 25, 2008 /
 
Idézet:
„hogy ezek a valtozok mi celt szolgalnak nem ertem.”

Pontosítsunk. A #define után nem változók vannak, hanem ellenkezőleg, állandók(constans). Azt nem értem miért nem használja fel a programban a készítő őket, ha egyszer definiálta, hiszen csak megjegyzésben láthatjuk őket a képletekben. (legalább is ebben a részletben...)

A többit Báddzsó leírta. Irány az adatlap!
(#) kartoon válasza watt hozzászólására (») Ápr 25, 2008 /
 
Az adatlapra nem gondoltam, koszi a javaslatot. Utananezek.
(#) VrGakos hozzászólása Aug 31, 2008 /
 
Sziasztok!

PIC16F877A-val szeretnék PWM-es led fényerőszabályzást. Csak én CCS nyelven. Azt már megtaláltam a pic adatlapjában hogy a pwm kimente a C2-es lábon van, és csak asm nyelven találok programokat.

Ákos
(#) watt válasza VrGakos hozzászólására (») Aug 31, 2008 /
 
Idézet:
„és csak asm nyelven találok programokat”

Nem véletlen, hiszen a gyártó csak a 18F-ektől támogatja a PIC-eket C nyelvvel. Ezért azokat szinte mindenki(kivéve a kezdőket, akik azt hiszik a C könnyebb!) asm-ban programozza. Javaslom neked is.
(#) VrGakos válasza watt hozzászólására (») Aug 31, 2008 /
 
Akor mondj 18F4550-ra ccs-es programat, mert olyan is van kéznél .
Idézet:
„a gyártó csak a 18F-ektől támogatja a PIC-eket C nyelvvel”
ezt nem értem.
(#) watt válasza VrGakos hozzászólására (») Aug 31, 2008 /
 
MCC18 a fejlesztő környezet neve. Én nem használom a ccs-t így nem tudok ebben segíteni. Kész programot meg amúgy se nagyon fog adni senki, és nem is illik kérni. A példa kódokat általában a gyártó honlapján meg lehet találni, de nyílván nem ccs nyelven.
(#) MPi-c válasza VrGakos hozzászólására (») Aug 31, 2008 /
 
Nézd meg a ccs "Manual"- jét is. A gyártó lapjáról letölthető. Van példa program is, hirtelen a fenti dok-ban ex_pwm.c és ex_power_pwm.c néven találtam. Ezek a fájlok a teljes PCW telepítésekor a PICC\Examples könyvtárában vannak.
Ezn kívül a ccs fórumán lehet keresgélni további megoldások után.
(#) potyo válasza VrGakos hozzászólására (») Aug 31, 2008 /
 
Vedd elő az adatlapot és olvasd el PWM-ről szóló részt. Aztán definiáld CCS-ben a szükséges regisztereket, hogy direkt el tudd érni az SFR zónát, és az adatlap leírása alapján állítsd be a megfelelő regisztereket. 18F-et szinte senki sem programoz CCS-ben, nem véletlelül. De ezzel a módszerrel megcsinálhatod 16F-re is...
(#) Mate78 hozzászólása Szept 1, 2008 /
 
Sziasztok

A segítségeteket szerném kérni.18F452 PWM moduljával foglalkozom,és adott 16 különböző kitöltési tényező,amit táblázatban tárolok,és szükség esetén betöltöm a megfelelő regiszterekbe.Ezzel nincs is eddig gond.
Ami a kérdésem:szerintetek milyen kitöltési tényezőt adnak a következő értékek 20MHz órajelnél?
(TMR2 előosztó 1:1-re van állítva.)

CCPRxL-be:0x8C,CCP1CON-ba:0x30 (szerintem 55%)
CCPRxL-be:0x42,CCP1CON-ba:0x10 (szerintem 26%)

Ha valaki venné a fáradságot és utánaszámolna,nagyon megköszönném,mert egyszerűen bárhogy számolom nem az jön ki mint aminek kellene.

köszönöm

üdv.
(#) watt válasza Mate78 hozzászólására (») Szept 2, 2008 /
 
Ha a PR2 255, akkor jól számoltál. Még annyit, hogy a felbontás így 10 bit(0-1023) és a freki 19,53KHz
(#) Mate78 válasza watt hozzászólására (») Szept 2, 2008 /
 
PR2-ben 249 van (0xF9) de ez nem sokat változtat a dolgon szerintem.A gond az hogy a megadott 16 db kitöltési tényezőt ha visszaszámolom a hexa értékekből,nem az jön ki,mint aminek kellene.(16 db kitöltési tényezőről van szó,egy mikrosteppes léptetőmotor vezérléshez használnám .)
Viszont a motor működik megfelelően,de ha átírom a kitöltési tényezőket az általam jónak vélt értékekre,nem jól működik a motorom,és bosszant hogy nem tudom meg az okát.A program egyébként a Microchip AN822 Application Note-jából való.

üdv.
Következő: »»   1 / 9
Bejelentkezés

Belépés

Hirdetés
Lapoda.hu     XDT.hu     HEStore.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