Easyelectronics.ru

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

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



    • JLCPCB - Прототипы 10 PCBs всего за 2$ (100*100mm, 2-layer)
    • Как мы делаем платы, смотрите на YouTube
    • Крупнейшая китайская фабрика прототипов. 300000+ заказчиков и 10000+ заказов в день!
    • 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 часов


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

Сейчас этот форум просматривают: Google [Bot]


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

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

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