Отговори на тема  [ 14 мнения ] 
CCP capture 
Автор Съобщение
Ранг: Новодошъл
Ранг: Новодошъл
Аватар

Регистриран на: Пет Окт 27, 2006 6:23 pm
Мнения: 162
Местоположение: Севлиево
Мнение CCP capture
здравейте
За да измеря продължителността на импулса позвам това:
setup_ccp1(CCP_CAPTURE_RE); // ccp1 - da reagira na PREDEN front
CCP1IF=0;
T1IF=0;
while (!CCP1IF && !T1IF);
t1_=CCP_1; // 4islo pri preden front
setup_ccp1(CCP_CAPTURE_FE); // ccp1 - da reagira na Zaden front
CCP1IF=0;
while (!CCP1IF && !T1IF);
t2_=CCP_1; // 4islo pri zaden front
digit = (t2_-t1_) ;

Как да измеря целия период? т.е. от преден фронт пак до преден?


Сря Окт 15, 2008 12:28 pm
Профил ICQ
Ранг: Почетен член
Ранг: Почетен член
Аватар

Регистриран на: Пет Фев 17, 2006 9:17 am
Мнения: 765
Местоположение: Стара Загора
Мнение 
Естествено :)


Сря Окт 15, 2008 12:35 pm
Профил ICQ
Ранг: Новодошъл
Ранг: Новодошъл
Аватар

Регистриран на: Пет Окт 27, 2006 6:23 pm
Мнения: 162
Местоположение: Севлиево
Мнение 
setoy написа:
Естествено :)

кое ти се стори естествено ?


Сря Окт 15, 2008 12:39 pm
Профил ICQ
Ранг: Почетен член
Ранг: Почетен член
Аватар

Регистриран на: Пет Фев 17, 2006 9:17 am
Мнения: 765
Местоположение: Стара Загора
Мнение Re: CCP capture
mash написа:
Как да измеря целия период? т.е. от преден фронт пак до преден?


Отговарям : естествено, че да. Или от заден до заден, все едно.


Сря Окт 15, 2008 12:41 pm
Профил ICQ
Ранг: Новодошъл
Ранг: Новодошъл

Регистриран на: Вто Авг 23, 2005 10:36 am
Мнения: 156
Местоположение: Казанлък
Мнение 
Особеното при този модул е, че за засичане на стойността се използва ТМР1, но трябва да го нулираш софтуерно при фронта от който започва измерването, за да ти измери коректно стойността.
Също трябва да си сигурен че не се е препълнил в рамките на измервания период или ако да, да знаеш колко пъти и да коригираш крайната стойност.


Чет Окт 16, 2008 4:42 pm
Профил
Ранг: Новодошъл
Ранг: Новодошъл
Аватар

Регистриран на: Пет Окт 27, 2006 6:23 pm
Мнения: 162
Местоположение: Севлиево
Мнение 
Ами.. да това го правя т.е. нулирам го, но аз ще измервам стойности от порядъка на 600 микросекунди. Тактовата честота е 4 МГц. Т.е. един такт една микросекунда. Практически за моите цели няма да се препълни. Проблем ми е да разбера как да го накарам да мери от нарастващ фронт пак до нарастващ. т.е. цялата продължителност на периода?


Чет Окт 16, 2008 6:37 pm
Профил ICQ
Ранг: Новодошъл
Ранг: Новодошъл

Регистриран на: Вто Авг 23, 2005 10:36 am
Мнения: 156
Местоположение: Казанлък
Мнение 
Ами кво има да му се чудиш:
1. Следиш CCP-пина и чакаш положителен фронт, примерно btfss или while(CCP.пин == 0).
2. На следващата стъпка от програмата нулираш ТМР1 и активираш CCP модула, като го конфигурираш да реагира по положителен фронт.
3.Чакаш флага и това е...


Чет Окт 16, 2008 10:26 pm
Профил
Ранг: Форумен бог
Ранг: Форумен бог
Аватар

Регистриран на: Пон Юни 05, 2006 1:48 pm
Мнения: 4906
Местоположение: където небето среща земята, ракията е Jameson, а бирата Guinness
Мнение 
mash написа:
Ами.. да това го правя т.е. нулирам го, но аз ще измервам стойности от порядъка на 600 микросекунди. Тактовата честота е 4 МГц. Т.е. един такт една микросекунда. Практически за моите цели няма да се препълни. Проблем ми е да разбера как да го накарам да мери от нарастващ фронт пак до нарастващ. т.е. цялата продължителност на периода?


я сметни пак :!:
f = 1MHz = 1,000,000Hz
T = 1/f
T = 1/1е6
T = 0.000001sec.
и излиза, че 1 микросекунда е периода на 1 МХз... :)
а 4МХз = замести го по начина описан по-горе за да видиш колко части от секундата е периода :)

_________________
... ако трети ден не ти се работи... това означава, че е сряда !


Чет Окт 16, 2008 10:50 pm
Профил
Ранг: Форумен бог
Ранг: Форумен бог

Регистриран на: Чет Фев 01, 2007 4:04 am
Мнения: 1539
Мнение 
mash написа:
Ами.. да това го правя т.е. нулирам го, но аз ще измервам стойности от порядъка на 600 микросекунди. Тактовата честота е 4 МГц. Т.е. един такт една микросекунда. Практически за моите цели няма да се препълни. Проблем ми е да разбера как да го накарам да мери от нарастващ фронт пак до нарастващ. т.е. цялата продължителност на периода?

Нищо не трябва да нулирваш. При първото прекъсване запомняш текущата стойност на ТМР1 (която се прехвърля автоматично в CCP регистрите) , при следващото прекъсване от новата стойност вадиш предишната. Не е важна стойността на таймера - важна е разликата между две замервания.


Чет Окт 16, 2008 11:16 pm
Профил
Ранг: Почетен член
Ранг: Почетен член
Аватар

Регистриран на: Пет Фев 17, 2006 9:17 am
Мнения: 765
Местоположение: Стара Загора
Мнение 
Да, именно разликата. Ако го нулираш след събитието, което чакаш, само внасяш грешка. Доакто измерваш не го пипаш.

CCP1IF=0;
T1IF=0;
while (!CCP1IF && !T1IF);
t1_=CCP_1; // 4islo pri preden front

//setup_ccp1(CCP_CAPTURE_FE); // ccp1 - da reagira na Zaden front

CCP1IF=0;
while (!CCP1IF && !T1IF);
t2_=CCP_1; // 4islo pri zaden front
digit = (t2_-t1_) ;




Цитат:
mash написа:
Ами.. да това го правя т.е. нулирам го, но аз ще измервам стойности от порядъка на 600 микросекунди. Тактовата честота е 4 МГц. Т.е. един такт една микросекунда. Практически за моите цели няма да се препълни. Проблем ми е да разбера как да го накарам да мери от нарастващ фронт пак до нарастващ. т.е. цялата продължителност на периода?



я сметни пак Exclamation
f = 1MHz = 1,000,000Hz
T = 1/f
T = 1/1е6
T = 0.000001sec.
и излиза, че 1 микросекунда е периода на 1 МХз... Smile


@MYXATA, заклетите пикоборци делят винаги на 4. Сметката му е вярна.


Пет Окт 17, 2008 9:37 am
Профил ICQ
Ранг: Новодошъл
Ранг: Новодошъл
Аватар

Регистриран на: Пет Окт 27, 2006 6:23 pm
Мнения: 162
Местоположение: Севлиево
Мнение 
:)
ясно
Значи трябва след като измеря от нарастващ към спадащ фронт после да направя още едно измерване отново за нарастващ за да имам целия период?
и като от т2 извадя т1нулирам таймера и после към тях да добавя т3, което ми е от спадащ към нараствщ ?


Пет Окт 17, 2008 10:50 am
Профил ICQ
Ранг: Почетен член
Ранг: Почетен член
Аватар

Регистриран на: Пет Фев 17, 2006 9:17 am
Мнения: 765
Местоположение: Стара Загора
Мнение 
Не бре човек! Написал съм ти го. Виж реда, който съм закоментирал. Не преинициализираш кепчъра! И той реагира единствено на преден (или заден) фронт. Времето между две сработвания ти е периода. Какво по-просто :idea:


Пет Окт 17, 2008 11:59 am
Профил ICQ
Ранг: Популярен
Ранг: Популярен

Регистриран на: Сря Яну 25, 2006 12:47 pm
Мнения: 305
Местоположение: Varna
Мнение 
Хей mash, нещо си се пообъркал човече. Понякога така се получава. Като ти чета постовете и имам чувството, че не знаеш какво е ПЕРИОД на сигнал. Извини ме, но ще ти припомня: най - просто казано, това е времето м/у два съседни едноименни фронта, т.е. м/у два съседни нарастващи или два съседни падащи. Та в този смисъл техниката ти трябва да е следната:
1. Настройваш си CCP-то да ти реагира на който от двата фронта си избереш и повече не го пипаш!
2. При първия пускаш таймера
3. При следващия вземаш отчета и ако искаш нулираш таймера. Ако питаш мен с нулирането става по - лесно. Времето за нулирането можеш да го прибавиш към времето за измерването на следващия период. Инъче ти трябва код, който да получи разликата м/у начало и край.
4. От време на време осредняваш (зависи колко ти е стабилна честотата), но каквато и да е трябва да осредняваш.
5. Имай предвид и разделиталната способност на системата си, т.е. фронта на сигнала, който мериш може да пристигне току преди да ти се е клокнал таймера или току след като ти се е клокнал, т.е. имаш +- 0.5 от периода на тактовата честота на таймера.
6. Ако изолзваш прекъсване за обслужване на измерването и нулираш таймера, трябва да добавиш и времето за влизане в прекъсването до съответната инструкция.

Извини ме, че обяснявам като на начинаещ, ама...


Пет Окт 17, 2008 5:11 pm
Профил
Ранг: Новодошъл
Ранг: Новодошъл
Аватар

Регистриран на: Пет Окт 27, 2006 6:23 pm
Мнения: 162
Местоположение: Севлиево
Мнение 
Значи разбрах къде ми е проблема....
До сега си мислех, че след като го инициализирам за нарастващ фронт започва да отчита времето не до следващия нарасващ, а докъто фронта стане спадащ. т.е. за един положителен импулс, а не от началото на един до началото на следващия. Това ми заблуждение е породило всичките ми въпроси в тази тема :)
Чак сега ми светна и.... утре ще си коригирам кода. Днес ми е празнично :)


Съб Окт 18, 2008 11:57 am
Профил ICQ
Покажи мненията от миналия:  Сортирай по  
Отговори на тема   [ 14 мнения ] 

Кой е на линия

Потребители разглеждащи този форум: 0 регистрирани и 2 госта


Вие не можете да пускате нови теми
Вие не можете да отговаряте на теми
Вие не можете да променяте собственото си мнение
Вие не можете да изтривате собствените си мнения
Вие не можете да прикачвате файл

Търсене:
Иди на:  
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group.
Designed by ST Software for PTF.
Хостинг и Домейни