Must-haves for EASY DIY controller?

Sounder head prevail. Although I have looked at the FPGA code that is the dividing line at my company. So I don't know all the things to worry about. Thanks for the info.
 
Cyrus, saw your thread and I'll be watching!

Regarding the Hydra. Got some time today at lunch to work on it, so the whole thing is now routed again:

hydra032310.gif


It's in "yeah, everything is connected" state. Need to go back over and optimize.

Changes vs. the last time I posted include the things we've discussed:

1) Adding a second AVR: it's in the upper left, right below that silly-huge header. That header is the remaining 4 analog inputs (two are used by the I2C bus) and the 14 GPIO pins. I put a row of GND and a row of +5V next to the I/O header, because - well, how often do you need an I/O pin and NOT need GND or 5V?

The idea with the second AVR is that the "master" chip located in the standard Arduino footprint will control scheduling, LCD, ethernet, and other high-level functions; while the slave will be basically a "dumb" I/O device. We should be able to write firmware that gets uploaded on the slave once, and then it "just works" and any changes to the actual functionality happen via code changes on the "main" chip which would be treated like any standard Arduino.

2) Adding an Ethernet interface. It's in the upper right. I used the ENC28J60 chip as mentioned above. There are some Arduino shields that use that chip so I basically copied the design.

3) I got rid of the separate headers for IR, One Wire, and I2C. I need to think about their value before putting them back on. Input desired.

Thoughts on the overall direction appreciated as always. Once the thing is cleaned up a bit I'll upload the EAGLE files again.

BTW we are firmly at the board size limit for the freeware version of EAGLE so no more onboard functionality unless it's REALLY TINY! :lol:
 
If I read it right, you didn't get rid if IIC just the header. It can still be wired from the BIG connector (U$3). Couldn't IR and One Wire be pulled off that connector to if someone wanted either of them? If so then I see not problem removing the individual connectors. Good idea on power and ground. Little hard to tell from the picture, but these are over sized tracks right?

When you finally release the board add a version to the silk screen. When (I mean if :)) it changes it will be helpful to know what level board people are using. Especially if there is a timing/noise issue and the circuit doesn't change but lay out does.

How many layers? 2? I assume the blue is a ground plane. What are the three pinkish areas?
 
Correct, I just got rid of the headers, not the I2C bus itself. I2C is used to communicate between the AVRs and with the RTC and port expander for the LCD.

Correct again - if people want One Wire or IR they can just use headers that are there and pick whatever pin they want to assign those functions to. The only minor setback of that approach is that One Wire requires a pullup resistor - I'd like to put that on the board for good, which means committing to a particular pin, which means you might as well do a breakout header.

I'm pretty convinced we should have a header for I2C anyways since that'll likely be used to communicate with whatever is controlling the external relay board.

There's a version number and date in text near the upper-left area of the "original" footprint, but I haven't really incremented them yet. Once we get to the point that we're actually making hardware (soon I hope) I'll definitely start taking care of that text a little more closely.

Two layer - correct. Blue is bottom layer, red is top layer. The red areas you see are "local" ground planes. I wouldn't consider the top ground planes finished yet, I just put them on like that one day and haven't bothered to change them.
 
der_wille_zur_macht, that looks like a monster now! :)

Looking at it, I'm thinking about the LCD... it doesn't look like it would make sense anymore to mount the LCD on the hydra, because the board is much bigger now than the LCD and it would probably be easier to case if they are separate, otherwise the case must be much bigger than the hydra board (or the LCD will sit in one corner of it).

Other than that, I also think the GND/5V headers are a nice touch.


Oh and we must have stand offs now that the board is that big (sorry, it will disturb the layout a bit I assume). Or at least leave enough space on 2 sides to be able to 'slide' the board into some kind of case.

EDIT: beat me to it.
 
Terahz,

To think, back in the day, I wanted to make this as a shield. :lol: Instead it's a dual-headed monster that happens to be compatible.

Definitely will add holes for standoffs. Agreed on no longer direct-mounting the LCD.

I put the two major I/O connectors (BNC for pH and Ethernet) on the same edge of the board with the idea of having that be the edge that gets "exposed" through holes in the case.

Keep the input coming folks, will be working on this as much as I can for the next few days with the hope of sending it off to a board house within the next week.
 
Just a thought, do we need a separate crystal for the second AVR?

Also where is C25+ connected to? I'm a bit confused by the lonely via across the big red ground area :) Is that 3V3?
 
Based on that infamous "twin AVR" thread on the arduino forum a year or two ago I don't think we need a second crystal, but I can't work out a reasonable way to route traces from the existing resonator to the second AVR without really mucking up the layout (i.e. the shield headers are in the way). The second resonator is pennies and doesn't take up a huge amount of room.

C25 is an output cap on the regulator right next door which drops 5v down to 3v3 for the Ethernet interface. Before we put Ethernet onboard there was no 3v3 hardware so the 3v3 pin was NC. Now that there's a 3v3 regulator onboard I routed a trace down to that pin in case people have a shield that uses 3v3.

I just put an I2C header in up near the megaheader in the upper left, so that's taken care of. Now to find some spots for standoffs. . .
 
Who is taking on the daunting task of writing the software side of things?

Will it be a group effort?

Are we going to cut and paste much of what has already been written for other Arduino controls such as lighting?
 
Who is taking on the daunting task of writing the software side of things?

Will it be a group effort?

Are we going to cut and paste much of what has already been written for other Arduino controls such as lighting?

Yes. :lol:

I've got a "global level" design for the software in my head but I don't think it's completely my strength. I could probably get the thing working but it would be sloppy, so I'm hoping to borrow code and/or get as much input from the community as possible.

FWIW I don't think we'd be writing anything new for most of the functions we want, because the following have all been done a dozen times:

1) port expander for LCD control
2) LED control via PWM
3) One wire temp sensors
4) pH
etc.

The only thing we're going to have to put some effort into is the master/slave AVRs via I2C because the only code I've seen to do that was either extremely specific, or way too simple. My vision of how that will work is that we'll write a library that will abstract all the basic functions of the slave chip (digital read/write, analog read, PWM, etc.) such that they can be called from the master. So instead of saying AnalogWrite(9,255) you'd say slave.AnalogWrite(9,255).

I imagine we'd write a firmware for the slave, upload it once, and let it chug away. Anything application-specific would be on the master. Though I suppose we could have some higher level functions on the slave besides just abstracting the basics, i.e. tell the slave to fade a PWM signal up and down on a set schedule, or stuff like that. That would offload some memory/processing to the slave.
 
Cleaned up a few more things, added more text and labels, played with the top-layer ground plane (in Arduino style I went with hatches for a large portion of the top ground plane), etc.

I put v0.2 of the EAGLE project up if anyone's keen to see it:

http://code.google.com/p/hydra-reef/downloads/list

I am going to put it aside for a few days at this point to have a fresh look (maybe this weekend) for verification before sending it off to a board house, so if anyone has comments or ideas, now's the time. :D

One component I'm stuck on is the ferrite bead for EMI on the Ethernet interface. There's no suggested value in the datasheet and there are a WIDE range of parts out there. No idea on how to pick an appropriate part. It's an SMT part on the ENC-based Ethernet interfaces I've seen to date (seeedstudio, nuelectronics, etc.).
 
Started a BOM, looks like we'll be right around $50 in components.

Would anyone complain if I took the buzzer off the board? I'm nervous about having a strong oscillating magnetic field that close to sensitive stuff (the pH circuit, the RTC, etc.) plus it takes up a lot of room and having it on the board means we've committed to using whatever pin it's connected to. If we take it off the board, people can still use a buzzer but just panel-mount it and pick whatever pin they want.
 
Don't mean to sidetrack/highjack. I just have one quick question in the spirit of this thread.

Any recommendations on books or "web courses" for beginning/ intermediate hobbyists to learn/practice/study the kind of designing we're doing here? Something for a beginner to learn these basics, not to relearn V=IR for the 30th time? I've learned electricity elements. I'm looking to improve on how to apply circuit design to achieve desired functions (turning on power, reading meters, connecting to computers, building a circuit to control my stereo, etc.)

Thanks.
 
williah,

Generally I've learned by doing (and messing up.) :D The places I've probably learned the most from in terms of online resources are the Arduino website (the playground has a LOT of good basic examples), the online electronics textbook "All About Circuits," and the tutorials on the Sparkfun website. The tutorials on EAGLE are particularly good at Sparkfun if you haven't used it before.
 
Has anyone seen this:

http://www.xduino.com/hardware/

Just saw it myself, aduino compatable but:

"¢5 Serial ports
"¢48 General purpose input/output pins (GPIO)
"¢16 Analog input channels 12-bits (ADC)
"¢2 Analog output channels 12-bits (DAC)
"¢512 Kbytes of Flash memory
"¢68 Kbytes of RAM
"¢3 SPI ports (2 can do I2S)
"¢2 I2C
"¢1 USB
"¢1 CAN
"¢1 SDIO
◦Use MCU 32Bit ARM Cortex-M3 64Pin (LQFP) of "œSTmicroelectronics"
◦Use Crystal 8.00MHz + Phase-Locked Loop (PLL), Run 72MHz frequency with speed 1.25 DMIPS/MHz to process data that is equivalent to 90MIPS
◦Has RTC (Real Time Clock) Circuit with XTAL 32.768KHz and Battery Backup connector
◦Support In-System Programming (ISP) and In-Application Programming (IAP) through On-Chip Boot-Loader Software via Port USART1 (RS232)
◦Has RS232 Communication Circuit that uses Connector 4-PIN
◦Has 48 Bit GPIO with 5V-Tolerant for independent digital applications (maximum analog input is 3.3V)
◦Use +3.3V Power Supply
◦Connector is placed on 50 Pin Header with a distance of 2.54mm (100mil) (25 pins per side) with a distance of 1.5 inch (1500mil/38.1mm), so it is quite easy to use and expand I/O Circuit. Moreover, it can be used with Project Board and PCB.
 
Terahz has it right, the FTDI header is for programming. This takes up much less room onboard, and avoids having to solder the fine-pitched USB chips used on USB-compatible boards. People can buy an FTDI breakout board for $12, or hack a phone cable for a mere $2.

OK, I'm all over this, but not quite sure I get this piece of it. Are we talking about one of these http://www.ftdichip.com/Products/EvaluationKits/TTL-232R-3V3.htm being required for programming?

Thanks!
 
Back
Top