Easyelectronics.ru

Электроника для всех
Текущее время: 26 май 2018, 01:26

Часовой пояс: UTC + 5 часов



    • JLCPCB - Платы прототипов всего за 2$ c бесплатной доставкой (при первом заказе)
    • 10 PCBs за $2 для 2 слоев, $15 для 4 слойной, $74 для 6 слойной платы.
    • Крупнейший китайский производитель прототипных плат. 290000+ клиентов & 8000+ заказов в день!
    • LCSC - Крупнейший китайский онлайн магазин радиодеталей.

Начать новую тему Ответить на тему  [ Сообщений: 2 ] 
Автор Сообщение
 Заголовок сообщения: СС1110 и вывод канала 0 четвертого таймера вместо P2.0
СообщениеДобавлено: 09 дек 2011, 10:05 
Здравствуйте!
Аватара пользователя

Зарегистрирован: 09 дек 2011, 09:53
Сообщения: 3
Добрый день!

Второй день бьюсь с простой, казалось бы, задачей вывести PWM Timer 4 на вывод P2.0 для управления яркостью индикатора. Сам таймер запускается и работает, но на выводе постоянно висит "1". Привожу код для среды IAR WB C/C++ for 8051 v.7.60.1. Для упрощения вместо переменной в компаратор загружается константа 127, чтобы получить для начала что-то близкое к меандру.

#include "bsp.h"

__sfr __no_init volatile struct {
unsigned char Mode : 2;
unsigned char Clr : 1;
unsigned char OvfIM : 1;
unsigned char Start : 1;
unsigned char Div : 3;
} T3Ctl @ 0xCB, T4Ctl @ 0xEB;

__sfr __no_init volatile struct {
unsigned char : 2;
unsigned char Mode : 1;
unsigned char Cmp : 3;
unsigned char IM : 1;
unsigned char : 1;
} T3CCtl0 @ 0xCC, T3CCtl1 @ 0xCE, T4CCtl0 @ 0xEC, T4CCtl1 @ 0xEE;

SFRBIT(PerCfg, 0xF1, PERCFG7, T1CFG, T3CFG, T4CFG, PERCFG3, PERCFG2, U1CFG, U0CFG)
SFRBIT(P2Sel, 0xF5, P2SEL7, PRI3P1, PRI2P1, PRI1P1, PRI0P1, SELP2_4, SELP2_3, SELP2_0)


void main (void)
{
BSP_Init();

// Initialize P2.0 as Timer4 Channel0 out for LCD backligth PWM control
T4Ctl.Start = 0; // Stop the timer
T4Ctl.OvfIM = 0; // Clear overflow interrupt mask
T4OVFIF = 0; // Clear the interrupt flag
T4CC0 = 127; // Set the compare value
T4CFG = 1; // Set Alt 2 remapping
SELP2_0 = 1; // Set P2_0 for peripheral function
T4Ctl.Mode = 0; // Set modulo repeatedly count from 0x00 to 0xFF
T4Ctl.Div = 7; // Set prescaler divider value = Tick frequency/128
T4CCtl0.IM = 0; // Clear interrupt mask
T4CCtl0.Cmp = 0; // Toggle output on compare
T4CCtl0.Mode = 1; // Compare mode enable
T4Ctl.Start = 1; // Start the timer

for(;;)
;
}

_________________
Правильно сформулированный вопрос уже содержит минимум половину ответа!


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: СС1110 и вывод канала 0 четвертого таймера вместо P2.0
СообщениеДобавлено: 09 дек 2011, 13:01 
Здравствуйте!
Аватара пользователя

Зарегистрирован: 09 дек 2011, 09:53
Сообщения: 3
Спасибо всем, разобрался сам. Оказывается, что для работы PWM нужно выбирать режимы выхода компаратора со сбросом или установкой в начале или в конце цикла, т.е. T4CCtl0.Mode д.б. 3, 4, 5 или 6 соответственно. Только это было в описании таймера 1, а для таймера 4 следовало лишь по аналогии. Иначе получалось, что после первого же совпадения на выходе компаратора возникала "1" и так там и оставалась бы до сброса счетчика.

_________________
Правильно сформулированный вопрос уже содержит минимум половину ответа!


Вернуться к началу
 Профиль  
 
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 2 ] 

Часовой пояс: UTC + 5 часов


Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей


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

Найти:
Перейти:  

Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
Русская поддержка phpBB