Вопрос по TMR0
|
|
a_sergeevich |
Дата: Пн, 29.12.2008, 21:55 | Сообщение # 1 |
Группа:
Заблокированные
Ранг:
Начал соображать
Сообщений:
24
Замечания:
±
На сайте с 11.12.2007
Статус:
Offline
|
Подскажите последовательность рассчётов задержки для TMR0. Только большая просьба указывать еденицы измерения Гц, сек, и т.д и т.п. Заранее благодарю.
|
|
|
|
demanik |
Дата: Пн, 29.12.2008, 23:41 | Сообщение # 2 |
Группа:
Проверенные
Ранг:
Помогаю всем
Сообщений:
448
Замечания:
±
На сайте с 11.12.2007
Статус:
Offline
|
Прога для таких расчетов:
Попробуй всё и вся... может быть пол...
|
|
|
|
a_sergeevich |
Дата: Вт, 30.12.2008, 00:46 | Сообщение # 3 |
Группа:
Заблокированные
Ранг:
Начал соображать
Сообщений:
24
Замечания:
±
На сайте с 11.12.2007
Статус:
Offline
|
Всё разобрался,кстати этот калькулятор у меня не хочет работать, какую-то dll-ку не находит. Вот нашёл другой калькулятор для всех таймеров 16-х и 18-х пиков: http://habar.ifolder.ru/9808681
|
|
|
|
contra |
Дата: Вт, 02.02.2010, 17:22 | Сообщение # 4 |
Группа:
Проверенные
Ранг:
Продвинутый
Сообщений:
112
Замечания:
±
На сайте с 27.06.2009
Статус:
Offline
|
А что обозначет строка: TMR0 = 156 Исходя из чего записывается это число (156) ? И как это число влияет на ход исполнения программы? Объясните пожалуйста
|
|
|
|
ivan_fd |
Дата: Вт, 02.02.2010, 22:18 | Сообщение # 5 |
Группа:
Модераторы
Ранг:
Специалист
Сообщений:
894
Замечания:
±
На сайте с 12.01.2009
Статус:
Offline
|
Ну например по переполнению TMR0 можно включить что бы происходило прерывание программы. Прерывание происходит при переполнении таймера тоесть при переходе FFh до 00h. Приращение счетчика таймера происходит в каждом машинном цикле, если не включен предделитель. Тоесть, если вы запишите в таймер значение 156, то таймер перполнится через 256-156= 100. Этим числом можно изменять время через которое будет происходить прерывание программы. Ну вот примерно так.
|
|
|
|
contra |
Дата: Пт, 05.02.2010, 18:55 | Сообщение # 6 |
Группа:
Проверенные
Ранг:
Продвинутый
Сообщений:
112
Замечания:
±
На сайте с 27.06.2009
Статус:
Offline
|
ivan fd большое спасибо - разобрался!
|
|
|
|
Alexandr280480 |
Дата: Пт, 09.09.2011, 17:37 | Сообщение # 7 |
Группа:
Проверенные
Ранг:
Понимаю
Сообщений:
96
Замечания:
±
На сайте с 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, все хорошо. КАК БЫТЬ и ПОЧЕМУ ТАК получается???
Купить за деньги может ВСЁ, А ты попробуй сделай САМ!!!
|
|
|
|
DeAKsin |
Дата: Пн, 12.12.2022, 13:10 | Сообщение # 8 |
Группа:
Проверенные
Ранг:
Новенький
Сообщений:
4
Замечания:
±
На сайте с 27.03.2012
Статус:
Offline
|
Помогите разобраться с таймером TMR0. Требуется получить на выходе PORTB.4 меандр с частотой ровно 1 герц. Как ни бьюсь, ничего не получается.
Device = 16F690 'Выберем микроконтроллер Declare Xtal=4 'Частота генератора Declare Reminders NO 'Отключим предупреждения компилятора
Config CPD_OFF, CP_OFF, MCLRE_OFF, PWRTE_ON, WDT_OFF, INTRC_OSC_NOCLKOUT
TRISA = %101000 'Настройка Входов/Выходов PORTA = %111110 TRISB = %00000000 'Настройка Входов/Выходов PORTB = %11110000 TRISC = %00000000 'Настройка Входов/Выходов PORTC = %11111111 CM1CON0 = 0 'Компаратор C1 отключен CM2CON0 = 0 'Компаратор C2 отключен CM2CON1 = 0 'Управления взаимодействием выходов компараторов отключены ANSEL = %00000000 'Порты AN0...AN7 цифровые ANSELH = %00000000 'Порты AN8...AN11 цифровые OPTION_REG = %00000100 'Настройка TMR0 (Для 100 - 1:32) INTCON = %10100000 'Все прерывания, в том числе по переполнению, разрешены TMR0 = 0 'Значение TMR0 равно значению 127 '********************************************************** On Interrupt GoTo Knopka 'При наступлении условия прерываний переходим на метку "Knopka" Dim X As Word 'Определяем переменную X, как Byte '********************************************************** main: If X = 99 Then Toggle PORTA.0 : X = 0 GoTo main '********************************************************** Disable 'Временно отключаем обработку прерываний Knopka: If INTCON.2=1 Then X=X+1 'Если TMR0 переполнен то X = X + 1 TMR0 = 0 INTCON.2=0 Resume 'Разрешить обработку прерываний Enable 'Вновь разрешить обработку прерываний, временно запрещеных 'командой Disable
|
|
|
|
dimvad |
Дата: Вт, 13.12.2022, 01:31 | Сообщение # 9 |
Группа:
Проверенные
Ранг:
Понимаю
Сообщений:
80
Замечания:
±
На сайте с 20.07.2012
Статус:
Offline
|
Вот похожий примерчик. Правда на TMR1.
|
|
|
|
xvovanx |
Дата: Вт, 13.12.2022, 18:58 | Сообщение # 10 |
Группа:
Модераторы
Ранг:
Помогаю всем
Сообщений:
332
Замечания:
±
На сайте с 02.05.2013
Статус:
Offline
|
Цитата dimvad ( ) Правда на TMR1. Тоже на дух не переношу таймер ТМR0, раньше сколько не бился ничего путного не получал. Использую исключительно TMR1 и TMR2. С ними как-то все просто и понятно
Сообщение отредактировал
xvovanx - Вт, 13.12.2022, 19:09
|
|
|
|
Константин |
Дата: Ср, 14.12.2022, 15:32 | Сообщение # 11 |
Группа:
Проверенные
Ранг:
Новенький
Сообщений:
5
Замечания:
±
На сайте с 10.05.2013
Статус:
Offline
|
спрашиваете про PORTB.4 а в программе PORTA.0, далее Disable поместите после метки Knopka: здесь тоже несоответствие Dim X As Word 'Определяем переменную X, как Byte и хорошо бы схему в протеусе что бы легче вникать.
|
|
|
|
DeAKsin |
Дата: Чт, 15.12.2022, 10:42 | Сообщение # 12 |
Группа:
Проверенные
Ранг:
Новенький
Сообщений:
4
Замечания:
±
На сайте с 27.03.2012
Статус:
Offline
|
Константин, да, действительно, есть такое дело.
Прикрепления:
HW.rar
(19.5 Kb)
|
|
|
|
Константин |
Дата: Пт, 16.12.2022, 04:48 | Сообщение # 13 |
Группа:
Проверенные
Ранг:
Новенький
Сообщений:
5
Замечания:
±
На сайте с 10.05.2013
Статус:
Offline
|
TMR0 я использовал в своей первой детской программе (https://picbasic.ru/load/proekty/proekty_i_primery_programm/prostoj_tajmer_na_pic16f630/7-1-0-245).
|
|
|
|