Доброго времени суток!
Возникла задача:
есть постоянно изменяемые прямоугольные импульсы с частотой от нуля до 1кГц
требуется произвести пересчет таким образом, чтобы выходная частота импульсов была равна 0,81 от входной частоты.
за основу взял следующий исходник:
$regfile = "2313def.dat"
$crystal = 4000000
Config Timer1 = Timer , Prescale = 64 , Capture Edge = Rising
Config Lcdpin = Pin , Db4 = Portb.2 , Db5 = Portb.3 , Db6 = Portb.4 , Db7 = Portb.5 , E = Portb.1 , Rs = Portb.0
Dim Wtime As Byte
Dim Timercounter As Single
Config Portb.7 = Output
On Capture1 Captmr
Wtime = 200
Timercounter = 0
Enable Interrupts
Enable Capture1
Do
Cls
Lcd Timercounter
Lowerline
Timercounter = Timercounter * 64
Timercounter = 1 / Timercounter
Lcd Timercounter
Waitms 100
'Idle
'Toggle Portb.7
'Pulseout Portb , 7 , 600
'Waitus Timercounter
Loop
Captmr:
Timercounter = Capture1
Timer1 = 0
Return
End
в протеусе подцепил LCD, частоту показывает четко
но что-то я запутался.
допустим, входная частота 100Гц,
Время между импульсами, которое захватывает таймер1 равно 622, но, учитывая, что предделитель 64,
622/64=9,71875мс - время между импульсами
теперь я создаю выходные импульсы с помошью переключения порта в противоположное состояние с помощью toggle, но, учитывая, что порт переключится на 0 одним импульсом, а на 1 - вторым, время 9,71875 делю пополам, получаю: 4,859375мс
следовательно, после toggle нужно поставить задержку в 4мс + 859мкс, я прав?
waitms 4
waitus 859
в протеусе все работает, подключив к ноге частотомер, получил 102Гц
Do
'Cls
' Lcd Timercounter
' Lowerline
' Timercounter = Timercounter * 64
' T = Timercounter \ 1000
' Timercounter = 1 / Timercounter
' Lcd Timercounter
Waitms 4
Waitus 859
Toggle Portb.7
'Pulseout Portb , 7 , 600
'Waitus Timercounter
Loop
пересчитать, написать формулу, откидывающую ms от us - тоже не проблема
вопрос собственно один, как мне усыпить контроллер, если импульсы резко оборвались?
ибо он продолжает выдавать с последней частотой.
если в тело основного цикла внести idle, то на это тратится время и показания плывут.
Отредактировано demonizer (2010-09-22 23:28:52)