Регистрация | Вход
[ Новые сообщения · Участники · Правила форума · Поиск · RSS ]
Страница 1 из 11
Модератор форума: ivan_fd 
Форум Picbasic.ru » Программирование МК » PicBasicPro » Вопрос по TMR0 (Нужна формула)
Вопрос по TMR0
a_sergeevich Дата: Пн, 29.12.2008, 21:55  |                                                                                                                Сообщение # 1
Группа: Пользователи
Ранг:  Начал соображать
Сообщений: 25
Репутация: 0   ±
Замечания:   ±
На сайте с 11.12.2007

Статус: Offline

Подскажите последовательность рассчётов задержки для TMR0.
Только большая просьба указывать еденицы измерения Гц, сек, и т.д и т.п.
Заранее благодарю.
ЯНДЕКС Дата: 29.12.2008
demanik Дата: Пн, 29.12.2008, 23:41  |                                                                                                                Сообщение # 2
Группа: Модераторы
Ранг:  Помогаю всем
Сообщений: 451
Репутация: 10   ±
Замечания:   ±
На сайте с 11.12.2007

Статус: Offline

Прога для таких расчетов:
Прикрепления: PicMultiCalc.exe(340Kb)


Попробуй всё и вся... может быть пол...

a_sergeevich Дата: Вт, 30.12.2008, 00:46  |                                                                                                                Сообщение # 3
Группа: Пользователи
Ранг:  Начал соображать
Сообщений: 25
Репутация: 0   ±
Замечания:   ±
На сайте с 11.12.2007

Статус: Offline

Всё разобрался,кстати этот калькулятор у меня не хочет работать, какую-то dll-ку не находит.
Вот нашёл другой калькулятор для всех таймеров 16-х и 18-х пиков: http://habar.ifolder.ru/9808681
contra Дата: Вт, 02.02.2010, 17:22  |                                                                                                                Сообщение # 4
Группа: Проверенные
Ранг:  Продвинутый
Сообщений: 112
Репутация: 0   ±
Замечания:   ±
На сайте с 27.06.2009

Статус: Offline

А что обозначет строка:
TMR0 = 156
Исходя из чего записывается это число (156) ?
И как это число влияет на ход исполнения программы?
Объясните пожалуйста
ivan_fd Дата: Вт, 02.02.2010, 22:18  |                                                                                                                Сообщение # 5
Группа: Модераторы
Ранг:  Специалист
Сообщений: 899
Репутация: 47   ±
Замечания:   ±
На сайте с 12.01.2009

Статус: Offline

Ну например по переполнению TMR0 можно включить что бы происходило прерывание программы.
Прерывание происходит при переполнении таймера тоесть при переходе FFh до 00h. Приращение счетчика таймера происходит в каждом машинном цикле, если не включен предделитель. Тоесть, если вы запишите в таймер значение 156, то таймер перполнится через 256-156= 100.
Этим числом можно изменять время через которое будет происходить прерывание программы.

Ну вот примерно так.


Меня все время преследуют умные мысли...но я быстрее!!!
contra Дата: Пт, 05.02.2010, 18:55  |                                                                                                                Сообщение # 6
Группа: Проверенные
Ранг:  Продвинутый
Сообщений: 112
Репутация: 0   ±
Замечания:   ±
На сайте с 27.06.2009

Статус: Offline

ivan fd большое спасибо - разобрался!
Alexandr280480 Дата: Пт, 09.09.2011, 17:37  |                                                                                                                Сообщение # 7
Группа: Проверенные
Ранг:  Продвинутый
Сообщений: 107
Репутация: 0   ±
Замечания:   ±
На сайте с 23.01.2010

Статус: Offline

А есть подробная инфа по TMR0? что-то никак не пойму как его использовать?

Добавлено (08.09.2011, 20.38.10)
---------------------------------------------
ПИК 16F84A (кварц 4МГц) хочу сделать тахометр...
Вход генератора RB0(INT)

Define LCD_DREG PortB
Define LCD_DBIT 4
Define LCD_RSREG PortB
Define LCD_RSBIT 3
Define LCD_EREG PortB
Define LCD_EBIT 2
Define LCD_BIT 4
Define LCD_LINES 2
Define LCD_COMMANDUS 2000
Define LCD_DATAUS50

TrisA = %00000
PortA = %00000
TrisB = %00000001
PortB = %00000000

Time Var Word
Tcon Con 250
Time = Tcon
Imp Var Word
Imp = 0
RPM Var Word
RPM = 0
OPTION_REG = %10000111
TMR0=6
INTCON = %10110000

On Interrupt Goto myint

Main:
LCDOUT $FE,2,"RPM=",RPM
Goto Main:
Disable

Myint:

if intcon.1=1 then
Imp = Imp + 1
INTCON.1 = 0
endif

if intcon.2=1 then
Time = Time - 1
if Time = 0 then
Time = Tcon
RPM = Imp*60
Imp = 0
endif
TMR0=5
intcon.2=0
endif
Resume
Enable

Добавлено (09.09.2011, 17.37.39)
---------------------------------------------
Вот кое что получилось, но только не понятно вот что - скачал с сети следующее.

Общий алгоритм работы с TMR0 выглядит так.
1. Инициализируем TMR0 установкой его конфигурации (прескалер, источник тиков) в регистре OPTION_REG.
Не забываем, что этот регистр в первом банке!
2. Записываем в счетчик переполнений (тот что в обработчике декрементируется) целое количество
переполнений TMR0 плюс одно (это то, что неполное в начале).
3. Записываем в TMR0 ДОПОЛНЕНИЕ до числа 256 этого самого остатка, который мы нашли в начале при
расчете пересчетных установок.
4. Устанавливаем пин порта в который выводится интервал в 1.
5. Сбрасываем флаг переполнения TMR0 в регистре INTCON
6. Разрешаем глобальные прерывания (Прерывания от TMR0 можно разрешить в самом начале при инициализации).
7. Обработчик прерываний содержит сохранение контекста (аккумулятор и регистр статуса)
8. Далее следует семафор прерываний (это если у нас не только эта задача в обработчике)
9. Декремент счетчика (в примере счетчик однорегистровый, но можно и увеличить его разрядность)
10. Проверка этого счетчика на ноль и сброс пина порта на который выводится интервал.

Сделал все как написано, п.3 получился const=250 при TMR0=6, все бы ничего но с этими значениями обороты считаются не точно, а вот с const=150, все хорошо. КАК БЫТЬ и ПОЧЕМУ ТАК получается???


Купить за деньги может ВСЁ,
А ты попробуй сделай САМ!!!
Форум Picbasic.ru » Программирование МК » PicBasicPro » Вопрос по TMR0 (Нужна формула)
Страница 1 из 11
Поиск: