PIC16F628A->PWM

Diskuze a poradna o programátorech a programování různých obvodů

Moderátor: Moderátoři

Odpovědět
Zpráva
Autor
Uživatelský avatar
ebastlirna
Příspěvky: 84
Registrován: 10 říj 2013, 02:00

PIC16F628A->PWM

#1 Příspěvek od ebastlirna »

Dobrý den, když mám čas, učím se programovat MCU PIC, konkrétně PIC16F628A. A chtěl bych na svůj první mini projekt využít PWM modulaci. I když jsem se snažil to rozlouskat z datasheetu, tak jsem to stále nepochopil. Našla by se nějaká dobrá duše, která by mě aspoň nakopla a ukázala směr nebo mi trochu tuhle problematiku popsala? Budu rád za každou odpověď.
Naposledy upravil(a) ebastlirna dne 20 zář 2014, 19:52, celkem upraveno 1 x.

Uživatelský avatar
MiloPS3
Příspěvky: 259
Registrován: 07 srp 2010, 02:00

#2 Příspěvek od MiloPS3 »

cau,to si se teda moc nesnazil .. :roll:
stahni si CZ datasit http://uloz.to/xjRg1yye/pic16f87xa-cz-pdf
a koukni sem http://www.module.ro/pwm.html
az si to projdes znovu tak si napis kod a ten dej sem , jinak to nema cenu
chtěl bych na svůj první mini projekt využít PWM modulaci
jako 1 projekt bys mel zacit s obycejnym blikanim pak pridat tlacitko, atd, snazit se musis ty, ja te maximalne pri takovehle snaze jen nakopnu

Uživatelský avatar
AB1
Příspěvky: 312
Registrován: 23 lis 2009, 01:00

#3 Příspěvek od AB1 »

Jestli dokážeš nastavit přerušení čítače např. každých 10 mikrosec, můžeš začít s tímto softwarovým pwm:

Kód: Vybrat vše

//pseudokód

obsluha_preruseni_timer0:  // každých 10 us 
   count = count +1        // počet přerušení
   
   if count = duty then vystup = 0
   
   if count = 100 then 
      vystup = 1
      count = 0
   endif

 ------------------------------------

Loop:    // test
   duty = 10      // duty_cycle = 10%
   wait 300 ms
   duty = 20      // duty_cycle = 20%
   wait 300 ms
   duty = 30      // duty_cycle = 30%
   wait 300 ms
   // atd
   
   goto Loop
Jeden pwm cyklus trvá 100 * 10us = 1 ms.
Pwm frekvence je tedy 1 kHz.
Duty cycle (plnění) jde nastavit v krocích 1%.

Uživatelský avatar
ebastlirna
Příspěvky: 84
Registrován: 10 říj 2013, 02:00

#4 Příspěvek od ebastlirna »

MiloPS3 píše:cau,to si se teda moc nesnazil .. :roll:
stahni si CZ datasit http://uloz.to/xjRg1yye/pic16f87xa-cz-pdf
a koukni sem http://www.module.ro/pwm.html
az si to projdes znovu tak si napis kod a ten dej sem , jinak to nema cenu
chtěl bych na svůj první mini projekt využít PWM modulaci
jako 1 projekt bys mel zacit s obycejnym blikanim pak pridat tlacitko, atd, snazit se musis ty, ja te maximalne pri takovehle snaze jen nakopnu
Děkuji za ten datasheet, v cz jsem našel jenom pic16f84.
A i ten kód je super, že je v ASM já nacházel jenom v C-ku...

Uživatelský avatar
MiloPS3
Příspěvky: 259
Registrován: 07 srp 2010, 02:00

#5 Příspěvek od MiloPS3 »

na ten DS jsem chtel dat odkaz ale uz sem to nikde nenasel ,asi to uz smazaly, tak sem to upnul ja
staci pouzit G a najit ten spravny nazev , dneska uz se da opravdu hodne veci najit na netu...i kdyz to chvylku trva

Uživatelský avatar
Chenzee
Příspěvky: 464
Registrován: 26 čer 2007, 02:00
Bydliště: Vysočina

#6 Příspěvek od Chenzee »

Jen si dávej pozor, v českých překladech jsou občas chyby. Takže doporučuji mít po ruce i originál a důležité pasáže zkontrolovat.
Žádnej učenej z nebe nespadl ...

hakamusai
Příspěvky: 943
Registrován: 17 dub 2007, 02:00

#7 Příspěvek od hakamusai »

Neví někdo o překladu datasheetu 16F887 ?

Uživatelský avatar
Chenzee
Příspěvky: 464
Registrován: 26 čer 2007, 02:00
Bydliště: Vysočina

#8 Příspěvek od Chenzee »

O jeho existenci vážně pochybuji. Ale můžeš si přečíst 877A, ten v CZ je a pak se podívat na 887. Ty dva obvody jsou si hooodně podobné (neříkám stejné!), ale ty rozdíly najdeš a určitě jim porozumíš. Jinak jakmile se tomu dostaneš trošičku pod kůži, bude ti stačit jen AJ, páč ono je to u PICů rodiny 16F stále stejné (nebo hooodně podobné).
Žádnej učenej z nebe nespadl ...

Uživatelský avatar
Pawalo
Příspěvky: 87
Registrován: 06 říj 2005, 02:00
Bydliště: Tábor
Kontaktovat uživatele:

#9 Příspěvek od Pawalo »


Uživatelský avatar
ebastlirna
Příspěvky: 84
Registrován: 10 říj 2013, 02:00

#10 Příspěvek od ebastlirna »

Po delší době, zdravím všechny. Když jsem měl volnou chvíli, pročítal jsem si datasheet i příklady a asi nějak bych to dal do kupy, ale ještě mi není jasný jak mám použít uváděné vzorce v datasheetu. Vůbec nevím jak do nich správně dosadit. Může mi je někdo prosím objasnit?

Perioda opakovací frekvence PWM
1/ T = [(PR2) + 1] • 4 • Tosc • (TMR2 dělicí poměr předděličky Timer2)

2/ Střída PWM = (CCPR1L:CCP1CON<5:4>) • Tosc • (TMR2 dělicí poměr předděličky Timer2)

Děkuji.

Uživatelský avatar
MiloPS3
Příspěvky: 259
Registrován: 07 srp 2010, 02:00

#11 Příspěvek od MiloPS3 »

asi ti primo neodpovim..
mas nejakej duvod pouzit nejakou pozadovanou frevvenci ?

zapni si TMR2 , povol preruseni , dej si tam breakpoint a zmer si to , to bude frekvence PWM, zmenou preddelicky si to upravis.. (delic po nema na frekvenci PWM vliv,takze nastavit 1:1)

stridu nastavujes v CCPR1L , pouzival sem jen 8bit rozliseni (rek bych dostacujici) , 1krok=0.39%...

Uživatelský avatar
ebastlirna
Příspěvky: 84
Registrován: 10 říj 2013, 02:00

#12 Příspěvek od ebastlirna »

Děkuji za radu. No přesnou frekvenci potřebuji, abych rozblikal ledku zhruba na 5Hz a přitom mohl měnit intenzitu. Například, že si udělám 3 stavy. Kdy
1. bude blikat 5Hz a střída bude 100%.
2. opět 5 Hz a střída 70%
3. 5 Hz střída a střída 40 %

Možná, že tenhle koncept je nesmyslný nebo ne?

Uživatelský avatar
MiloPS3
Příspěvky: 259
Registrován: 07 srp 2010, 02:00

#13 Příspěvek od MiloPS3 »

hm. napis jak bys to udelal.... jen tak heslovite

ja bych to udelal takle : nastavit tmr2 na 1:2/4 treba. tmr1 na preruseni po 100ms (zalezi na kolika ti to bezi) v tom si nastavovat stridu toglovane 0 nebo promena . v mainu si krmit promenou 40% nebo 70% nebo 100% + se muze mcu dloubat v nose....

Odpovědět

Zpět na „Programování PIC, ATMEL, EEPROM a dalších obvodů“