ES9018 I2C controller

Status
This old topic is closed. If you want to reopen this topic, contact a moderator using the "Report Post" button.
I'm currently designing a controller module for my ES9018 DAC (Buffalo from TPA), but it can be used with any ES9018 DAC when there is I2S access to it.
It will be based around an Atmel Atmega644 with a highly modified Hifiduino version running on it, so there is input selection, volume control and all settings (filters, quantizer, oversampling and more) can be modified.

UPDATE: 2013-01-2013

Version 1.1 is up and running :spin:

These are the features I have added to it.

  • Logic level converter (5V to 3.3V) (ADuM1250)
  • DS1307 - Real Time Clock
  • MCP42010 digital pot for LCD backlight brighness adjustment
  • IR receiver
  • Separate board with up to 9 Tactile push buttons or one rotary encoder that can be used with or without the hardware debouce circuit
  • Temperature sensor
  • Some logic outputs for switching between my PCM and S/SPDIF sources
  • Pot for LCD contrast adjustment
  • I2C Isolator between controller and DAC (ADuM1250)
  • LD1086 5V low drop voltage regulator.
  • Resettable fuse for some extra protection.
  • DIP switch (3 positions) for locking some settings
  • PCF8574AT port expander for driving an LCD, OLED or VFD
  • LD1117 3.3v low drop voltage regulator

A complete overview of it's features can be found on my website

Link to the article: CE644 - The ES9018 I2C controller
link to the product: Assembled & Tested : CE644 Controller v1.1

EDIT: update history
- 2012-10-15: Separate board for rotary encoder
- 2012-10-15: Added I2C isolator
- 2012-10-17: IR teach function
- 2012-10-19: Decided to use the Atmega644 instead of the 328
- 2012-10-19: Removed the port expander, because of the extra IO's that come with the 644
- 2012-11-07: LT1086 low drop voltage regulator + resettable fuse added to the design
- 2012-11-11: Added a DIP switch to allow manual control over stereo/dual mono and volume control on/off
- 2012-12-28: Brought the port expender back to the design, because I could use some extra I/O's
- 2012-12-28: Added the LD1117 LDO 3.3v voltage regulator to the design to add an 3.3v breakout.
- 2013-01-31: Version 1.1 is up and running
 
Last edited:
Hey Corpius, that would be a nice project! :)

Some ideas:

1- Adum I2C isolator which does isolation and level conversion at the same time.
2- Rotary encoder with space for debouncing capacitors
3- Pot for LCD contrast adjustment (you only do this once)
4- I2C FRAM (FRAM is a fast EEPROM accessed through I2C. The built in EEPROM in ARduino is slow and has limited life)
 
Last edited:
is there any reason you stuck to arduino? wouldnt some more powerful sort of Cortex/ARM/Raspberry device that speaks i2c, USB, wifi etc be more suitable? or is it simply because so many of the required instruction sets/codes are in existence for arduino->ESS

nice project regardless
 
yeah qusp, it is just a whole lot easier to write the code for arduino and get something that works, reliably.

I am having some hassles getting i2c from default beagle bone linux os at the moment (also got smashed by work and didn't look at it for a few months). I am proceeding with arm based board because I want it to be independent of the computer and just stream from the networked storage. I also want mine to be network controllable eventually. The networking side is the more expensive part to get working with an arduino as the wifi/ethernet sheilds are expensive/bulky and drivers for a fat/fat32 fiilesystem to store graphics etc can take up a lot of the atmel microcontrollers memory.
 
Last edited:
yeah I just gathered since there was a PCB being designed there was some need to do something different/powerful. I know all that stuff can be catered for with add on modules and add on code, but my impression is that its very slow and limited by way of expansion/bandwidth, so could easily get unwieldy in both code and hardware

basically

hochopeper said:
The networking side is the more expensive part to get working with an arduino as the wifi/ethernet sheilds are expensive/bulky and drivers for a fat/fat32 fiilesystem to store graphics etc can take up a lot of the atmel microcontrollers memory.

this^^

if I was doing something along these lines network access would be essential, but if thats not important sure
 
Last edited:
To make some things clear. I will use the same chip as the Arduino does, but not the Arduino itself. Therefore no shields could be added, at least not in the same way as with the Arduino.

Hey Corpius, that would be a nice project! :)

Some ideas:

1- Adum I2C isolator which does isolation and level conversion at the same time.
2- Rotary encoder with space for debouncing capacitors
3- Pot for LCD contrast adjustment (you only do this once)
4- I2C FRAM (FRAM is a fast EEPROM accessed through I2C. The built in EEPROM in ARduino is slow and has limited life)
1. The Adum I2C isolator is indeed a very useful component. I will add this to the list.
2. I can make some connections for a small separate PCB that houses the rotary encoder and debounce capacitors. This way there two possibilities for control, push buttons or rotary encoder. Good idea!
3. This is already incorporated into the design, but forgot to add it to the list.
4. Looks nice, but I'm not convinced that it is needed. How limited is the EEPROM lifetime of the Atmega328?

is there any reason you stuck to arduino? wouldnt some more powerful sort of Cortex/ARM/Raspberry device that speaks i2c, USB, wifi etc be more suitable? or is it simply because so many of the required instruction sets/codes are in existence for arduino->ESS

nice project regardless
The Atmega328 is powerful enough for this project. Like hochopeper said, it is much easier to write the code for it and get something that works reliable. I already have an Arduino that is currently the control unit of my DAC, but I think that its design is too limited for what I want. I can add some shields of course, but then it becomes to bulky to fit inside my DAC. For that same reason I have already designed a shield that more or less fits my needs: Buffalo shield. The shield is nice, but is still a bit limited for what I want.
 
Built-in port expander? such as PCF8574 in case you need more ports for relays, etc. And/or a shift register to drive the LCD with this library: https://bitbucket.org/fmalpartida/new-liquidcrystal/wiki/Home. I feel the I2C option for the LCD is "too slow"
How funny is that. I also forgot to add the PCF8574 to the list as well. It is already incorporated, but thanks!

I planned to use the I2C LCD extra IO in combination with the library you mentioned. I am currently using it with my Arduino as well. It doesn't feel slow to me. According to the webpage you where referring to, the library should be almost 5 times faster than the original LCD library.

I have been busy with the design today. It is not final, but this is what I have for so far. The PCF8574 needs to be positioned to a better location and all connections to it are also still not drawn.
 

Attachments

  • CE328_front.jpg
    CE328_front.jpg
    100.3 KB · Views: 894
  • CE328_back.JPG
    CE328_back.JPG
    98.8 KB · Views: 877
So using i2c for the LCD might be slower, but from what I am experiencing it is fast enough. I can`t notice any difference.

There will be some I2C outbreaks left from the DS1307 - real time clock. I will probably add I2C isolators to those as well. There will also be a row of digital I/O`s and some sensor inputs. These will all be added somwhere next to the MCP42010..
 
If there is enough interrest I might do so or sell it through my website. First priority is to finish the design and make a prototype.

I could do with some input for the design. I'm thinking of adding some function to put the entire DAC into standby, except for the control unit. When it's in standby it could show the day time, month and year with the backlight turned off. This could be achieved with a little add-on board that houses a logic controlled relais that switches the power to the transformers.
 
Status
This old topic is closed. If you want to reopen this topic, contact a moderator using the "Report Post" button.