I wanted to make a breakout board for my ATTiny85 that was similar to the the Arduino.
The goal was to make a simple circuit that I could plug an ATTiny85 in to and then attach jumpers to a breadboard in the same way that you can with an Arduino Uno (or it's ilk). This, coupled with an AVRISP, would make prototyping easier. Yeah, there are boards that you can buy on eBay for tuppence-ha'penny, but I didn't make any of them :)
Part of the fun of the whole Arduino/Open Hardware Platform is that you are encouraged to do things yourself ... so I did.
As yet, I haven't connected the SPI headers, but I'll get to that.
The parts for this are very simple, and pretty cheap:
Item Price Qty Cost
- LM7805 x 1
- Female Pin Headers x 13
- 8 PIN DIL x 1
- 10 nF Electrolytic Capacitor x 2
- 5mm Red LED x 1
- 220 Ohm Resistor x 1
- 0 Ohm Resistor x 1
- Barrel Jack x 1
- FR4 Copper Clad PCB x 1
Total cost of parts = $1.66 (AUD) with all parts bought from eBay
In terms of the time that it took from concept to completed (so far) is about 4 hours including waiting for glue to dry, acid to etch, iron to warm up, testing and general time wasting.
Step 1: Design the Board
I used Fritzing to design the board. I use Fritzing a lot.
The attached PDF are ready to print.
I have updated the images and PDF on this page as I've made some adjustments to the circuit. The fine traces for the SPI are now gone from the design ... they have to be wired using jumpers now. I'll probably come back to this using a double sided PCB instead of my usual single sided, or just keep going with the jumpers. When I've done that, I'll post another page into this instructable with pictures and a better description.
Step 2: Etch the Board
Well ... this could have gone better ... the fine traces kinda failed, but they are really not thoroughly needed. I plan to replace the failed traces with solid core wire, this will complete the ISP block. At the moment, I need to plug the AVRISP into the breakout sockets that I have supplied ... my main problem is that I didn't break out the Reset pin, but that trace DID work.
I've marked the area that failed to transfer properly and was, consequently, etched away.
Step 3: Populate the Board
I trial fitted all of the components so that I would be able to simply sit down and solder.
The order of soldering that I used was:
- Pin Headers
- DIL Socket
- Barrel Jack
This worked pretty well for me.
Step 4: Test
Testing is a very practical part of any project.
When testing, I like to break things down into simple steps:
BEFORE YOU INSERT ANY SOCKETS
- Test the traces from end to end ... if a trace fails a continuity test, fix it now. Either bridge the gap with solder, or make a wire bridge.
- Cross test traces. Make sure that you don't have any unintended bridges. If the continuity test shows that you have a bridge, identify it and fix it. This is usually as simple as cutting through the copper trace with a sharp knife.
- Test continuity on the component side, that is, test sockets. If your sockets fail continuity, it's probably a bad solder. Sometimes this means simply oversoldering again, but it can also mean using some solder wick to clean the connection and then resolder.
- Test power. Test the power at the input to make sure that you are getting the expected supply, if you have a voltage regulator, make sure that the supply on the circuit side is right for your chips.
Now that you have satisfied yourself that the circuit is correctly connected and adequately powered, you can start running your circuit tests (such as LED lights up, chip performs correctly ... and in the case of this circuit, that your IDE can connect to the ATTiny85).
Step 5: Power Up
Now it's time to plan what I'm going to do with my 85Duino ... probably nothing yet ... I'm waiting for my new AVRISP from Adafruit.
I will probably try using the circuit with a blank (but boot loaded) ATTiny85 and connect the circuit to my Arduino and upload a simple (blinky) sketch and then run the sketch with only the power connected to the circuit.
At the moment, the circuit is powered by a 9V battery, I haven't given it a USB connection, but I do have a USB to barrel jack connector that I could use.
Anyway, the circuit is "complete" and tested, all I really need to do now is to connect the SPI block and I'll be away.
Step 6: Jumpers for AVRISP and More Testing
Finally, connecting the ATTiny85 to the AVRISP break-out so that I can connect the Adafruit USBTinyISP to the ATTiny85 for easy uploading of sketches from ATMEL AVRStudio and/or Arduino IDE.
In the pin-out diagram that I've provided, the grey pins on the ATTiny85 are not connected. Each of the coloured pins are the same colour as the jumpers in the photograph.
The hardest part of this was bending the ends of the copper core into little eye hooks to wrap around the underside of the female pin headers ... and it wasn't that hard.
All I can say for this process is that it is a little fiddly because you want to make sure that none of your jumpers make contact with each other.
This is another opportunity to get out your multimeter and do some testing. Once again, you want to test for continuity from the appropriate pins of the ATTiny85 and the pin header for the AVRISP, you ALSO want to then test each of the other pin headers to make sure that there isn't any continuity. Use the following truth table to help ... if you want.
So you would test MI to each of the pins on the ATTiny85 and ONLY get a continuity positive where you see a Y in the table, you want to get a continuity negative for all other pins.
Well, that concludes this article.
I'm hoping to receive my USBTinyISP from Adafruit soon ... so that I can use this circuit in anger ;)
Step 7: Update
I have just completed two new versions of this circuit.
85Duino - main difference is that I've made the SPI male pins rather than female pins. I've also made the 5V and GND connections to the SPI copper trace. I've also given the RESET a female pin header for breaking that out when needed.
84Duino - fitted the ATTiny84 into the same footprint board and added breakout pin headers for 14 pins (including 5V and GND). The SPI for the 84 only uses jumpers for RESET and MOSI, the arrangement of pins on the ATTiny84 lends itself a bit better to this layout than the ATTiny85.
I got my Adafruit USBTinyISP (ladyada) last week and soldered it up. I have now tested uploading the blink sketch to both boards without a hitch.
This means that I now have 2 x ATTiny85 breakout boards 1 x ATTiny84 breakout board and 3 x ATMega328P boards (a genuine Arduino UNO R3, a Freetronics "eleven" and a DIYDuino) ... so woot!
There is still some ground to cover with breakout boards, so I'm not giving up on refinement and development of these yet ... they do make themselves useful for doing some I2C experimentation ... who knows?
Step 8: 84Duino Update
I've been playing around with making a manual controller for the CNC Engraving Mill that I'm working on and I decided that I'd like to use an ATTiny84 as the heart of the controller.
A feature of the controller will be a Liquid Crystal Display (16 x 2) that I picked up on EBay some time ago.
This seemed like a good candidate for using my 84Duino breakout/rapid prototype board, so I dusted it off and gave it a whirl.
The biggest problem that I had when I was doing this was the recent update to Arduino IDE (1.6.1) it had totally robbed me of my will to live for a brief time. The ATTiny support had gone awry with dumb messages about the control.load jiggery pokery. Luckily, 1.6.2 was available and that seemed to fix my problems of uploading from the IDE to the ATTiny84. I was having all sorts of hyperventilation moments there ... practicing my profane vocabulary and generally steaming ... all calm again.
The goal was to get the LCD working with the ATTiny84 using the 84Duino module. I loaded the Example sketch (LiquidCrystal Library - Autoscroll, by Tom Igoe and modified the pins as follows:
- LCD RS pin to digital pin 12 - ADC0
- LCD Enable pin to digital pin 11 - ADC1
- LCD D4 pin to digital pin 5 - ADC2
- LCD D5 pin to digital pin 4 - ADC3
- LCD D6 pin to digital pin 3 - ADC7
- LCD D7 pin to digital pin 2 - ADC6
The initialization statement for the lcd was then changed to match my new pin assignment scheme
LiquidCrystal lcd(0, 1, 2, 3, 7, 6);
That's it, nothing more needed to be changed in the sketch, just wire it up, power up and go.
I'm glad it worked nicely ... now on to the rest of the design.