Телесистемы
 Разработка, производство и продажа радиоэлектронной аппаратуры
На главную   | Карта сайта | Пишите нам | В избранное
Требуется программист в Зеленограде
- обработка данных с датчиков; ColdFire; 40 тыс.
e-mail:jobsmp@pochta.ru

Телесистемы | Электроника | Конференция «Микроконтроллеры и их применение»

Некорректная загрузка регистра OCR3A в ATmega64 (режим 14 - "быстрый" ШИМ)

Отправлено Юрий_СВ 06 октября 2008 г. 12:39


ОЧЕНЬ странно работает настройка таймера 3 ("быстрый" ШИМ, режим 14) в функции настройки переферии.
Очевидного объяснения этому в pdf (при беглом просмотре) не заметил.
Интересно, это у меня такой экземпляр или у всех так ?
Первый вызов функции настройки переферии проходит правильно, но если в программе ещё раз вызвать эту функцию, заметил, что, н-р, после повторного OCR3A=0x03ff; в OCR3A оказывается 0x01ff.

===============================
asm volatile("cli\n\t"::); // запрет прерываний
TCCR3B=0x00; // Выключаем входной делитель таймера 3

SFIOR=0x80; // Вход в режим синхронизации таймеров
SFIOR=0x83; // Сброс входных делителей всех таймеров

TCNT3=704 + 512; // грузим в таймер начальное смещение
ICR3 =0x07ff; // Т.к. перезапуск по ICR3 - задаём период (2048 тактов)
OCR3A=0x03ff; // регистр канала сравнения А (переводит выход в "1" по достижении 1023 и в "0" по нулю)
OCR3B=gp->g_comp; // регистр канала сравнения В
OCR3C=y_comp; // регистр канала сравнения С
TCCR3A=0xfa; // 0b 1a1b1c10 (a,b,c - состояние выхода по сравнению)
TCCR3B=0x19; // Входной делитель таймера 3 = 1. Быстрый ШИМ + Перезапуск по ICR3 (режим 14)

SFIOR=0x00; // SFIOR&=0x7f; Синхронный запуск таймеров (Выход из режима синхронизации)
asm volatile("sei\n\t"::); // разрешение прерываний
===============================
Если же после такой (неудачной) настройки OCR3A=0x03ff; выполнить за пределами функции
настройки - OCR3A станет равен 0x03ff, но фаза "0" счётчика Х сдвинеться на 180 градусов.
Со слудующего раза выполнение OCR3A=0x03ff; уже ничего не меняет.
(фаза остаётся сдвинута на 180 грудусов)

Т.е., неверно работает изменение OCR3A при настроенном TCCR3A (TCCR3A=0xfa;) и остановленном входном делителе (TCCR3B=0x00;)
Если перед настройкой поставить
TCCR3A=0x00; // Отключаем выходы таймера 3 от портов
- всё нормально.


Составить ответ | Вернуться на конференцию

Ответы


Отправка ответа
Имя*: 
Пароль: 
E-mail: 
Тема*:

Сообщение:

Ссылка на URL: 
URL изображения: 

если вы незарегистрированный на форуме пользователь, то
для успешного добавления сообщения заполните поле, как указано ниже:
введите число 567:

Перейти к списку ответов | Конференция | Раздел "Электроника" | Главная страница | Карта сайта

Rambler's Top100 Рейтинг@Mail.ru
 
Web telesys.ru