Форум Микро-Чип
Поиск и заказ электронных компонентов
 

Вернуться   Форум Микро-Чип > Продукция MICROCHIP

Продукция MICROCHIP Технические вопросы по всей продукции Microchip

Ответ
 
Опции темы Опции просмотра
Старый 24.01.2008, 09:04   #1
afg
Junior Member
 
Регистрация: 27.12.2007
Сообщений: 4
Вес репутации: 100/0
afg will become famous soon enoughafg will become famous soon enough
Question PIC16F628 TIMER1 ?

Доброе время суток.

В качестве первого знакомства с MCU делаю часы
Использую Hi Tech C Std
Использую кварц 32768Гц и TIMER0 с предделителем.
Работает ...

Для повышения точности подстройки частоты
решил использовать 16-ти разрядный таймер 1,
но не могу его "запустить".

Прерывания не происходит

Последовательность действий.
RP0 = 0; // Банк 0

CCP1CON = 0x00;
CCPR1L = 0x00;
CCPR1H = 0xFF;
T1CON = 0x00; // очистка регистра таймера, отключаем таймер 1
TMR1H = 0x00; // очищаем счетчик таймера
TMR1L = 0x00;

INTCON = 0x00; // выключаем прерывания
RP0 = 1; // Банк 1
PIE1 = 1; // Отключаем прерывания от периферийных устройств
RP0 = 0; // Банк 0
PIR1 = 0; // Очистка флагов переферийных устройств
T1CON = 0b00110000; Внутренний тактовый сигнал с предделителем 1:8
CCP1CON = 0b00001011; Режим сравнения, триггер спец функций - сброс TIMER1

TMR1ON = 1; // Включаем таймер

Код написан в соответствии с документацией на сайте www.mirochip.ru pic16_12.pdf (TIMER1), pic16_14pdf (CCP)

Может еще что-то забыл сбросить или установить ?
Основная программа крутится. а прерывания нет ...
afg вне форума   Ответить с цитированием
Старый 24.01.2008, 09:17   #2
afg
Junior Member
 
Регистрация: 27.12.2007
Сообщений: 4
Вес репутации: 100/0
afg will become famous soon enoughafg will become famous soon enough
По умолчанию Re: PIC16F628 TIMER1 ?

Появилась мысль - может быть слишком большое число загрузил в CCPR1 ?
При частоте кварцевого резонатора 32768ГЦ и предделителя 1:8,
тактирование таймера 1 происходит с частотой 32768/4/8 = 1024 Гц,
с учетом числа загруженного в CCPR1 (0xFF00 = 65280)
установка флага сравнения CCP1IF произойдет через 63 секунды

Наверное надо попробовать установить коэффициент предделителя 1:2 и поиграть с регистром CCPR1

А флаг CCP1IF надо сбрасывать в процессе инициализации и попрерыванию ?
afg вне форума   Ответить с цитированием
Старый 24.01.2008, 09:22   #3
majorPAE
Super Moderator
 
Аватар для majorPAE
 
Регистрация: 26.02.2007
Возраст: 58
Сообщений: 2,221
Вес репутации: 2214/94
majorPAE has a reputation beyond reputemajorPAE has a reputation beyond reputemajorPAE has a reputation beyond reputemajorPAE has a reputation beyond reputemajorPAE has a reputation beyond reputemajorPAE has a reputation beyond reputemajorPAE has a reputation beyond reputemajorPAE has a reputation beyond reputemajorPAE has a reputation beyond reputemajorPAE has a reputation beyond reputemajorPAE has a reputation beyond repute
Отправить сообщение для majorPAE с помощью ICQ Отправить сообщение для majorPAE с помощью Skype™
По умолчанию Re: PIC16F628 TIMER1 ?

Если используешь PICC то там есть функции ei() и di() для разрешения и запрещения прерывания. И должна быть описана функция обработки прерывания. Читай доку на компилятор.
Вот, например, как у меня сделано:
Код:
 
...
#define PWM_OUT RB0
...
void interrupt tc_int(void)
{
if (T0IF==1)  // начало импульса 
 {
 PWM_OUT=1;
 T0IF=0;
 TMR1IF=0;
 TMR1H=TMR1H_Set;
 TMR1L=TMR1L_Set;
 ++tick_count;
 }
if (TMR1IF==1) 
 {
 PWM_OUT=0;  // конец импульса
 TMR1IF=0;
 TMR1H=0;
 TMR1L=0;
 }
...
void main()
{
CMCON=0B00000111;
...
T0CS=0;
PSA=0;
PS2=0;PS1=1;PS0=0;    // предделитель TMR0
TMR1ON=1;
TMR1CS=0;
...
TMR0=0;
TMR1H=0;TMR1L=0;
T1CKPS1=0;T1CKPS0=0;
...
ei ();
T0IE=1;
PEIE=1;
TMR1IE=1;
...
__________________
ЗАКОH ТРУДHОСТЕЙ БИЛЛИHГСА: Большинство тpyдностей пpоисходит оттого, что мы слишком быстpо говоpим ДА и недостаточно быстpо - НЕТ.(с)
"Очередной шаг вперед, как правило, результат хорошего пинка в зад!"(С)
majorPAE вне форума   Ответить с цитированием
Старый 24.01.2008, 09:34   #4
afg
Junior Member
 
Регистрация: 27.12.2007
Сообщений: 4
Вес репутации: 100/0
afg will become famous soon enoughafg will become famous soon enough
По умолчанию Re: PIC16F628 TIMER1 ?

2 majorPAE

Спасибо за пример.

Функция отлова прерывания у меня есть. Макет успешно функцирует по прерыванию от Таймера 0. Проблема именно с Таймером 1.

Кое-что я уже накопал, вечером проверю - флаг переполнения таймера не выставляется при сбросе оного (оно и логично - таймер никогда не переполняется). Если запрещено прерывание от CCP1 - то об этом никто и никогда не узнает.

Для начала проверю в цикле основной программы через промежутки времени значения младшего байта TIMER1, если они разные - значит таймер жив и работает.
afg вне форума   Ответить с цитированием
Старый 24.01.2008, 18:58   #5
afg
Junior Member
 
Регистрация: 27.12.2007
Сообщений: 4
Вес репутации: 100/0
afg will become famous soon enoughafg will become famous soon enough
Thumbs up Re: PIC16F628 TIMER1 ?

Проверил код на симуляторе (PIC Simulator IDE)
Нашел ошибку в программе: забыл разрешить прерывания от CCP
CCP1IE = 1;

Тема закрыта
afg вне форума   Ответить с цитированием
Ответ


Здесь присутствуют: 1 (пользователей: 0 , гостей: 1)
 
Опции темы
Опции просмотра

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.

Быстрый переход

Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
PIC16F628 and LCD DrejAn Продукция MICROCHIP 94 24.11.2008 14:28
Помогите не могу прошить PIC16F628 программатор WILLEPROM FARGYS Продукция MICROCHIP 13 02.07.2008 15:46
Помогите с PWM на pic16f628 djdiablo Продукция MICROCHIP 22 24.01.2008 15:00
pic16F628 TRISA=0xFF ras Продукция MICROCHIP 2 10.08.2007 12:32
переход с PIC16F628 на pic16F628A jkobi Продукция MICROCHIP 11 22.07.2007 16:07


Часовой пояс GMT +3, время: 04:13.


Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2020, Jelsoft Enterprises Ltd. Перевод: zCarot