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

[ Новые сообщения · Участники · Правила форума · Поиск · RSS ]
  • Страница 2 из 2
  • «
  • 1
  • 2
Модератор форума: ivan_fd  
Таймер TMR1 и т.д.
ntro123 Дата: Сб, 06.11.2010, 22:40  |                                                                                                                Сообщение # 16
Группа: Пользователи
Ранг:  Пытаюсь разобраться
Сообщений: 45
Репутация: 0   ±
Замечания:   ±
На сайте с 28.06.2010

Статус: Offline

нет! не 260мс, а 130мс.

Code
PULSE:   
Context Save    
DelayMS 130   
Print At 2, 1, Dec TIMER1   

PIR1.0 = 0   
Context Restore

вот код говорит об обратном.
если поставить DelayMS 131.
и будет выводить на лсд цифру ближе к 0 если поставить 130 то будет 65530000

Сообщение отредактировал ntro123 - Сб, 06.11.2010, 22:42
ivan_fd Дата: Сб, 06.11.2010, 22:46  |                                                                                                                Сообщение # 17
Группа: Модераторы
Ранг:  Специалист
Сообщений: 894
Репутация: 124   ±
Замечания:   ±
На сайте с 12.01.2009

Статус: Offline

Еще раз говорю, запустите в Протеусе пошагово, и поставьте точку останова в прерывании и Вы увидите через какое время будет оно происходить.
DAlexV Дата: Вс, 07.11.2010, 01:01  |                                                                                                                Сообщение # 18
Группа: Проверенные
Ранг:  Разобрался
Сообщений: 657
Репутация: 27   ±
Замечания:   ±
На сайте с 13.05.2008

Статус: Offline

Quote (DAlexV)
"Бог в помощь !!!!" - м.ф. "Жил был пес"
Еще раз повторюсь. Вы парни даже меня запутали с расчетами.
Все гораздо проще. Любой таймер если он работает от внутреннего генератора(а не от внешнего сигнала) получает сигнал Fosc/4. Это и есть мин. время тиканья таймера. 4Mhz - 1000нс, 20Mhz - 200нс. Если используем предделитель 1:4 то просто умножаем мин. тик на предделитель. 4Mhz - 4000нс, 20Mhz - 800нс. Далее в зависимости от 8 или 16 битный таймер получаем нужную длительность.
(F=4Mhz, Time=500мкс 8bit)
500мкс = 500 000 нс.
500 000/4000 = 125 тиков до переполнения таймера.
таймер 8 бит($FF(255))
255-125=131 начальное значение таймера которое нужно подсовывать таймеру в каждом прерывании что бы переполнение происходило каждые 500 мкс.
Но не стоит забывать что при начале прерывания у нас идет сначала Context Save и проверка флага прерывания, это то же кушает какое то время( Overhead time или время перевыполнения) Поэтому возможно придется еще корректировать значение TMRxCON для точной выдержки интервалов времени. Тут на помощь и приходит или Шпротеус или MPLAB. Кому что по душе.
Вот две программки для расчета значений Таймеров
http://www.picbasic.ru/load....1-0-158 (предоставил наш Admin)
и ту которой я давно пользуюсь, прилагаю. Успехов в понимании процессов wink
Прикрепления: PIC_Timer_Calcu.exe (220.0 Kb)


Будьте оригинальны-не повторяйте чужих ошибок ! Рыба сдохла. Теперь STM32(TS)+C#(VS).Старею :)
Andriy76 Дата: Вс, 07.11.2010, 20:41  |                                                                                                                Сообщение # 19
Группа: Проверенные
Ранг:  Могу и подсказать
Сообщений: 231
Репутация: 10   ±
Замечания:   ±
На сайте с 06.04.2010

Статус: Offline

Возможно когда либо кто-то кто хорошо понимает в этом написал коротенькую заметку об использовании и установках таймеров , с простенькой табличкой что и как можно использовать . А то нужен был таймер на 12 часов а куда пнуться не понимаю . В результате использовал кусочек кода отсюда http://www.picbasic.ru/publ/2-1-0-19 . Возможно со временем разберусь smile
ntro123 Дата: Вс, 07.11.2010, 21:17  |                                                                                                                Сообщение # 20
Группа: Пользователи
Ранг:  Пытаюсь разобраться
Сообщений: 45
Репутация: 0   ±
Замечания:   ±
На сайте с 28.06.2010

Статус: Offline

Всем огромное спасибо, написал то что нужно было мне!
Удачи!
  • Страница 2 из 2
  • «
  • 1
  • 2
Поиск: