TASCAM Sound Recorder (Part 3)

Part 1, 2, 3, 4

As per product reviews on the web and as per my personal experience, the DR-40 picks up noises generated by the handling of the device. One way to prevent such noises consists in using a wired remote controller namely the Tascam RC-10. The key component from this option is a compact flat box featuring 10 buttons. It outputs a coded IR beam for controlling TASCAM devices.

However, as the DR-40 does not feature an IR receiver port so that TASCAM (actually TEAC) designed a dock for the remote controller. This dock is very likely fitted with an IR receiver which converts the coded IR beam into a TTL compatible signal. This TTL signal is routed to the DR-40 via a 3 wires cable which plugs to the bottom of the recorder with a 2.5 stereo jack. The dock itself  features a clip at the back which is handy for attaching it to your belt of your trousers or to the pocket of your reporter vest.

Although the cable is 3m long, this length might not suffice for reaching the recorder. Thus the idea of taking control of the DR-40 through a custom remote controller. And the good news is that this is easily manageable as the remote controller talks to the device using an asynchronous protocol. As mentioned above, the connecting hardware consists in a stereo jack of 2.5 mm where:

  • the tip is for the signal from the controller to the device
  • the ring is for the +3.3 V from the device (used to power the controller)
  • the sleeve is for the GND

Next is a description of the data exchanged between the device and the controller:

Three button states are interpreted:

  • button press
  • button down (for more than 100 ms)
  • button up

To each button corresponds a function

  • Pause/Stop
  • Play
  • Record
  • Forward
  • Back
  • Mark
  • F1
  • F2
  • F3 (Input volume +)
  • F4 (Input volume -)

On each change of state the RC-10 sends a byte which format is as follows:

 ----- ----- ----- ----- ----- ----- ----- ----- 
|  7  |  6  |  5  |  4  |  3  |  2  |  1  |  0  |
 ----- ----- ----- ----- ----- ----- ----- ----- 
|  X  | BS  | BS  |  F  |  F  |  F  |  F  |  F  |
 ----- ----- ----- ----- ----- ----- ----- -----

Where :

  • BS stands for button state
  • F stands for function

With:

Button states

 
 ----- ----- ----- ----- ----- ----- ----- ----- 
|  7  |  6  |  5  |  4  |  3  |  2  |  1  |  0  |
 ----- ----- ----- ----- ----- ----- ----- ----- 
|  X  |  1  |  0  |  X  |  X  |  X  |  X  |  X  | Button down
|  X  |  1  |  1  |  X  |  X  |  X  |  X  |  X  | Button down for more than 100ms, 
|  X  |  0  |  0  |  X  |  X  |  X  |  X  |  X  | Button up
 ----- ----- ----- ----- ----- ----- ----- -----

Functions

 
 ----- ----- ----- ----- ----- ----- ----- ----- 
|  7  |  6  |  5  |  4  |  3  |  2  |  1  |  0  |
 ----- ----- ----- ----- ----- ----- ----- ----- 
|  X  |  X  |  0  |  0  |  1  |  0  |  0  |  0  | Pause/Stop
|  X  |  X  |  0  |  0  |  1  |  0  |  0  |  1  | Play
|  X  |  X  |  0  |  0  |  1  |  0  |  1  |  1  | Record
|  X  |  X  |  0  |  0  |  1  |  1  |  1  |  0  | Forward
|  X  |  X  |  0  |  0  |  1  |  1  |  1  |  1  | Back
|  X  |  X  |  1  |  1  |  1  |  0  |  0  |  0  | Mark
|  X  |  X  |  1  |  1  |  1  |  1  |  0  |  0  | F1
|  X  |  X  |  1  |  1  |  1  |  1  |  0  |  1  | F2
|  X  |  X  |  1  |  1  |  1  |  1  |  1  |  0  | F3
|  X  |  X  |  1  |  1  |  1  |  1  |  1  |  1  | F4
 ----- ----- ----- ----- ----- ----- ----- -----

Please note that  unlike the DR-40 itself, running some functions require doubled actions: to stop a play back, run the stop command twice. The first one will pause the playback, the second one will stop it. To record sounds, run the record command twice: the first one presets the recording and the second one launches the recording itself.

Driving the DR-40 from a standard Arduino (+5V) is quite simple and requires few cheap components. Two options are considered: the safe one and the standard one. The safe option features an optocoupler while the other option features a GP transistor. Both will trigger the signal line using an open collector configuration. Next picture illustrates the two options:

The pull up resistor which is built in the DR-40 is about 10 k Ohm. However it looks insufficient for obtaining clean squared pulses out of the interface. I experimentally found that fitting a 10 k Ohm resistor (R1) in the interface is a good compromise between signal cleanness and power consumption. R2 might be in the k Ohm range (1 to 10 k Ohm) and T1 might be any general purpose NPN transistor holding up to a vertiginous 10 mA Ice (A 2N3904 will do the job very well). R3 is chosen so that the current through the LED is about 10 mA which is the optimum running point for a 4N35 optocoupler (500 Ohm).

From a code point of view, all you have to really care about is the inverted signal out of this controller: a high level on an Arduino pin will result in a low level on the controller side. The code that I will introduce in a later post features a bit bang serial writer that can be set for both normal and inverted signal (in other words, spaces and marks are swapped in the digital messages). Few other things have to be taken into account. Firstly, the baud rate is 9600. Issuing a key action consists in generating a key press word, wait for 150 ms and issue a key up word. I did not bother with the key down state as it makes no sense in the context of this project. Last but not least, the issued words are 11 bits long: 1 start bit, 8 data bits, 1 even parity bit (the number of marks + the parity bit must be an even number) and 1 stop bit. Again, the bit bang writer will allow you to set all these parameters.

Next post on same subject

Leave a Reply

You must be logged in to post a comment.