msp430. LED.
Спаибо за ответ. Хедер у меня точно правильный. Я ж говорю, что просто мигание работает. Буду пытаться. Всего в устройстве 60 светодиодов разных цветов, + 6 трёхцветных RGB диодов с переменными сопротивлениями на каждой ноге, + моторчик с машинки, который крутит изображения по экрану (уменьшенные фотки). Должно получиться очень зрелищно. Корпус делаю из матового оргстекла, чтоб рассеивать свет. Вё уже спаяно и работает. Только не хочет вот это плавное угасание делать... (((
- Left Radio
- Прорезались зубы
- Сообщения: 235
- Зарегистрирован: Пт авг 22, 2008 03:58:30
- Откуда: Union Soviet Socialist Republics
- Контактная информация:
Left Radio, просто у меня уже всё спаяно, на этой ноге у меня сидит 24 диода, стоят два буфера (один на 100мА на выходе, другой 500 мА, который открывается первым). Вся суть сего девайса в этих 24-ёх диодах и этом эффекте. Неужели всё так сложно ???
++ Ещё такая проблема: когда пуляю код бегущего огня, он раз прошвыривается по диодам и останавливается.
++ Ещё такая проблема: когда пуляю код бегущего огня, он раз прошвыривается по диодам и останавливается.
Последний раз редактировалось fiatlux37 Чт мар 11, 2010 14:55:48, всего редактировалось 1 раз.
- Left Radio
- Прорезались зубы
- Сообщения: 235
- Зарегистрирован: Пт авг 22, 2008 03:58:30
- Откуда: Union Soviet Socialist Republics
- Контактная информация:
Можете сделать без ШИМ-а, просто поставе резистор, конденсатор и транзистор. При переходе ноги Р3.2 из 0 в 1 конденсатор, через резистор, начинает заряжаться, транзистор в свою очередь, подсоединенный базой(затвором) к емкости начнет открываться и плавно зажигать светодиод, при переходе из 1 в 0 - обратный процесс. Подбором резистора и емкости получите нужное время зажигания/угасания.
Естественно
, это же для примера, чтобы не останавливался надо написать так:
fiatlux37 писал(а):Ещё такая проблема: когда пуляю код бегущего огня, он раз прошвыривается по диодам и останавливается.
Естественно
Код: Выделить всё
#include <msp430x12x2>
unsigned int cnt = 0;
unsigned int direct = 0;
void main(void)
{
WDTCTL = WDTPW + WDTHOLD; // Stop watchdog timer
P1DIR |= 0xFF; // Set P1 to output direction
while(1)
{
for (cnt = 1; cnt <= 128; cnt = cnt * 2)
{
volatile unsigned int i;
if(direct == 0)
{
P1OUT = cnt;
i = 50000; // Delay
do (i--);
while (i != 0);
}
else
{
P1OUT = 128 - cnt;
i = 50000; // Delay
do (i--);
while (i != 0);
}
}
direct ^= 0x01; // Переключение направления зажигания светодиодов используя exclusive-OR
}
}
Крылья... Крылья.... Хвост! 
Нестрашно не знать, страшно не стремиться знать.

Нестрашно не знать, страшно не стремиться знать.
RadioLab, в принцыпе, мне уже чертовски помогли, основные проблемы я уже решил. Сейчас не могу написать программульку, чтобы диод мигал с о скважностью не равной 2. То есть не 1,0,1,0,1,0... , а что-бы было 0,0,0,0,1,0,0,0,0...
Ну это в первом приближении. Надо чтоб диод секунду не горел, вспыхнул и повторять этот процесс (типа стробоскопа, что-ли).
++ шью msp430f1232
Ну это в первом приближении. Надо чтоб диод секунду не горел, вспыхнул и повторять этот процесс (типа стробоскопа, что-ли).
++ шью msp430f1232
- Left Radio
- Прорезались зубы
- Сообщения: 235
- Зарегистрирован: Пт авг 22, 2008 03:58:30
- Откуда: Union Soviet Socialist Republics
- Контактная информация:
Это можно очень просто сделать с помощью собаки, вот так к примеру:
Светодиод будет вспыхивать с периодом примерно равным 1сек на время 32/5ms.
Код: Выделить всё
unsigned char cnt = 0;
int main( void )
{
WDTCTL = WDT_MDLY_32; // ~32/5 ms interval
IE1 |= WDTIE; // Enable WDT interrupt
........
P1DIR |= 0xFF; // Set P1 to output direction
P1OUT = 0x00;
.......
}
// Watchdog Timer interrupt service routine
#pragma vector=WDT_VECTOR
__interrupt void watchdog_timer(void)
{
if( cnt++ == 156)
{
P1OUT = 0x01;
cnt = 0;
}
else P1OUT = 0x00;
}
Светодиод будет вспыхивать с периодом примерно равным 1сек на время 32/5ms.
Крылья... Крылья.... Хвост! 
Нестрашно не знать, страшно не стремиться знать.

Нестрашно не знать, страшно не стремиться знать.
- RadioLab
- Открыл глаза
- Сообщения: 46
- Зарегистрирован: Пт дек 25, 2009 12:29:51
- Откуда: Н.Новгород
- Контактная информация:
В том месте где нужная ножка ставиться в 1 и в 0 ставь управляемые задержки
например
например
Код: Выделить всё
int count_1 = 10;
int count_0 = 2000;
ножку отпущена // светодиод не горит
..............
while(1)
{
ножку отпустил
while(count_0) //задержка (count_0) задаёт время не горения светод
{ count_0 --; }
ножку поднял
while(count_1) //задержка (count_1) задаёт время горения светод
{ count_1 --; }
}
.......................................
меняя count_1 и count_0 будешь менять длительность горения светодиода
- Left Radio
- Прорезались зубы
- Сообщения: 235
- Зарегистрирован: Пт авг 22, 2008 03:58:30
- Откуда: Union Soviet Socialist Republics
- Контактная информация:
- RadioLab
- Открыл глаза
- Сообщения: 46
- Зарегистрирован: Пт дек 25, 2009 12:29:51
- Откуда: Н.Новгород
- Контактная информация:
Re: msp430. LED.
безусловно эффективнее.
только так проще и понятнее начинающему программисту.
.......... хотя даже начинающие программисты бывают разные.
.......... хотя даже начинающие программисты бывают разные.
Re: msp430. LED.
Ну всё. Всем спасибо. Особенно Left Radio. Только-что закончил программировать МК. Наконец-то всё заработало !!! Моей эйфории нет предела !!! Всё именно так, как я хотел !!! Сегодня забрал с работы всю плату (а я там уже всех достал ей). Теперь буду всё в корпус вставлять. Теперь впереди весёлые выходные =)))
Re: msp430. LED.
1 апреля подарил сие чудо ручной работы. Вот видео. Извините за качество.Основной материал оргстекло. Всё покрыто мехом. Из капельницы сплетены сверху всякие штуки. Ну и ещё куча всего. Ны вышла идея с трёхцветными диодами. Там где воткнуты зелёные - было место под ручки для переменников, чтоб регулировать цвета. Правда, сверху посередине стоит трёхцветный - соединил ноги красного и синего цвета, получил фиолетово-бардовый. От моторчика, который крутит фотки, тоже пришлось отказаться. Ещё раз всем спасибо.
http://ifolder.ru/17107977
http://ifolder.ru/17107977