|
|
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 02, 14:41. Visos datos yra GMT + 2 valandos.
|
|
|
|
Forumas » Mikrovaldikliai » pic16f84a ir pwm
|
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š 2 Pereiti prie 1, 2 Toliau |
|
|
pic16f84a ir pwm |
Parašytas: 2012 03 16, 21:43 |
|
|
|
Sveiki,
Esu pradedantysis programuotojas šioje srityje. ir noriu išmoksi kuo daugiau
Tokius paprastus kodus kaip ledų mirgsėjimas, eilutės begiojimas ir panašiai rašyti jau moku ir jie veikia ant pic16f84a. Bet tačiau noriu išmoksti ir pwm funkcijų. tik niekur nerandu normalių pavyzdžių, kad tiktu mano picui.
Taigi, noriu paprašyti Jūsų pagalbos. Gal galėtumėte parašyti kokį paprastą pavyzdžiuką kaip tas pwm`as veikia?
Būčiau labai dėkingas.
Pagarbiai, Marijus V. |
|
|
|
|
|
pic16f84a ir pwm |
Parašytas: 2012 03 16, 23:21 |
|
|
|
Kad ir pradedantis, geriau kokį naujesnį pasiimk. Bus ir pigesnis, ir geresnis, ir labiau pritaikytas C kalbai, kurios vis vien ateity reiks mokintis, jei norėsi tobulėti. |
|
|
|
|
|
|
pic16f84a ir pwm |
Parašytas: 2012 03 16, 23:50 |
|
|
|
1-as budas:
Kodas: |
//pataisytas ir isbandytas MicroC + simuliatorius
//PORTA - OUT, RA0 - PWM out
//PORTB - in, RB0..RB7 - duty cycle
unsigned short oldb;
unsigned short duty;
void interrupt() // Timer0_interrupt
{
TMR0 = duty; //timer0 skaiciuos arba pradini duty
duty ^= 0xFF; //arba 256-duty likuti taktu
PORTA.F0 ^= 0x01; //invertuojam RA0
INTCON.T0IF = 0; //cia nepamenu, bet gali ir nereikti
}
void main()
{
unsigned short temp;
oldb = PORTB; //isimenam esama PORTB
duty = oldb; //nustatom duty pagal isiminta PORTB
TRISA &= 0xFE; //RA0 - PWM out
INTCON.GIE = 1; //GlobalInterruptEnable
OPTION_REG.T0CS = 0; //Timer0 = mode timer
INTCON.T0IE = 1; //Timer0InterruptEnable
while (1)
{
temp = PORTB; //nuskaitom PORTB
if (temp != oldb) //jei pakito:
{
duty = temp; //nustatom nauja duty
oldb = temp; //isimenam
}
}
}
|
dar galima pasirinkti prescaler arba ji uzdrausti.
2-as budas:
Kodas: |
unsigned short duty[] = {51, 102, 153, 204};
unsigned short counter = 0;
void interrupt()
{
counter++;
if (duty[0] < counter) PORTA.F0 = 1;
else PORTA.F0 = 0;
if (duty[1] < counter) PORTA.F1 = 1;
else PORTA.F1 = 0;
if (duty[2] < counter) PORTA.F2 = 1;
else PORTA.F2 = 0;
if (duty[3] < counter) PORTA.F3 = 1;
else PORTA.F3 = 0;
}
void main()
{
unsigned short temp, oldb = PORTB;
TRISA &= 0xF0;
INTCON.GIE = 1;
OPTION_REG.T0CS = 0;
INTCON.T0IE = 1;
TMR0 = 10; //cia norimas greitis
while (1)
{
temp = PORTB;
if (oldb != temp)
{
oldb = temp;
if ((temp & 0x01) == 0) duty[0]--;
if ((temp & 0x02) == 0) duty[0]++;
if ((temp & 0x04) == 0) duty[1]--;
if ((temp & 0x08) == 0) duty[1]++;
if ((temp & 0x10) == 0) duty[2]--;
if ((temp & 0x20) == 0) duty[2]++;
if ((temp & 0x40) == 0) duty[3]--;
if ((temp & 0x80) == 0) duty[3]++;
}
}
}
|
|
|
Paskutinį kartą redagavo AlgisL, 2012 03 17, 14:06. Redaguota 3 kartus(ų) |
|
|
|
|
|
pic16f84a ir pwm |
Parašytas: 2012 03 17, 09:02 |
|
|
|
Dėkui, aš programuoju su C kalba, o dabar kai turiu jau PIC16f84a tai ką jau padarysi, ir pasimokinsiu ant šito. O dėl šitų pwm kodų kur davei, tai kompiliuojant errorus mėto
Pagarbiai, Marijus V. |
|
|
|
|
|
pic16f84a ir pwm |
Parašytas: 2012 03 17, 13:14 |
|
|
|
biski pataisiu klaidas, nes rasiau is atminties ir netikrinau, juolab Microchip C18 nekompiliuoja 12/16 bitu picams.
MicroC as nenaudoju, tad teko parsigrusti ir isbandyti.
daiktas smagus, bet brangus, be to nevirskina praktiskai jokiu standartiniu c++ operatoriu
netgi prie if !(temp & 0x01) duty[x]--; prisikabino |
|
|
|
|
|
pic16f84a ir pwm |
Parašytas: 2012 03 17, 14:55 |
|
|
|
AlgisL rašo: |
netgi prie if !(temp & 0x01) duty[x]--; prisikabino |
Tai kad cia akivaizdi sintakses klaida |
|
|
|
|
|
pic16f84a ir pwm |
Parašytas: 2012 03 17, 15:05 |
|
|
|
na, nevisi kompiliatoriai NOT reikalauja ikelti i skliaustu vidu.
taigis, siuo atveju veikia if (!(temp & 0x01)) duty[0]--;
be to, dar kabinejasi prie:
unsigned short oldb = PORTB;
jam matai tik konstanta gali taip aprasyt ir viskas, nors kad ir DevC++ virskina tai be trabliemu. |
|
|
|
|
|
|
pic16f84a ir pwm |
Parašytas: 2012 03 17, 18:36 |
|
|
|
AlgisL rašo: |
na, nevisi kompiliatoriai NOT reikalauja ikelti i skliaustu vidu.
taigis, siuo atveju veikia if (!(temp & 0x01)) duty[0]--;
be to, dar kabinejasi prie:
unsigned short oldb = PORTB;
jam matai tik konstanta gali taip aprasyt ir viskas, nors kad ir DevC++ virskina tai be trabliemu. |
Ka kiti kompileriai virskina, tai cia nebent ju kreivi fycersai, o gal labiau reiktu sakyt - bugai. GCC to nevirskina ir pagal standarta tai nera leidziama. Naturalu kad NORMALUS kompileriai neleidzia issi... Po to problema buna, kai su tais durnais kompileriais programeriai ismoksta dirbt, o kai reikia su normaliu sukompiliuot tai prasideda grybu karas iki plauku rovimo. |
|
|
|
|
|
|
pic16f84a ir pwm |
Parašytas: 2012 03 17, 19:18 |
|
|
|
na ir kokie gi cia tokie "fycersai" - isanksto inicializuotos atminties palaikymas, tai tik archainiai kompileriai to nesugeba, ta sugeba net priestvaninis assembleris
o ir kokia prasme NOT operatoriu butinai apskliausti ? as nematau jokios prasmes, ypac kad jis turi aukstesni prioriteta pries visus kitus operatorius. |
|
|
|
|
|
|
pic16f84a ir pwm |
Parašytas: 2012 03 17, 20:48 |
|
|
|
AlgisL rašo: |
na ir kokie gi cia tokie "fycersai" - isanksto inicializuotos atminties palaikymas, tai tik archainiai kompileriai to nesugeba, ta sugeba net priestvaninis assembleris |
Tai vat butent tai ir yra nesamone, nes logiskai skaitant koda, susidaro dviguba nuomone: ar tu nori ta kintamaji priskirt tam registrui ir atsinaujinancioms jo reiksmems, ar tu nori priskirt ta reiksme tik inicializacijos metu.
AlgisL rašo: |
o ir kokia prasme NOT operatoriu butinai apskliausti ? as nematau jokios prasmes, ypac kad jis turi aukstesni prioriteta pries visus kitus operatorius. |
O tai kam tada isvis po salygu ir f-ju skliaustus det? gal del to, kad tokia ta c kalbos sintakse, nemanai? |
|
|
|
|
|
|
pic16f84a ir pwm |
Parašytas: 2012 03 18, 10:06 |
|
|
|
Socrates rašo: |
AlgisL rašo: |
na ir kokie gi cia tokie "fycersai" - isanksto inicializuotos atminties palaikymas, tai tik archainiai kompileriai to nesugeba, ta sugeba net priestvaninis assembleris |
Tai vat butent tai ir yra nesamone, nes logiskai skaitant koda, susidaro dviguba nuomone: ar tu nori ta kintamaji priskirt tam registrui ir atsinaujinancioms jo reiksmems, ar tu nori priskirt ta reiksme tik inicializacijos metu.
AlgisL rašo: |
o ir kokia prasme NOT operatoriu butinai apskliausti ? as nematau jokios prasmes, ypac kad jis turi aukstesni prioriteta pries visus kitus operatorius. |
O tai kam tada isvis po salygu ir f-ju skliaustus det? gal del to, kad tokia ta c kalbos sintakse, nemanai? |
susidaro vaizdelis, kad ponulis profesionalas maiso kintamuju deklaracija su veiksmu deklaracija. vienu atveju aprasyme dalyvauja kintamojo tipas ir paskui kintamuju isvardiijimas su galima pradine inicializacija,o kitu atveju naudojamas raktinis zodis #define
kas del apskliaudimo, tai suprantu kai sklaiustai keicia veiksmu seka ar atskiria funkcijas bei proceduras, taciau kai jau ir operstorius reikia isskirdineti skliaustais tai jau pypiec, gal tada absoliuciai visus operatorius pradedam reikalauti apskliausti, pvz:
vietoje a=PORTA, reikalaukim rasyti (a=PORTA) ir t.t. |
|
|
|
|
|
|
pic16f84a ir pwm |
Parašytas: 2012 03 18, 16:54 |
|
|
|
Nelabai matau prasmes toliau diskutuoti su nekompetetingu zmogum. |
|
|
|
|
|
pic16f84a ir pwm |
Parašytas: 2012 03 19, 18:45 |
|
|
|
Socrates rašo: |
Nelabai matau prasmes toliau diskutuoti su nekompetetingu zmogum. |
Susitiko du C-istai Autoriui - pavyzdys parašytas assembleriu netinka? Nedomina mašininės kalbos mokėjimas? |
|
|
|
|
|
pic16f84a ir pwm |
Parašytas: 2012 03 19, 19:43 |
|
|
|
galima ir asmu, bet kruskis ten su atminties bankais, pastoviai sek destination ir t.t.
aisku toks trumpas kodas nesudarytu sunkumu. |
|
|
|
|
|
pic16f84a ir pwm |
Parašytas: 2012 03 19, 19:59 |
|
|
|
Bankai tėra du pas šį PIC. Perėjimas į kitą banką viena eilutė.
BSF STATUS,5 arba BCF STATUS,5
Kas per destination? |
|
|
|
|
|
|
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 |
|
|
|