|
Виж темите без отговор | Виж активните теми
Дата и час: Вто Юли 28, 2026 12:19 am
|
Страница 1 от 1
|
[ 13 мнения ] |
|
| Автор |
Съобщение |
|
npelov
Ранг: Почетен член
Регистриран на: Пет Яну 22, 2010 5:46 pm Мнения: 680
|
 CCP / capture
Процесора е PIC18F45J10. Опитвам се да подкарам IR приемник с CCP2 модула в capture режим. Прекъсване се случва, но CCPR2L/H остават непроменени. Е, не точно. Копира първия път - при пускане на модула и таймер 1, което не е чак толкова невъзможно - ако пина е бил 0 - нормалното положение на IR приемника е 1 -> копира се. Проблема е обаче, че след това тази стойност си остава същата и не се променя изобщо. Трасирах го и с PICKIT2 - сложих брекпоинт на прекъсването - прекъсване има като като подам сигнал с дистанционното, стойността на CCPR2 не се променя ... изобщо. Опитах какво ли не - спирах прекъсването на Т1, сетнах входовете на цифрови с movlw 0x0F; movwf ADCON1, спирах прекъсването на CCP2 или байпасвах кода, стойността си остава същата в CCPR2. Вътре в прекъсването на CCP сменям фронта на импулса така: както е указано в даташита, макар че като не пипам прескалъра не би трябвало да е необходимо: Целия код е много за да се постне. Все пак на теория няма какво да спре CCPR регистъра да се ъпдейтва, ако прекъсването се случва ... или поне така си мисля. edit - конфигурацията:
|
| Сря Сеп 07, 2011 9:30 pm |
|
 |
|
npelov
Ранг: Почетен член
Регистриран на: Пет Яну 22, 2010 5:46 pm Мнения: 680
|
 Re: CCP / capture
хмм. може и да бъркам. CCPR2 май се ъпдейтват всеки път, но с едни и същи стойности - извеждам и тях и стойността на TMR1 -> TMR1L/H си е наред, CCPR2 - една и съща стойност.
|
| Сря Сеп 07, 2011 10:14 pm |
|
 |
|
aquilax
Ранг: Минаващ
Регистриран на: Нед Фев 20, 2005 4:17 am Мнения: 33
|
 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
|
| Чет Сеп 08, 2011 10:27 am |
|
 |
|
npelov
Ранг: Почетен член
Регистриран на: Пет Яну 22, 2010 5:46 pm Мнения: 680
|
 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-та таймера (включвам ги в края на файла с инициализацията):  |  |  |  | Код: movlf macro y, x #if x == 0 clrf y #else movlw x movwf y #endif endm
........ ; -------- Timer0 init - display timer -------- ; 16 MHz / 4 = 4 MHz / 4000 = 1kHz (1ms timer) movlf T0CON,0x08 ; 0000 1000 16bit, no prescaller, OFF movlf TMR0L, LOW(TIMER0ADD) movlf TMR0H, HIGH(TIMER0ADD) bsf INTCON, TMR0IF bsf INTCON, TMR0IE bsf INTCON2, TMR0IP
; ------ Timer 1 init ------ bcf T1CON, TMR1ON movlf TMR1H, 0x80 movlf TMR1L, 0x00 bcf PIR1, TMR1IF movlf T1CON, 0x4E ; 0100 1110 bsf PIE1, TMR1IE bcf IPR1, TMR1IP ; low priority
|  |  |  |  |
|
| Чет Сеп 08, 2011 11:49 am |
|
 |
|
npelov
Ранг: Почетен член
Регистриран на: Пет Яну 22, 2010 5:46 pm Мнения: 680
|
 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 прекъсване.
|
| Чет Сеп 08, 2011 4:55 pm |
|
 |
|
npelov
Ранг: Почетен член
Регистриран на: Пет Яну 22, 2010 5:46 pm Мнения: 680
|
 Re: CCP / capture
направих отделна по-проста програма за да съм сигурен че останалия код не прецаква нещо. Няма прекъсвания и т.н. (глобалните прекъсвания са забранени). Ако някой е мераклия - да хвърли един поглед. Струва ми се че нещо мсу-то се е прецакало. Вече правих същото на един pic16 - не е голяма философия...
|
| Чет Сеп 08, 2011 9:59 pm |
|
 |
|
Cekins
Ранг: Форумен бог
Регистриран на: Сря Апр 20, 2005 12:02 pm Мнения: 9119 Местоположение: Разград
|
 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 ...
|
| Пет Сеп 09, 2011 11:55 am |
|
 |
|
npelov
Ранг: Почетен член
Регистриран на: Пет Яну 22, 2010 5:46 pm Мнения: 680
|
 Re: CCP / capture
Ще го пробвам тази вечер, но аз го четох много пъти и има само един асинхронен режим и той е свързан с външен сигнал, не със собствения генератор: "must be running in Timer mode or Synchronized Counter mode" - в случая аз ползвам timer mode Все си мислех че съм го сетнал за всеки случай, но може и да не съм.
|
| Пет Сеп 09, 2011 5:35 pm |
|
 |
|
Cekins
Ранг: Форумен бог
Регистриран на: Сря Апр 20, 2005 12:02 pm Мнения: 9119 Местоположение: Разград
|
 Re: CCP / capture
Точно че си го сетнал и става async...
Аз останах с впечатление че ползваш осцилатора на таймер1 с външен кварц на 32.768 kHz. Тогава синхронизацията ти трябва да е включена (T1CON.2=0)
|
| Пет Сеп 09, 2011 5:57 pm |
|
 |
|
npelov
Ранг: Почетен член
Регистриран на: Пет Яну 22, 2010 5:46 pm Мнения: 680
|
 Re: CCP / capture
мда. хващам се като удавник за сламка. Не стана: Точно така, с външен кварц е - това е режим таймер. Ако погледнеш T1RUN на същия регистър пише, че при 1 такта се взима от Т1 осцилатора, при 0 от "друг източник" (виж TMR1CS). Хммм ... Т1RUN е флаг. аз си мислех че така се включва таймера към собствения си генератор... Добавка. В началото на таймер 1 пише: Timer1 can operate in one of these modes: Timer Synchronous Counter Asynchronous Counter Т.е. ако не брои външни импулси е в режим таймер и синхронизацията няма връзка.
|
| Пет Сеп 09, 2011 8:36 pm |
|
 |
|
npelov
Ранг: Почетен член
Регистриран на: Пет Яну 22, 2010 5:46 pm Мнения: 680
|
 Re: CCP / capture
мам*а му! тръгна!!! изчистил съм бита в грешния файл. Прав беше. Все пак описанието на микрочип е доста объркващо
|
| Пет Сеп 09, 2011 8:46 pm |
|
 |
|
Cekins
Ранг: Форумен бог
Регистриран на: Сря Апр 20, 2005 12:02 pm Мнения: 9119 Местоположение: Разград
|
 Re: CCP / capture
Той run-а няма нищо общо с тва от де взема такта - в смисъл т1(и т3 където го има) има два източника - външен и вътрешен. Вътрешния винаги е синхронизиран така или иначе. А щом е външен вече е counter и е sync и async. Пък вече самия осцилатор си е съвсем отделен модул - ти можеш и да не ползваш неговия осцилатор а някъв друг източник на импулси. А каква е идеята кепчъра да не работи в асинхронен режим идея си нямам. Ако това ти се струва объркващо, погледни на 24-ките как е 
|
| Пет Сеп 09, 2011 11:38 pm |
|
 |
|
npelov
Ранг: Почетен член
Регистриран на: Пет Яну 22, 2010 5:46 pm Мнения: 680
|
 Re: CCP / capture
да, като се замислиш синхронизацията трябва когато честотата е различна от системната ... Ами мерси. Още една бира имаш... скоро ще станат много 
|
| Съб Сеп 10, 2011 8:32 am |
|
|
|
Страница 1 от 1
|
[ 13 мнения ] |
|
Кой е на линия |
Потребители разглеждащи този форум: 0 регистрирани и 1 госта |
|
Вие не можете да пускате нови теми Вие не можете да отговаряте на теми Вие не можете да променяте собственото си мнение Вие не можете да изтривате собствените си мнения Вие не можете да прикачвате файл
|
|