Администрация форума не несёт ответственности за достоверность информации и оставляет за собой право редактировать или в особых случаях даже удалять посты без предупреждения. Спасибо за понимание.

Программирование ATMEL в BASCOM.

Информация о пользователе

Привет, Гость! Войдите или зарегистрируйтесь.


Вы здесь » Программирование ATMEL в BASCOM. » Приборы, средства и способы измерения величин » Не работает в железе частотомер


Не работает в железе частотомер

Сообщений 1 страница 4 из 4

1

Здравствуйте, товарищи! Помогите с проблемой- в Протеусе всё работает, а в железе показывает "freq: 20" и всё...

$regfile = "m8def.dat"
$crystal = 16000000
$hwstack = 40
$swstack = 16
$framesize = 32
' óêàçûâàåì êîíôèãóðàöèþ ïîäêëþ÷åíèÿ äèñïëåÿ ê ïîðòàì ÌÊ
Config Lcdpin = Pin , Rs = Portc.5 , E = Portc.4 , Db4 = Portc.0 , Db5 = Portc.1 , Db6 = Portc.2 , Db7 = Portc.3

Config Lcd = 16 * 1                                         ' òèï èñïîëüçóåìîãî äèñïëåÿ

'íàñòðàèâàåì òàéìåð â ðåæèì çàõâàòà ïî âîñõîäÿùåìó ôðîíòó

Config Timer1 = Timer , Prescale = 64 , Capture Edge = Rising

Dim Timercounter As Word
Dim Period As Single                                        ' ïåðèîä èçìåðÿåìîãî ñèãíàëà
Dim F1 As Single
Dim F As Word                                               ' ïåðåìåííàÿ äëÿ õðàíåíèÿ çíà÷åíèÿ ÷àñòîòû

Const T = 0.000004                                          ' ïðèìåðíîå âðåìÿ â ñåêóíäàõ çà êîòîðîå çíà÷åíèå
                                       ' ñ÷åò÷èêà óâåëè÷èâàåòñÿ íà 1

On Capture1 Zaxvat

Timercounter = 0
Waitms 50
Enable Interrupts
Enable Capture1

Cursor Off

Do                                                          ' ãëàâíûé öèêë ïðîãðàììû

If Timercounter = 0 Then                                    ' ïðîâåðêà çíà÷åíèÿ ïåðåìåííîé
F = 0                                                      ' åñëè 0, òî ÷àñòîòà òîæå 0

Else                                                       ' â îáðàòíîì ñëó÷àå âûñ÷èòûâàåì ÷àñòîòó

Period = Timercounter * T                                  ' îïðåäåëÿåì ïåðèîä
F1 = 1 / Period                                            ' ñ÷èòàåì ÷àñòîòó
F = Abs(f1)                                               ' îêðóãëÿåì äî öåëîãî

End If

'âûâîäèì ïîêàçàíèÿ íà äèñïëåé

Cls

Lcd "Freq: " ; F ; " Hz"

Waitms 100

Loop

Zaxvat:
Timercounter = Timer1                                      ' êîïèðóåì çíà÷åíèå òàéìåðà â ïåðåìåííóþ
Timer1 = 0                                                 ' îáíóëÿåì òàéìåð
Return

End

0

2

1 В выражения вычислений слева и справа размерности разные.
Надо выравнивать до вычислений, например
Period = Timercounter : Period = Period  * T
2 Проверить правильность установки режима таймера

0

3

Извиняюсь за моё пропадание. Код с русским коментом... Кстати какие-то чудеса. Ставлю частоту кварц на 10 мгц- работает(программу перекомпилировал)!!! но естественно показывает не правильно. Ставлю 16, не работает. Кварц рабочий. И как здесь на форуме прикрепить проект в Проте?

Config Timer1 = Timer , Prescale = 64 , Capture Edge = Rising

Dim Timercounter As Word
Dim Period As Single                                        ' период измеряемого сигнала
Dim F1 As Single
Dim F As Word                                               ' переменная для хранения значения частоты

Const T = 0.000004                                          ' примерное время в секундах за которое значение
                                       ' счетчика увеличивается на 1

On Capture1 Zaxvat

Timercounter = 0
Waitms 50
Enable Interrupts
Enable Capture1

Cursor Off

Do                                                          ' главный цикл программы

If Timercounter = 0 Then                                    ' проверка значения переменной
F = 0                                                      ' если 0, то частота тоже 0

Else                                                       ' в обратном случае высчитываем частоту

Period = Timercounter * T                                  ' определяем период
F1 = 1 / Period                                            ' считаем частоту
F = Abs(f1)                                                ' округляем до целого

End If

'выводим показания на дисплей

Cls
Lcd "Freq Hz:" ; F

Waitms 1000

Loop

Zaxvat:
Timercounter = Timer1                                      ' копируем значение таймера в переменную
Timer1 = 0                                                 ' обнуляем таймер
Return

End

0

4

Вариантов много. Дохлый кварц, фьзы как попало, емкости вокруг не дают на 16 запуститься, камень на 16 не хочет работать, может он вообше восьмерка?... Залейте тестовую прошивку, в которой тупо что то дергайте ногой по таймеру. Если тишина, то тактовый скорее всего молчит, нужно подбирать конденсаторы вокруг него.

0


Вы здесь » Программирование ATMEL в BASCOM. » Приборы, средства и способы измерения величин » Не работает в железе частотомер