Загадка с TMR0 (какая частота прерывания?)

Вопросы настройки, программирования, прошивки микроконтроллеров и микросхем программируемой логики
Закрыто
Аватара пользователя
Ghost in shell
Держит паяльник хвостом
Сообщения: 927
Зарегистрирован: Пн июн 15, 2009 06:01:38
Откуда: USSR

Загадка с TMR0 (какая частота прерывания?)

Сообщение Ghost in shell »

Вкратце: упарился полностью... :dont_know:
задаю настройку

Код: Выделить всё

void stTMR0 (void)   
{
GIE = 1;      // разрешены все немаскированные прерывания
PEIE = 1;      // разрешены все немаскированные прерывания от переферийных модулей
// регистр OPTION
T0CS = 0;   // bit 5 TMR0 Выбор источника сигнала 0 - Fosc/4 (внутренний); 1 - подача на T0CKI
T0SE = 0;   // bit 4 TMR0 Выбор фронта приращения TMR0 при внешнем тактовом сигнале (0-передний фронт)
PSA  = 0;   // bit 3 Выбор включения предделителя: 0 - перед TMR0, 1 - перед WDT
PS2  = 1;   // bit 2 Настройка предделителя
PS1  = 1;   // bit 1 Настройка предделителя
PS0  = 1;   // bit 0 Настройка предделителя
TMR0 = 0;   // предзагрузка TMR0, сбрасывается при переполнении.
// конец настройки TMR0.

T0IF = 0;       // сброс флага прерывания по переполнению TMR0
T0IE = 1;      // Разрешение прерывания по переполнению TMR0
}

теоретически, прерывания 15,25879 Гц, или 65,536 ms. Но на симуляторе MPLAB совсем не то.
Вроде бы
Режим 8 бит: Частота прерываний TMR0
при Fosc/4, для 4 МГц, коэфф. - 256 = (1000000)/256/256 = 15,2587890625 Гц
при Fosc/4, для 4 МГц, коэфф. - 64 = (1000000)/256/64 = 61,03515625 Гц
при Fosc/4, для 4 МГц, коэфф. - 16 = (1000000)/256/16 = 244,184375 Гц
но реально частота меньше. Глазом заметно по скорости счета на 7-сегментном индикаторе.
Кот гуляет сам по себе, но вблизи холодильника.
Аватара пользователя
Аlex
Модератор
Сообщения: 4614
Зарегистрирован: Чт мар 18, 2010 23:09:57
Откуда: Планета Земля
Контактная информация:

Re: Загадка с TMR0 (какая частота прерывания?)

Сообщение Аlex »

Чудес не бывает. Выкладывайте проект, посмотрим.
Аватара пользователя
Ghost in shell
Держит паяльник хвостом
Сообщения: 927
Зарегистрирован: Пн июн 15, 2009 06:01:38
Откуда: USSR

Re: Загадка с TMR0 (какая частота прерывания?)

Сообщение Ghost in shell »

Ну, весь код нет смысла выкладывать.
Начало:

Код: Выделить всё

#include <pic.h>

__CONFIG (XT & WDTDIS & PWRTDIS & BOREN & UNPROTECT);
#define XTAL FREQ 4MHZ

обработчик прерывания TMR0:

Код: Выделить всё

void interrupt isr (void)
{
if (T0IF)   // опрос флага прерывания по переполнению TMR0.
   {
   time++;      // переменная для индикации
   T0IF = 0;      // сброс флага прерывания по переполнению TMR0
   T0IE = 1;      // Разрешение прерывания по переполнению TMR0
}   
// конец обработчика прерываний
Кот гуляет сам по себе, но вблизи холодильника.
Аватара пользователя
Аlex
Модератор
Сообщения: 4614
Зарегистрирован: Чт мар 18, 2010 23:09:57
Откуда: Планета Земля
Контактная информация:

Re: Загадка с TMR0 (какая частота прерывания?)

Сообщение Аlex »

Ghost in shell писал(а):Ну, весь код нет смысла выкладывать.
Тогда вообще нет смысла на форуме подобные вопросы задавать. Экстрасенсы в отпуске.
У меня, например, таймер работает всегда чётко.
Аватара пользователя
БАТАРЕЙКУС
Потрогал лапой паяльник
Сообщения: 346
Зарегистрирован: Сб фев 07, 2009 19:21:25

Re: Загадка с TMR0 (какая частота прерывания?)

Сообщение БАТАРЕЙКУС »

есть замечательная программка для пик чтоб настраивать таймеры называется. PicMultiCalc109.exe
Мечтатель - не тот, кто сидит на диване и думает о несбыточном, а тот, кто всеми силами стремится воплотить несбыточное в реальность.
Аватара пользователя
Ghost in shell
Держит паяльник хвостом
Сообщения: 927
Зарегистрирован: Пн июн 15, 2009 06:01:38
Откуда: USSR

Re: Загадка с TMR0 (какая частота прерывания?)

Сообщение Ghost in shell »

БАТАРЕЙКУС писал(а):есть замечательная программка для пик чтоб настраивать таймеры называется. PicMultiCalc109.exe

Где ее найти? Альтависта с Яндексом не в курсе. :( Я сам использую PI© Timer Calculator 0.9.6, autor Ronald Nisble. Частоту считает правильно, как и код настроек делителя, (для TMR0 нельзя проверить) а в остальном коде проскакивают ошибки. Для остальных таймеров в MPLAB все просто: прописал в коде непрерывную работу таймера, откомпилил, вызвал окно Debugger / StopWatch, затем курсор в нужную строку кода и LMB + Run to Cursor. А для TMR0 какую-то чушь измеряет!
Код выложу позже.
Кот гуляет сам по себе, но вблизи холодильника.
Аватара пользователя
dalay-lama
Потрогал лапой паяльник
Сообщения: 328
Зарегистрирован: Вт ноя 20, 2007 17:30:36
Откуда: Раша

Re: Загадка с TMR0 (какая частота прерывания?)

Сообщение dalay-lama »

Ghost in shell писал(а):Альтависта с Яндексом не в курсе.

Гугелом искать нужно. http://www.google.ru/search?q=PicMultiCalc&ie=utf-8&oe=utf-8&aq=t&rls=org.mozilla:ru:official&client=firefox
Вложения
PIC Multi Calc v1.31.zip
(118.23 КБ) 257 скачиваний
Важнейшая задача цивилизации - научить человека мыслить. /Т. Эдисон/
Аватара пользователя
Ghost in shell
Держит паяльник хвостом
Сообщения: 927
Зарегистрирован: Пн июн 15, 2009 06:01:38
Откуда: USSR

Re: Загадка с TMR0 (какая частота прерывания?)

Сообщение Ghost in shell »

dalay-lama, спасибо!
Как на первый взгляд, для иснользования этой проги надо много заниматься вопросом. Тот, что есть у меня попроще в работе. И код на С генерит.

Я эту тему пока отложу - обошелся без TMR0. (Есть у меня подозрение, что МК - бракованный).Работу надо поскорее заканчивать. Потом вернусь.
Кот гуляет сам по себе, но вблизи холодильника.
Закрыто

Вернуться в «Микроконтроллеры и ПЛИС»