| Микроконтролери и електроника http://mcu-bg.com/mcu_site/ |
|
| PWM при PIC16F819 http://mcu-bg.com/mcu_site/viewtopic.php?f=3&t=10274 |
Страница 1 от 2 |
| Автор: | npelov [ Нед Юли 01, 2012 5:06 pm ] | |||||||||
| Заглавие: | PWM при PIC16F819 | |||||||||
Става въпрос за задаване на duty cycle на PWM модула. Има ли начин да е сигурно, че ще се запише цялата стойност CCPR1L:CCP1CON<5:4> в буфера? Примерно ако реша да пиша CCPR1L и след това вата бита ще отнеме известно количество инструкции. Ако точно по средата тогава се latch-не стойността може да не се запише цялата в буфера. По принцип не е толкова проблемно но в случая е възможно да се коригира стойността на всеки импулс. Един от вариантите е да се пише в CCPR1L:CCP1CON<5:4> при прекъсване на TIMER2. Това дава един период време за да запиша стойността (както и по-голямо закъснение) Подробности: Става въпрос за контрол на MOSFET в зарядно за акумулатор (тема: Constant Volgate+Constant Current SMPS по схемата на TGI) Ползвам 8 бита за duty cycle. Щеше да е удобно CCP1CON<5:4> да съдържа старшите, а не младшите битове. Fosc = 20 МХз PR2 = 0x3F (78.12kHz) Edit: ето кода с койт ще сетвам duty:
|
||||||||||
| Автор: | Пушека [ Нед Юли 01, 2012 5:58 pm ] |
| Заглавие: | Re: PWM при PIC16F819 |
За една зареждачка 10бит ШИМ не е ли излишен разкош?? Ако ще зареждаш с токове до 10А при 250нива са едни нищожни 40мА. 100Ач батерия няма и да усети разликата. А ти ще си улесниш живота. |
|
| Автор: | tgi [ Нед Юли 01, 2012 6:24 pm ] |
| Заглавие: | Re: PWM при PIC16F819 |
А бе той за улесняване ще намери начин да си улесни живота ама човекът пита може ли като с истински процесор да напише 16 бита променлива наведнъж (или нещо от рода) Очевидно просто иска да разбере, не да реши конкретен проблем - аз не му знам отговора, ама пикоборци тук колкото щеш, все някой ще знае. |
|
| Автор: | Пушека [ Нед Юли 01, 2012 7:26 pm ] |
| Заглавие: | Re: PWM при PIC16F819 |
Лачването на MSB+LSB става когато периодния таймер TMR2 съвпадне с записаното в PR2. Сиреч с всеки нов период. "CCPR1L and CCP1CON<5:4> can be written to at any time but the duty cycle value is not latched into CCPR1H until after a match between PR2 and TMR2 occurs (i.e., the period is complete)." - стр70 Записа на двете е на 2 инструкции разтояние. Пиши си спокойно първо 2та мл бита после другите и си свиркай |
|
| Автор: | Cekins [ Нед Юли 01, 2012 7:36 pm ] |
| Заглавие: | Re: PWM при PIC16F819 |
Ами той варианта за да няма ефекти е да се пише при PR2 match... @tgi сори ама е 8 битов процесора - няма как да се случи да се запише в една команда |
|
| Автор: | tgi [ Нед Юли 01, 2012 7:51 pm ] |
| Заглавие: | Re: PWM при PIC16F819 |
Бе и 6840 беше таймер (дизайн 70-те) с 8 битова жица ама имаше как човек да прочете/напише 16 бита без да му се превърти междувременно |
|
| Автор: | Cekins [ Нед Юли 01, 2012 9:02 pm ] |
| Заглавие: | Re: PWM при PIC16F819 |
На таймерите има (на някой пик-ове). На разните по-така пвм-и също. Просто тоя пвм така е направен, че за да му се зададе запълването не става само с една инструкция. Той е 10 битов като 8 те старши бита се сравняват с таймера (който е 8 битов) а двата младши или с прескалер или ако няма с quarter clock на ядрото. И за да е пълен фън, двата младши са натикани в контрол регистъра на пвм-а. Сигурно са имали някаква причина да го направят толкова изчанчено. |
|
| Автор: | Desert Leo [ Нед Юли 01, 2012 9:13 pm ] | ||||||||||||||||||
| Заглавие: | Re: PWM при PIC16F819 | ||||||||||||||||||
Пелов, заеб...авай асемблера - време ти е... Вервай ми! |
|||||||||||||||||||
| Автор: | tgi [ Нед Юли 01, 2012 9:30 pm ] | |||||||||
| Заглавие: | Re: PWM при PIC16F819 | |||||||||
Ясно бе, майтапя се естествено. Причината им е била навярно, че са свивали къде каквото може с някаква цел, то и така върши работа. Лео, пик (и арм..) асемблерът е наистина кофти за употреба но за такива работи за каквито става дума в момента е пъти по-подходящ от езици на ниво разговорник. То свестен език е пъти по-подходящ за всички приложения де ама пик асемблерът не е такъв. Успявал съм да свърша работа за минути на лайняв, непознат за мене (x86) асемблер която човек (е, не особено грамотен) и се балтавеше дни. А съм бил свидетел повече пъти отколкото мога да си спомня как и грамотни и неграмотни губят дни в битка с разговорника за неща, които човек знаещ езика просто не го спират. Та съветът ти не е особено практичен, ако и да повтаря набрало популярност клише |
||||||||||
| Автор: | Cekins [ Нед Юли 01, 2012 9:38 pm ] |
| Заглавие: | Re: PWM при PIC16F819 |
Ами точно тоя пвм нито е кой знае колко бърз, нито с кой знае каква резолюция, още по-малко е предвиден да му се сменя запълването на всеки период. Въоще става само за по-простички неща на по-ниски честоти. Ако искаш "мега як, мега бърз, мега фин" пвм - това не е твоя чип. |
|
| Автор: | Пушека [ Нед Юли 01, 2012 11:28 pm ] | |||||||||
| Заглавие: | Re: PWM при PIC16F819 | |||||||||
Евтин ПИК, но с 10бит ШИМ. Е леко неизползваем |
||||||||||
| Автор: | npelov [ Пон Юли 02, 2012 2:58 pm ] |
| Заглавие: | Re: PWM при PIC16F819 |
Първо да кажа на тези дето са се объркали (Пушека) - ползването на ШИМ-а с 8 бита не решава проблема с писането на две места защото ... ами освен ако не е 2 битов шим все се пише на две места. Аз ползвам 8 бита защото реших че 10 бита резолюция не си заслужава усложнението в случая, а и честота под 50 кХз няма да се отрази добре на размерите на дросела. Май е въпрос на лош дизайн от микрочип. Ако бяха сложили старшите битове - никъв проблем няма. Второ (cekins) писането е 4 инструкции, като 1 може да се премести малко по-нагоре: movwf CCP1CON movf pwm, w andlw 0x3F movwf CCPR1L Аз също си мисля че един период с леко грешно запълване (2 бита грешка) няма да е кой знае какъв проблем ако не се случва често. Все пак ме дразни. Варианта е както посочи Пушека да го сетвам в прекъсването на Timer 2. Това означава че корекцията винаги ще е с един цял период закъснение в повече - около 13 us ... май не е много за импулсно захранване/зарядно. Desert Leo ... Правя го, но само ако е нещо по-голямо. Обикновено пак миксирам C с малко функции на Асемблер. За PIC16 обаче е доста по-трудно да пишеш и на двете. Пък и това е мериш АЦП -> сетваш ПВМ. Не е кой знае колко сложно че да го опростявам със С. И пак казвам да се ползва като 10 битов и 8 битов е еднакво сложно откъм писане в PWM. |
|
| Автор: | tgi [ Пон Юли 02, 2012 3:53 pm ] | |||||||||
| Заглавие: | Re: PWM при PIC16F819 | |||||||||
А, това ще ти свърши работата идеално, не му се чуди. Доколкото разбирам тоя таймер 2 е цъкарката за периода на PWM-а; ако пишеш асинхронно пак ще имаш един период закъснение максимум (което ще се случва понякога), така ще е винаги толкова и нещата може дори да станат малко по-подредени откъм стабилност и т.н. То и АДЦ-то едва ли прави много по-бързо едно преобразуване та не виждам проблем идващ от тая посока. |
||||||||||
| Автор: | Пушека [ Пон Юли 02, 2012 5:40 pm ] |
| Заглавие: | Re: PWM при PIC16F819 |
Пелов, нещо си се помешал с тоя ШИМ. Колкото и да ти е странно, че младшите 2байта са отделени, за да ги ползваш с ТМР2 който е 8 битов ти трябва и прескелера(или си ползва четвъртинките от клока). Ама върху тях нямаш физически достъп. Иначе няма как периода да е 8 битов а импулса да е 10 битов. Просто си играй само с 8те бита MSB. Не се вкарвай във филми сам. Младшите 2 бита ги забравяш. Сетваш ги еднократно в 0 и си имаш един прекрасен 8бит ШИМ. На практика става така, че имаш 2 мл. бита и в таймера и в регистъра за съвпадение. Но не те интересуват. Те си се въртят, но ти чакаш съвпадение в старшите 8бита а младшите когато станат. И понеже си задал някаква стойност еднократно, съвпадение се получава винаги на една и съща стойност. Таймера го сетвай, когато си искаш. Той ще възприеме новата стойност, когато се извърти поредния цикъл. За това са турили 2 регистъра - господар и роб. Всъщност Таймера се сетва еднократно, освен ако не искаш да местиш и честотата на ШИМа. Тъй че турни го на 255 в началото и после само си ръчкай по CCPR1L. За да нямаш грижа да следиш дали периода ти е по къс от импулса. Загледай в ПДФа има едни таблици и обяснения как се конфигурира. Верно е объркващо малко.. Ако не ти се вярва, МПЛАБ си има чудесен симулатор цъкаш си стъпка по стъпка гледаш си регистрите и ще видиш че става с едно сетване само на MSB. |
|
| Автор: | 741 [ Пон Юли 02, 2012 6:43 pm ] |
| Заглавие: | Re: PWM при PIC16F819 |
Това предполагам го е съобразил. Само че му обясняваш как да смъкне честотата 4 пъти и да сложи 4 пъти по-голяма бобина, за да спести няколко инструкции в кода. Няма смисъл. Ъпдейт на двата регистъра в прекъсването на таймера е ОК. |
|
| Страница 1 от 2 | Часовете са според зоната UTC + 2 часа [ DST ] |
| Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group http://www.phpbb.com/ |
|