Микроконтролери и електроника
http://mcu-bg.com/mcu_site/

PIC18F452 PWM
http://mcu-bg.com/mcu_site/viewtopic.php?f=3&t=8163
Страница 1 от 1

Автор:  npelov [ Пет Окт 01, 2010 8:58 pm ]
Заглавие:  PIC18F452 PWM

Нещо ми куца PWM-то. По конкретно промяната на duty cycle. Пиша си аз на определените за това места - младшите 2 бита в CCP2CON <5:4>, старшите 6 бита в CCP2L. Почти работи, само дето от време на време PWM-то гасне или пък е в другата крайност - 100% .
В даташита пише че тези стойности отиват в CCP2H и вътрешни 2 бита при match/нулиране на таймера. Никъде не пише че трябва да правя още нещо когато променям стойността. Всъност ако променям само CCP2L от 0х00 до 0х3F си работи много добре. Обаче почна ли да пипам двата бита в CCP2CON става боза.
Къде бъркам?


Код:
; инициализация
   movlw   0x3F
   movwf   PR2

; промяна на duty cycle
   btfsc   encoderValue, 0
   bsf      CCP2CON, 4
   btfsc   encoderValue, 1
   bsf      CCP2CON, 5
   
   rrncf   encoderValue, w
   movwf   tempi
   rrncf   tempi, w
   movwf   CCPR2L

Автор:  npelov [ Пет Окт 01, 2010 9:07 pm ]
Заглавие: 

открих си грешка че битовете 5:4 не се нулират преди да се сетнат в 1, но това не обяснява странното държане на CCP модула:
Код:
; промяна на duty cycle
   movlw   0xCF
   andwf   CCP2CON
   btfsc   encoderValue, 0
   bsf      CCP2CON, 4
   btfsc   encoderValue, 1
   bsf      CCP2CON, 5

Автор:  npelov [ Пет Окт 01, 2010 9:22 pm ]
Заглавие: 

Няма кой да гледа ситния шрифт под таблиците. На страница 123 от даташита има таблица на която в 4 и 5 бит от CCP2CON са отбелязани със сиво и под нея пише "Shaded cells are not used by PWM and Timer2". Т.е. PWM 2 е 8 битово, а не 10.
Поправка:
Въпреки всичко по-нагоре има друга таблица която пък казва че не само могат да се ползват в PWM, но и важат само в PWM режим.

идеи?

Автор:  npelov [ Пет Окт 01, 2010 9:53 pm ]
Заглавие: 

:) ок де. намерих си проблема. инструкцията RRNCF като върти надясно вместо да запълва с "0" както си мислех че прави сетва бит 7 със стойността на излезлия отдясно бит. това:
Код:
   andlw   0x3F

преди
Код:
   movwf   CCPR1L

решава проблема.


Обикновено сам си решавам повечето проблеми, но ако не пиша във форума се блъскам с часове. Като пиша и докато обяснявам ми идва нещо на ум. Това ми напомня как едни програмисти решавали проблемите си. Разказвали ги на колеги. После решили да спестят времето на колегите си и си купили по едно гумено пате. Когато имат проблем обясняват подробно на патето и докато обясняват - намират решението...

Автор:  head_up [ Пет Окт 01, 2010 10:55 pm ]
Заглавие: 

npelov написа:
После решили да спестят времето на колегите си и си купили по едно гумено пате. Когато имат проблем обясняват подробно на патето и докато обясняват - намират решението...

ще ти купим гумено пате! щом това ще ти реши проблемите с микроконтролерите - цяло ято ще ти купим :D

Страница 1 от 1 Часовете са според зоната UTC + 2 часа [ DST ]
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
http://www.phpbb.com/