|
Виж темите без отговор | Виж активните теми
Дата и час: Вто Юли 28, 2026 1:40 am
| Автор |
Съобщение |
|
npelov
Ранг: Почетен член
Регистриран на: Пет Яну 22, 2010 5:46 pm Мнения: 680
|
 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:  |  |  |  | Код: ; вариант 1 - с временна променлива setPwm banksel CCP1CON rlf CCP1CON, w andlw 0x1F movwf temp rlf temp, f
rrf pwm, f rrf temp, f
rrf pwm, f rrf temp, w movwf CCP1CON movf pwm, w andlw 0x3F movwf CCPR1L return
; вариант 2 - без временна променлива setPwm banksel CCP1CON movlw 0x0F andwf CCP1CON, f
rrf pwm, f skipz iorlw 0x10
rrf pwm, f skipz iorlw 0x20
movf pwm, w andlw 0x3F movwf CCPR1L
return
|  |  |  |  |
|
| Нед Юли 01, 2012 5:06 pm |
|
 |
|
Пушека
Ранг: Новодошъл
Регистриран на: Пон Апр 16, 2012 9:05 pm Мнения: 182
|
 Re: PWM при PIC16F819
За една зареждачка 10бит ШИМ не е ли излишен разкош?? Ако ще зареждаш с токове до 10А при 250нива са едни нищожни 40мА. 100Ач батерия няма и да усети разликата. А ти ще си улесниш живота.
|
| Нед Юли 01, 2012 5:58 pm |
|
 |
|
tgi
Ранг: Форумен бог
Регистриран на: Нед Юни 10, 2007 2:22 pm Мнения: 6492 Местоположение: София
|
 Re: PWM при PIC16F819
А бе той за улесняване ще намери начин да си улесни живота ама човекът пита може ли като с истински процесор да напише 16 бита променлива наведнъж (или нещо от рода)  . Очевидно просто иска да разбере, не да реши конкретен проблем - аз не му знам отговора, ама пикоборци тук колкото щеш, все някой ще знае.
_________________------------------- www.tgi-sci.com------------------- http://www.flickr.com/photos/didi_tgi/
|
| Нед Юли 01, 2012 6:24 pm |
|
 |
|
Пушека
Ранг: Новодошъл
Регистриран на: Пон Апр 16, 2012 9:05 pm Мнения: 182
|
 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та мл бита после другите и си свиркай
|
| Нед Юли 01, 2012 7:26 pm |
|
 |
|
Cekins
Ранг: Форумен бог
Регистриран на: Сря Апр 20, 2005 12:02 pm Мнения: 9119 Местоположение: Разград
|
 Re: PWM при PIC16F819
Ами той варианта за да няма ефекти е да се пише при PR2 match... @tgi сори ама е 8 битов процесора - няма как да се случи да се запише в една команда  Всъщност имат и такива проблясъци ама не и в простите PWM-и... Иначе наистина ако нацелиш точно на момента на ъпдейта може и да не влезе заданието както трябва. При тази резолюция 2 бита са си нещо, ама пък при тая честота въоще няма да се усети - реално ще имаш само един грешен период, тъй като следващия вече ще си е добре.
|
| Нед Юли 01, 2012 7:36 pm |
|
 |
|
tgi
Ранг: Форумен бог
Регистриран на: Нед Юни 10, 2007 2:22 pm Мнения: 6492 Местоположение: София
|
 Re: PWM при PIC16F819
Бе и 6840 беше таймер (дизайн 70-те) с 8 битова жица ама имаше как човек да прочете/напише 16 бита без да му се превърти междувременно  .
_________________------------------- www.tgi-sci.com------------------- http://www.flickr.com/photos/didi_tgi/
|
| Нед Юли 01, 2012 7:51 pm |
|
 |
|
Cekins
Ранг: Форумен бог
Регистриран на: Сря Апр 20, 2005 12:02 pm Мнения: 9119 Местоположение: Разград
|
 Re: PWM при PIC16F819
На таймерите има (на някой пик-ове). На разните по-така пвм-и също. Просто тоя пвм така е направен, че за да му се зададе запълването не става само с една инструкция. Той е 10 битов като 8 те старши бита се сравняват с таймера (който е 8 битов) а двата младши или с прескалер или ако няма с quarter clock на ядрото. И за да е пълен фън, двата младши са натикани в контрол регистъра на пвм-а. Сигурно са имали някаква причина да го направят толкова изчанчено.
|
| Нед Юли 01, 2012 9:02 pm |
|
 |
|
Desert Leo
Ранг: Форумен бог
Регистриран на: Чет Фев 10, 2005 3:25 pm Мнения: 5677 Местоположение: София
|
 Re: PWM при PIC16F819
 |  |  |  | npelov написа: Става въпрос за задаване на 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:  |  |  |  | Код: ; вариант 1 - с временна променлива setPwm banksel CCP1CON rlf CCP1CON, w andlw 0x1F movwf temp rlf temp, f
rrf pwm, f rrf temp, f
rrf pwm, f rrf temp, w movwf CCP1CON movf pwm, w andlw 0x3F movwf CCPR1L return
; вариант 2 - без временна променлива setPwm banksel CCP1CON movlw 0x0F andwf CCP1CON, f
rrf pwm, f skipz iorlw 0x10
rrf pwm, f skipz iorlw 0x20
movf pwm, w andlw 0x3F movwf CCPR1L
return
|  |  |  |  |
|  |  |  |  |
Пелов, заеб...авай асемблера - време ти е... Вервай ми!
|
| Нед Юли 01, 2012 9:13 pm |
|
 |
|
tgi
Ранг: Форумен бог
Регистриран на: Нед Юни 10, 2007 2:22 pm Мнения: 6492 Местоположение: София
|
 Re: PWM при PIC16F819
Ясно бе, майтапя се естествено. Причината им е била навярно, че са свивали къде каквото може с някаква цел, то и така върши работа. Лео, пик (и арм..) асемблерът е наистина кофти за употреба но за такива работи за каквито става дума в момента е пъти по-подходящ от езици на ниво разговорник. То свестен език е пъти по-подходящ за всички приложения де ама пик асемблерът не е такъв. Успявал съм да свърша работа за минути на лайняв, непознат за мене (x86) асемблер която човек (е, не особено грамотен) и се балтавеше дни. А съм бил свидетел повече пъти отколкото мога да си спомня как и грамотни и неграмотни губят дни в битка с разговорника за неща, които човек знаещ езика просто не го спират. Та съветът ти не е особено практичен, ако и да повтаря набрало популярност клише 
_________________------------------- www.tgi-sci.com------------------- http://www.flickr.com/photos/didi_tgi/
|
| Нед Юли 01, 2012 9:30 pm |
|
 |
|
Cekins
Ранг: Форумен бог
Регистриран на: Сря Апр 20, 2005 12:02 pm Мнения: 9119 Местоположение: Разград
|
 Re: PWM при PIC16F819
Ами точно тоя пвм нито е кой знае колко бърз, нито с кой знае каква резолюция, още по-малко е предвиден да му се сменя запълването на всеки период. Въоще става само за по-простички неща на по-ниски честоти. Ако искаш "мега як, мега бърз, мега фин" пвм - това не е твоя чип.
|
| Нед Юли 01, 2012 9:38 pm |
|
 |
|
Пушека
Ранг: Новодошъл
Регистриран на: Пон Апр 16, 2012 9:05 pm Мнения: 182
|
 Re: PWM при PIC16F819
Евтин ПИК, но с 10бит ШИМ. Е леко неизползваем  . Те добре знаят, че малко мазохисти ще го ползват, като 10битов. Но пък рекламата се върти с пълна сила и рибетата кълват...
|
| Нед Юли 01, 2012 11:28 pm |
|
 |
|
npelov
Ранг: Почетен член
Регистриран на: Пет Яну 22, 2010 5:46 pm Мнения: 680
|
 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.
|
| Пон Юли 02, 2012 2:58 pm |
|
 |
|
tgi
Ранг: Форумен бог
Регистриран на: Нед Юни 10, 2007 2:22 pm Мнения: 6492 Местоположение: София
|
 Re: PWM при PIC16F819
А, това ще ти свърши работата идеално, не му се чуди. Доколкото разбирам тоя таймер 2 е цъкарката за периода на PWM-а; ако пишеш асинхронно пак ще имаш един период закъснение максимум (което ще се случва понякога), така ще е винаги толкова и нещата може дори да станат малко по-подредени откъм стабилност и т.н. То и АДЦ-то едва ли прави много по-бързо едно преобразуване та не виждам проблем идващ от тая посока.
_________________------------------- www.tgi-sci.com------------------- http://www.flickr.com/photos/didi_tgi/
|
| Пон Юли 02, 2012 3:53 pm |
|
 |
|
Пушека
Ранг: Новодошъл
Регистриран на: Пон Апр 16, 2012 9:05 pm Мнения: 182
|
 Re: PWM при PIC16F819
Пелов, нещо си се помешал с тоя ШИМ.  Колкото и да ти е странно, че младшите 2байта са отделени, за да ги ползваш с ТМР2 който е 8 битов ти трябва и прескелера(или си ползва четвъртинките от клока). Ама върху тях нямаш физически достъп. Иначе няма как периода да е 8 битов а импулса да е 10 битов. Просто си играй само с 8те бита MSB. Не се вкарвай във филми сам. Младшите 2 бита ги забравяш. Сетваш ги еднократно в 0 и си имаш един прекрасен 8бит ШИМ. На практика става така, че имаш 2 мл. бита и в таймера и в регистъра за съвпадение. Но не те интересуват. Те си се въртят, но ти чакаш съвпадение в старшите 8бита а младшите когато станат. И понеже си задал някаква стойност еднократно, съвпадение се получава винаги на една и съща стойност. Таймера го сетвай, когато си искаш. Той ще възприеме новата стойност, когато се извърти поредния цикъл. За това са турили 2 регистъра - господар и роб. Всъщност Таймера се сетва еднократно, освен ако не искаш да местиш и честотата на ШИМа. Тъй че турни го на 255 в началото и после само си ръчкай по CCPR1L. За да нямаш грижа да следиш дали периода ти е по къс от импулса. Загледай в ПДФа има едни таблици и обяснения как се конфигурира. Верно е объркващо малко.. Ако не ти се вярва, МПЛАБ си има чудесен симулатор цъкаш си стъпка по стъпка гледаш си регистрите и ще видиш че става с едно сетване само на MSB.
|
| Пон Юли 02, 2012 5:40 pm |
|
 |
|
741
Ранг: Форумен бог
Регистриран на: Вто Сеп 15, 2009 10:44 am Мнения: 1034
|
 Re: PWM при PIC16F819
Това предполагам го е съобразил. Само че му обясняваш как да смъкне честотата 4 пъти и да сложи 4 пъти по-голяма бобина, за да спести няколко инструкции в кода. Няма смисъл. Ъпдейт на двата регистъра в прекъсването на таймера е ОК.
|
| Пон Юли 02, 2012 6:43 pm |
|
|
Кой е на линия |
Потребители разглеждащи този форум: 0 регистрирани и 3 госта |
|
Вие не можете да пускате нови теми Вие не можете да отговаряте на теми Вие не можете да променяте собственото си мнение Вие не можете да изтривате собствените си мнения Вие не можете да прикачвате файл
|
|