Страница 1 из 1

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

Добавлено: Пн июл 25, 2011 19:03:16
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-сегментном индикаторе.

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

Добавлено: Пн июл 25, 2011 19:20:30
Аlex
Чудес не бывает. Выкладывайте проект, посмотрим.

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

Добавлено: Пн июл 25, 2011 20:33:53
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
}	
// конец обработчика прерываний

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

Добавлено: Пн июл 25, 2011 20:42:17
Аlex
Ghost in shell писал(а):Ну, весь код нет смысла выкладывать.
Тогда вообще нет смысла на форуме подобные вопросы задавать. Экстрасенсы в отпуске.
У меня, например, таймер работает всегда чётко.

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

Добавлено: Вт июл 26, 2011 02:21:14
БАТАРЕЙКУС
есть замечательная программка для пик чтоб настраивать таймеры называется. PicMultiCalc109.exe

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

Добавлено: Вт июл 26, 2011 05:06:42
Ghost in shell
БАТАРЕЙКУС писал(а):есть замечательная программка для пик чтоб настраивать таймеры называется. PicMultiCalc109.exe
Где ее найти? Альтависта с Яндексом не в курсе. :( Я сам использую PI© Timer Calculator 0.9.6, autor Ronald Nisble. Частоту считает правильно, как и код настроек делителя, (для TMR0 нельзя проверить) а в остальном коде проскакивают ошибки. Для остальных таймеров в MPLAB все просто: прописал в коде непрерывную работу таймера, откомпилил, вызвал окно Debugger / StopWatch, затем курсор в нужную строку кода и LMB + Run to Cursor. А для TMR0 какую-то чушь измеряет!
Код выложу позже.

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

Добавлено: Вт июл 26, 2011 15:50:38
dalay-lama
Ghost in shell писал(а):Альтависта с Яндексом не в курсе.
Гугелом искать нужно. http://www.google.ru/search?q=PicMultiC ... nt=firefox

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

Добавлено: Ср июл 27, 2011 10:28:35
Ghost in shell
dalay-lama, спасибо!
Как на первый взгляд, для иснользования этой проги надо много заниматься вопросом. Тот, что есть у меня попроще в работе. И код на С генерит.

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