By decoding the commands sent by a direct-broadcast satellite receiver that uses the DISEqC (digital-satellite-equipment-control) protocol, you can troubleshoot the commands or simply listen in. Eutelsat Corp offers the DISEqC protocol. The technique uses only the coaxial cable between the receiver and the dish to send commands for actions such as changing the low-noise-block frequency range or switching between dishes for multisatellite reception. The DISEqC protocol specifies a bit time of 1.5 msec and bit values as shown in Figure 1, the timing diagram of bit modulation on the coaxial cable. The signal's ac portion is a 22-kHz burst whose amplitude ranges from 300 to 600 mV. A voltage-doubler circuit detects the 22-kHz portion, producing a pulse stream in which constant-voltage pulses having amplitudes of 0.6 to 1.2 V replace the 22-kHz bursts.
Figure 1. | The DISEqC protocol specifies a bit time of 1.5 msec and these bit values. |
Decoding this bit stream into ASCII hex values is an ideal job for a low-cost 8-bit microcontroller. Using a microcontroller with onboard flash memory, such as the µPD78F9418A, eliminates the need for external memory. The only external components are a few discrete devices for the signal detector and the coaxial-cable loop-through (Figure 2). You can add an RS-232 driver if you want to display the ASCII codes on a laptop computer via HyperTerminal. You can also use the µPD78F9418A's onboard LCD controller to display the codes on a dedicated display.
Figure 2. | This circuit enables the microcontroller to decode the DISEqC-protocol bit stream. |
One of the µPD78F9418A microcontroller's 10-bit A/D converters performs pulse detection and acts as a simple timing device. Using a reference voltage of 5 V, the converter provides approximately 4.88 mV per step. An A/D-converter conversion value greater than 120 counts (585 mV) represents a valid pulse. Set the A/D converter's conversion time to 28.8 µsec and wait to detect a pulse edge by reading the A/D converter until its value exceeds 120 and then perform a loop while doing analog-to-digital conversions. If the loop count reaches 24 with ADC values greater than 120, the bit is a zero. If the pulse has gone away, the bit is a one. Any extra delay from executing instructions in the loop has little effect, because the bit windows leave plenty of margin.