Регистрация | Вход

[ Новые сообщения · Участники · Правила форума · Поиск · RSS ]
  • Страница 1 из 1
  • 1
Модератор форума: ivan_fd  
Вопрос по TMR0
a_sergeevich Дата: Пн, 29.12.2008, 21:55  |                                                                                                                Сообщение # 1
Группа: Заблокированные
Ранг:  Начал соображать
Сообщений: 24
Репутация: 0   ±
Замечания:   ±
На сайте с 11.12.2007

Статус: Offline

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

Статус: Offline

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


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

a_sergeevich Дата: Вт, 30.12.2008, 00:46  |                                                                                                                Сообщение # 3
Группа: Заблокированные
Ранг:  Начал соображать
Сообщений: 24
Репутация: 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
Группа: Модераторы
Ранг:  Специалист
Сообщений: 894
Репутация: 124   ±
Замечания:   ±
На сайте с 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
Группа: Проверенные
Ранг:  Понимаю
Сообщений: 96
Репутация: 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, все хорошо. КАК БЫТЬ и ПОЧЕМУ ТАК получается???


Купить за деньги может ВСЁ,
А ты попробуй сделай САМ!!!
DeAKsin Дата: Пн, 12.12.2022, 13:10  |                                                                                                                Сообщение # 8
Группа: Проверенные
Ранг:  Новенький
Сообщений: 4
Репутация: 0   ±
Замечания:   ±
На сайте с 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
Репутация: 54   ±
Замечания:   ±
На сайте с 20.07.2012

Статус: Offline

Вот похожий примерчик. Правда на TMR1.
Прикрепления: PWM_876.rar (44.2 Kb)
xvovanx Дата: Вт, 13.12.2022, 18:58  |                                                                                                                Сообщение # 10
Группа: Модераторы
Ранг:  Помогаю всем
Сообщений: 332
Репутация: 59   ±
Замечания:   ±
На сайте с 02.05.2013

Статус: Offline

Цитата dimvad ()
Правда на TMR1.

Тоже на дух не переношу таймер ТМR0, раньше сколько не бился ничего путного не получал. Использую исключительно TMR1 и TMR2. С ними как-то все просто и понятно wink
Прикрепления: 4309441.png (94.8 Kb) · 8043577.png (289.1 Kb)

Сообщение отредактировал xvovanx - Вт, 13.12.2022, 19:09
Константин Дата: Ср, 14.12.2022, 15:32  |                                                                                                                Сообщение # 11
Группа: Проверенные
Ранг:  Новенький
Сообщений: 5
Репутация: 0   ±
Замечания:   ±
На сайте с 10.05.2013

Статус: Offline

спрашиваете про PORTB.4 а в программе PORTA.0, далее Disable поместите после метки
Knopka:
здесь тоже несоответствие Dim X As Word 'Определяем переменную X, как Byte
и хорошо бы схему в протеусе что бы легче вникать.
ЯНДЕКС Дата: 14.12.2022
DeAKsin Дата: Чт, 15.12.2022, 10:42  |                                                                                                                Сообщение # 12
Группа: Проверенные
Ранг:  Новенький
Сообщений: 4
Репутация: 0   ±
Замечания:   ±
На сайте с 27.03.2012

Статус: Offline

Константин, да, действительно, есть такое дело.
Прикрепления: HW.rar (19.5 Kb)
Константин Дата: Пт, 16.12.2022, 04:48  |                                                                                                                Сообщение # 13
Группа: Проверенные
Ранг:  Новенький
Сообщений: 5
Репутация: 0   ±
Замечания:   ±
На сайте с 10.05.2013

Статус: Offline

TMR0 я использовал в своей первой детской программе (https://picbasic.ru/load/proekty/proekty_i_primery_programm/prostoj_tajmer_na_pic16f630/7-1-0-245).
  • Страница 1 из 1
  • 1
Поиск: