New page: Universal Signal Isolator shield for the Arduino DUE

My Universal Signal Isolator shield now has its own page, complete with the board’s schematic and PCB.

USI_bare_slanted

I have tried to document the shield as best I could but feel free to comment if you see something that is not clear or is missing.

They’re here!

I’m talking about my new Universal Signal Isolator PCBs:

USI_bare_slanted USIs_bunch

IMG_0320_res

I built one to test it out and everything seems to be working as it should. Next step is a page for the project, with schematics, a BoM and build instructions.

It is compatible with the current versions of both the ArDAM1021 and TFT HiFiDuino projects.

For now you can find more info in this post.

 

Update: TFT HiFiDuino v2.13

I did a little work on the TFT HiFiDuino code, incorporating most of the enhancements I made to the ArDAM1021 code.

v2.13_1

v2.13_4

v2.13_2

v2.13_5

v2.13_3

v2.13_6

These are the enhancements:

  • Option of displaying white text & graphics on black background as well as the “original” look.
  • New encoder code (it requires a new library).

Plus a few minor bugfixes here and there.

The new version of the code is here (v2.13): TFT_HiFiDuino_v2.xx (2296 downloads) (Note: As always, the code on this page may not be the current one, i.e. there may be a newer version available. The latest version is always up at the project’s official page.)

I will also update the code’s official page with the new version of the code.

Soekris dam1021 ArDAM Project update

Three weeks back I released the first public alpha of the ArDAM code, stating that it was very very alpha. I was meaning every word of that sentence.

Since then, Soren has released the new firmware for the DAM and I have resumed work on the project. Today I am happy to release the first usable version of the code (v0.74):  ArDAM1021 Code (2333 downloads)

ArDAM1021-v0.74-2

Changes include but are not limited to:

  • Tons of bugfixes (volume control, source selection, etc etc).
  • Filter selection either by remote or via rotary encoder (in the settings).
  • Option of displaying white text & graphics on black background as well as the “original” look.
  • New encoder code (it requires a new library).

The download now also includes all the necessary fonts. Let me know what you think.

The project’s page will be edited later today.

Universal Signal Isolator shield for Arduino DUE & MEGA

A few years back I designed a little Arduino shield who’s main function was to provide electrical isolation between an Arduino and a DAC (specifically a TPA Buffalo III).

The years have passed and my needs have changed with the introduction of the dam1021 DAC and its serial interface. My first though was to design a new shield specific to the dam but then I said “why not design a universal isolator shield?”. It would provide electrical isolation for both I2C as well as serial signalling.

Thus was born the Universal Signal Isolator shield for Arduino DUE & MEGA:

v0.97_crop

OK, it does look a lot more complicated than my first shield but remember, you only need to solder in the parts that your DAC actually needs.

So, what does this thing do?

1) Electrical isolation of I2C signals, complete with support of 8 isolated inputs or outputs (via an MCP23008 IC). Three of the MCP’s pins are high current outputs (up to 100mA).

2) Electrical isolation of up to 2 serial ports (implemented with an Si8642).

3) Electrical isolation of the second I2C interface of the DUE (implemented with an ADUM1250).

4) Powered either by 5VDC, 8-15VDC (non-regulated) or 7-12VAC (includes support for on-board rectification and filtering).

5) Support of a 5VDC power relay (up to 100mA).

6) Header for connecting a Nextion display.

7) On-board EEPROM memory (24LC256).

8) And of course full compatibility with the previous shield (same pinouts for the encoders, IR, TFT, etc.).

I will release the Eagle files once I have confirmed that the shield works as expected (I’m waiting for the first (and hopefully last) batch of PCBs).

Soekris dam1021 Arduino Control Code

A few days ago Soren announced that the release of the new firmware for the dam1021 was close.

In light of that announcement I have decided to release the Arduino code that I had written a few months back, even though it is not quite finished.

2015-07-31 18.15.44_res

I am doing this to help fellow Arduino & dam1021 enthusiasts in their quest of remote-controlled color TFT bliss.

So, for now, no real documentation – this is no polished piece of software, but it works (for the most part).

Since it is based on the TFT HiFiDuino code, you can get started by reading its documentation. It should not be hard to get started with this. The code itself also contains useful comments.

I should remind you that the dam1021 at the moment only “talks” real RS-232, meaning that a circuit that converts the TTL level serial port of the Arduino to a real RS-232 port is necessary.
However, we were promised that with the firmware upgrade the second, isolated TTL serial port would be enabled, so here’s hoping..

Also, I have come across a strange problem with the serial communication with the dac. In the beginning all is well but after a while the dam no longer responds to the commands that are sent by the Arduino. However, it (the dam) is still sending data back to the Arduino – when the sampling rate changes, the new SR is displayed properly on the TFT.

I have verified that the Arduino is indeed sending the commands to the dam:

DS1Z_QuickPrint21

DS1Z_QuickPrint22

I hope the problem gets sorted out in the new firmware release.

Anyway, here is the code: ArDAM1021 Code (2333 downloads)  The project also has its own page: http://www.dimdim.gr/arduino/ardam1021-project/

Let me know what you think. I promise to put more work into it in the next few weeks..

Universal USB to I2S Interface Indicator PCB

Over at avclub.gr we designed a custom PCB to ease the implementation of the Universal USB to I2S Interface Indicator. It was a joint effort between myself and Manolis (a.k.a. lemon at avclub.gr). I did the circuit design and Manolis did the PCB design work.

This is the schematic of the final version of the circuit:

USB2I2S schematic 0.8b

When the PCB design was finalized, a GB was organized. When the GB was finished we placed an order on seeedstudio.com’s Fusion PCB service. About 3 weeks later the PCBs had arrived:

IMG_9927

PCB_from_fabThe production quality was truly excellent.

From top to bottom we have:

  • H1: Header for power. It may be either 5VDC (regulated) or 7-12VDC (non-regulated). Pin 1 is 7-12VDC, Pin 2 is GND, Pin 3 is 5VDC.
  • H2: OLED display connector. Pin 1 is 3.3V to the display, Pin 2 is GND, Pin 3 is SCL, Pin 4 is SDA.
  • H3: Header for future expansion. It exposes the unused I/O of the Nano in case it may be of use in the future. The last two pins are buffered by transistors so that they can supply enough current to engage small relays (5VDC, up to 100mA per pin). Pin A7 is connected to JP1_IR as well (see below).

Next up is the socket for the Arduino Nano. You will notice that the USB port should be on the right.

At the bottom of the board we have:

  • JP1_IR: This is a connector for an IR Receiver module. Software support for this is currently in beta. Pin 1 is signal out, Pin 2 is GND, Pin 3 is power (5V). Note that R4 and C5 provide filtering for the power and should be installed. R5 is an optional pull-up resistor. It should not be installed for normal use.
  • H4: This is the “dirty” side of the U1 isolator. Pin 1 is Vdd (usually 3.3V or whatever your USB Interface module uses for its logic levels). Pins 2 through 7 are inputs and Pin 8 is GND.
  • H5: This is the “dirty” side of the U2 isolator. Pin 1 is Vdd (usually 3.3V or whatever your USB Interface module uses for its logic levels). Pins 2 through 5 are inputs and Pin 8 is GND.

Note that in the future a Si8642BA may be used in place of U2. With proper support from the code that will turn 2 of the 4 inputs into outputs, so that they may be used to control a DAC board (for example to select an input).

This is the full BoM:

Universal USB to I2S Interface Indicator BoM
Part Description
FB1 Ferrite Bead 0805
FB2 Ferrite Bead 0805
FB3 Ferrite Bead 0805
R1 2.7K 0805
R2 8.75K 0805
R3 8.75K 0805
R4 100R 0805
R5 10K 0805 (optional)
C1 100n X7R 0805
C2 100n X7R 0805
C3 100n X7R 0805
C4 100n X7R 0805
C5 10uF 10V X7R 0805
Q1 BC808 or equivalent SOT-23
Q2 BC808 or equivalent SOT-23
U1 Si8065AA-B-IU
U2 Si8045AA-B-IU (optionally Si8642BA-B-IU)

In case you want to have your own PCBs made, these are the Gerber files: Universal USB to I2S Interface Indicator PCB Gerbers (190 downloads)

You will also need an Arduino Nano, a suitable OLED display and some cables, connectors, etc. (see project page).

As soon as I received the boards, I built a prototype with whatever components I had lying around (thus the wrong size of most of the resistors & capacitors).

Prototype PCB

And proceeded to test it out with an Amanero Combo384 board:

Everything worked as it was expected. 🙂

At the moment this board (and relevant Arduino code) has been tested with the following USB to I2S interfaces:

Amanero Combo384
hookup_amanero_v2Note that R1 should be installed for proper operation.

DIYINHK XMOS
hookup_diyinhk_xmos_v2

JLSounds I2SoverUSB
hookup_jlsounds_v2

Luckit WaveIO
hookup_waveIO_v2
You will notice that there is no Vcc pin on J9. In order to power the isolator, we will have to “steal” power from elsewhere on the board. A good place to tap is the power pin of the on-board I2S isolator, just to the left of the I2S LRCK U.FL:
hookup_waveIO_power

Universal USB to I2S Interface Indicator feature upgrade

Following up on a number of feature requests made over at avclub.gr I made a few rather interesting additions to the code:

1) The OLED display will show the type of signal (PCM or DSD) for 3 seconds if a change in signal type occurs. Only supported on USB interfaces that support it (obviously).

2) IR remote control support via the well-known IRremote Library. Support for power on/off and source selection (S/PDIF or USB).

3) The OLED display will display the name of the selected source, permanently if it is S/PDIF or for 3 seconds if it is USB.

More details on the new features will be added to the project’s home page, as will the new version of the code.

Here is a short video of the prototype in action:

Arduino: ENC28J60 LAN module

I bought this inexpensive (something like $3 delivered) Ethernet module a few years ago, only to discover that there really wasn’t a decent library to support it. So it got tossed into a drawer..ENC28J60%20Ethernet%20Module1[1]A few days ago I realized that I needed a low cost Ethernet interface for one of my projects. It wouldn’t really need to do much, so I thought the ENC28J60 would probably be able to handle the task.

Doing the customary Google search for Arduino support turned out a full Ethernet library for it! 🙂

It’s called UIPEthernet and it is fully compatible with the original Ethernet library for the Arduino. What this means is that every piece of code written for the Ethernet library (in other words for the “classic” Arduino Ethernet Shield) can be made to work with a dirt-cheap ENC28J60 just by changing
#include <Ethernet.h>
to
#include <UIPEthernet.h>

This I had to see for myself, so I hooked it up.

The module that I have needs 3.3V power (not 5V!!) but its SPI pins are 5V tolerant so it will pair nicely with any Arduino.
The necessary hookup for the UNO, MEGA or DUE can be found in the library’s page: https://github.com/jcw/ethercard

I decided to try a classic Ethernet example sketch: The WebServer sketch. This one reads a few analog inputs on the Arduino and then serves them on a web page.

Sure enough, all I had to do to get it to work was just change the #include statement. It worked like a charm!

WebServer running

So, there you have it. You can add full wired Ethernet connectivity to your Arduino for less than $3.