Програмуємо LED на телефоні. Навіщо потрібні світлодіодні індикатори? Що таке led статус у телефоні stark

Не дозволяє вмикати-вимикати світлодіодний індикатор або спалах фотокамери, на деяких телефонах така можливість є.

Як програмно поблимати різнокольоровими вогниками, як написати свій «Ліхтарик» або якими ще світлодіодами пристрою можна керувати – про це Ви дізнаєтесь нижче.

Почалося все з того, що я, досліджуючи файлову систему свого HTC Desire за допомогою ES Провідника, випадково натрапив на цікаві каталоги: /sys/class/leds/blue, /sys/class/leds/flashlight тощо.
Який ще blue? Я бачив лише помаранчевий та зелений індикатор. Але найцікавіше – усередині цих каталогів виявився файл brightness із правом на запис! Чим я одразу й скористався.

Насправді це не простий файл, а інтерфейс роботи з драйвером світлодіода. Так, записавши у файл /sys/class/leds/blue/brightness позитивне число, ми увімкнемо синій індикатор на корпусі телефону, записавши 0 - вимкнемо. Аналогічно з індикаторами amber та green. Включивши два світлодіоди разом, отримаємо нові кольори: amber+blue=purple; green + blue = aqua.

А тепер, як це все програмується
public void ledControl(String name, int brightness) (

try (

FileWriter fw = new FileWriter("/sys/class/leds/" + name + "/brightness" );

fw.write(Integer.toString(brightness));

fw.close();

) catch (Exception e) (

// Управління LED недоступне

}

}


// Увімкнемо пурпуровий індикатор

ledControl("amber", 255);

ledControl("blue", 255);


// Зробимо дисплей темнішим

ledControl("lcd-backlight", 30);


// Вимкнемо підсвічування кнопок

ledControl("button-backlight", 0);


// Організуємо ліхтарик середньої яскравості

ledControl("flashlight", 128);

Програма-приклад з вихідними кодами можна завантажити .

Висновок
Всі! Тепер телефон світиться, як новорічна ялинка. Код перевірявся тільки на HTC Desire під керуванням Android 2.2, але, можливо, може працювати і на інших пристроях. Напишіть мені, чи вийде або не вийде фокус на Вашому телефоні.

Відображення символів на табло, електронний годинник та багато іншого. Світлодіодний індикатор – це проста конструкція, що відображає буквені або символьні знаки. Конструктивно являє собою складання світлодіодів, де кожен елемент підсвічує знакосегментний індикатор.

Особливості конструкції та типи

Світлодіодні індикатори складаються з інтегральних мікросхем, що відображають різну інформацію. Робоча напруга становить від 2 до 8В. Вони можуть бути:

Сегментними;
- матричними;
- лінійної шкали;
- одиничними

Перший різновид використовується найчастіше і є стандартним типом. Залежно від моделі, складання конструкції може бути виконано з 1-4 семисегментних груп. Від їх кількості залежать розміри об'єкта, кількість символів, що відображаються. Так, одна семисегментна група показуватиме лише одну цифру чи літеру. Чотири групи використовуються в електронному годиннику. Вибираючи схему для саморобного використання, покупець повинен звернути увагу до наявності загального анода і катода.
Крім невеликих індикаторів, існують і ті, які можна побачити у громадських місцях. Для збільшення їх яскравості використовуються послідовно включені світлодіоди, вбудовані в кожен окремий компонент. Щоб індикатор показував певну цифру або символ – подається напруга 11,2 Вольта. Елементи мають власні назви: A, B, C, D, F або G. Робота обумовлена ​​цифровими регістрами зсуву і дешифраторами.

Шифрування даних та інтегральні мікросхеми

Такі елементи встановлені на платі, яка контролює подачу напруги. Робота обумовлена ​​зверненням до програмного коду та залучення спеціальних мікроконтролерів. За допомогою програмування встановлюється таймінг, що впливає на відображення компонентів у певний час.
Інтегральна мікросхема перетворює двійковий і двійково-десятковий код, що подається на табло. Поширеними схемами управління вітчизняними індикаторами є К514ИД2 чи К176ИД2, в імпортних моделях 74HC595. Управління можливе двома способами:

Безпосередньо, через мікроконтролери;
- За допомогою регістрів зсуву

Перший варіант менш успішний через необхідність підключення безлічі висновків. До того ж, струм споживання може бути вищим, ніж це можливо у мікроконтролерів. Великі семисегментні індикатори залежить від мікросхеми MBI5026.

Особливості сегментних індикаторів

В електроніці вони застосовуються для візуального контролю. Конструкція складається з таких елементів:

Знакосинтезуючий індикатор – прилад, в якому зорова інформація відображається за допомогою одного або кількох компонентів;
- Поле відображення даних – у межах неї відображаються цифри чи інші символи;
- елемент відображення - конструктивна частина, що володіє власним управлінням;
- Сегмент – елемент відображення інформації, представлений у вигляді прямих чи кривих ліній;
- Знайомісце - простір, необхідний для відображення одного знака

Усі електронні пристрої виконують основні завдання:

1. Візуальне інформування.
2. Мають закінченим конструктивом.
3. Оснащені електронним керуванням

Сегментні модифікації відрізняються від матричних тим, кожен елемент унікальний. Форма символів розробляється спеціально для відображення певних цифр або символів. Останні засновані не семи, але в дев'яти, чотирнадцяти чи шістнадцяти сегментах. Коли кількість перевищує 7, цілком раціонально використовувати динамічну індикацію перемикання. Відображення світлодіода, індикація можлива у двоколірній формі. Використовуються лампочки різного кольору та підключаються до загальної схеми. Поєднавши висновки, виходить поєднаний відтінок.

Висновок

Робота індикаторів неможлива без світлодіодів. Подібні пристрої актуальні не тільки для радіотехнічного обладнання, але успішно застосовні для вивісок, таймерів та покажчиків. Як показ інформації, можуть використовуватися пристрої різного типу схеми та управління.
Поділіться інформацією на своїх сторінках у соціальних мережах щодо цієї тематики.

Напевно, ви вже бачили індикатори - "вісімки". Це і є семисегментний світлодіодний індикатор, який служить для відображення цифр від 0 до 9, а також децимальної точки ( DP- Decimal point) або комою.

Конструктивно такий виріб є складання світлодіодів. Кожен світлодіод складання засвічує свій знакосегмент.

Залежно від моделі складання може складатися з 1 – 4 семисегментних груп. Наприклад, індикатор АЛС333Б1 складається з однієї семисегментної групи, яка здатна відображати лише одну цифру від 0 до 9.

А ось світлодіодний індикатор KEM-5162AS вже має дві семисегментні групи. Він є дворозрядним. Далі на фото показані різні світлодіодні семисегментні індикатори.

Також існують індикатори з 4 семисегментними групами - чотирирозрядні (на фото - FYQ-5641BSR-11). Їх можна використовувати в саморобному електронному годиннику.

Як позначаються семисегментні індикатори на схемах?

Так як семисегментний індикатор - це комбінований електронний прилад, зображення на схемах мало відрізняється від його зовнішнього вигляду.

Варто лише звернути увагу, що кожному висновку відповідає конкретний знакосегмент, якого він підключений. Також є один або кілька висновків загального катода чи анода – залежно від моделі приладу.

Особливості семисегментних індикаторів.

Незважаючи на простоту цієї деталі і в неї є особливості.

По-перше, світлодіодні семисегментні індикатори бувають із загальним анодом та із загальним катодом. Цю особливість слід враховувати при покупці для саморобної конструкції або приладу.

Ось, наприклад, цоколівка вже знайомого нам 4-х розрядного індикатора FYQ-5641BSR-11.

Як бачимо, аноди у світлодіодів кожної цифри об'єднані та виведені на окремий висновок. Катоди ж у світлодіодів, які належать до знакосегменту (наприклад, G), з'єднані разом. Від того, яку схему з'єднань має індикатор (із загальним анодом чи катодом) залежить дуже багато. Якщо поглянути на принципові схеми приладів із застосуванням семисегментних індикаторів, то стане зрозумілим, чому це так важливо.

Крім невеликих індикаторів, є великі і навіть дуже великі. Їх можна побачити у громадських місцях, зазвичай у вигляді настінного годинника, термометрів, інформерів.

Щоб збільшити розміри цифр на табло і одночасно зберегти достатню яскравість кожного сегмента, використовується кілька світлодіодів, які послідовно включені. Ось приклад такого індикатора – він уміщається на долоні. Це FYS-23011-BUB-21.

Один його сегмент складається із 4 світлодіодів, включених послідовно.

Щоб засвітити один із сегментів (A, B, C, D, E, F або G), потрібно подати на нього напругу 11,2 вольта (2,8V на кожен світлодіод). Можна і менше, наприклад, 10V, але яскравість також зменшиться. Виняток становить децимальна точка (DP), її сегмент складається із двох світлодіодів. Для неї потрібно всього 5 – 5,6 вольт.

Також у природі зустрічаються двокольорові індикатори. У них вбудовуються, наприклад, червоні та зелені світлодіоди. Виходить, що в корпус вбудовано два індикатори, але зі світлодіодами різного кольору світіння. Якщо подати напругу на обидва ланцюги світлодіодів, можна отримати жовтий колір світіння сегментів. Ось схема з'єднань одного з таких двоколірних індикаторів (SBA-15-11EGWA).

Якщо комутувати висновки 1 ( RED) та 5 ( GREEN) на "+" живлення через ключові транзистори, то можна змінювати колір світіння відображуваних чисел з червоного на зелений. А якщо одночасно підключити висновки 1 і 5, то колір світіння буде помаранчевим. Ось так можна балуватися з індикаторами.

Управління семисегментними індикаторами.

Для управління семисегментними індикаторами у цифрових пристроях використовують регістри зсуву та дешифратори. Наприклад, широко поширений дешифратор для керування індикаторами серії АЛС333 та АЛС324 - мікросхема К514ІД2або К176ІД2. Ось приклад .

А для управління сучасними імпортними індикаторами зазвичай використовуються регістри зсуву 74HC595. За ідеєю, керувати сегментами табло можна безпосередньо з виходів мікроконтролера. Але таку схему використовують рідко, тому що для цього потрібно задіяти досить багато висновків мікроконтролера. Тому для цієї мети застосовуються регістри зсуву. Крім цього, струм, споживаний світлодіодами знакосегменту, може бути більшим, ніж струм, який може забезпечити рядовий вихід мікроконтролера.

Для управління великими семисегментними індикаторами, такими як FYS-23011-BUB-21 застосовуються спеціалізовані драйвери, наприклад, мікросхема MBI5026.

Що всередині семисегментного індикатора?

Ну і трохи смачненького. Будь-який електронник не був би таким, якби не цікавився "начинками" радіодеталей. Ось що всередині індикатора АЛС324Б1.

Чорні квадратики на основі – це кристали світлодіодів. Тут же можна розглянути золоті перемички, які з'єднують кристал із одним із висновків. На жаль, цей індикатор вже не працюватиме, оскільки були обірвані саме ці самі перемички. Але ми можемо подивитися, що ховається за декоративною панелькою табло.

Рис.1 Розташування сегментів світлодіодного індикатора

Світлодіодні індикатори є найпростішим засобом відображення символьної інформації. Їх конструкція є набір світлодіодів, виконаних у вигляді сегментів певної форми. На рис.1 наведено найбільш поширену схему розташування сегментів, що дозволяє відображати цифри 0…9 та багато інших додаткових символів. Усередині корпусу всі світлодіоди мають загальну точку з'єднання. Об'єднаними разом можуть бути аноди (загальний анод) або катоди (загальний катод). Найпоширеніші кольори світіння – червоний та зелений. При рівному струмі споживання червоні світлодіоди, як правило, мають велику світловіддачу. Енергоспоживання залежить від напруги живлення та технології виготовлення. Струм сегмента у сучасних індикаторів може бути меншим за 1 мА.


Рис.2 Підключення індикатора під час динамічної індикації

Для того щоб висвітлити на індикаторі необхідний символ, потрібно використовувати мікроконтролера 8 висновків. Одну лінію можна заощадити якщо відмовитися від сегмента H, коли відображення точки (ком) немає необхідності. При більшому чисел використовуваних індикаторів кількість ліній введення-виведення істотно зросте. Два індикатори вимагатимуть уже 16 ліній, 3 індикатори - 24 і т.д. Зрозуміло, що більшість додатків таке марнотратне використання висновків цілком неприйнятно. Вирішити цю проблему можна за допомогою динамічної індикації. Для цього замість безпосереднього з'єднання сегментів з мікроконтролером їх об'єднують у загальні групи, як показано на рис.2. У схемі використовується індикатор TOT-3361AH-LN на 3 знайомі місця із загальними катодами. Порт D задіяний керувати світлодіодами сегментів A…H. Катоди K0…K2 безпосередньо підключені до ліній 0…2 порту B відповідно (для індикаторів іншого типу із сумарним струмом ≥20 мА знадобляться додаткові буферні елементи). Спочатку на індикатор виводиться символ, що відповідає нульовому знайомому. При цьому на лінії PB0 виставляється низький рівень напруги, а на PB1 та PB2 високий (інакше символ буде відображено у всіх трьох позиціях). Через деякий період часу виводиться наступний по черзі символ і тепер уже катод K1 з'єднується із землею (на лінії PB1 є низький рівень, на PB0 і PB2 – високий). Далі інформація відображається в старшій позиції індикатора (PB2 лог.0, PB0, PB1 лог.1), потім знову в нульовий і т.д. При частоті оновлення символів ≥ 50 Гц починає виявлятись інерція людського зору. Мерехтіння (ефект від перемикання) зникає. Зображення сприймається безперервно, оскільки всі символи світяться постійно. Приклад підпрограми динамічної індикації наведено нижче. Вона приймає два параметри: код символу та номер позиції, в якій цей символ потрібно відобразити.

; Оскільки індикатор містить 3 знайомі, підпрограма; виведення символів має викликатися з частотою ≥ 150 Гц (3; знайоместа x 50 Гц = 150 Гц). Період перемикання має; становити 1/150 Гц = 6667 мкс, що у частоті 1 МГц у AVR ; становитиме 6667 циклів тактової частоти генератора. Постійні; проміжки часу найзручніше відміряти таймером, що працює; у режимі скидання під час збігу (режим CTC). У ATmega8 такий; режим існує у 16-розрядного таймер-лічильника 1 і 8-; розрядного таймер-лічильника 2. Для цих цілей (у разі; використання таймер-лічильника 1) існують два регістри; простору РВВ: OCR1AH(старший байт), OCR1AL(молодший байт). ; Коли робота схеми порівняння дозволена, то лічильний регістр; TCNT1H:TCNT1L починає після кожного приходить імпульсу на; одиницю збільшувати свій вміст доти, доки його; значення не зрівняється зі значенням записаним; OCR1AH: OCR1AL. У цей момент вміст TCNT1H: TCNT1L; обнулюється і в РВВ TIMSK встановлюється прапор OCF1A. Якщо; попередньо встановити біт OCIE1A в TIMSK і біт I в SREG, ; то відбудеться перехід на обробник переривання за збігом; від модуля порівняння A. У таймера-лічильника 1 існує також; ще й другий подібний модуль порівняння B з регістрів; порівняння OCR1BH:OCR1BL функціонування якого подібне; описаному вище. регістр з кодом символу. індикаторі.cseg .org 0 rjmp initial ;старт програми.org 0x0006 ;обробника переривання по rjmp service_T1COMPA ;збігу від модуля порівняння A ; Період переривання в режимі CTC: T=(OCR1AH:OCR1AL+1) ; /(Fclk/N),де N – коефіцієнт розподілу предделителя; частоти на вході таймера-лічильника 1. Режим роботи задається; бітами WGM13:WGM10 (WGM10 і WGM11 в керуючому РВВ TCCR1A; WGM12 і WGM13 в TCCR1B), а значення N задається бітами; CS12:CS10 у регістрі TCCR1A. Для періоду T = 6667 мкс; (WGM13:WGM10 = 0100 - режем CTC), N = 1 (CS12: CS10 = 001 - ; предделитель відключений) і Fclk = 1 МГц - вміст OCR1AH: OCR1AL ; = 6667. .org 0x0020 initial: ldi temp,high(RAMEND) ;ініціалізація стека out SPH,temp ldi temp,low(RAMEND) out SPL,temp . clr pos clr temp ldi temp,1 ;заповнюємо буфер індикації числами 1…3 sts buffer,temp ldi temp,2 sts buffer+1,temp ldi temp,3 sts buffer+2,temp out TCCR1A,temp ldi temp,(1<< WGM12)|(1<< CS10) out TCCR1B,temp ldi temp,high(6667) out OCR1AH,temp ldi temp,low(6667) out OCR1AL,temp ldi temp,1<< OCIE1A out TIMSK,temp sei . service_T1COMPA: ;обработчик прерывания по совпадению OCR1A in temp,SREG ;при входе сохраняем в стеке push temp ;регистры temp, SREG clr temp ldi YH,high(buffer) ;заносим в указатель Y адрес ldi YL,low(buffer) ;буфера индикации buffer add YL,pos ;добавляем к Y смещение, что соответствует adc YH,temp ;ячейке с текущей позицией pos индикатора ld data,Y ;заносим в data кодом символа текущей позиции rcall din_ind ;вызов подпрограммы индикации inc pos ;циклически изменяем номер позиции cpi pos,3 ;индикатора 0->1->2->0 і т.д. brne PC+2 clr pos pop temp ;при виході відновлюємо з стека out SREG, temp ; регістри temp, SREG reti ; Підпрограма динамічної індикації; ZH:ZL – покажчик для табличного конвертування; R18 – регістр для проміжних операцій; R16 – номер символу таблицею перекодування ind_tabl ; при вході до підпрограми; R17 – номер позиції при вході у підпрограму (0…2); прапор T при вході до підпрограми визначає; наявність (T = 1) або відсутність (T = 0) коми din_ind: clr R18; очищаємо допоміжний регістр при вході ldi ZH, high (2 * ind_tabl); таблиці перекодування символів add ZL, R16; додаємо до покажчика Z зсув, adc ZH, R18; відповідне положенню символу в таблиці lpm R16, Z; clt ; комою, яке передається через прапор T ldi R18,0b11111110 sbrc R17,0 ;якщо поточний розряд 1, то заносимо в R18 маску ldi R18,0b11111101 ;порту B для включення катода K1 sийc2; заносимо в R18 маску ldi R18,0b11111011 ;порту B для включення катода K2 push R17 ;зберігаємо в стеку регістр з номером позиції in R17,PORTB;зчитуємо в буфер R17 поточний стан порту ori R17,0b000001 гасимо всі сегменти, подаючи на K0 ... K2 лог.1 out PORTD, R16 ; виводимо в порт D черговий символ out PORTB, R18 ; з'єднуємо з землею наступний катод pop R17 ; при загальному катоді; HGFEDCBA HGFEDCBA символи номер у таблиці.db 0b00111111, 0b00000110 ; 0,1 0, 1 .db 0b01011011, 0b01001111; 2,3 2, 3 .db 0b01100110, 0b01101101; 4,5 4, 5 .db 0b01111101, 0b00000111; 6,7 6, 7. db 0b01111111, 0b01101111 ; 8,9 8, 9. db 0b01110111, 0b01111100 ; A, b 10, 11. db 0b01011110, 0b01011110 ; C,d 12, 13 .db 0b01111001, 0b01110001; E,F 14, 15 .db 0b01000000, 0b00000000; -,space 16, 17

Лінії портів введення-виведення у AVR мають симетричні навантажувальні характеристики. Вони допускають рівні за величиною струм і до струму до 20 мА. Тому з ними з однаковим успіхом можуть застосовуватися індикатори як із загальним анодом, так і із загальним катодом. Крім цього висновки для підключення сегментів часто виконують додаткові функції опитування кнопок. На рис.2, наприклад, з лінією сегмента A через струмообмежуючої резистор RN з'єднана кнопка SBN. Періодично PD0 налаштовується введення для зчитування стану кнопки. У ролі навантажувального опору, у разі, виступає внутрішній pull-up резистор.


Рис.3 Скорочення числа висновків мікроконтролера
а - за допомогою зсувного регістру
б - з використанням індикаторів з різною схемою підключення світлодіодів

Кількість висновків можна істотно скоротити, якщо разом із мікроконтролером використовувати допоміжні мікросхеми. На рис.3а, наприклад, показано як з цією метою використовується зсувний регістр 74HC164 або подібний йому. Таке підключення звільняє 6 ліній вводу-виводу. У деяких випадках може бути виправданим застосування дешифраторів семисегментного коду та лічильників різного типу. Крім того, існує ще одна можливість економії, заснована на використанні z-стану ліній портів. Схема на рис.3б аналогічна схемою на рис.2 за тим лише винятком, що паралельно індикатору із загальним катодом HG1 додатково підключений трирозрядний індикатор із загальним анодом HG2. Лінії PB0…PB2 одночасно виконують комутацію анодів A0…A2 індикатора HG2 та катодів K0…K2 HG1 відповідно. Коли інформація відображається в нульовій позиції HG2(анод A0), то лінії PB0 формується високий рівень напруги. На лініях порту D виставляється лог.0 у тих сегментах, які мають бути засвічені та z-стан у сегментах, які необхідно погасити. Коли активно молодше знайоме місце HG1 (катод K0) – на лінії PB0 повинен бути низький рівень напруги, а в порт D виведено логічне значення при якому рівень лог.1 на лініях відповідає засвіченим сегментам і погашений z-стан. Якщо символи виводиться в інші позиції індикатора, відмінні від A0 і K0, то PB0 повинна бути переведена у високоімпедансний стан. Природно, що програма виведення за такої схеми перемикання буде помітно складніше наведеної на рис. Таблиця символів виявиться набагато більшою, оскільки по-перше для кожного з них необхідно, крім значення PORTD, треба буде зберігати ще й вміст регістра DDRD, через який відповідні лінії повинні переводиться в z-стан (налаштовуватися на введення). І по-друге символам HG1 будуть відповідати інші, інверсні значення PORTD по відношенню до індикатора з загальним катодом HG2.

Не дозволяє вмикати-вимикати світлодіодний індикатор або спалах фотокамери, на деяких телефонах така можливість є.

Як програмно поблимати різнокольоровими вогниками, як написати свій «Ліхтарик» або якими ще світлодіодами пристрою можна керувати – про це Ви дізнаєтесь нижче.

Почалося все з того, що я, досліджуючи файлову систему свого HTC Desire за допомогою ES Провідника, випадково натрапив на цікаві каталоги: /sys/class/leds/blue, /sys/class/leds/flashlight тощо.
Який ще blue? Я бачив лише помаранчевий та зелений індикатор. Але найцікавіше – усередині цих каталогів виявився файл brightness із правом на запис! Чим я одразу й скористався.

Насправді це не простий файл, а інтерфейс роботи з драйвером світлодіода. Так, записавши у файл /sys/class/leds/blue/brightness позитивне число, ми увімкнемо синій індикатор на корпусі телефону, записавши 0 - вимкнемо. Аналогічно з індикаторами amber та green. Включивши два світлодіоди разом, отримаємо нові кольори: amber+blue=purple; green + blue = aqua.

А тепер, як це все програмується
public void ledControl(String name, int brightness) (

try (

FileWriter fw = new FileWriter("/sys/class/leds/" + name + "/brightness" );

fw.write(Integer.toString(brightness));

fw.close();

) catch (Exception e) (

// Управління LED недоступне

}

}


// Увімкнемо пурпуровий індикатор

ledControl("amber", 255);

ledControl("blue", 255);


// Зробимо дисплей темнішим

ledControl("lcd-backlight", 30);


// Вимкнемо підсвічування кнопок

ledControl("button-backlight", 0);


// Організуємо ліхтарик середньої яскравості

ledControl("flashlight", 128);

Програма-приклад з вихідними кодами можна завантажити .

Висновок
Всі! Тепер телефон світиться, як новорічна ялинка. Код перевірявся тільки на HTC Desire під керуванням Android 2.2, але, можливо, може працювати і на інших пристроях. Напишіть мені, чи вийде або не вийде фокус на Вашому телефоні.