Dual Core 168 Arduino

sounds yummy...

still sounds your taking the water cooling thing to heart lol jk, i'm sure that theylle never over heat.

but heres an idea:
find small surface mount digital pot's and shift registers, and have them on the bottem lets say, or a diffrent place where theres room, that way, they still cost the same, but take up much less space on the board, you won't have to sacrifice room.

also, program the 2 arduinos to understand that there are 2, that will most likely make it esier to communicate between them, or even make them act as 1!

and maybe pre program all the extra pwm pins from the digital pot's, and the shift registers as arduino pins, so instead of having to type extra code in the prgram, you can just say "arduino pin 38" becuase it will name pins from the shift registers accordingly!

god damnit, if i only had this b4 i started working on my button pad, i could have been having full color dimming with no need for refreshing each button...

can't wait for the prototypes! please keep the updates comming!

;D neither water cooler or fan would be a very good prospect so it absolutely "had" to be time tested in order to establish a benchmark.

And I'm quite excited as well to be honest. The Arduino's so easy to work with it'll be nice to have the extra serial buffer, pins, and program space.

I believe film has been made so I'll post back once I've got another update :slight_smile:

ok, but just to get an idea, how much bigger will the dual core arduino be comapred to the current decimielia one?

I've only got an NG here and it's 72mm x 53mm - the dCoreDuino168 is 76mm x 63mm, so it's 4mm longer and 10mm wider.

Thats nothin! Good job keeping it small, sounds like its hardly noticably bigger.

So tell me... How would this thing act? Would it think it's an arduino with more pins?

No, it's still just two ATMEGA168's - which happen to both be joined to an inline i2c bus, and share a resonator and a few other components.

They can function as two completely individual 168's - or they can "co-operate" using i2c.

For example, one IC might be running a sequence of LED's, and at the end of the sequence, send a message to the other IC telling it the sequence has finished. Or, they both can run completely autonomously, using their own pins for "whatever".

The application we built this for, requires two serial buffers. One communicates with a host computer, and the other communicates with another serial device.

So, for example, when there's a serial event on IC1 - it sends the serial data to IC2 via i2c. The wire library has "wire.available", so IC2 can still run it's own loop/s while waiting for data from IC1. Since IC1 is also using the serial buffer, "it to" can run it's own loop/s.

And that's handy if you've ever needed to use an Arduino to communicate with two serial devices, because you'll discover two major drawbacks. 1. Arduino's only have one serial buffer. 2. The software serial library "hangs" loops while it's waiting for data from a serial device, although, I think there was a hack done recently which provided a work-around for the Diecimila?

Aside from what we're using it for, we've really got no idea what else it might be capable of. Both IC's are perfectly synchronized, so there could be applications which that suits. Between the two, there's double the pins and program space - I think there'll be applications where that might come in handy.

Two or more boards can be added to the i2c bus, so it's possible to create a chain of dCoreDuino's - each IC could be performing a specific task, like, one for running a sequence of LED's, another for reading a gps device, another for driving servo's - and all would be able to do so while having conversations with each other via i2c.

So for what I expect the cost to be, it's an inexpensive solution to a number of problems, while presenting a board which has twice the capabilities of a single IC Arduino. If developers can find a use for that, then it makes the concept that much more worthwhile :slight_smile:

We're also using 1.8k resistors for the i2c bus, because that works for our application. I have read of others using 10k, so you can use bench components to experiment with different values.

I have used the Atmega's internal pullups with no external resistors and it worked fine. IIRC, the wire library even enables them for you.

-j

Unless you put the Arduino into a very noisy environment or run the I2C bus faster than Wire configures, you should be OK with the internal pull-ups, but adding external pull-ups only downside is extra current draw (about 2.8mA or well within the AtMega's sinking abilities).

ok, that sounds like a good idea for people with 2 seriall devices.

and lets say i want to program them, will there be a jumper that decides which arduino the info is being sent to?
and powerwise, will having 2 arduinos requiere more juice? or will 5 volt be enough for both to run as spotless as 1?

While an Arduino128 or the SiameseDuino is an excellent option for new purchases, I think an IO expanding shield with a second I2C slaved Atmega128 on it and a second set of IO pins might be a good option for existing Arduino owners.

There are I2C data-expander IC chips already. They connect via I2C and give you as many virtual digitial I/O pins as you care to buy chips for.

While a 2 mcu arduino may have its uses, extra I/O is a silly reason.

ok, that sounds like a good idea for people with 2 seriall devices.

and lets say i want to program them, will there be a jumper that decides which arduino the info is being sent to?
and powerwise, will having 2 arduinos requiere more juice? or will 5 volt be enough for both to run as spotless as 1?

Hey, both IC's each have a pair dip switches, shown at the top left of the pcb layout. So you manually select which IC is the target by moving it's two dips to the ON position.

The breadboard demo has been running on 5v "spotlessly" :slight_smile:

While an Arduino128 or the SiameseDuino is an excellent option for new purchases, I think an IO expanding shield with a second I2C slaved Atmega128 on it and a second set of IO pins might be a good option for existing Arduino owners.

There are I2C data-expander IC chips already. They connect via I2C and give you as many virtual digitial I/O pins as you care to buy chips for.

While a 2 mcu arduino may have its uses, extra I/O is a silly reason.

We built it to add a second serial buffer, the additional I/O's was a "side-effect". Originally we hadn't planned on having more than 3 DI/O's per IC, because that's all we needed for our application. But we then decided others might be interested in solving different problems with it, so we added the rest in plus a header for 3 i2c devices.

If we only wanted a I/O expander, we would have used 595's and 4021's - we've got another board in design which is based on two 595's and two 4021's, and like the dCoreduino, they too can be daisy chained. That suits a need we have, others also might have a use for them so we'll put them out there as well once we've taken delivery.

We built it to add a second serial buffer, the additional I/O's was a "side-effect". Originally we hadn't planned on having more than 3 DI/O's per IC, because that's all we needed for our application. But we then decided others might be interested in solving different problems with it, so we added the rest in plus a header for 3 i2c devices.

If we only wanted a I/O expander, we would have used 595's and 4021's - we've got another board in design which is based on two 595's and two 4021's, and like the dCoreduino, they too can be daisy chained. That suits a need we have, others also might have a use for them so we'll put them out there as well once we've taken delivery.

I didn't mean to say there was no point to this project, I was replying to the poster who was talking abut using it as an I/O extender.

I've used 595's and the non-blanking version, I can't remember the chip number right now, many times, though I haven't used the I2C extenders much. The reason I specifically mentioned the extenders is they give a functionality similar to this project's extra I/O.

The "extra I/O" in this project is a UART, not simple digital I/O lines.

I have investigated adding an SPI UART, and what I found is this: the device costs nearly twice as much as an ATmega8/168; it requires one of two odd crystals that you're not likely to have in your junk box; and it has an 8 byte buffer.

Using an ATmega, however, cuts the cost in half, uses a crystal I may already have, and gives me a huge I/O buffer. Plus, I can put code on the ATmega to preprocess the data if I so desire - for example, I can interface to a GPS, let the slave ATmega read the NMEA sentences, verify the checksum, parse the strings into integers, and have that data ready to provide to the master processor. If the master has very much work to do, this preprocessing may be quite useful.

If anyone knows of an SPI or I2C UART besides the 31xx devices from Maxim, please let me know.

-j

While an Arduino128 or the SiameseDuino is an excellent option for new purchases, I think an IO expanding shield with a second I2C slaved Atmega128 on it and a second set of IO pins might be a good option for existing Arduino owners.

There are I2C data-expander IC chips already. They connect via I2C and give you as many virtual digitial I/O pins as you care to buy chips for.

While a 2 mcu arduino may have its uses, extra I/O is a silly reason.

The beauty of a spare MCU isn't just it's digital I/O pins but everything you get. Even if we stick to AtMega168 like chips, the Atmega48 (as an I2C slave) adds 14 digital I/O pins, 4 A/D pins, a serial port, and 6 PWM pins with identical characteristics to the existing Arduino pins about $1.60 and it's programmable. There are cheaper micros, but this one is cheap, easy, and compatible.

Comparable hardware build on I/O expanders isn't really any cheaper unless all you want is digital I/O (16 bit digital I/O $1.20, 4-channel 10-bit I2C ADC $3.10, I2C capable UART ???, I2C capable PWM ???.

The operative word is inexpensive. It shouldn't be too far off $20 and childsplay to assemble, and probably quite a bit of fun to tinker with as well.

Here's our I/O expander board, it's a "biggie"!

We're changing the layout to one VCC + GND "IN" and one VCC + GND "OUT" - and moving the CLD's IN and OUT top and bottom respectively, grouped and labeled "595in/out" + "4021in/out".

The board is based on these two excellent references:-

We know there are other ways of doing this, but we happen to already have tried and tested software which utilizes these low power inexpensive IC's. Turning it into a PCB, for us is a simple case of tidying up the otherwise messy wiring and prototype boards we've been using.

The boards will work with any of the Arduino's and we'll have a small surplus available for anyone else wanting them.

i'm lacking in techonlogical expiereince...
where is the usb connector?
and the dip switches to decide which arduino is being controllled?
also the barrel plug power connector?

if those are already taken care of, then i think there should be some more room for more gnd and 5v pins, becuase it doesent look like enough... there looks to be a small bit of room around the board, and i believe those small spaces would be perfect for 4 gnd on one corner, with 5v on the same side, and opposite on the other side so:


gnd 5v
arduino pins and atmega and such

5v gnd

i'm lacking in techonlogical expiereince...
where is the usb connector?
and the dip switches to decide which arduino is being controllled?
also the barrel plug power connector?

if those are already taken care of, then i think there should be some more room for more gnd and 5v pins, becuase it doesent look like enough... there looks to be a small bit of room around the board, and i believe those small spaces would be perfect for 4 gnd on one corner, with 5v on the same side, and opposite on the other side so:


gnd 5v
arduino pins and atmega and such

5v gnd

There are "two" different and separate boards.

The board above from my last post, is the I/O expander. Below, is the dCoreDuino168. There isn't a USB connector or 9v socket because we didn't need either for the project the board was designed for. There are 7-12v "in" pins on the bottom left-hand side of the dCoreDuino168 pcb, connected to a pcb power switch at the bottom of the board and to the 7805 5v regulator.

We'll have a small surplus available (of both boards, plus, a slim version of the dCoreDuino168) for those that want them. "But", they are what they are, and you'll need a mini-usb adapter or FTDI TTL 232R USB to TTL serial cable to program the dCoreDuino168.

The I/O expander uses 3 digital pins for (output) and 3 digital pins for (input). The vcc + gnd "IN" connects to the vcc + gnd "OUT" on the dCoreDuino168.

More info on the I/O can be found at the two tutorial links posted above.

this will be very popular! you guys should really find a way to get this advertised, becuase i don't want this project to be a small lump on the enormouse surface of the arduino planet.

definitly contact arduino.cc try to get this advertised on the first page!

maybe contact the makezine( that's how i got connected to arduino!! )

ask moderators to advertise this here, like putting it in a place everybody can plainly see.
this will mean more popularity, and more potential profit... as well as more buyers so you can order a larger quantitiy!

i also can't help but think that maybe making some kind of connector on the arduino and the extra i/o board would be good. That way the people who don't use it and won't use it, just have a small connector on thair arduino, but for the people who do use it, it will be VERY easy to connect rather then running wires!

also just a question on the arduino board:
what kind of cable is needed, i think i have in mind what you speak of but i'm not completely sure. Is it the cable you use to hook up a psp to a computer? or do you need a converter?

I appreciate your enthusiasm big93. We're producing in generous quantities so the cost of the pcb's is almost not worth a mention. We're also able to buy 168's in large quantities so they too are reasonably inexpensive.

Our first priority is the completion of the application the boards were designed for, which will provide us with more information about how the two 168's on a single resonator perform. Once we have that info at hand, we'll be able to guarantee functionality to a number of operating conditions. We "think" it's the same as a single but with another 168 attached, but we'll still be wanting to find out if there are any conditions that can cause issues over and above what you'd expect from a single Arduino board.

Once that's done, and a few others have played around with it, then there may well be a demand for more boards, and we'll be happy to produce more.

We'll be using 8 ply cable connector wire to connect the dCoreDuino to the I/O expander board, and the same to daisy chain one I/O board to another. There'll be some cable splitting but it's better than using single wires.

As far as the good people at Arduino go, I'm sure they have their own products to worry about, and distributing to the masses wasn't something we had originally planned to do. But, if the board is able to help solve problems for other people then it would be criminal not to share it with the rest of the world, and we have the means to do that ourselves if it's deemed to be a worthwhile undertaking :slight_smile:

We altered the I/O board which now uses a 10 pin box header (8 ply) that should help keep the wiring nice and tidy.