|
|
Elektronika.lt portalo forumas
Jūs esate neprisijungęs lankytojas. Norint dalyvauti diskusijose, būtina užsiregistruoti ir prisijungti prie forumo.
Prisijungę galėsite kurti naujas temas, atsakyti į kitų užduotus klausimus, balsuoti forumo apklausose.
Administracija pasilieka teisę pašalinti pasisakymus bei dalyvius,
kurie nesilaiko forumo taisyklių.
Pastebėjus nusižengimus, prašome pranešti.
Dabar yra 2024 12 27, 15:19. Visos datos yra GMT + 2 valandos.
|
|
|
|
Forumas » Mikrovaldikliai » Pulse Width Modulation - C kalba...
|
Jūs negalite rašyti naujų pranešimų į šį forumą Jūs negalite atsakinėti į pranešimus šiame forume Jūs negalite redaguoti savo pranešimų šiame forume Jūs negalite ištrinti savo pranešimų šiame forume Jūs negalite dalyvauti apklausose šiame forume
|
|
|
Puslapis 1 iš 3 Pereiti prie 1, 2, 3 Toliau |
|
|
|
|
Pulse Width Modulation - C kalba... |
Parašytas: 2006 07 07, 17:40 |
|
|
|
Kodas: |
unsigned short int i = 0;
void PWM(unsigned short int pwp) //0/40=0% 10/30=25% 20/20=50% 30/10=75% 40/0=100% 25kHz PWM
{
unsigned short int on = ceil((0,4*pwp));
unsigned short int off = (40 - on);
GPIO = 0xFF;
Delay_us(on);
GPIO = 0;
Delay_us(off);
}
void main()
{
TRISIO = 0;
while(i < 100)
{
i++;
PWM(i);
}
} |
užkniso tos visos PWM bibliotekos galvoju pats pasirašysiu vieną funkciją ir nebus problemų.. tai va bet problemų yra
Delay_us reikalauja konstantos.. tai čia nelabai tinka, kaip dar galima užlaikymą padaryt?
radau tokią funkciją mikroC:
Citata: |
Prototype void Delay_Cyc(unsigned Cycles_div_by_10);
Returns Nothing.
Description Creates a delay based on MCU clock. Delay lasts for 10 times the input parameter in MCU cycles.
Note that Delay_Cyc is library function rather than a built-in routine; it is presented in this topic for the sake of convenience.
Requires Nothing.
Example Delay_Cyc(10); /* Hundred MCU cycles pause */ |
bet nelabai supratau kiek laiko ji sustabdo?
Ir kas priklausuo nuo PWM dažnio? pvz 50hz 5khz 35khz ir pan..?
Ir dar koks yra vidinis PIC12F629 oscilatorius ar kaip ten jis? kiek Mhz 4 ar 8? |
|
|
|
|
|
|
Pulse Width Modulation - C kalba... |
Parašytas: 2006 07 07, 18:58 |
|
|
|
sunku suprasti tavo programa.
jai del uzdelsimo tai padaryk koki tuscia cikla.
pvz
for(n=0,n<time,n++){}
aisku uzdelsimas nenuspejamas. teks eksperimentuoti |
|
|
|
|
|
Pulse Width Modulation - C kalba... |
Parašytas: 2006 07 07, 19:13 |
|
|
|
Taigi čia paprasčiausias PWM
tik vat man nepatinka, kad ceil((0,4*pwp)); funkcija užima 80% PIC'o atminties negi nėra kokių gudresnių suapvalinimo funkcijų?
o kaip padaryt uždelsima 1ciklo t.y. 0,25us? jeigu uC sukasi 4Mhz greičiu...
nenaudojant for.. |
|
|
|
|
|
Pulse Width Modulation - C kalba... |
Parašytas: 2006 07 07, 19:30 |
|
|
|
ka tas ceil daro?
siaip procesorius jun sveikais skaiciais skaiciuoja, taip kad nera ka ten apvalinti. ir nemanau kad tinka dauginti is 0.4 pries dauginat tai bus suapvalinta iki 0 arba 1
reikia pwp * 4 / 10, jokiu budu ne: pwp / 10 * 4
del uzdelsimo ant 4mhz minimalus uzdelsimas 1us
tai padarys komanda nop |
|
|
|
|
|
Pulse Width Modulation - C kalba... |
Parašytas: 2006 07 07, 19:41 |
|
|
|
ceil apvalina mikroC gudrybės..
blin nežinojau, kad reik tik sveikus sk rašyt
bet juk 1/4000000 = 0.25us
tai gaunas, kad NOP uždelsimas yra 4 ciklai..
ar aš kažką netaip supratau?
beja kaip įterp asm?
for(int i=0,i<us,i++)
asm
{
NOP
}
gausis kas nors? |
|
|
|
|
|
Pulse Width Modulation - C kalba... |
Parašytas: 2006 07 07, 19:53 |
|
|
|
atsimink kad pic procesoriams reikia 4 taktu vienai komandai.
jie labai leti.
jei nori nesveikus skaicius naudoti reikia naudoti float tipa,
programos dydis momentaliai padides nuo 100 iki 500baitu. o jei dar daugyba dalyba panaudosi tai net nesitikek sutalpinti i 1 kb |
|
|
|
|
|
|
Pulse Width Modulation - C kalba... |
Parašytas: 2006 07 07, 21:57 |
|
|
|
Kodas: |
int i;
void Delay(int us)
{
for(i=0;i<us;i++)
asm{
NOP
}
}
void main()
{
TRISIO = 0;
GPIO = 0xFF;
for(i=0;i<10;i++)
{
GPIO = 0xFF;
Delay_ms(100);
GPIO = 0;
Delay_ms(100);
}
while(1)
{
for(i=0;i<20000;i++)
{
GPIO = 0xFF;
Delay(10);
GPIO = 0;
Delay(10);
}
Delay_ms(100);
for(i=0;i<20000;i++)
{
GPIO = 0xFF;
Delay(5);
GPIO = 0;
Delay(15);
}
Delay_ms(100);
for(i=0;i<20000;i++)
{
GPIO = 0xFF;
Delay_us(1);
GPIO = 0;
Delay_us(19);
}
Delay_ms(100);
for(i=0;i<20000;i++)
{
GPIO = 0xFF;
Delay_us(17);
GPIO = 0;
Delay_us(3);
}
Delay_ms(100);
for(i=0;i<20000;i++)
{
GPIO = 0xFF;
//Delay_us(0);
GPIO = 0;
Delay_us(20);
}
Delay_ms(100);
}
} |
kas gali čia būt negerai?
kodas biški kvailai atrodo bet px tvarkysiu tada kai veiks taip kaip reikia
Ta Delay funkcija vietoj Delay_us bet nelabai veikia
Viskas pastringa kai pradeda suktis pirmas for ciklas esantis While(1) cikle.. pavargau jau aš čia su tuo PIC'u terliotis.. reikai daryt pertrauka
čia 50kHz PWM'as pagal įdėją turėtų būt persijunginėjantis 50% 25% 5% 85% 0% ir vėl iš pradžių
tai va rašykit kas negerai.. ačiū |
|
|
|
|
|
|
Pulse Width Modulation - C kalba... |
Parašytas: 2006 07 07, 22:14 |
|
|
|
Išpradžių pradeda mirgsėt LED kas 100ms kad žinot ar išviso šitas aparatas veikia..
poto pradeda suktis while ciklas ir įsijungia 50kHz PWM'as ir persijunginėja diodų ryškumas 50% 25% 5% 85% 0% ir t.t. su funkcija Delay_us veikia, bet kai įkišau Delay nebeveikia |
|
|
|
|
|
Pulse Width Modulation - C kalba... |
Parašytas: 2006 07 08, 12:26 |
|
|
|
o tam tavo pic'e taimeris kaip pwm neveikia? su softwariniu pwm geresniu rezultatu ir neverta tyketis tuo labiau ant 50khz, nuo daznio priklauso pulsaciju lygis po integratoriaus kadangi siuo atveju integruoja zmogaus akis tai i khz neverta lyst |
|
|
|
|
|
Pulse Width Modulation - C kalba... |
Parašytas: 2006 07 08, 12:39 |
|
|
|
mikroC kompiliatorius turi kažkokią PWM biblioteką, bet ant PIC12F629 nenori pasileist rašo "T2CON not found"...
O su timeriu nelabai įsivaizduoju kaip turėtų atrodyt.. gerai būtų, kad kas nors C pavyzdį kokį įmestų |
|
|
|
|
|
Pulse Width Modulation - C kalba... |
Parašytas: 2006 07 08, 12:54 |
|
|
|
su taimeriu ne c kalba esme, o registrus nustatyti tinkamai.
kokie reigstrai as nezinau,
cia reikia konkretu datasheeta skaityti. |
|
|
|
|
|
Pulse Width Modulation - C kalba... |
Parašytas: 2006 07 08, 13:26 |
|
|
|
Kodas: |
char counter;
void interrupt()
{
counter++; // increment value of counter on every interrupt
TMR0 = 96;
INTCON = 0x20; // set T0IE, claer T0IF
}
void main() {
OPTION_REG = 0x84; // assign prescaler to TMR0
TRISIO = 0; // designate gpio as output
GPIO = 0xFF; // initialize gpio
counter = 0; // initialize counter
TMR0 = 96;
INTCON = 0xA0; // enable TMRO interrupt
while(1)
{
if (counter > 222) GPIO = 0;
else GPIO = 255;
}
} |
Pagaliau radau kažkokį pvz su timeriu...
iš jo lyg ir bus nesunku pwm pagamint.. su if (counter > 222) reguliuosis pulso plotis.. tik vat reikia išsiaiškint kaip pwm dažnis nusistato.. nes dabar tai truputį per lėtas.. apie 1Hz
tai va kaip pakeist dažnį? |
|
|
|
|
|
|
Pulse Width Modulation - C kalba... |
Parašytas: 2006 07 08, 14:46 |
|
|
|
niekam netinka ta programa, ziauriai leta bus. Ir siaip net labai kvailai padaryta.
geriausia naudoti aparatrini PWM, nes kitaip nieko daugiau procesorius negales veikti.
ant atmega buna nuo vieno iki keliu tokiu isejimu, kaip del pic neaisku.
bet irgi turi tureti kazka panasaus.
is esmes ten labai lengva naudoti ta pwm, irasai i registra maksimalu taimerio laika, ir toliau tik belieka irasyti i dar viena registra koki skaiciu pasiekus isjungti arba ijungti isejimo porta.
jei nori programinio pwm, irgi galima. bet pertraukimu naudoti cia nelabai ises jei reikia grecio.
va kaip reikia pakeisti ta programa.
{
if (TMR0 > 222) GPIO = 0;
else GPIO = 255;
}
ir atjungti pertraukimus.
arba gaklima ir biski kitaip, bet cia sunku staigiai sugalvoti |
|
|
|
|
|
|
Google paieška forume |
|
|
Naujos temos forume |
|
|
FS25 Tractors
Farming Simulator 25 Mods,
FS25 Maps,
FS25 Trucks |
|
ETS2 Mods
ETS2 Trucks,
ETS2 Bus,
Euro Truck Simulator 2 Mods
|
|
FS22 Tractors
Farming Simulator 22 Mods,
FS22 Maps,
FS25 Mods |
|
VAT calculator
VAT number check,
What is VAT,
How much is VAT |
|
LEGO
Mänguköök,
mudelautod,
nukuvanker |
|
Thermal monocular
Thermal vision camera,
Night vision ar scope,
Night vision spotting scope |
|
FS25 Mods
FS25 Harvesters,
FS25 Tractors Mods,
FS25 Maps Mods |
|
Dantų protezavimas
All on 4 implantai,
Endodontija mikroskopu,
Dantų implantacija |
|
FS25 Mods
FS25 Maps,
FS25 Cheats,
FS25 Install Mods |
|
GTA 6 Weapons
GTA 6 Characters,
GTA 6 Map,
GTA 6 Vehicles |
|
FS25 Mods
Farming Simulator 25 Mods,
FS25 Maps |
|
ATS Trailers
American Truck Simulator Mods,
ATS Trucks,
ATS Maps |
|
|
|