Микроконтролери и електроника
http://mcu-bg.com/mcu_site/

PIC 16F628
http://mcu-bg.com/mcu_site/viewtopic.php?f=3&t=414
Страница 1 от 1

Автор:  aquilax [ Нед Фев 20, 2005 4:35 am ]
Заглавие:  PIC 16F628

Малко съм бос с тия микроконтролери и затова ако можете да ми дадете съвет...Искам да напиша програма която да следи дали дадена честота от външен източник е достигната т.е по-голяма или равна на предварително зададената.Дали е уместно да ползвам ccp модула или просто да следя нивото на даден вход.И как точно да съчетая нещата с някои от таймерите.Ако можете да ми обясните с две думи ....

Автор:  alek [ Нед Фев 20, 2005 9:41 am ]
Заглавие: 

Ползвай таймер1 с гейт. Входния импулс ти го запуска и му задаваш да ти изгенерира прекъсване когато желания период изтече. Ако получиш прекъсване - честотата е по-малка. Ако ли не - по-голяма е.
Успех!

Автор:  aquilax [ Нед Фев 20, 2005 2:16 pm ]
Заглавие: 

Мерси.ще пробвам

Автор:  ToHu [ Нед Фев 20, 2005 3:43 pm ]
Заглавие: 

Само че много зависи от честотата която мериш. Ако е ниска това не е добър вариант, при ниски честоти по добре да сравняваш периода. С един таймер не може да реализираш добра точност при ниски и високи, това с еправи с два таймера, единия измерва получените входни импулси, а другия еталонно време, като еталонното време се измерва за цял брой входни импулси, така и при ниска честота имаш висока точност.

Автор:  aquilax [ Нед Фев 20, 2005 8:52 pm ]
Заглавие: 

честотата е много ниска -около да речем 20-30 hz.а не може ли примерно да използвам сср модула и да броя колко пъти прекъсва за определено време и след това да проверя дали този брой е по-голям от предварително зададен който съответства на някаква честота

Автор:  ToHu [ Нед Фев 20, 2005 10:55 pm ]
Заглавие: 

Ами може но зависи каква точност ти трябва. Кепчър модула не ти трябва в случая. Пускаш брояча на външен такт, и през определено време, да речем всяка секунда сравняваш отброените ипулси с еталнонни. Сега не помня тоя един таймер ли имаше или два, ако му е един по добре да си броиш софтуерно, по прекъсване, а таймера да го ползваш да ти генерира времевите диапазони.
Този начин обаче не е много точен, при време за отчитане 1 с грешката ти е 1 Hz, т.е. 5%. Ако ти трябва по голяма точност е по удачно да измерваш период м-у два предни фронта, в такъв случай сигнала ти е на прекъсване а ти по предния фронт запускаш вътрешния таймер, който го тактуваш да речем през 100 us. Пре следващия преден фронт го четеш и нулираш. Проетената стойност ти е продължителност на импулса. Така точноста ти е 100 us при време за отчитане 1/f или 50 мс при 20 Hz, това е 0.02% точност ... би било добре да правиш сравнението на 2-3 отчета, като ги усредняваш, 2 или 4, че се дели бързо. Сега 100 us е примерно казано, за тази честота не е оправдано, и 1 ms ти върши работа, това са си около 0.2% грешка, напълно приемливо за много приложения.

Страница 1 от 1 Часовете са според зоната UTC + 2 часа [ DST ]
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
http://www.phpbb.com/