Блок ДУ на 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) і виконується перехід на підпрограму виконання дій;
  • підпрограми виконання дій (переключення каналів і регулювання гучності) працюють за принципом лічильника і далі передають на підпрограми табличної конвертації (перетворення коду в позиційний). Далі отриманий код завантажується в регістри портів;   
  • реалізована можливість тихого переключення каналів (перед переключенням гучність вимикається, потім відновлюється до попереднього значення);
  • після виконання команди управління передається на підпрограму очікування нової посилки від пульта і т.д…

Фото готового модуля:

Прикреплені файли:

Top