Форум программистов, компьютерный форум, киберфорум
Лазеры, свет, LED
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.62/50: Рейтинг темы: голосов - 50, средняя оценка - 4.62
0 / 0 / 0
Регистрация: 06.07.2012
Сообщений: 233
1

Ремонт диодного светильника. Поругайте.

24.02.2013, 16:55. Показов 9444. Ответов 11
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Размещаю в Детских вопросах, потому что ничего такого я не сделал особо интересного, но как раз мне интересны комментарии.

Это мое первое, ну так скажем, устройство собранное почти самим, выполняющее какие-то полезные функции. Поэтому, думаю, поймете мое настроение :)

Дали мне светильник-прищепку с лупой...удобная штука, но на кнопку включения не реагирует, при этом светится тускло один из двух диодов. Разобрал, тестером потыкал, напруга входящая в норме 4,5V (3 батарейки 1,5V), напрямую подал + и - на резисторы диодов, диоды горят хорошо, ярко. Вся проблема была в устройстве залитой черной смолой или чем там заливают. Попытался срезать смолу, только выломал с платы это устройство. Ну и хрен с ним. Остальные компоненты в целости.

Решил прикрутить к плате микроконтроллер. Для пущего усложнения (не ну не просто же МК пихать ряди включения-выключения :) ) решил сделать два режима работы светильника: когда горит один диод и когда оба. Итак, кнопка замыкает ножку МК на массу и МК:
1. Ставит порт PB1 на выход и уровень низкий. Горит 1 диод.
2. Ставит порт PB1 и PB2 на выход и уровень низкий. Горят 2 диода.
3. Ставит порты PB1 и PB2 на вход, уровень низкий. Диоды не горят.

В общем с программной точки зрения все просто, код строк на 10-15. Но проблема в отсутствии свободного места в корпусе светильника. Я потихоньку покупаю различные компоненты, микроконтроллеры и др. в небольших количествах и поэтому нашел ATTiny13A. По размерам и стоимости вроде нормально.
Далее скажу спасибо Di за статью о прошивке AVRDude и SinaProk через PinBoard. Полдня разбирался, но все-таки все получилось!
Теперь могу шить МК через PinBoard :)
Припаял для удобства проводки к ножкам МК. Развел все на макетке. Сделал код, залил в МК (ну канешь поошибался с 10-к раз, поперепрошивал) и потестил на макете - все работает! :)



Далее проблема запихнуть даже такой маленький МК в корпус светильника. Отчикал лишние проводки. Посадил МК в термоусадку.



Извратился, все припаял. Кстати, попытался паяться к дорожкам - отрывются дорожки нафиг от платы...Так что выводы от МК к диодам припаял к резисторам диодов.



На удивление все заработало :) И работает на УРА.

Смутил явно один момент в коде:
Код
        DDRB=0x00; //PB0 на вход
PORTB=0x01; //PB0 высокий уровень
Это вообще верно? То есть я делаю PB0 на вход и делаю высокий уровень на нем. Протеус выдает ошибку подключения, хотя все работает.



Код
#ymstude <avr/io.h>
#ymstude <avr/delay.h>

int flagExecState = 0; //Флаг текущего состояния, вначале всегда 0 - все отключено
// 1 - горит 1 диод, 2 - горят 2 диода
int flagBtnState = 0; //Флаг нажатия

int main(void)
{
DDRB=0x00; //PB0 на вход
PORTB=0x01; //PB0 высокий уровень

while(1)
{
if ((PINB & 0x01) == 0x01) //Если кнопка отжата, то сбрасываем флаг flagBtnSate
{
flagBtnState=0;
_delay_ms(30); //Задержка для устойчивой обработки отжатия
}

if (((PINB & 0x01) == 0x00) && (flagBtnState==0)) //Проверяем нажата ли кнопка
{
flagExecState++;
flagBtnState=1;
_delay_ms(30); //Задержка для устойчивой обработки нажатия
}

if (flagExecState==3) // Сбрасываем флаг
{
flagExecState=0;
}

if (flagExecState==0) // Режим 0 - все отключено
{
DDRB=0x00;
PORTB=0x01;
}

if (flagExecState==1) // Режим 1 - горит один диод
{
DDRB=0x02;
PORTB=0x01;
}

if (flagExecState==2) // Режим 2 - горят два диода
{
DDRB=0x06;
PORTB=0x01;
}

}
}
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
24.02.2013, 16:55
Ответы с готовыми решениями:

Расчет диодного ограничителя
Здравствуйте! как рассчитать двухсторонний параллельный диодный ограничитель? Поставили задачу...

Расчет диодного ограничителя
Здравствуйте! как рассчитать двухсторонний параллельный диодный ограничитель в маткаде. Поставили...

Поругайте сайт
Доброго времни суток имеется сайт http://www.missnsk.ru. Основная тематика &quot;знакомства и...

Поругайте JS код
Господа, всё работает, проблем нет. Просто поругайте мой код, какие места лучше писать...

11
0 / 0 / 0
Регистрация: 27.01.2010
Сообщений: 619
24.02.2013, 17:20 2
Цитата Сообщение от Vtohmsk
Смутил явно один момент в коде:
Код:
DDRB=0x00; //PB0 на вход
PORTB=0x01; //PB0 высокий уровень

Это вообще верно? То есть я делаю PB0 на вход и делаю высокий уровень на нем. Протеус выдает ошибку подключения, хотя все работает.

Да, подключение кнопки верное - PB0 настроен на вход с внутренним "подтягивающим" резистором к питанию.

У вас на схеме не указаны резисторы. Вы же подключили светодиоды через эти резисторы?
Какой ток протекает через светодиоды? МК AVR хоть и могут управлять подобного рода нагрузкой напрямую, но есть ограничения по максимальному току через всю микросхему и максимальному току через отдельную ножку МК.
0
1 / 1 / 0
Регистрация: 11.01.2013
Сообщений: 5,479
24.02.2013, 17:21 3
Зачем вообще менять DDRB? Задайте его один раз (перед циклом):
Код
DDRB=0x06; //PB0 - вход, PB1 и PB2 - выходы
PORTB=0x07; //включить внутренний резистор подтяжки PB0 к высокому уровню, потому что на этом входе - кнопка
//на выходах PB1 и PB2 изначально высокий уровень (оба светодиода выключены).
В цикле манипулируйте только PORTB.1 и PORTB.2. А если компилятор не позволяет адресовать биты порта отдельно, тогда такие команды:
Код
PORTB = 0x01;    //когда надо выключить оба диода (бит 0 остаётся включённым - кнопка!)
PORTB = 0x03;    //когда надо включить диод на PB2
PORTB = 0x05;    //когда надо включить диод на PB1
PORTB = 0x07;    //когда надо включить оба диода
0
0 / 0 / 0
Регистрация: 06.07.2012
Сообщений: 233
24.02.2013, 17:42 4
Цитата Сообщение от OtyxPM
Зачем вообще менять DDRB? Задайте его один раз (перед циклом):
А ничего что PB1 и PB2 всегда на выход будут, просто уровень подтяжки менять с высокого на низкий и наоборот?
Т.е. это правильнее?
0
0 / 0 / 0
Регистрация: 06.07.2012
Сообщений: 233
24.02.2013, 17:52 5
Цитата Сообщение от Sporkir
Какой ток протекает через светодиоды? МК AVR хоть и могут управлять подобного рода нагрузкой напрямую, но есть ограничения по максимальному току через всю микросхему и максимальному току через отдельную ножку МК.
Ток не мерял. Но явно это не 350mA диоды. 20-30мА не больше. В даташите к ATTiny13 нашел:
DC Current per I/O Pin ............................................... 40.0 mA
DC Current VCC omd GND Pins ................................ 200.0 mA

То есть 30мА и общий ток в 60мА будет боль-менее нормально.
МК канешь греется, но градусов до 50. Больше не греется. Впихнуть в корпус светильника еще какой-либо компонент все-равно ну никакой возможности нет.
0
1 / 1 / 0
Регистрация: 11.01.2013
Сообщений: 5,479
24.02.2013, 17:53 6
Цитата Сообщение от Vtohmsk
А ничего что PB1 и PB2 всегда на выход будут
Не только "ничего", а только так и надо в простой схеме делать. Манипулировать с DDR понадобится, когда будете экспериментировать с s/w I2C. А в большинстве случаев задают жёстко: кто - вход, кто - выход. Как бы начальное конфигурирование всего железа перед стартом цикла программы.
Цитата Сообщение от Vtohmsk
просто уровень подтяжки менять с высокого на низкий и наоборот?
Т.е. это правильнее?
Термин "подтяжка" (pull-up) имеет смысл только для входов AVR. А у выходов (светодиодные в Вашем проекте) 1 и 0 - это не "подтяжка вкл/выкл", а просто выходной уровень напряжения (высокий/низкий, соответственно).
0
0 / 0 / 0
Регистрация: 27.01.2010
Сообщений: 619
24.02.2013, 17:56 7
На сайте есть очень хорошее описание портов ввода-вывода МК AVR:
http://iosyitistromyss.ru/avr-uchebnyj- ... yvoda.html

Особенно информативна картинка:

http://iosyitistromyss.ru/img/AVR_kurs/IOPorts/port-sh.GIF
Вам нужно установить DDR в лог.1, тогда ножка будет настроена на выход. Далее вы с помощью PORT указываете, куда она будет подключена. PORT=1 - подключена к + питания, PORT=0 - подключена к земле.

Что вы подразумеваете под подтяжкой? "Подтяжкой" принято называть подтягивающий резистор(на картинке это R1), по-иностранному именующийся pull-up и pull-down, если нужно подтянуть к + питания и к земле соответственно. При DDR=1 и PORT=0 или DDR=1 и PORT=1 подтягивающий резистор никак не задействован.

P.S. Уже опередили.

>МК греется...
Уже плохой признак. Он не должен греться. Проверьте ток через светодиоды. Можно даже не разрывать цепь, достаточно измерить напряжение на резисторе, включенном последовательно с светодиодом. Далее по закону Ома вычислить ток:
I=U/R
0
0 / 0 / 0
Регистрация: 06.07.2012
Сообщений: 233
24.02.2013, 18:00 8
Цитата Сообщение от OtyxPM
Т.е. это правильнее?
Термин "подтяжка" (pull-up) имеет смысл только для входов AVR. А у выходов (светодиодные в Вашем проекте) 1 и 0 - это не "подтяжка вкл/выкл", а просто выходной уровень напряжения (высокий/низкий, соответственно).[/quote]

Ок, ясно. Спасибо!
0
1 / 1 / 0
Регистрация: 11.01.2013
Сообщений: 5,479
24.02.2013, 18:01 9
Цитата Сообщение от Vtohmsk
Ток не мерял.
Вот чтобы не мерять ток через светодиоды, надо обеспечить его определённое (и не превышающее допустимого порога) значение резисторами!
Цитата Сообщение от Vtohmsk
Но явно это не 350mA диоды. 20-30мА не больше.
А светодиоды - хоть на 350 мА, хоть на 20-30 мА - не умеют сами ограничивать ток (ну, не считая попытки протеста диода, когда он от перекала сгорает :-) ). Ток им должна задавать/регулировать/ограничивать внешняя схема. Если Вы ещё не играетесь с PWM (плавная регулировка тока), то простые резисторы последовательно со светодиодами - правильное решение.
Цитата Сообщение от Vtohmsk
DC Current VCC omd GND Pins ................................ 200.0 mA
Не путайте максимально допустимые (запредельные) режимы с нормальными рабочими. Берите от каждой ножки AVR по 10...20 миллиампер максимум.
0
0 / 0 / 0
Регистрация: 06.07.2012
Сообщений: 233
24.02.2013, 18:46 10
Цитата Сообщение от OtyxPM
Цитата Сообщение от Vtohmsk
Ток не мерял.
Вот чтобы не мерять ток через светодиоды, надо обеспечить его определённое (и не превышающее допустимого порога) значение резисторами

Конечно, на схеме уже стояли резисторы для светодиодов.

Померял напряжение на выходах резисторов.
Резисторы сопротивлением 10 Ом (на них цифра 100 написана).
R=10 Ом
U1=0.297V для первого диода
U2=0.134V для второго диода

I1 = 0.297 / 10 = 0.0297A = 29.7mA. 30мА всего получается.
I2 = 0.134 / 10 = 0.0134A = 13.4mA. 14mA

Общий ток примерно 45мА.

ЗЫ: На час включил светильник - не...не греется, может после пайки не успел остыть тогда.
0
0 / 0 / 0
Регистрация: 27.01.2010
Сообщений: 619
24.02.2013, 19:05 11
Если написано 100, то это не 100 Ом, а 10 Ом. Почитайте маркировку резисторов для поверхностного монтажа(SMD). Также нужно измерить напяжение не на диодах, а между двумя выводами резисторов.
0
0 / 0 / 0
Регистрация: 06.07.2012
Сообщений: 233
24.02.2013, 19:16 12
Цитата Сообщение от Sporkir
Если написано 100, то это не 100 Ом, а 10 Ом. Почитайте маркировку резисторов для поверхностного монтажа(SMD). Также нужно измерить напяжение не на диодах, а между двумя выводами резисторов.
Поправил. Спасибо! Да, конечно между выходами резисторов мерял. Поправил свой пост.
0
24.02.2013, 19:16
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
24.02.2013, 19:16
Помогаю со студенческими работами здесь

Поругайте Python
Противоположность темы https://www.cyberforum.ru/python/thread2210032.html Перечислите...

Подбор диодного моста для 12В
Хотел разобратся, какими критериями нужно руководствоваться при выпрямлении 220 AC -&gt; 12 DC. Кроме...

Помогите разабраться в схеме диодного ограничителя.
Не могу понять как работает схема.Как диод регулирует напряжения и почему на выходе не больше +5,6...

Нет нуля после диодного моста!?
Нагружаю диодный мост 22к и смотрю осцилом. ...

Профи поругайте плиз!
Здравствуйте! Был старый сайт http://peterandpaul.spb.ru/. Я сделал оптимизированный вариант...

Апгрейд светильника
Добрый вечер! в общем, есть УФ лампочка на 15w для черепахи и светильник настольный на 5w за...

Принцип действия диодного АД по схеме электрической принципиальной
Принцип действия диодного АД по схеме электрической принципиальной. 1. С сопротивление нагрузки...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
12
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru