Рис. Блок-схема карти розширень.
Натхненний попередніми експериментами з Raspberry Pi, я вирішив спроєктувати та виготовити плату, що поєднує риси всіх попередніх прикладів. Спроєктований інтерфейс має шість підсвічених кнопок, під'єднаних через мікросхему MCP23008 до інтерфейсу I2C. Панель керування оснащено алфавітно-цифровим дисплеєм LCD. Для керування цим дисплеєм використано описану в іншій статті бібліотеку wiringPi, що має вбудовані функції для дисплеїв такого типу. Для керування підсвіткою дисплея використано мікросхему PCA9633. Дисплей має підсвітку RGB, завдяки чому колір підсвітки можна визначити довільно. Плату оснащено також годинником RTC типу PCF8563, під'єднаним до інтерфейсу I2C. До цього самого інтерфейсу під'єднано мікросхему SHT21 – цифровий термометр і гігрометр. У панель вбудовано мікросхему пам'яті 24C02 для запису поточних даних про налаштування. Великим функціональним блоком, вбудованим у панель, є перетворювач UART на BlueTooth типу BTM222. Завдяки цьому інтерфейсу отримуємо в розпорядження новий канал зв'язку з платою Raspberry Pi. До модуля BTM222 під'єднано антену на діапазон 2,4 ГГц. Ще одним цікавим елементом, встановленим на платі панелі керування, є приймач інфрачервоного сигналу TSOP4836, який у поєднанні з бібліотекою lirc дозволяє цікавий спосіб керування комп'ютером Raspberry Pi. На платі встановлено також зумер, керований з інтерфейсу GPIO комп'ютера Raspberry Pi. Як написано вище, на платі панелі керування встановлено кілька мікросхем, під'єднаних до спільного керувального інтерфейсу I2C. Щоб з ними спілкуватися, потрібна інформація про адреси окремих мікросхем. Їх наведено в таблиці нижче.
| адреса | мікросхема | примітки |
|---|---|---|
| 0x0c | PCA9633 | |
| 0x51 | PCF8563 | |
| 0x52 | AT24C02 | за документацією 0xa2 |
| 0x40 | SHT21 | |
| 0x20 | MCP23008 |
Ці адреси відрізняються від наведених у документації окремих мікросхем. Це тому, що в документації восьмибітну адресу подано разом із бітом read/write, тоді як у бібліотеці wiringPi використовуємо лише сім найстарших бітів, отже "документаційну" адресу слід поділити на 2, наприклад 0xa2/2 = 0x52.
Таблиця, що ілюструє спосіб під'єднання дисплея LCD до інтерфейсу GPIO.
| RS | EN | D4 | D5 | D6 | D7 |
|---|---|---|---|---|---|
| GPIO25 | GPIO7 | GPIO22 | GPIO27 | GPIO17 | GPIO4 |
Як зазначено раніше, використаний дисплей LCD має вбудовану підсвітку світлодіодами RGB. Для керування
підсвіткою застосовано мікросхему PCA9633. За колір R відповідає регістр за адресою
0x05, за колір G – регістр за адресою 0x04, а за колір B – регістр 0x03. За підсвітку клавіатури відповідає регістр
за адресою 0x02. Для зчитування стану клавіатури застосовано мікросхему MCP23008. Вихід переривання цієї
мікросхеми під'єднано до лінії GPIO24. Після виявлення
зміни стану на цій лінії програма, запущена на Raspberry Pi, має зчитати з мікросхеми MCP, яку з кнопок
натиснуто.
Мікросхему для приймання сигналів з пультів дистанційного керування в інфрачервоному діапазоні
під'єднано до лінії GPIO18. Бібліотеку lirc слід налаштувати так, щоб вона враховувала цю інформацію.
Про
модуль BTM222 і спосіб його під'єднання нема чого описувати. Цей модуль під'єднано до ліній RXD та TXD. Лінію RESET
модуля BTM222 під'єднано до виводу
GP7 мікросхеми MCP23008.
Зумер під'єднано до лінії GPIO23 плати Raspberry Pi. На платі встановлено
роз'єм, під'єднаний до інтерфейсу SPI Raspberry Pi. Якщо комусь потрібно під'єднати ще якісь мікросхеми з
інтерфейсом I2C, там є
також роз'єм, на який виведено сигнали інтерфейсу I2C.
Рис. Вигляд спроєктованого frontpanel для Raspberry Pi.
Рис. Принципова схема frontpanel.
Рис. Вигляд змонтованого й запущеного frontpanel.
Рис. Ще один вигляд: RPi та frontpanel.
На основі схеми було спроєктовано двосторонню друковану плату, на якій розміщено всі елементи та роз'єми.
Рис. Вигляд спроєктованої друкованої плати.
Запуск frontpanel я почав із запуску дисплея LCD. Для цього слід встановити
бібліотеку wiringPi згідно з інструкцією, описаною в розділі про виводи GPIO. Щоб дисплей запрацював, я
написав застосунок мовою C.
Слід налаштувати використані лінії GPIO. Це можна зробити функцією lcdInit з такими
параметрами:
fd3
= lcdInit (2,16,4,6,11,3,2,0,7,0,0,0,0);
Параметри – це по черзі:
2 – кількість рядків дисплея
16 – кількість символів у рядку
4 – ширина
інтерфейсу даних
6 – номер виводу wiringPi для RS
11 – вивід для EN
3 – вивід
для D0
2 – вивід
для D1
0 – вивід для D2
7 – вивід для D3
решта нулів – це наступні D4–D7. fd3 – це
покажчик на дисплей, використовуваний у наступних функціях. У конфігурації цього дисплея слід звернути увагу на
позначення
окремих ліній GPIO. У розділі про порт GPIO позначення ліній відповідали документації Raspberry Pi.
Позначення для програмування з використанням бібліотеки wiringPi, однак, інші. Виконавши команду gpio readall,
отримаємо таблицю, де
в наступних стовпцях розміщено:
– номер виводу для бібліотеки wiringPi
– номер виводу
згідно з документацією Raspberry Pi
– функцію даного порту
– логічне значення на вході
Рис. Логічні стани на роз'ємах P1 та P5.
Наступні функції:
lcdPosition
(fd3, 0, 0);
Ця функція встановлює курсор для дисплея fd3 у рядку 0 на позицію 0.
lcdPuts
(fd3, " якийсь текст ");
Ця функція виводить текст з лапок на дисплеї fd3. Наведені вище функції
здатні вивести текст на дисплеї.
Для обслуговування шини I2C використано описану раніше бібліотеку wiringPi. Її встановлення та
налаштування описано в іншому документі – керування модулем контролера світлодіодів RGB.
Після правильного
з'єднання frontpanel і виконання команди сканування
інтерфейсу I2C
sudo
i2cdetect -y 1
маємо отримати щось таке:
Рис. Результат дії функції i2cdetect.
Модуль дистанційного керування описано в іншій статті.
Незабаром буде продовження
Описаний frontpanel постав від схеми, через друковану плату, аж до програмного забезпечення обслуги. Саме в такому обсязі ми реалізуємо електронні проєкти для клієнтів – разом із добором дисплея, проєктом друкованої плати та корпусом.