Блок ДУ на PIC для радянського телевізора
Радянські телевізори 2УСЦТ і 3УСЦТ можна і сьогодні побачити у багатьох домах. Якість їх зборки не викликає сумнівів. Одне "НО" - не всі вони обладнані системами дистанційного управління, хоча у багатьох з них існують технологічні відділення (оскільки), що дозволяють встановити модуль ІК-приймача. Я став власником саме такого телевізора й почав замислюватися про самостійне виготовлення ІК-комплекту для дистанційного управління.
Отже, переді мною постали 3 основні питання:
- якими функціями необхідно керувати
- які команди необхідно подавати
- на якій базі збирати пульт і приймач
Для себе я визначив, що цілком розумним і достатнім буде управління гучністю (більше, менше, вкл, викл) і переключенням каналів (вперед, назад). Пульт я вирішив використати від старого відеомагнітофона – наявність невеликої кількості кнопок відповідала моїм запитам. Ну а ІК-модуль я вирішив реалізувати на PIC16F628.
Отже, я вирішив прив’язати наступні команди до кнопок пульта:
Схема зібраного приймального модуля вийшла такою:
Про схему:
- пристрій живиться від стабілізованого джерела +5В;
- використовується зовнішній кварц на 4 МГц
- як ІК-детектор використовується збірка від старого DVD (на жаль, не знаю назви), для покращення чутливості та збільшення дальності прийому вона підключається до одного з аналогових входів компаратора, чутливість приймача можна регулювати відповідним резистором, підключеним до другого входу компаратора;
- переключення каналів здійснюється подачею логічної «1» на один з портів RB0-RB7 (що якраз відповідає кількості каналів на моєму телевізорі), діоди блокують вхідні струми по закритих портах;
- регулювання гучності здійснюється шляхом зміни напруги на порту RA2 (він є виходом регульованого джерела напруги VREF)
Підключення ІК-модуля до селектора вибору каналів та блоку управління:
Тепер найскладніше: необхідно було зрозуміти яким чином відбувається передача пакета від пульта до модуля і з’ясувати коди для кожної задіяної кнопки. Для цієї мети я вирішив використати зібраний модуль.
Перше, що я з’ясував, у відсутності ІК-сигналу на виході ІК-приймача присутня лог. «0». А при появі – лог. «1». Отже, сигнал інвертується. Далі необхідно було підрахувати кількість імпульсів, їх тривалість, а також тривалість пауз між ними. Отже, для кожної задіяної на пульті кнопки. Для цього була написана програма, в якій підрахунок тривалостей фронтів і пауз здійснювався дискретно, тобто за рахунок періодичних вибірок (зрозуміло, чим більше вибірок, тим точніший підрахунок).
Інтервал вибірок має бути таким, щоб їх кількість по низькому фронту і по високому фронту не перевищувала 255 – оскільки для запису вибірок використовується один 8-бітний регістр пам’яті. Далі ці дані були записані у флеш пам’ять піка і прочитані на програматорі.
Було встановлено, що перший низький фронт і перший високий фронт мають однакову тривалість для всіх команд (кнопок). Їх можна вважати «запускаючими». Вимірявши їх тривалість, можна вважати, що посилка від пульта достовірно і слід далі продовжити обробку пакета.
Далі слід інформаційні посилки, причому їх верхній фронт змінюється, інтервал між ними залишається незмінним.
Припустимо, що довгий верхній фронт приймемо за 1 біт, а короткий – за 0, тоді виходить:
Таким чином, у кожній команді (кнопки) передається по 2 байти інформації, причому старший байт для всіх команд однаковий, а молодший – змінюється:
У процесі прийому та обробки пакета старший байт можна просто ігнорувати.
На основі отриманих даних мною була написана та налагоджена програма, яка приймає посилки ІК-пульта, обробляє їх і виконує переключення каналів і регулювання гучності телевізора.
Тепер про програму:
- для аналізу та обробки пакета виділено 8 байт оперативної пам’яті, до яких здійснюється непряма адресація;
- підрахунок часу кожної посилки (фронтів) відбувається в режимі реального часу. Аналіз тривалості фронту відбувається в інтервалах (часу на це більш ніж достатньо). Тут же формується байт шляхом зсуву записаного раніше біта.
- після успішного прийому та обробки команди загоряється світлодіод;
- в залежності від того, яка команда була прийнята, відбувається порівняння молодшого байта з установленими значеннями (213, 222, 237,238, 239) і виконується перехід на підпрограму виконання дій;
- підпрограми виконання дій (переключення каналів і регулювання гучності) працюють за принципом лічильника і далі передають на підпрограми табличної конвертації (перетворення коду в позиційний). Далі отриманий код завантажується в регістри портів;
- реалізована можливість тихого переключення каналів (перед переключенням гучність вимикається, потім відновлюється до попереднього значення);
- після виконання команди управління передається на підпрограму очікування нової посилки від пульта і т.д…
Фото готового модуля:
Прикреплені файли:
- pdu.asm (7 Кб)