Watt-a-Duino: shield I/O design

As part of my senior design project, I'm designing a digital power meter (basically a Kill-a-Watt with better accuracy and more features) for measuring power generated by an alternative energy system.

I'm planning on the following features: 1: 16 bit current measurement and 12 bit voltage measurement, sample rate on the order of 64kHz or more for accurate harmonic analysis. 2: Independent hardware DSP (dsPIC33F) for RMS voltage/current, real and apparent power, and real time FFT calculations. 3: ENC28J60 Ethernet interface. (Optional) 4: 44780-compatible backlit LCD and buttons for user interface. (Optional if Ethernet is used) 5: SD card slot and I2C RTC. (Optional) 6: USB using the existing Arduino port.

I'm not planning to use any other shields, so all I/O pins are usable. Are there going to be any conflicts between the ENC28J60, SD, and/or custom DSP SPI interfaces? I do want all of the listed features (on the board I'm going to design), even if I'm not going to make use of them now. I'm new to Arduino, but I have done plenty of embedded programming (mbed, PIC, and MSP430) in the past.

http://openenergymonitor.org/emon/ has already done exactly what you are planning.

I have expanded it to include LCD, SD, diesel tank level, mysql, website with stadistics, RTC, ....

It will be nice to see another approach good luck

I have already seen that one. The problem is that the Arduino's ADCs are only 10 bits at 10kHz, not enough for a serious test instrument. (Even a very cheap multimeter has about 12 bits of resolution, with a decent one having as many as 16.) At the least, it would require a PGA (Programmable Gain Amplifier) to get any meaningful dynamic range and the low sample rate would make it impossible to use tricks like oversampling to increase effective resolution. With very dynamic loads, it would be necessary to have the PGA switch and settle very quickly in order to maintain accuracy.

The ADC I'm planning to use for the current channel (a LTC1864) is good for 16 bits at up to 250kHz sample rate. The dsPIC's internal ADC (12 bits at up to 500kHz) will be used for the voltage channel since it doesn't need as much dynamic range. The oversampling would allow me to get as many as 5 extra bits of effective resolution and also lowers the noise floor and prevents aliasing. The dsPIC can run at up to 80MHz (as compared to 16MHz for the Arduino or 25MHz for my first PC), giving plenty of power for all sorts of tricks like FFTs and whatnot.