Arduino on All Sorts of Atmels

114K17169

Intro: Arduino on All Sorts of Atmels

Hello,

this is my first instructable, so I hope someone can do anything good with it.

So, what exactly is this about?
Imagine: You are working on a project. You want to program in the Arduino language because of the simplicy. But you don't want to use a 28 pin monster. Or you need peripherals like CAN or similar what the normal Arduino supported MCUs don't have. So, what to do? Where are two alternatives:
1. Just don't use the Arduino language and use things like bits and ports what you can't understand.
2. Or continue reading this!


So, this instructable is going to show how to use the core files available from avr-developers.com. I'm also going to show you how to program the different MCUs and how to connect them to do so. At the end I'm going to give some ideas on what you can to with your new knowledge earned from this.


As a little side note I want to say something; I'm just 14 years old, so please, if something is not as good as if an 40 year old engineer had done it, have mercy, write a comment about it and I will try to fix it.

If you have any problems, feel free to post a comment or drop me an email (jan[at]dalheimer[dot]de). If you can't figure out what to use instead of the [at] and [dot], I don't want an email from you.

I just saw that some MCUs use the ArduinoISP as default and some use the USBtinyISP as default. To see how to change, see step 5.

I want to say a big thank you to Mark Sproul for the modified core files at avr-developers.com. THANK YOU!

So.... Let's get started!

IMPORTANT: I give no warranty in any way for anything in this instructable. Some names like Atmel, ATmega etc. belong to their owners. Also almost all pictures do NOT belong to me.

STEP 1: A List of That Atmels Can Be Programmed With This and That Is Needed

Now you know something about that this is about, but you wonder; what MCUs exact can I program using this instructable? First of all, only ATmegas, AT90s or ATtinys. Perhaps some day, PICs to. Or ARM. Or.. Or..
But for now, just MCUs from Atmel.

The frequency for each MCU can be found by choosing your MCU here, opening up the boards.txt file and then searching for your MCU. There will then stand yourBoard.bootloader.low_fuses=fuse and yourBoard.bootloader.high_fuses=fuse. Then copy the number that stands instead of fuse into the fields at the bottom of the page. Click "Apply Values" and then you can see what type and speed of crystal to use in the drop down menu further up on the page.

To find out that type of upload you should use, go to the AVR developers page and look that stands there.

So, here is a list of working MCUs, sorted by type and number:

Name:

== ATmega:

ATmega8
ATmega8u2
ATmega16
ATmega32
ATmega32u4
ATmega48
ATmega64
ATmega88P
ATmega128
ATmega128rfa1
ATmega165
ATmega165P
ATmega168
ATmega169
ATmega324P
ATmega328P
ATmega640
ATmega644
ATmega644P
ATmega645
ATmega1280
ATmega1281
ATmega1284P
ATmega2560
ATmega2561
ATmega3290P
ATmega8515
ATmega8535

== ATtiny:

ATtiny26
ATtiny45
ATtiny85
ATtiny2313

== Others:

AT90CAN128
AT90CAN32
AT90CAN64
AT90USB1286
AT90USB1287
AT90USB162
AT90USB646
AT90USB647


Now you know what MCUs you will be able to program with this. But what do you need?

1. An ISP programmer. This instructable will use an Arduino as ISP, but I will add a category on how you can use other ISP programmers at the end of the instructable.
2. An USB <-> Serial converter or an RS232 <-> UART converter (only needed for programming MCUs with bootloader).
3. An breadboard. You can also solder on a perfboard or a custom PCB, but that is up to you and will not be covered here.
4. An computer. (I think you have one, otherwise you couldn't read this :))
5. The Arduino program. It can be downloaded from here .
6. The core files available at avr-developers.com . See the next step for how to install it right.
7. The MCU to program.
8. Some really cool idea on that you want to do after reading this. (Optional, but recommend)

STEP 2: Setting Up the Software

This step is mainly about how to setting things up on the computer side.

First, if not already done, install the Arduino IDE from www.arduino.cc/en/Main/Software
Second, download the core files from www.avr-developers.com/corefiles/ . There is an instruction on how to install it right on the site, but to make it easy: just unzip the files to arduinoInstallPath\hardware there arduinoInstallPath is the path there you have installed the IDE.
Third, start the Arduino IDE and open File -> Examples -> Arduino ISP.
Fourth, connect your Arduino board to the computer.
Fifth, choose your Arduino board from the Tools -> Board and choose the serial port from Tools -> Serial Port.
Sixth, press upload.


Now you have set up everything on the computer side and made your ISP (Arduino) ready. You are now ready to start setting up your MCU to program.

STEP 3: Program MCUs What Don't Have Bootloaders


It will be different if you want to program MCUs without bootloaders or if you want to program ones with bootloader. For the ones without bootloader, continue reading directly, for the rest, go to the next step.

So, first, set your MCU into a breadboard. Open up the datasheet of the MCU to program (links on the second step). Look for the pinout and use this to connect VCC and GND to a 5V supply(this can be an Arduino). If there is an AVCC or AGND or similar, connect them to VCC (for AVCC) and GND (for AGND). Connect your Arduino to the MCU in the following way:

MCU          Arduino
SCK          13
MISO         12
MOSI         11
CS(reset) 10

Also connect an 10k resistor from the reset pin of the MCU to program to VCC.
And connect the XTAL pins to a crystal (see second step on that frequency) and with 22pF capacitors to ground.

After this you can start the programing!

Important : Remember the Arduino and the other MCUs do NOT have the same pin mapping. See this for what pin is that Port/Bit.

STEP 4: Program MCUs With Bootloader

Now we have arrived at the part for the programming of MCUs with bootloader. This is a bit more difficult than programming ones without bootloader. You can see witch MCUs have bootloader on the second step.

First, again, set your MCU into a breadboard, open the datasheet of the MCU and look for the pin out. Look for VCC and GND and connect them to a 5V supply. Connect your Arduino to the MCU after the following:

MCUArduino
SCK          13
MISO         12
MOSI         11
CS(reset) 10

Also connect an 10k resistor from the reset pin of the MCU to program to VCC.
And connect the XTAL pins to a crystal (see second step on that frequency) and with 22pF capacitors to ground.

Second, go to Tools -> Board and choose your board.
Go to Tools -> Burn Bootloader -> w/ Arduino as ISP . Now the bootloader will be burned onto the MCU. This may take some time, so do something good in the time like designing your next project or similar.

Then the bootloader is burned you can disconnect your Arduino from the MCU.

Now you can start the programming. For this you can use your Arduino again. Take out the ATmega328 (Arduino) from it's position and connect the reset pin of the Arduino to the reset pin of the MCU to program. Also connect Arduino pin 0 to the TxD pin of your MCU and Arduino pin 1 to the RxD pin of your MCU (see pin out in datasheet again)

You can also use an breakout board of the FT232. Connect CTS to ground if you do!!! If you do, connect like this:

MCUFT232
Rx         Tx
Tx          Rx
Reset   RTS
VCC      5V
GND     GND
GND     CTS

Connections not mentioned from the breakout board of the FT232 should not be connected.

Choose your serial port under Tools -> Serial Port . Open the code you want to upload and press upload. Done.

Important : Remember the Arduino and the other MCUs do NOT have the same pin mapping. See this for what pin is that Port/Bit.

STEP 5: Using Another ISP Than the Arduino

If you don't have an Arduino to use as ISP, there is another way. You can also use the following ISP programmers:

AVR ISP
AVRISP mkII
USBtinyISP
Parallel Programmer

To use one of these, you must do some things different. First of all; then burning the bootloader on MCUs with bootloader you must use Tools -> Burn Bootloader and then the ISP to use.
Then uploading code to MCUs without bootloader, you must go into arduinoInstallPath/hardware/arduino-extras/boards.txt and find your MCU. To find the right one can be a bit tricky, but if you use Ctrl+F and type the number (not the letters. for example: type 646 instead of AT90USB646 or 2313 instead of ATtiny2313 etc.) into the search field you should be able to find it. Then type type.upload.using=programmer, there type is the name of the MCU (look at the lines around) and programmer can be any of the following:

avrisp (AVRISP)
avrispmkii (AVRISP mkII)
usbtinyisp (USBtinyISP)
parallel (Parallel Programmer)
arduinoisp (Arduino ISP)

For example, in the boards.txt for the ATtiny2313 it stands:
arduino_attiny2313.name=Arduino-ATtiny2313

arduino_attiny2313.upload.using=arduinoisp
arduino_attiny2313.upload.protocol=stk500
arduino_attiny2313.upload.maximum_size=2048
arduino_attiny2313.upload.speed=19200

arduino_attiny2313.bootloader.low_fuses=0xe4
arduino_attiny2313.bootloader.high_fuses=0xdf
arduino_attiny2313.bootloader.path=attiny45
arduino_attiny2313.bootloader.file=ATmegaBOOT.hex
arduino_attiny2313.bootloader.unlock_bits=0x3F
arduino_attiny2313.bootloader.lock_bits=0x0F

arduino_attiny2313.build.mcu=attiny2313
arduino_attiny2313.build.f_cpu=8000000L
arduino_attiny2313.build.core=arduino


Now add arduino_attiny2313.upload.using=avrisp, save the file, restart the Arduino IDE and voila!

If you need help you can write a comment.

STEP 6: Pin Outs

The pin outs are always like the following:

Digital pins:

Digital pin 1: Port A, Bit 0 = PA0
Digital pin 2: Port A, Bit 1 = PA1
...
Digital pin 8: Port A, Bit 7 = PA7
Digital pin 9: Port B, Bit 0 = PB0
Digital pin 10: Port B, Bit 1 = PB1
etc. etc. etc.

Analog pins:

The analog pins are defined like the above, but the ADC pin with the first register (after the alphabet; Port A is before Port B etc.) what has ADC and the first bit (bit 0) is analog pin 0, the ADC pin with the first register what has ADC and the second bit of that register is analog pin 1.
etc. etc.

PWM pins:

PWM pins have the same pin numbers as normal digital pins. To see witch digital pins are PWM enabled, look at the pin out in the datasheet. At some pins, there will stand "OC#@" There the # is a number and the @ is a letter. The @ is not always present. So on every pin there is stand OC + a number + a letter (not always) has hardware PWM.

Serial pins:

Serial pins are defined as RXD and TXD. Some times there are multiply hardware Serial lines. If this is present, TXD and RXD are Serial, TXD1 and RXD1 are Serial1 etc. etc.

Other pins:

To see that pins have I,,2,,C, SPI etc. look at the datasheet and search for the corresponding pins (I,,2,,C: SDA and SCL etc.)

Interrupts:

The interrupt pins are labeled with INT#, there # is the number of the interrupt.



If anything is unclear, post a comment.

STEP 7: USB and CAN

Some of the MCUs listed in the second step have onboard USB or CAN. For how to connect them, see here:

USB:

Just use 22ohm resistors between D+ & D+ and D- & D-. In some datasheets it doesn't stand D+ or D-, it stands DM (for D-) and DP (for D+).

CAN:

There are many CAN circuits out there, with different ICs etc. Exchange nameOfDevice with the name of your MCU on this link. You should then find images with your device and CAN.

68 Comments

Hello i have a problem and it is that after i download arduino ide and everything you said i cant find the atmega8515 in boards, by the way i am using the avrmk2 ISP

Open the Arduino IDE.Open the File > Preferencesmenu item.Enter the following URL in Additional Boards Manager URLs: https://mcudude.github.io/MajorCore/package_MCUdude_MajorCore_index.jsonSeparate the URLs using a comma ( , ) if you have more than one URLOpen the Tools > Board > Boards Manager... menu item.Wait for the platform indexes to finish downloading.Scroll down until you see the MajorCore entry and click on it.Click Install.After installation is complete close the Boards Managerwindow.

I am not able to burn the bootloader for atmega 88PB it is showing an error

avrdude: Device signature = 0x1e9316 (probably m88pb)

avrdude: Expected signature for ATmega88P is 1E 93 0F

Double check chip, or use -F to override this check.

I have selected the right controller in board option as 88PB and the connections are also correct.

Please help

thank u...

Thanks a million. Have spent countless hours searching for a pin explaination and have finally found this. Thanks to you, I can now finish my program. Great tutorial.

Help please
I have some Attiny 26, Atmega 8au and Atmega 2561 au in my hobby box and I can't bootload them using this tutorial. what i got is just a lot of errors during compilation of the sketch.
My first question is, for those people who did bootload their atmega chips successful, what is your PC operating system and during that time what version of arduino ide you use?

Jayson


Could you tell what changes to make to pin_arduino.h file to program an atmega128 using USBasp programmer.

I have programmed an atmega32 successfully using arduino ide but in this case the pin_arduino.h file was already available.

Thank You

Hello!

I wanna use the third step on atmega32A. Is it possible? and which Crystal (XTAL) shall I use ?

Thanks for this nice instructables!

-Prithul

great work... but you haven’t solved one problem yet :-) The Arduino IDE doesn’t scroll... if your board is below the horizon of the screen in the arduino output, no way to get to it :-)

i like your work dude please keep it up. thanks

hello,

could you give more information about the bootloader for the at90usb646
in Arduino?

The best teachers are the ones who share the gift of knowledge that they have been given with others. You already show the character of a great teacher ...keep up the great work ; it is appreciated !

Build_it_Bob

thanks sooo much u saved me heart attack:D tought wont work for atmea32
hey boy? does it work on Atmega16??
Super Instructable!!!
What about the new Arduino IDE (vs. >1.0) ?
i was using usbasp with 168 ATMEGA like you said add on the program.txt arduino_attiny2313.upload.using=avrisp so i change lit bit by
ATMEGA168.upload.using=usbasp. it works. thanks for great instructable!
It would be fine if you´d said, that the image is an ATtiny2313. To have a better access to this example try to have the pinmapping in a table.

A great job for a 14 Year old boy!

themroc
Pin mappings are on the mfr site for the chips, no reason for him to duplicate work for an indestructible with such a wide range of options.
Have you loaded the blink sketch, chose ATtiny2313 board and tried to compile it?
It always throws a error for me. Has yours been compiling OK?

W
More Comments