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

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

Сообщение 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-сегментном индикаторе.
Кот гуляет сам по себе, но вблизи холодильника.
Реклама
Модератор
Аватара пользователя
Сообщения: 4614
Зарегистрирован: Чт мар 18, 2010 23:09:57
Откуда: Планета Земля

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

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

Сообщение 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
}	
// конец обработчика прерываний
Кот гуляет сам по себе, но вблизи холодильника.
Модератор
Аватара пользователя
Сообщения: 4614
Зарегистрирован: Чт мар 18, 2010 23:09:57
Откуда: Планета Земля

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

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

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

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

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

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

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

Ghost in shell писал(а):Альтависта с Яндексом не в курсе.
Гугелом искать нужно. http://www.google.ru/search?q=PicMultiC ... nt=firefox
Вложения
PIC Multi Calc v1.31.zip
(118.23 КБ) 261 скачивание
Важнейшая задача цивилизации - научить человека мыслить. /Т. Эдисон/
Держит паяльник хвостом
Аватара пользователя
Сообщения: 948
Зарегистрирован: Пн июн 15, 2009 06:01:38
Откуда: USSR

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

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

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

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