|
Виж темите без отговор | Виж активните теми
Дата и час: Пон Юли 27, 2026 6:07 pm
| Автор |
Съобщение |
|
vasil
Ранг: Новодошъл
Регистриран на: Пет Ное 26, 2004 7:35 pm Мнения: 108 Местоположение: София
|
За да можеш да вярваш на този уред ще трябва да обърнеш голямо внимание на опорния генератор . Добре е да е захранен с отделен стабилизатор и е задължително да вземеш мерки за температурната му стабилизация .Най лесно е разбира се да ползваш готов термостабилизиран генератор .
|
| Чет Апр 27, 2006 3:01 am |
|
 |
|
milenjs
Ранг: Форумен бог
Регистриран на: Сря Мар 08, 2006 2:12 pm Мнения: 2017 Местоположение: Котел
|
Да от часовник, но хайде да изясним няколко неща.
1. Каква честота желаеш да измерваш? От колко до колко?
2. Каква точност ти трябва - 0.01, 0.1, 1, 10 hz...?
3. Какъв процесор смяташ да използваш, каква индикация?
4. На какво пишеш - асемблер или нещо друго?
Иначе честотата на кварца от часовник не е ниска, все пак зависи от заданието ти. Ако си с LED дисплай малко кофти, с LCD обаче никакви проблеми, да не говорим че през повечето време проца ще ти брои и ти ще чакаш да изтече времеинтервала. Така че ако не ползваш сложни сметки за изобразяване на резултата този кварц те урежда... Ако ли не - бягай нагоре... Забеляза ли в кода кото пуснах там кварца е 4 Мхз и има малко играчка с нагласянето на време интервала с 3-те константи за закъсненията.
Още нещо - какъв бутон ??? Нулираш си броячите, стартираш измерването, изчакваш да изтече времето, спираш измерването и резултата (в двоичен вид) ти е готов! За това какъв и колко брояча ще ползваш зависи от максималната честотата на измерване която искаш - 2,3,4 битов.
|
| Чет Апр 27, 2006 8:20 am |
|
 |
|
setoy
Ранг: Почетен член
Регистриран на: Пет Фев 17, 2006 9:17 am Мнения: 765 Местоположение: Стара Загора
|
Аха, точно баш тамън  Бутон? Ми можеш да ползваш РБ0 с прекъсване от него... преден фронт, заден фронт, както ти е кеф. TOIE не се налага да го закачаш , само че TOIF трябва да го нулираш ръчно вътре в обработката на прекъсването - иначе излизане няма
Все пак най-добре да ползваш ССР периферията,когато я имаш...
|
| Чет Апр 27, 2006 9:20 am |
|
 |
|
daniel_stefanov
Ранг: Ориентиран
Регистриран на: Нед Мар 27, 2005 12:40 am Мнения: 206 Местоположение: София
|
Искам да започна с възможно най-лекия вариант, за да си изясня първо теоретично нещата, но след това да имам възможност да усложнявам постепенно задачата.
1. Нека да мога да меря от 1Hz до 1MHz
2. Ако не е толкова трудно нека точността да е 0,1Hz. В противен случай - 1Hz.
3. PIC16F877, индикация LCD AC202A - 2x20
4. MikroC Compiler for PIC - Компилатор свален от www.mikroelektronika.co.yu
Понеже ще използвам LCD надявам се , че нещата ще са по лесни  както казваш. Дали ще използувам сложни сметки, доколкото разбирам зависи от това какъв кварц ще използвам.
Още нещо - какъв бутон ??? - С този бутон искам да симулирам постъпването на предния фронт на измерваният сигнал. Като го натисна таймерът ще започне да сумира - ще се стартира мерене. Пусна ли го и таймера спира. Ако държа натиснат 0,5сек и го пусна 0,5сек периода ще ми е 1сек. На дисплея трябва да ми покаже 1Hz. Това имаш в предвид. Малко тъпо ама за пробата става.
Нулираш си броячите - Защо броячи? Нали конфигурирам TRM0 в режим на таймер по вътрешния цикъл? Или така си мисля че трябва да е
стартираш измерването - Е това незнам как става. Както конфигурирам таймера, той започва веднага да сумира. Как да го стартирам когато аз искам? т.е по преден фронт на измерваният сигнал.
Усещам, че аз бъркам нещо с подхода на мерене. С няколко думи ще ти кажа как си ги представям аз нещата: Когато на RA4 (този пин съм избрал незнам доколко е подходящ) постъпи сигнал (този на който ще мерим честотата) По предният фронт на този импулс пускам таймера (TMR0) - е това не знам как става. Той започва да брои до следващия преден фронт. Това време вътре в таймера е периода на сигнала, т.е. той трябва да е отброил 1сек при 1 Hz. Като знам за колко време таймера препълва при определена честота на осцилатора, тогава за сметката е лесна. Нещо е такова ми се върти в главата  . Ами не е най елегантния начин ама теоретично трябва да стане. Ами това е. Как мислиш?
|
| Чет Апр 27, 2006 10:03 am |
|
 |
|
milenjs
Ранг: Форумен бог
Регистриран на: Сря Мар 08, 2006 2:12 pm Мнения: 2017 Местоположение: Котел
|
Добре... За ниски честоти е по добре да измерваш периода на сигнала както си го измислил. за Честоти над килохерц е добре да мериш честота - броя на импулсите постъпили в БРОЯЧА/БРОЯЧИТЕ за еталонно време (обикновенно 1 или 0.1 сек). Затова ти казах последователноста - стартиране, нулиране... За бутона - ами свали си един Proteus и симулирай работата си там, има си генератор и.т.н.
Още нещо - за "тънки моменти" както работа с таймерите е добре да използваш и асемблер, ако не знаеш как работи примерно таймер 0 - чети докато разбереш.
Еталонното ти време е от нулиране на брояча (не е нужно да го спираш да брои) до неговото четене.
Ако имаш въпроси и нужда от помощ - пиши и на ЛС за да не досаждаме на колегите с едно и също...
Успех!
|
| Чет Апр 27, 2006 10:48 am |
|
 |
|
valioman
Ранг: Почетен член
Регистриран на: Съб Сеп 17, 2005 5:07 pm Мнения: 813 Местоположение: Сливен
|
Глупости на много хора им е интересно и познавателно все пак сме във форум!! 
|
| Чет Апр 27, 2006 4:48 pm |
|
 |
|
milenjs
Ранг: Форумен бог
Регистриран на: Сря Мар 08, 2006 2:12 pm Мнения: 2017 Местоположение: Котел
|
OK, ако е интересно нищо против да помагаме. Ако може да се премести темата в "Академия". Исках да се пише на ЛС защото в този раздел не е мястото да си казваме как се конфигурира примерно TMR0, искам да помогна на всички до колкото мога разбира се. Ето как аз меря период от време. Писано е преди месец - за мен бяха първи стъпки при компилаторите, преди това съм маал само на асм... Моля не ми се смейте иначе критики и съвети приемам всякакви....
;=====================================================================================
; period
;=====================================================================================
Period:
Input PORTA.3
Input PORTA.4
T1CON = %00000000 ;timer 1 control - internal clock, 1:1 prescaler, disabled
rz:
Result = 0
TMR1H = 0
TMR1L = 0
OPTION_REG = %11100000
TMR0 = 255
T0IF = 0
TMR1IF = 0
PW: If T0IF = 0 Then
If Exit_key = 0 Then period_exit
GoTo PW
EndIf
T1CON = %00000001 ;impuls detectet, start counting
TMR0 = 255
T0IF = 0
TMR1IF = 0
PWW:
If T0IF = 1 Then Period_result
If TMR1IF = 1 Then
Inc TimerH
TMR1IF = 0
EndIf
If Exit_key = 0 Then period_exit
GoTo PWW
Period_result:
T1CON = %00000000 ;disable tmr1
TimerM = TMR1H
TimerL = TMR1L
Return
period_exit:
Return
|
| Чет Апр 27, 2006 6:20 pm |
|
 |
|
Predator_MF
Ранг: Форумен бог
Регистриран на: Чет Окт 07, 2004 1:22 pm Мнения: 1949 Местоположение: София
|
Абе какво толкова го мислите, принципа е елементарен, пише се за 20 минути на C, за 1 час на асемблер - нема значение кой таймер, въпрос на вкус, ако го правех в 16F84 бих ползвал T0 щот няма други, ако ползвам 18F452 ше ползвам T1, T0 ше го ползвам за клавиатурата (ще е интелигентна), прекъсване от RB ше ползвам също за клавиатурата, ше му ръгна LCD графичен от NOKIA 3310, може и някой цветен, бутлодер ше му напиша, ма накрая като ме питате на какъв принцип мера и в 2-те устройства ше ти кажа че е по един и същи начин, постъпващите импулси ми въртят брояч, меря за определен интервал от време колко са тези импусли и показвам на дисплея...
|
| Чет Апр 27, 2006 7:46 pm |
|
 |
|
milenjs
Ранг: Форумен бог
Регистриран на: Сря Мар 08, 2006 2:12 pm Мнения: 2017 Местоположение: Котел
|
Ами и аз това казвам - два принципа - за ниска честота се мери периода - за определен период от време /фронт фронт на импулса/, за висока се броят импулсите на входа за определено време.
Четем, мислим пишем и ако нещо не става - питаме, поне аз така правя - мразя да завися от някого, обичам сам да се справям с всичко. По точно не сам, ползвам Интернет 
|
| Чет Апр 27, 2006 9:29 pm |
|
 |
|
daniel_stefanov
Ранг: Ориентиран
Регистриран на: Нед Мар 27, 2005 12:40 am Мнения: 206 Местоположение: София
|
Мисля, че ми дадохте достатъчно информация. Принципно нещата са ясни, но ще видим на практика как е  . Ще чета, ще помисля и ако не е ясно пак ще питам. Predator_MF, за какъв интервал от време (приблизително) мериш импулсите - 0.1сек, 1сек, 10сек? Предполагам, че това време се установява опитно, т.е кога е най-точно, но все пак приблизително време или време под което не трябва да се отива.
|
| Чет Апр 27, 2006 10:54 pm |
|
 |
|
Predator_MF
Ранг: Форумен бог
Регистриран на: Чет Окт 07, 2004 1:22 pm Мнения: 1949 Местоположение: София
|
Е как колко бе ?? Колкото по голям интервал използваш, толкова по-ниски честоти ще мериш, интервала си го избираш спрямо честотата която мериш и делителя на брояча (на таймера). Сметни го, ползваш примерно Timer0 (или 1 или който искаш) с делител 256, вкарваш импулси с честота 10MHz, значи честотата с която ти се върти брояча е 10Е6/256 = 39KHz (приблизително), значи периода ти е 1/39000 = 25us, значи таймера ти ще се препълни (ако е 8 битов) за 256*25 = 6.4mS....значи трябва да измериш преди да ти се е препълнил таймера, сиреч 6.4ms ти е интервала за да мериш 10MHz, 3.2ms за измерване на 20MHz, 1.6 за 40 и пр... мисля че и без това обяснение ти е ясна идеята, номера е да седнеш и да го пробваш, верно, ако го направиш на всеки 6ms да ти изписва честотата която е измерил уреда, на екрана за 1 секунда ще имаш 156 кадъра и ако честотата леко се мени, ще ти плават показанията и нищо няма да се вижда. Нормално е да имаш честота на рефреш на екрана 1Hz при измервателни уреди, поне за да можеш да видиш резултата и да го запомниш 
|
| Чет Апр 27, 2006 11:28 pm |
|
|
Кой е на линия |
Потребители разглеждащи този форум: 0 регистрирани и 0 госта |
|
Вие не можете да пускате нови теми Вие не можете да отговаряте на теми Вие не можете да променяте собственото си мнение Вие не можете да изтривате собствените си мнения Вие не можете да прикачвате файл
|
|