| Микроконтролери и електроника 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/ |
|