Ми з другом хочемо розробити універсальний дистанційний контролер, як цей , для цілей навчання. Що ми хочемо зробити в основному - це зберігати та відтворювати інфрачервоні імпульси.
Ми хочемо виявити сигнали 36 кГц, 38 кГц і 40 кГц. Сигнал 40 кГц матиме період 25 .
Ми хочемо використовувати 8-бітний мікроконтроллер PIC, тому що зараз ми вибрали PIC16F616, який буде працювати на високошвидкісному кристалічному генераторі 20 МГц. У нас є два варіанти:
- Використовуйте
Interrupt On Change
модуль. - Використовуйте режим захоплення модуля CCP.
Перший варіант буде наступним:
Припустимо , регістр встановлюється як: unsigned char _10_us = 0;
. Цей реєстр матиме час. Модуль TMR2 з регістром періоду встановлюється для створення переривання кожні 10 . Коли станеться переривання, воно збільшить регістр і вийде. Це дасть максимальний час 2,55 мсек. Якщо потрібно більше вимірювання часу, додаткові регістри, такі як можна визначити та збільшити за потребою._10_us
_1_ms
Тепер, кожного разу, коли генерується переривання будь-яким типом змін (від високого до низького або від низького до високого), програма відзначатиме поточний час, тобто значення _10_us
регістру. Через деякий час, коли буде сформовано наступне переривання, програма відніме збережене значення з _10_us
реєстру, і, таким чином, тепер буде час, який приймається тим часом, з одиницею 10 секунд.
Цей варіант змушує мене почухати голову; Переривання TMR2 відбуватиметься приблизно кожні 50 інструкцій. Порушення роботи триватиме близько 20 інструкцій. Мені залишається 30 інструкцій для обчислення та збереження періоду в масив. Чи буде цей метод спрацювати?
Другий варіант буде наступним:
Налаштуйте режим захоплення модуля CCP так, щоб він генерував переривання, коли на штифті CCP1 відбувається подія (від високої до низької). У режимі переривання він встановить прапор, щоб завдання в програмі могли обчислити (якщо потрібно) і зберегти значення CCPR1H (ймовірно, не знадобиться) та CCPR1L. Тоді ми змінимо конфігурацію режиму зйомки так, що вона спровокує переривання при появі краю від низького до високого. І тоді буде чекати наступної події. Я не можу оцінити ефективність цього методу, оскільки я його ніколи не використовував.
Ще один варіант?
Ми можемо використовувати ІЧ інфрачервоний демодулятор, такий як серія TSOP17xx . Це повністю вирішило б нашу проблему. Однак деякі питання приходять на думку.
Наша вимога до відстані читання не велика; 1 метр (~ 3 фути). Якщо ми виберемо TSOP1738, який повинен працювати в 38 кГц , наскільки добре це буде працювати з сигналами 36 кГц і 40 кГц?
Сторінка 4 таблиці даних серії TSOP17xx показує графік "Залежність частоти відповідальності". Наскільки ми зрозуміли;
- 40 кГц, що становить ~ 1,053 38 кГц, дасть відносну чутливість ~ 0,6.
- 36 кГц, що становить ~ 0,95 38 кГц, дасть відносну чутливість ~ 0,65.
Що означають ці значення? Чи можемо ми використовувати TSOP1738 і добре?