Theory of Operation
Before Tibbit #26 can begin normal operation, it must be properly reset and initialized.
Once initialized, the Tibbit is controlled through a number of registers. Registers are accessed through SPI using SPI read and write transactions.
This module supports two commands, which are issued through the command register: receive (record) IR data and transmit (reproduce) IR data.
Tibbit #26 looks at IR data as a sequence of "IR light ON" and "IR light OFF" times. No intelligent data analysis is performed. When recording an incoming IR signal, Tibbit #26 simply measures ON and OFF times and outputs the data as an array of measured ON and OFF lengths. Measured lengths represent a demodulated IR signal (i.e., the signal without the carrier frequency). ON and OFF time lengths are expressed as the number of clock periods of the modulation frequency.
Modulated and Unmodulated Incoming IR Streams
Tibbit #26 can work with IR receivers that output IR data intact, including the modulation frequency. The Tibbit also works with receivers that filter the carrier out. Option bit 4 in the command register determines what kind of incoming IR stream is expected.
If the Tibbit is set to record a modulated incoming IR stream, then it will demodulate the incoming signal. The modulation frequency will be filtered out and measured (with averaging), and the corresponding divider value will be stored in the carrier divider registers. The relationship between the divider value and the modulation frequency is as follows:
modulation_frq = 12Mhz / divider_value
If Tibbit #26 is set to record a demodulated incoming RX stream, it will expect to work with data that doesn't contain the carrier frequency. In this case, your program must preset the carrier divider registers with the value corresponding to the expected modulation frequency before starting the recording.
In both cases, ON and OFF period lengths in the information-bearing (demodulated) signal are measured in periods of the carrier frequency, and the resulting data is stored in the RX data buffer. The length of the recorded data (in bytes) can be obtained from the RX length registers.
After the Tibbit receives the command to record the data, it waits for the first "IR light ON" state. The end of data is detected using a timeout method. After the recording ends, bit 0 of the status register is set to 1. Therefore, your program can poll this bit to determine when the data is ready (and if anything was received).
IR receivers vary in how they output "IR light ON" (detected) and "IR light OFF" (not detected) states. Many receivers output HIGH when the IR light is OFF and LOW when it is ON. We refer to such output lines as "normal."
Some receivers do this in reverse, meaning that LOW corresponds to the absence of the IR light, and HIGH corresponds to the presence of the IR light. We refer to such output lines as "inverted." Option bit 2 of the command register allows you to set the type of the attached IR receiver.
When storing the recorded IR signal, remember to preserve not only the data from the RX buffer (in the length determined by the RX length registers), but also the divider value from the carrier divider registers.
Outgoing IR Streams
Your program must prepare the data for the output IR stream in the TX data buffer. The format of the data is the same as with the RX data buffer. Note that the RX and TX buffers are physically separate, so if you want to immediately play back the signal you've just recorded, you still need to copy the data from the RX buffer into the TX buffer.
Prior to sending the "start transmitting data" command, your program must preset the carrier divider registers. As explained above, the information about the modulation frequency should be stored along with the IR data itself.
IR emitters vary in the polarity of their control signal. Many emitters turn their IR LED on when the control line is LOW. We refer to such control lines as "normal."
Some emitters turn their IR LED on when the control line is HIGH. We call this an inverted control line. Option bit 3 of the command register allows you to set the type of the attached IR emitter.