Elektronika.lt
 2025 m. gruodžio 24 d. Projektas | Reklama | Žinokite | Klausimai | Prisidėkite | Atsiliepimai | Kontaktai
Paieška portale
EN Facebook RSS

 Kas naujo  Katalogas  Parduotuvės  Forumas  Tinklaraščiai
 Pirmas puslapisSąrašas
 Forumas / + pokalbiai
 - Paieška forume
 - D.U.K. / Forumo taisyklės
 - Narių sąrašas
 - Registruotis
 - Prisijungti

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 2025 12 24, 20:06. 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 22
Pereiti prie Atgal  1, 2
Pradėti naują temą  Atsakyti į pranešimą Rodyti ankstesnį pranešimą :: Rodyti kitą pranešimą 
 pic16f84a ir pwm
PranešimasParašytas: 2012 03 20, 16:30 Pranešti apie taisyklių pažeidimą Atsakyti su citata
mariuse3
Naujokas
Naujokas
Peržiūrėti vartotojo aprašymą Siųsti asmeninį pranešimą
Sveiki ,
Nenorėjau kištis į "įnirtingą" diskusiją Smile. Ne, aš noriu su C kalba išmokti, ness univiere mokausu su c++ tai C nelabai daug kuom ir skiriasi Smile Pavyzdžiai tai tiko, tik tas kur yra su ifais, kaskodėl labai ilgai dirba, greiti mažinant ar didinant niekas nesikeičia. Toks jausmas, kad tas TMR0 parašytas tik šeip Very Happy O daugiau tai labai dėkoju, kad padedat Smile

Pagarbiai Marijus V.
 pic16f84a ir pwm
PranešimasParašytas: 2012 03 20, 16:51 Pranešti apie taisyklių pažeidimą Atsakyti su citata
AlgisL
Senbuvis
Senbuvis
Peržiūrėti vartotojo aprašymą Siųsti asmeninį pranešimą
kokia prasme cia tau if ilgai dirba?
pirmu atveju duty reiksme imama is B porto, kaskart jo reiksmei pakitus.
antru atveju keiciasi masyvo reiksme didejanciai/mazejanciai, priklausomai ar buvo nuspaustas mygtukas. jei tau permazas zingsnis, tai rasyk duty[x]++n, kur n norimas zingsnis.

del pacio TMR0, tai jis dar turi prescaler, kuri irgi gali keisti bei taktavimo saltini

dar toks niuansas, kad interrupt() reikia kogero isnaujo nustatineti TMR0=N (cia manuale pasiziurek)

1-ojo varianto interrupt() dalyje nustatant TMR0=0 arba 255 reikia zet kas dedasi, ar timeris tokiu atveju skaiciuoja 256 taktus, jei reiksme 0 ir bent 1 takta jei reiksme 255.

as labai seniai esu pic16f84 kazka programines po assembleriu, tad tau nieko nepasakysiu, nes tai nera mano pagrindinis uzsiemimas ir laisvalaikiu pasizaidziu tik su ATtiny2313, ATmega8/16, PIC18F2550, 4550 bei bandau kazka http://www.friendlyarm.net/products/mini2440
 pic16f84a ir pwm
PranešimasParašytas: 2012 03 20, 23:10 Pranešti apie taisyklių pažeidimą Atsakyti su citata
AlgisL
Senbuvis
Senbuvis
Peržiūrėti vartotojo aprašymą Siųsti asmeninį pranešimą
nedidukas MicroC ir PIC16F84A patyrinejimas
(patikrint realiai teks paciam)
Kodas:

//programine FAST_PWM emuliacija RA0..RA3 isejimuose
//generuoja signala  ~19,531 kHz duty[x] uzpildymo
//numatoma, kad naudojamas isorinis 20MHz kvarcas ar ossciliatorius
//RB0 iejime mygtukas i VSS atlieka duty[0]-- (mazina RA0 PWM duty)
//RB1 iejime mygtukas i VSS atlieka duty[0]++ (didina RA0 PWM duty)
//RB2 iejime mygtukas i VSS atlieka duty[1]-- (mazina RA1 PWM duty)
//  :
//RB7 iejime mygtukas i VSS atlieka duty[3]++ (didina RA3 PWM duty)

#define CPU_CLOCK 20000000      //kvarco daznis Hz
#define One_ms_TICKS (CPU_CLOCK / 4*256*1000)  //Timer0 ciklai ~1 ms pasiekti
#define KBD_DEBOUNCE_TIME  50   //ms uzlaikymas kontaktui nusistoveti
#define KBD_REPEAT_DELAY  400   //ms pasikartojimo velinimas
#define KBD_REPEAT_RATE   200   //ms pasikartojimo daznis

unsigned int kbdtm[] = {0, 0, 0, 0, 0, 0, 0, 0};
unsigned char duty[] = {51, 102, 153, 204};
unsigned char tmpb, oldb;
unsigned char ms_ticks = 0, pwmcnt = 0;

//primityvas pakeisti duty[x]
#define _DUTY(d) (d & 1) ? (duty[d/2]++) : (duty[d/2]--)

//primityvas apdoroti klavisams su autorepeat f-ja
#define KBD_TEST(b){\
    if (!(tmpb & (1<<b))) {\
        if (oldb & (1<<b)) kbdtm[b]=0;\
           else kbdtm[b]++;\
        if (kbdtm[b] == KBD_DEBOUNCE_TIME) _DUTY(b);\
        if (kbdtm[b] >= KBD_REPEAT_DELAY){\
            kbdtm[b]-=KBD_REPEAT_RATE;\
            _DUTY(b);\
        }\
    }\
    else kbdtm[b]=0;\
}

//primityvas PWM isvedimo apdorojimui
#define DUTY_TEST(d, p) {\
    if (d < pwmcnt) p = 1;\
        else p = 0;\
}

void interrupt()
{
    pwmcnt++;
    DUTY_TEST(duty[0], PORTA.F0);
    DUTY_TEST(duty[1], PORTA.F1);
    DUTY_TEST(duty[2], PORTA.F2);
    DUTY_TEST(duty[3], PORTA.F3);
    ms_ticks++;
    INTCON.T0IE = 1;           //Timer0 Interrupt enabled
    INTCON.T0IF = 0;           //clear Timer0 Interrupt flag
}//interrupt()

void main()
{
    TRISA &= 0xF0;             //RA0..RA3 output
    PORTA &= 0xF0;             //RA0..RA3 = 0
    OPTION_REG.NOT_RBPU = 0;   //PortB pull-ups enabled
    OPTION_REG.T0CS = 0;       //TMR0 clock source (CLKOUT)
//  OPTION_REG.PSA = 1 (default) Prescaler to WDT, Timer0 not use this
    TMR0 = 0;                  //Timer0 ciklas 20MHz / 4*256 = 19,531kHz
    INTCON.GIE = 1;            //Global Interrupts enabled
    INTCON.T0IE = 1;           //Timer0 Interrupt enabled
    INTCON.T0IF = 0;           //clear Timer0 Interrupt flag
    ms_ticks = 0;
    oldb = PORTB;
    while (1)
    if (ms_ticks >= One_ms_TICKS-1)
    {
        ms_ticks = 0; // praejo ~1 ms laikas
        tmpb = PORTB;
        if (oldb != tmpb)
        {
            oldb ^= tmpb;      //RBx changed
            KBD_TEST(0);
            KBD_TEST(1);
            KBD_TEST(2);
            KBD_TEST(3);
            KBD_TEST(4);
            KBD_TEST(5);
            KBD_TEST(6);
            KBD_TEST(7);
            oldb = tmpb;
        }// if (oldb
    }//if (ms_ticks
}//main


jei rupes didesnes gudrybes, klausk profesionalu, nes as tik pradedantis megejas sioje srity.
Pradėti naują temą  Atsakyti į pranešimą Pereiti prie Atgal  1, 2
 
Forumo sistema: phpBB
 „Google“ paieška forume
 Kas naujesnio?
 Naujos temos forume

Global electronic components distributor – Allicdata Electronics

Electronic component supply – „Eurodis Electronics“

LOKMITA – įvairi matavimo, testavimo, analizės ir litavimo produkcija

Full feature custom PCB prototype service

Sveiki ir ekologiški maisto produktai

Mokslo festivalis „Erdvėlaivis Žemė

LTV.LT - lietuviškų tinklalapių vitrina

„Konstanta 42“

„Mokslo sriuba“

www.matuok.lt - Interneto spartos matavimo sistema

Programuotojas Tautvydas – interneto svetainių-sistemų kūrimas

PriedaiMobiliems.lt – telefonų priedai ir aksesuarai

Draugiškas internetas

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
Dantų protezavimas
All on 4 implantai,
Endodontija mikroskopu,
Dantų implantacija
FS25 Mods
FS25 Maps, FS25 Cheats, FS25 Install Mods
FS25 Mods
Farming Simulator 25 Mods,
FS25 Maps
ATS Trailers
American Truck Simulator Mods, ATS Trucks, ATS Maps
Must have farming mods
Farming simulator modhub, Best farming simulator mods
Reklama
‡ 1999– © Elektronika.lt | Autoriaus teisės | Privatumo politika | Atsakomybės ribojimas | Turinys | Reklama | Kontaktai LTV.LT - lietuviškų tinklalapių vitrina
Ets2 mods, Ats mods, Beamng drive mods
allmods.net
„MokslasPlius“ – mokslui skirtų svetainių portalas
www.mokslasplius.lt
Optical filters, UV optics, electro optical crystals
www.eksmaoptics.com
LTV.LT – lietuviškų tinklalapių vitrina
www.ltv.lt/technologijos/
Elektroninių parduotuvių optimizavimas „Google“ paieškos sistemai
www.seospiders.lt
Mokslo festivalis „Erdvėlaivis žemė“
www.mokslofestivalis.eu
Reklama


Reklama