| Микроконтролери и електроника http://mcu-bg.com/mcu_site/ |
|
| CCP / capture http://mcu-bg.com/mcu_site/viewtopic.php?f=2&t=9325 |
Страница 1 от 1 |
| Автор: | npelov [ Сря Сеп 07, 2011 9:30 pm ] | ||||||||||||||||||
| Заглавие: | CCP / capture | ||||||||||||||||||
Процесора е PIC18F45J10. Опитвам се да подкарам IR приемник с CCP2 модула в capture режим. Прекъсване се случва, но CCPR2L/H остават непроменени. Е, не точно. Копира първия път - при пускане на модула и таймер 1, което не е чак толкова невъзможно - ако пина е бил 0 - нормалното положение на IR приемника е 1 -> копира се. Проблема е обаче, че след това тази стойност си остава същата и не се променя изобщо. Трасирах го и с PICKIT2 - сложих брекпоинт на прекъсването - прекъсване има като като подам сигнал с дистанционното, стойността на CCPR2 не се променя ... изобщо. Опитах какво ли не - спирах прекъсването на Т1, сетнах входовете на цифрови с movlw 0x0F; movwf ADCON1, спирах прекъсването на CCP2 или байпасвах кода, стойността си остава същата в CCPR2. Вътре в прекъсването на CCP сменям фронта на импулса така:
както е указано в даташита, макар че като не пипам прескалъра не би трябвало да е необходимо: Целия код е много за да се постне. Все пак на теория няма какво да спре CCPR регистъра да се ъпдейтва, ако прекъсването се случва ... или поне така си мисля. edit - конфигурацията:
|
|||||||||||||||||||
| Автор: | npelov [ Сря Сеп 07, 2011 10:14 pm ] |
| Заглавие: | Re: CCP / capture |
хмм. може и да бъркам. CCPR2 май се ъпдейтват всеки път, но с едни и същи стойности - извеждам и тях и стойността на TMR1 -> TMR1L/H си е наред, CCPR2 - една и съща стойност. |
|
| Автор: | aquilax [ Чет Сеп 08, 2011 10:27 am ] |
| Заглавие: | Re: CCP / capture |
Здрасти,мисля че не е правилна смяната на фронта ........ setCcpCon 0x04 ; falling edge setCcpCon 0x05 ; rising edge така винаги CCP2CON ще е 0x05.може би ще е по леснo само да сменяш бита,който ти трябва btfss CCP2CON,0 bsf CCP2CON,0 btfsc CCP2CON,0 bcf CCP2CON,0 |
|
| Автор: | npelov [ Чет Сеп 08, 2011 11:49 am ] | ||||||||||||||||||
| Заглавие: | Re: CCP / capture | ||||||||||||||||||
Нямах в предвид, че пускам двата макроса setCcpCon 0x04 и setCcpCon 0x05 един след друг. Всъщност прекъсването е state machine и на всяко прекъсване сменям фронта. Както и да е - аз опитах да прескоча това и в прекъсването на CCP да оставя само копирането на CCPR регистрите за да ги покажа - всеки път една и съща стойност. Имам още един таймер който цъка с 1ms - TMR0. Там чета указател към числата които трябва да покажа на дисплея ( 7 seg. LED, 4 digit). Ползвам FSR0. На теория ако FSR0 не сочи където трябва може да пренаписва съдържанието на CCPR регистрите, но на практика ми се струва невъзможно. Всеки път правя нещо подобно:
T.e. нямам цикъл и няма как да излезе извън контрол. Пък и само чета, не пиша. Вчера опитах да направя същото с CCP1 - същата работа. Timer1 ми е с кристал 32768 кХз - т.е. не е асинхронен, което би попречило на CCP да работи правилно. Може би да се разровя в битовете, които иначе не се ползват, когато таймера работи с осцилатора си. Ето как изглеждат настройките на 2-та таймера (включвам ги в края на файла с инициализацията):
|
|||||||||||||||||||
| Автор: | npelov [ Чет Сеп 08, 2011 4:55 pm ] |
| Заглавие: | Re: CCP / capture |
Открих, че числото винаги е с 1 по-голямо от стойността на таймер 1 при прекъсване. Т.е. ако не закачам таймера брои от 0 до 0xFFFF -> CCPR e 0х0001. Ако при прекъсването на таймер 1 сетвам бит 7 на старшия байт за да брои от 0x8000 до 0xFFFF (1 секунда при 32.768 кХз кварц) CCPR винаги има стойност 0x8001. т.е. стойността на таймера се копира в CCPR 1/32768 (около 30.5us) след прекъсването на таймера и само тогава. Т.е. не се копира при ccp прекъсване. |
|
| Автор: | npelov [ Чет Сеп 08, 2011 9:59 pm ] | ||
| Заглавие: | Re: CCP / capture | ||
направих отделна по-проста програма за да съм сигурен че останалия код не прецаква нещо. Няма прекъсвания и т.н. (глобалните прекъсвания са забранени). Ако някой е мераклия - да хвърли един поглед. Струва ми се че нещо мсу-то се е прецакало. Вече правих същото на един pic16 - не е голяма философия...
|
|||
| Автор: | Cekins [ Пет Сеп 09, 2011 11:55 am ] |
| Заглавие: | Re: CCP / capture |
The timers that are to be used with the capture feature (Timer1 and/or Timer3) must be running in Timer mode or Synchronized Counter mode. In Asynchronous Counter mode, the capture operation will not work. цитат от даташита ако правилно съм установил, че 0х4Е ти е контрола на Т1, там бит 2 (T1SYNC) трябва да е 0 ... |
|
| Автор: | npelov [ Пет Сеп 09, 2011 5:35 pm ] |
| Заглавие: | Re: CCP / capture |
Ще го пробвам тази вечер, но аз го четох много пъти и има само един асинхронен режим и той е свързан с външен сигнал, не със собствения генератор: "must be running in Timer mode or Synchronized Counter mode" - в случая аз ползвам timer mode Все си мислех че съм го сетнал за всеки случай, но може и да не съм. |
|
| Автор: | Cekins [ Пет Сеп 09, 2011 5:57 pm ] |
| Заглавие: | Re: CCP / capture |
Точно че си го сетнал и става async... Аз останах с впечатление че ползваш осцилатора на таймер1 с външен кварц на 32.768 kHz. Тогава синхронизацията ти трябва да е включена (T1CON.2=0) |
|
| Автор: | npelov [ Пет Сеп 09, 2011 8:36 pm ] | |||||||||
| Заглавие: | Re: CCP / capture | |||||||||
мда. хващам се като удавник за сламка. Не стана:
Точно така, с външен кварц е - това е режим таймер. Ако погледнеш T1RUN на същия регистър пише, че при 1 такта се взима от Т1 осцилатора, при 0 от "друг източник" (виж TMR1CS). Хммм ... Т1RUN е флаг. аз си мислех че така се включва таймера към собствения си генератор... Добавка. В началото на таймер 1 пише: Timer1 can operate in one of these modes: Timer Synchronous Counter Asynchronous Counter Т.е. ако не брои външни импулси е в режим таймер и синхронизацията няма връзка. |
||||||||||
| Автор: | npelov [ Пет Сеп 09, 2011 8:46 pm ] |
| Заглавие: | Re: CCP / capture |
мам*а му! тръгна!!! изчистил съм бита в грешния файл. Прав беше. Все пак описанието на микрочип е доста объркващо |
|
| Автор: | Cekins [ Пет Сеп 09, 2011 11:38 pm ] |
| Заглавие: | Re: CCP / capture |
Той run-а няма нищо общо с тва от де взема такта - в смисъл т1(и т3 където го има) има два източника - външен и вътрешен. Вътрешния винаги е синхронизиран така или иначе. А щом е външен вече е counter и е sync и async. Пък вече самия осцилатор си е съвсем отделен модул - ти можеш и да не ползваш неговия осцилатор а някъв друг източник на импулси. А каква е идеята кепчъра да не работи в асинхронен режим идея си нямам. Ако това ти се струва объркващо, погледни на 24-ките как е |
|
| Автор: | npelov [ Съб Сеп 10, 2011 8:32 am ] |
| Заглавие: | Re: CCP / capture |
да, като се замислиш синхронизацията трябва когато честотата е различна от системната ... Ами мерси. Още една бира имаш... скоро ще станат много |
|
| Страница 1 от 1 | Часовете са според зоната UTC + 2 часа [ DST ] |
| Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group http://www.phpbb.com/ |
|