0 / 0 / 0
Регистрация: 06.07.2012
Сообщений: 233
|
|
1 | |
Ремонт диодного светильника. Поругайте.24.02.2013, 16:55. Показов 9444. Ответов 11
Метки нет (Все метки)
Размещаю в Детских вопросах, потому что ничего такого я не сделал особо интересного, но как раз мне интересны комментарии.
Это мое первое, ну так скажем, устройство собранное почти самим, выполняющее какие-то полезные функции. Поэтому, думаю, поймете мое настроение :) Дали мне светильник-прищепку с лупой...удобная штука, но на кнопку включения не реагирует, при этом светится тускло один из двух диодов. Разобрал, тестером потыкал, напруга входящая в норме 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 высокий уровень Код
#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
|
24.02.2013, 16:55 | |
Ответы с готовыми решениями:
11
Расчет диодного ограничителя Расчет диодного ограничителя Поругайте сайт Поругайте JS код |
0 / 0 / 0
Регистрация: 27.01.2010
Сообщений: 619
|
|
24.02.2013, 17:20 | 2 |
Сообщение от Vtohmsk
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 = 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
Т.е. это правильнее?
0
|
0 / 0 / 0
Регистрация: 06.07.2012
Сообщений: 233
|
|
24.02.2013, 17:52 | 5 |
Сообщение от Sporkir
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
Сообщение от Vtohmsk
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
Ок, ясно. Спасибо!
0
|
1 / 1 / 0
Регистрация: 11.01.2013
Сообщений: 5,479
|
|
24.02.2013, 18:01 | 9 |
Сообщение от Vtohmsk
Сообщение от Vtohmsk
Сообщение от Vtohmsk
0
|
0 / 0 / 0
Регистрация: 06.07.2012
Сообщений: 233
|
|
24.02.2013, 18:46 | 10 |
Сообщение от OtyxPM
Конечно, на схеме уже стояли резисторы для светодиодов. Померял напряжение на выходах резисторов. Резисторы сопротивлением 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
0
|
24.02.2013, 19:16 | |
24.02.2013, 19:16 | |
Помогаю со студенческими работами здесь
12
Поругайте Python Подбор диодного моста для 12В Помогите разабраться в схеме диодного ограничителя. Нет нуля после диодного моста!? Профи поругайте плиз! Апгрейд светильника Принцип действия диодного АД по схеме электрической принципиальной Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |