Fórum témák

» Több friss téma
Fórum » CCS PIC Compiler
 
Témaindító: (Felhasználó 1542), idő: Ápr 3, 2006
Lapozás: OK   90 / 118
(#) szuperman hozzászólása Aug 27, 2013 /
 
Helló mindenki!

Van egy váltó dekóderem, amit át szeretnék programozni. A gondom az ,hogy nem tudom, hogy lehetne a DCC jelet a PIC el értelmezni. Valaki tudna segíteni egy példával?

Előre is köszi!
(#) szuperman hozzászólása Szept 10, 2013 /
 
Helló mindenki!

Szeretnék egy PWM szabályzást megvalósítani. (led fényerő) Valaki el tudná nekem magyarázni, hogy tudom kiszámolni hány % a PWM kitöltésem?

Össze raktam egy ilyen kódot:
  1. #include <16f628a.h>
  2. #use delay (clock=4MHz)
  3. #fuses NOWDT,NOPROTECT,NOPUT,BROWNOUT,NOLVP, NOMCLR
  4. #fuses INTRC_IO
  5.  
  6. void main(void){
  7.  
  8.    long x=100;
  9.  
  10.    setup_timer_2(T2_DIV_BY_16,125,1); // 1KHz; 1ms
  11.    setup_ccp1(CCP_PWM);
  12.    set_pwm1_duty (x);
  13.    
  14. }

Ez így jó? Van olyan PIC viszonylag olcsón, amiben van két PWM modul?

Előre is köszi!
(#) Hp41C válasza szuperman hozzászólására (») Szept 11, 2013 /
 
16F1827, 16F1847, 16F87x, 16F87xA, 16F88x, 18F2420, 18F2520 stb...
A hozzászólás módosítva: Szept 11, 2013
(#) szuperman válasza Hp41C hozzászólására (») Szept 11, 2013 /
 
Elnézést a sajtó hibáért! 3 db CCP modulra lenne szükségem. Kénytelen leszek más megoldást keresni.

Konkrétan RGB ledeket szeretnék vezérelni. Ehhez kellene 3 CCP modul. Vagy ezt máshogy szokták megoldani?
(#) _vl_ válasza szuperman hozzászólására (») Szept 11, 2013 /
 
12F1501
16F1503, 1507, 1508, 1509
16F1824, 1825, 1827, 1828, 1829, 1847
16F1934, 1936, 1937, 1938
18F2xK22, 18F4xK22
18F2xK80, 18F4xK80
(#) vilmosd válasza szuperman hozzászólására (») Szept 11, 2013 /
 
18F2431, 18F4431
(#) sysy válasza _vl_ hozzászólására (») Szept 11, 2013 /
 
Ezt a listát fenntartásokkal kezelném, mert gyanús nekem, hogy 12F sorozat 8 lábú kivitelben ilyen sok független PWM module lenne. Megnéztem a 12F1501 adatlapját és egy kicsit félrevezető az a 4 PWM kimenet amit írnak. Azok gyakorlatilag egy közös Timer2-vel rendelkeznek és szerintem arra jó, hogy egy teljes H hidat meg tudnak hajtani a négy kimenettel, azonos frekivel és azonos kitöltési tényezővel. A többi tipusban lehet akár három független PWM module is, de ezt le kell ellenőrizni az adatlapokból. Amiben van Timer2, Timer4, Timer6 azok szerintem jók lehetnek neked. Sajnos az adatlap nézegetést nem lehet megúszni.
(#) Dempsey hozzászólása Szept 11, 2013 /
 
Sziasztok mesterek!
Valaki tudna nekem is segíteni pár hozzászólással ezelőtt megtaláljátok a problémám. Köszi szépen.
(#) _vl_ válasza sysy hozzászólására (») Szept 11, 2013 /
 
Az utolsó mondatod az egyetlen, amiben egyetértünk: az adatlap nézegetést nem lehet megúszni.
Szerintem nem félrevezető az: azok a PWM modulok függetlenek, az időalapjuk meg nem. Ez annyit jelent, hogy a kitöltési tényezőt tudod függetlenül állítani, a frekit viszont nem (de ezt az adatlap alapos olvasásából azért meg lehet ám tudni). Fényerőszabályozáshoz ez tökéletesen elegendő. Figyelembe véve az IC méretét és árát, nagyon kis jó cucc az. Hogy a vezérlés irányításához mennyire elegendő a 6 db I/O lábból megmaradó 2, az már más tészta, de ezt majd eldönti a kedves felhasználója. Viszont ott vannak a nagyobb testvérei is (16F150x), ha kevés lenne a láb.
(#) sysy válasza szuperman hozzászólására (») Szept 11, 2013 /
 
A PWM kitöltés kiszámítására az adatlapban vannak príma képletek. De ha egyszerűbben és érthetőbben akarod tudni, akkor a te példádon keresztül számoljuk most ki. A PWM periódusidejét (frekijét) a Timer2 és PR2 beállításával tudod megadni. A kitöltési tényezőt pedig egy összetett, bonyolult nevű regiszterpár értékével. A PWM periodusidőt úgy tudod meg, hogy az oszcillátor frekit (4MHz) elosztod 4-el. Ez 1MHz, ez a belső órajel, ez hajtja a timereket. Te így állítottad be a Timer2-t: T2_DIV_BY_16,125,1, ez azt jelenti, hogy: előosztó, PR2, utóosztó. A te beállításodban a belső órajelet egy 16-os előosztó leosztja 62500Hz-re, majd a PR2 értékével is továbbosztja 125-el. Így lesz neked 62500/125=500Hz. Az utánosztó nálad 1, tehát már nem osztódik tovább a Timer2 frekije. Tehát a PWM frekid 500Hz lesz. (nem pedig 1kHz!).
A kitöltési tényezőt meg a fentebb említett bonyolult nevű regiszterpár állítja be neked, amit a CCS egyszerűen csak set_pwmx_duty(x) néven emleget. Ennek az értéke és a PR2 értékének az aránya adja meg a kitöltési tényezőt. A te esetedben x=100 és PR2=125 esetén 100/125=0.8 Ha százalékban akarod látni, akkor az eredményt megszorzod 100-al, tehát most 80% a kitöltési tényező.
Óvatosan kell kezelni a x értékét, mert sokan elfelejtik, hogy a kitöltési tényező nem lehet nagyobb, mint a PR2 értéke, mert akkor megszűnik PWM-nek lenni és csak egy magas szint jelenik meg a kimeneten. Ezt az ellenőrzést én mindenképpen beépíteném a programba.

Sok sikert a PWM programozáshoz!
(#) sysy válasza _vl_ hozzászólására (») Szept 11, 2013 /
 
Hát igen, az adatlapot tanulmányozva valóban külön lehet állítani a kitöltést a 4 PWM kimeneten és csak az időalap a közös. Köszi, hogy szóltál.
(#) szuperman válasza sysy hozzászólására (») Szept 11, 2013 /
 
Köszön a magyarázatot a számoláshoz.
(#) szuperman válasza sysy hozzászólására (») Szept 11, 2013 /
 
Megnéztem szimulátorban a beállítást. Ott inkább 20% -nak tűnik a kitöltés, mint 80% nak. Vagy a kitöltés azt jelenti, hogy mennyi ideig van alacsony szinten a kimenetem?

Ledek fényerejének szabályzásához mekkora PWM frekit ajánlotok? 500Hz -et már nem látnék ugye?

Előre is köszi!

skóp.PNG
    
(#) potyo válasza szuperman hozzászólására (») Szept 11, 2013 /
 
500Hz jó lesz.
(#) potyo válasza sysy hozzászólására (») Szept 11, 2013 /
 
Eleve logikátlan dolog lenne négy lábat használni arra, amire egy is elég...
(#) sysy válasza potyo hozzászólására (») Szept 11, 2013 /
 
Mire gondoltál? Mert ezt hirtelen nem értettem.
(#) sysy válasza szuperman hozzászólására (») Szept 11, 2013 /
 
Valami nem jó a mérésnél, vagy a PIC beállításoknál. A PIC a ciklus indulásakor magasba állítja a kimenetet és addig tartja ott, amíg a duty_cycle(x) értékét el nem éri a Timer2 értéke. Ekkor kapcsolja le a kimenetet és még vár addig, amíg a Timer2 értéke eléri a PR2 értékét. Ekkor idúl újra a folyamat.
Tehát: nálad az x=100, a periódus (PR2) értéke 125. A 100 az 80%-a a 125-nek. Tehát 80% magas, 20% alacsony a kimenet állapotja. Ha minden igaz.
(#) potyo válasza sysy hozzászólására (») Szept 11, 2013 /
 
Erre:
Idézet:
„Azok gyakorlatilag egy közös Timer2-vel rendelkeznek és szerintem arra jó, hogy egy teljes H hidat meg tudnak hajtani a négy kimenettel, azonos frekivel és azonos kitöltési tényezővel.”

Ha azonos frekvenciával és kitöltési tényezővel akarnának meghajtani H hidat, akkor arra egy, vagy a holtidő miatt esetleg maximum két láb is elég, nem kellene négy hozzá.
(#) sysy válasza potyo hozzászólására (») Szept 11, 2013 /
 
Lehet, hogy igazad van, ezt még át kell gondolnom. Én eddig négy PWM kimenettel hajtottam a forgásirányváltós H hídjaimat. Lehet, hogy revideálnom kell a nézeteimet ezen a téren. Mindenesetre köszi.
(#) potyo válasza sysy hozzászólására (») Szept 11, 2013 /
 
Az átlóban levő kapcsolóelemeket mindig egyszerre kapcsolod be, nem?
A hozzászólás módosítva: Szept 11, 2013
(#) sysy válasza potyo hozzászólására (») Szept 11, 2013 /
 
Nem, mert néha fékezni is kell a motrot. De most, hogy mondod, elég lenne az alsó vagy a felső oldalt PWM-ezni. Még morfondírozok ezen.
(#) tomat5 válasza Dempsey hozzászólására (») Szept 12, 2013 /
 
Szia
Amit írtam az nem jött be?
(#) Dempsey válasza tomat5 hozzászólására (») Szept 12, 2013 /
 
Szia! Szerintem már próbáltam mielőtt írtad, de nem vagyok benne biztos, megnézem még egyszer. Ha nem lesz jó van még valami ötleted? Köszi!
(#) vilmosd válasza sysy hozzászólására (») Szept 12, 2013 /
 
Bocs hogy belevau . A PR regiszter az 8 bites, viszont a duty erteke 10 bites. Tehat a TMR2 255 PR erteknel 1023-ig novekszik. A jelen peldara levetitve a PR=125 erteknel TMR2 erteke 501 lehet maximum, es itt lesz 100 % kitoltes. Tehat a duty=100 erteknel a kitoltes 20 % lesz.
(#) szuperman válasza vilmosd hozzászólására (») Szept 12, 2013 /
 
Akkor ezét mutatta a szimulátor, hogy 20% a kitöltésem.
(#) Dempsey válasza Dempsey hozzászólására (») Szept 12, 2013 /
 
Sajnos nem működik ahogy írtad.
A hozzászólás módosítva: Szept 12, 2013
(#) sysy válasza vilmosd hozzászólására (») Szept 13, 2013 /
 
Ahogy én tudom a Timer2 csak 8 bites és nem tud 255-nél többet számolni. Persze senki sem csalhatatlan, lehet, hogy ezt is rosszul tudom.
A hozzászólás módosítva: Szept 13, 2013
(#) icserny válasza sysy hozzászólására (») Szept 13, 2013 /
 
Idézet:
„Timer2 csak 8 bites és nem tud 255-nél többet számolni”
Ez így van. Ettől függetlenül a PWM tényleg 10 bites felbontású, mert Timer2 8 bitjét kiegészítik az utasításcikluson belüli órajel fázisok 4 állapotával, így jön ki az 1024 állapot (4 x 256).
(#) sysy válasza icserny hozzászólására (») Szept 13, 2013 /
 
Ez releváns információ volt, köszi István. És ezeket a speciális ismereteket honnan lehet kiolvasni? (tudom, az adatlapból)
(#) potyo válasza sysy hozzászólására (») Szept 13, 2013 /
 
Igen, csakis onnan lehet. Valahol a PWM periféria leírásánál szerepel, hogy ki lesz egészítve a prescaler kimenetével a 8 bites TMR2. Van is ott valami blokkrajz erről, pl. Figure 15-3 a 18F4550 adatlapjában.
A hozzászólás módosítva: Szept 13, 2013
Következő: »»   90 / 118
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