В HTML      В PDF
микроэлектроника, микросхема, транзистор, диод, микроконтроллер, память, msp430, Atmel, Maxim, LCD, hd44780, t6963, sed1335, avr, mega128
Предприятия Компоненты Документация Применения Статьи Новости

 
Пересюхтюмя


13-я Международная выставка электронных компонентов и комплектующих для электронной промышленности





Выставка Передовые Технологии Автоматизации





Главная страница > Применение > Микроконтроллеров > MSP430
Пересюхтюмя


13-я Международная выставка электронных компонентов и комплектующих для электронной промышленности





Выставка Передовые Технологии Автоматизации


Декодирование ТВ ИК ДУ- сигналов используя Таймер_А3

Резюме

В данном примере применения описывается использование модуля таймера Timer_A3 для декодирования сигналов телевизионных инфракрасных (ИК) систем дистанционного управления стандартов RC5 и SIRC. Декодер, описанный в этом документе, формирует прерывание и работает в фоновом режиме, используя специфические характеристики модуля таймера Timer_A3. При этом используется только очень малая часть ресурсов вычислительного ядра микроконтроллера MSP430. Специфическая аппаратная возможность побитного защелкивания таймера Timer_A3 позволяет декодировать принятый ИК сигнал в реальном масштабе времени, независимо и асинхронно с вычислительным ядром. Активность вычислительного ядра и, соответственно, потребление при этом остаются на минимальном уровне. Способность модуля Timer_A3 проводить декодирование данных позволяет выполнять при необходимости одновременно и другие задачи. Описываемый в данном примере применения декодер ориентирован для реализации на основе микроконтроллеров MSP430x11x (1) и MSP430x12x, но также может быть легко реализован и на любом другом микроконтроллере семейства MSP430, содержащем модуль таймера Timer_A3.

Введение

Дополнительная возможность декодирования устройствами на основе микроконтроллеров семейства MSP430 сигналов телевизионных ИК систем дистанционного управления - наиболее дешевый способ реализации беспроводного ИК канала связи. Способность декодировать ИК сигналы может быть добавлена в любое устройство на базе микроконтроллера MSP430x11x (1), при этом используется только один его таймер захвата/сравнения Timer_A3 и 200 байт памяти программы, плюс необходим дополнительный дешевый внешний ИК приемник. На рисунке 1 можно увидеть демонстрационную схему ИК декодера. Для демонстрации работы декодера поступившие на линию Р1.0 порта ввода-вывода последовательные пакеты данных передаются в персональный компьютер, а так же при принятии сигнала "увеличение канала" ("channel +") зажигается светодиод.


Рисунок 1. Демонстрационная схема ИК декодера

В RC5 и SIRC протоколах передача последовательных пакетов данных осуществляется путем модуляции ИК несущей сигналом с частотой 40 кГц. Логическая единица передается ИК импульсами с частотой 40 кГц, а отсутствие этих импульсов интерпретируется как передача нуля. Модуляция ИК сигнала частотой 40 кГц используется для обеспечения возможности фильтрации естественных шумов, возникающих при работе флуоресцентных ламп дневного света. Наиболее часто используется частота модуляции 40 кГц, но в некоторых других системах используется другая частота модуляции в диапазоне от 32 до 64 кГц. Для декодирования сигналов стандартов RC5 или SIRC сначала должна быть осуществлена демодуляция 40 кГц сигналов, а только потом - демодуляция информационного сигнала. В описываемом устройстве для преобразования ИК сигнала в электрический сигнал и усиления, фильтрации и демодулирования этого сигнала используется простейший трехвыводной 3 В ИК датчик TSOP1840SS3V производства компании VISHAY. На выходе этого ИК приемника принятый сигнал присутствует в виде логического сигнала, соответствующего переданному последовательному пакету данных. При отсутствии ИК сигнала с частотой модуляции 40 кГц на выходе ИК приемника присутствует высокий логический сигнал, а при наличии ИК сигнала с частотой модуляции 40 кГц на выходе присутствует сигнал с низким логическим выходом. Таким образом видно, что кроме демодуляции, ИК приемник осуществляет инверсию принятого сигнала. Сигнал с выхода ИК приемника подается непосредственно на вход порта Р1.0 микроконтроллера MSP430x11x (1). Программно линия порта P1.2 настроена на работу в режиме захвата/сравнения таймера Timer_A3. Использование функции захвата/сравнения таймера Timer_A3 позволяет существенно упростить декодирование принятых данных. CCR1 выполняет прием и передачу данных аппаратно без использования вычислительного ядра и других системных ресурсов операционной системы микроконтроллера. Для передачи принятых данных в персональный компьютер на базе регистра захвата/сравнения CCR0 реализован UART, который использует в качестве выхода линию порта P1.1.

Выбор рабочей частоты

Скорость передачи информационных пакетов в системах RC5 и SIRC относительно низкая (< 1 кбит / с) по сравнению с рабочей частотой MSP430. В демонстрационной схеме используется внешний кварцевый резонатор с частотой 32 768 Гц для формирования вспомогательных синхроимпульсов (ACLK) и тактирования модуля таймера Timer_A3. При такой частоте синхронизации Timer_A3 имеет разрешающую способность 30.5 мкс - более чем достаточная точность для декодирования сигналов стандартов RC5 или SIRC без ошибок. Встроенный задающий генератор с цифровой системой управления (DCO) вырабатывает основные синхроимпульсы (MCLK) с частотой порядка 1 МГц. Так как для ИК декодера на основе таймера Timer_A3 используется свой отдельный 32 768 Гц кварцевый резонатор, то быстродействие вычислительного ядра не является критическим параметром. Вычислительное ядро должно работать на такой частоте, которая позволит выполнять все требующиеся от него задачи. Использование медленного синхросигнала ACLK для ИК декодера и более высокочастотного DCO для тактирования вычислительного ядра позволяет совместить низкое потребление в дежурном режиме и высокое быстродействие при обработке пакетов. Если не синхронизировать MSP430 ЦП от низкочастотного часового кварцевого резонатора, то потребуется использовать более высокую рабочую частоту, что приведет к увеличению потребления. Вычислительное ядро должно работать на высокой частоте но в течение коротких интервалов времени, что и позволит найти оптимальное решение между быстродействием и потреблением.

Демонстрационная схема

Демонстрационная схема питается через 3.3 В стабилизатор с низким падением напряжения TPS76033 от последовательного порта персонального компьютера. Только один маломощный светодиод используется для индикации приема команды "увеличение канала" ("channel +"). Передача данных от линии порта P1.1 осуществляется через инвертор SN74AHC1G04 производства компании TI. Если необходимо реализовать полный RS232 интерфейс, то можно использовать низкопотребляющий 3 В преобразователь уровней MAX3221. сразу после сброса запускается 32 768 Гц автогенератор, которому не требуются даже внешние конденсаторы сдвига фазы, так как они уже встроены в MSP430.

Программа декодирования

Данный документ содержит два примера программы. Программа "11x1_rc5.s43" предназначена для декодирования сигналов RC5 протокола, а "11x1_sirc.s43" - для декодирования сигналов SIRC протокола. Основные части обеих программ небольшие и работают идентично. Только фоновое программное обеспечение ИК декодера уникально.

Mainloop
    call    #IR_Ready   ; Вызов подпрограммы подготовки ИК декодера
    bis.w   #LPM3,SR    ; Переход в режим LPM3, остановка, снижение потребления
    call    #TXIR_2_PC  ; Передатчик принял команду
    call    #LED_Disp   ; Проверка на соответствие коду кнопки "Channel +"
    jmp     Mainloop    ;

ИК декодер активизируется из основной части путем запуска подпрограммы IR_Ready. Затем в основной программе идет установка регистра состояния (SR), в результате чего микроконтроллер переходит в третий режим пониженного потребления (LPM3). В LPM3 режиме вычислительное ядро и DCO остановлены, но Timer_A3 работает от ACLK с полностью активной логикой прерываний регистра CCR1. Даже, несмотря на то, что система находится в LPM3 режиме, Timer_A3 декодера будет работать в фоновом режиме и вырабатывать управляющие прерывания. Архитектура MSP430 автоматически активизирует вычислительное ядро и DCO после обнаружения любого разрешенного прерывания. DCO запускается и выходит в рабочий режим менее, чем за 6 мкс. Это позволяет эффективно обрабатывать короткие пакетные события. Кроме того, после того, как произошло разрешенное прерывание, система автоматически сохраняет оригинальное состояние регистра SR в стеке и сбрасывает в нем биты активизации режимов пониженного потребления. После того, как программа обработки прерывания была обработана, команда reti (выход из прерывания) восстановит сохраненное значение регистра SR. Если это сохраненное в стеке значение не изменялось при выполнении подпрограммы обработки прерывания, то система вернется в то состояние, которое было до прерывания.

В данном примере применения после того, как оканчивается прием ИК пакета при помощи фоновой подпрограммы, прерывание от CCR1 возвращает вычислительное ядро в активный режим путем сброса битов активизации LPM3 режима в сохраненном значении регистра SR. Это очень удобный способ управления работой основной программы с обработкой событий по прерыванию. Полученный пакет ИК данных преобразуется в четыре двоичные кодовые комбинации в ASCII коде и передается в персональный компьютер по UART со скоростью 2400 бодов в формате 8N1 при помощи подпрограммы TXIR_2_PC. Четырем ASCII кодовым комбинациям предшествуют кодовые комбинации перевода корретки и перехода на новую строку. Активная стадия основной программы заканчивается вызовом подпрограммы LED_Disp. Если принята команда увеличения канала "channel +", то подпрограмма LED_Disp зажжет светодиод, подключенный к линии порта P1.0. После этого микроконтроллер переходит в режим LPM3, ожидая следующего пакета данных.

Протокол RC5

RC5 протокол основан на передаче данных при помощи манчестерского кода. Манчестерский код уникален тем, что данные передаются изменением состояния в середине бита. Логическая 1 интерпретируется MSP430 при переходе поступившего от ИК приемника инвертированного сигнала в середине бита из высокого состояния в низкое, а 0 - при переходе из низкого состояния в высокое. ИК пакет в стандарте RC5 состоит из 14 бит: два стартовых бита (S1, S0), один служебный бит (C), пять адресных бит (A4 - A0) и код команды из шести бит (C5 - C0). Пакет передается старшим битом вперед, т.е. первыми будут приняты стартовые биты. На рисунке 2 показан RC5 пакет на входе MSP430 после демодуляции и инверсии его ИК приемником. Стартовые биты всегда имеют значение логической единицы. Контрольный бит изменяет свое значение при каждом нажатии кнопки на пульте дистанционного управления. Пять адресных бит предназначены для идентификации 32 различных типов устройств. Шесть командных бит предназначены для передачи 64 команд управления. Длительность бита в стандарте RC5 довольно высокая - 1.78 мс, причем половину этого периода передается высокий сигнал, а другую половину - низкий сигнал. Длительность всего 14 битного пакета данных равна приблизительно 25 мс.


Рисунок 2. Инвертированный пакет данных стандарта RC5, поступающий на вход MSP430

Программа 11x1_rc5.243

Программа 11x1_RC5.s43 использует два регистра. Регистр IRData (R6) принимает ИК пакеты, а регистр IRBit (R7) используется как временный счетчик, отслеживающий биты ИК данных как они были получены. Выбор регистров R6 и R7 был сделан произвольно, вместо них могут использоваться любые другие регистры или ячейки памяти ОЗУ. В программе определены две константы: Bit_50 - константа, соответствующая половине длительности бита, и Bit_75 - константа, соответствующая трем четвертям длительности бита. Поскольку для формирования синхросигнала ACLK используется кварцевый резонатор с частотой 32 768 Гц, то константы BIT_50 и Bit_75 будут иметь следующие значения:

    Bit_50 equ 29  ; 890 мкс при частоте ACLK 32768 Гц
    Bit_75 equ 44  ; 1348 мкс при частоте ACLK 32768 Гц
    

Подпрограмма IR_Ready позволяет CCR1 захватывать счетчик таймера Timer_A3 (TAR) и запрашивать прерывание по срезам сигнала на выходе ИК приемника. TAR захватывается по спадающему фронту и автоматически сохраняется в CCR1, при этом происходит формирование запроса на прерывание TA1_ISR. В Подпрограмма обработки прерывания TA1_ISR определяет было ли вызвано прерывание захватом или сравнением. Если прерывание было вызвано захватом, то BIT_75 (3/4 длины бита) добавляется непосредственно в CCR1, который хранит точное время спадающего фронта импульса на выходе ИК приемника в середине перового бита. Так как захват данных произошел в середине первого бита, то добавление 3/4 длительности бита приведет к смещению CCR1 в середину первой половины следующего бита. Теперь CCR1 настроен на работу в режиме сравнения данных. Следующее прерывание от CCR1 теперь установлено в середине первой половины второго стартового бита. В соответствии с настройками, в режиме сравнения CCR1 происходит сохранение присутствующего на входе P1.2 логического уровня в защелке регистра захвата/сравнения (SCCI). SCCI обеспечивает очень важную аппаратную роль CCR1, позволяющую запоминать принятый логический уровень на входе P1.2 по синхросигналам, выработанным таймером Timer_A3 независимо от вычислительного ядра. В нашем примере применения вычислительное ядро практически бездействует, в то время как ИК декодер работает. Даже при отключенном вычислительном ядре логический уровень на входе P1.2 будет зафиксирован и сохранен в SCCI в моменты, когда CCR1 выполняет сравнение. Прикладная программа не считывает данные непосредственно со входа P1.2; вместо этого происходит считывание защелкнутых в SCCI данных. Программа постепенно возвратит полученные от SCCI данные и сохранит их в регистре памяти IRData.

    RX_Cont bit.w *SCCI, *CCTL1; Carry = Data бит в SCCI
    rlc.w IRData; Carry -> IRData
    

После возвращения каждого бита CCR1 перестраивается на захват и по нарастающему и по падающему фронту. Следующий захват данных произойдет точно в середине битового периода, что приведет к автоматической синхронизации с принимаемым потоком данных от ИК приемника. Для того чтобы гарантировать правильный прием данных, прерывание от CCR2 также разрешено и в него загружено значение половины длительности бита, сохраненного в CCR1. Если пакет принимается правильно, то следующее изменение принимаемого бита должно произойти через четверть длительности периода бита. При правильном приеме подпрограмма CCR1_ISR обработки прерывания от CCR1 производит сброс запроса на прерывание от CCR2. Если CCR1_ISR не отследит прерывание, то подпрограмма CCR2_ISR обработки прерывания от CCR2 сбросит декодер, предположив ошибку в принимаемом пакете. В нормальном режиме баланс отрицательных и положительных битов сохраняется, и принимаемые данные сохраняются в регистре IRData.

Протокол SIRC

В протоколе SIRC данные кодируются длительностью пакета. Длительность бита определяет его логическое значение. Стартовый бит имеет длительность 2.4 мс, логический ноль – 600 мкс, а логическая единица - 1.2 мс. Также все информационные биты, за исключением стартового бита, содержат 600 мкс синхроимпульс. Поэтому логический ноль передается за 1200 мкс, а логическая единица - за 18000 мкс. Полный пакет в протоколе SIRC состоит из стартового бита и 12 информационных бит. Эти 12 информационных бит состоят из семи-битного кода команды (C6 к C0) и пяти-битного кода устройства (D4 к D0). Передача данных в протоколе SIRC ведется младшим битом вперед. Первым после стартового бита принимается бит C0.

На рисунке 3 показан инвертированный ИК приемником пакет данных SIRC протокола на входе MSP430.


Рисунок 3. Инвертированный пакет данных SIRC протокола на входе MSP430

Программа 11x1_SRC.s43

В программе 11x1_SIRC.s43 задействовано три регистра: IRData (R6) принимает данные, IRBit (R7) используется для хранения данных в том виде, в котором они приняты, а IRlength (R8) используется для хранения длительности принятых информационных бит. Также определены три константы: IR_Mid - соответствует половине длительности бита относительно периода таймера Timer_A3, IR_Start - соответствует длительности приблизительно 2.3 мс (минимальная длительность правильного стартового бита), и IR_Start2 - соответствует приблизительно 2.5 мс (максимальная длительность правильного стартового бита).

    IR_Mid equ 49; 1500 мкс при частоте ACLK 32768 Гц 
    IR_Start equ 75; 2300 мкс при частоте ACLK 32768 Гц 
    IR_Start2 equ 82; 2500 мкс при частоте ACLK 32768 Гц 
    

Подпрограмма IR_Ready позволяет CCR1 захватывать по спадающему фронту данные от ИК приемника. Это позволяет MSP430 находиться в режиме пониженного потребления LPM3, при этом только ACLK и Timer_A3 остаются активными. По первому спадающему фронту, указывающему на начало стартового бита, модуль CCR1 осуществляет захват содержимого TAR и запрашивает прерывание TA1_ISR. Состояние TAR захватывается аппаратно, вызова подпрограмм обработки прерывания при этом не требуется. После захвата CCR1 программно сохраняется в регистре IRLength. После первого спадающего фронта осуществляется изменение фронта захвата CCR1 на нарастающий фронт, что позволит отследить конец стартового бита. Длительность информационного бита вычисляется путем вычитания из содержимого регистра TAR, сохраненного в регистре CCR1, предыдущего значения IRLength. Если полученная длительность не лежит в пределах от 2.3 мс до 2.5 мс, то программа принимает решение о ложном захвате стартового бита. Правильный стартовый бит должен иметь длительность 2.4 мс. В подпрограмме обработки прерывания TA1_ISR IRBit используется для считывания в обратном порядке 12 информационных бит в том виде, в котором они получены. Каждый информационный бит рассчитывается путем сравнения его длительности с константой IR_Mid. Константа IR_Mid соответствует длительности 1500 мкс, которая является средним значением между длительностями бита информационной единицы и информационного нуля. Если длительность принятого бита больше IR_Mid, то принимается решение о том, что принята единица, а если меньше - то ноль. Аппаратная защелка модуля Timer_A3 гарантирует, что подпрограмма обработки прерывания считает правильное значение временного интервала. Программа не считывает непосредственно содержимое регистра модуля Timer_A3, а считывает захваченное в CCR1 значение таймера. Также для временного хранения содержимого CCR1 используется программный стек.

    IR_ST_Test
        push.w &CCR1          ; Сохранение содержимого CCR1 в стеке
        sub.w IRlength,0(SP)  ; Последний захваченный временной интервал
    IR_Bit
        cmp.w #IR_Mid,0(SP)   ; C=1 если IR_RXed бит = 1
    IR_Shift
        rrc.w IRData          ; Carry ->IRData
    

Аппаратная защелка CCR1 модуля таймера Timer_A3 позволяет одновременно с ИК декодером выполняться другим программам обработки событий в реальном времени. Подпрограмма ИК декодера выполняется в фоновом режиме. После проверки приема каждого бита данные помещаются в регистр IRData.

Программа UART

Функция UART реализована при помощи модуля захвата/сравнения CCR0 и использует два регистра: RXTXData (R4) и BitCnt (R5). Полное описание функционирования UART можно найти в других примерах применения. Отслеживание принятых данных при помощи персонального компьютера

Для принятия пакетов данных, переданных описанным демонстрационным устройством, может быть использована любая терминальная программа. Содержимое 16- разрядного регистра IRData передается в формате с правым выравниванием в виде четырех ASCII символов. Программа терминала должна быть настроена на прием данных в формате 8N1 со скоростью 2400 бод.

Пример программы:

  216Kb Исходный фаил
  RUS Приложение А: программа 11x1_SIRC.s43.txt, Приложение В: программа 11x1_RC5.s43.txt
  9Kb Фаилы программ