Fórum témák
» Több friss téma |
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
Szia!
Hardveres PWM megoldás érdekelne, mivel a PIC-nek mellette eléggé sok dolgot kell csinálnia.
Google sokat segít Magor, írd be pic pwm, és lesz német angol stb találat, tutorial.
pl ez
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.
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.
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!
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
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:
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.
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
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.)
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.
innen talan mar sikerul megnyitni:
Bővebben: link
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).
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.
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
ezek nem változók hanem regiszterek amiket be állít indulásnál a PIC,
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! 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!
Az adatlapra nem gondoltam, koszi a javaslatot. Utananezek.
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 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.
Akor mondj 18F4550-ra ccs-es programat, mert olyan is van kéznél .
Idézet: ezt nem értem. „a gyártó csak a 18F-ektől támogatja a PIC-eket C nyelvvel”
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.
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...
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.
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
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. |
Bejelentkezés
Hirdetés |