Go Down

Topic: Question about programming an ATmega16A (Read 2818 times) previous topic - next topic

RationalAsh

So I'm going to take part in a competition to make a line following robot. I am not allowed to use arduinos so I am doing AVR programming. I have this ATmega16a with me and I think it contains a bootloader called Blips? but I'm not completely sure.

What I want to know is, can I overwrite the bootloader that is already present in this thing with optiboot? I am using my Arduino UNO R3 as an ISP. Also, Is the optiboot compatible with a 40 pin ATmega16A?

Or can I just ignore the bootloader and upload files into the ATmega16A using my Arduino as an ISP?

RationalAsh

I should also mention that I am going to program the ATmega16A with AVR (hex) code. Not Arduino sketches.

Nick Gammon

In hex code? Seriously? Dangling from a rope also?

That's a strange competition, if I may say.

You can upload using Arduino as ISP, I should think.
Please post technical questions on the forum, not by personal message. Thanks!

More info:
http://www.gammon.com.au/electronics

RationalAsh

The organizer's think that Arduino programming is "too easy". I'll try to upload using the Arduino then...

Nick Gammon

You can write some sophisticated complex programs on the Arduino, using C++. Forcing you to write in hex is a bit crazy, IMHO, because no-one writes like that these days. It's not a useful skill to acquire. Assembler, perhaps.

It would be like having a writing competition, but make you tap out the essay with a pencil taped to your nose. It's adding a ridiculous extra level of complexity that doesn't prove anything.
Please post technical questions on the forum, not by personal message. Thanks!

More info:
http://www.gammon.com.au/electronics

RationalAsh

I was a bit miffed at not being able to use my Arduino too but I've already signed up. So I might as well go ahead with it.

I tried to upload this simple program with my arduino as an ISP. I used the ArduinoISP sketch that comes with the examples in the Arduino IDE.

Something is wrong.

When the makefile is set to atmega16a this is what happens:

Code: [Select]
avrdude -p atmega16a -P com12 -c arduino    -U flash:w:main.hex
avrdude: AVR Part "atmega16a" not found.

Valid parts are:
  t10  = ATtiny10        [C:\WinAVR-20100110\bin\avrdude.conf:15443]
  t8   = ATtiny9         [C:\WinAVR-20100110\bin\avrdude.conf:15403]
  t5   = ATtiny5         [C:\WinAVR-20100110\bin\avrdude.conf:15363]
  t4   = ATtiny4         [C:\WinAVR-20100110\bin\avrdude.conf:15323]
  ucr2 = 32UC3A0512      [C:\WinAVR-20100110\bin\avrdude.conf:15302]
  x128a4 = ATXMEGA128A4    [C:\WinAVR-20100110\bin\avrdude.conf:15204]
  x64a4 = ATXMEGA64A4     [C:\WinAVR-20100110\bin\avrdude.conf:15107]
  x32a4 = ATXMEGA32A4     [C:\WinAVR-20100110\bin\avrdude.conf:15010]
  x16a4 = ATXMEGA16A4     [C:\WinAVR-20100110\bin\avrdude.conf:14913]
  x256a3b = ATXMEGA256A3B   [C:\WinAVR-20100110\bin\avrdude.conf:14816]
  x256a3 = ATXMEGA256A3    [C:\WinAVR-20100110\bin\avrdude.conf:14719]
  x192a3 = ATXMEGA192A3    [C:\WinAVR-20100110\bin\avrdude.conf:14622]
  x128a3 = ATXMEGA128A3    [C:\WinAVR-20100110\bin\avrdude.conf:14525]
  x64a3 = ATXMEGA64A3     [C:\WinAVR-20100110\bin\avrdude.conf:14428]
  x256a1 = ATXMEGA256A1    [C:\WinAVR-20100110\bin\avrdude.conf:14331]
  x192a1 = ATXMEGA192A1    [C:\WinAVR-20100110\bin\avrdude.conf:14234]
  x128a1d = ATXMEGA128A1REVD [C:\WinAVR-20100110\bin\avrdude.conf:14137]
  x128a1 = ATXMEGA128A1    [C:\WinAVR-20100110\bin\avrdude.conf:14040]
  x64a1 = ATXMEGA64A1     [C:\WinAVR-20100110\bin\avrdude.conf:13943]
  m6450 = ATMEGA6450      [C:\WinAVR-20100110\bin\avrdude.conf:13754]
  m3250 = ATMEGA3250      [C:\WinAVR-20100110\bin\avrdude.conf:13565]
  m645 = ATMEGA645       [C:\WinAVR-20100110\bin\avrdude.conf:13376]
  m325 = ATMEGA325       [C:\WinAVR-20100110\bin\avrdude.conf:13187]
  usb82 = AT90USB82       [C:\WinAVR-20100110\bin\avrdude.conf:13007]
  usb162 = AT90USB162      [C:\WinAVR-20100110\bin\avrdude.conf:12823]
  usb1287 = AT90USB1287     [C:\WinAVR-20100110\bin\avrdude.conf:12634]
  usb1286 = AT90USB1286     [C:\WinAVR-20100110\bin\avrdude.conf:12445]
  usb647 = AT90USB647      [C:\WinAVR-20100110\bin\avrdude.conf:12257]
  usb646 = AT90USB646      [C:\WinAVR-20100110\bin\avrdude.conf:12068]
  m32u4 = ATmega32U4      [C:\WinAVR-20100110\bin\avrdude.conf:11880]
  t84  = ATtiny84        [C:\WinAVR-20100110\bin\avrdude.conf:11697]
  t44  = ATtiny44        [C:\WinAVR-20100110\bin\avrdude.conf:11515]
  t24  = ATtiny24        [C:\WinAVR-20100110\bin\avrdude.conf:11333]
  m128rfa1 = ATMEGA128RFA1   [C:\WinAVR-20100110\bin\avrdude.conf:11145]
  m2561 = ATMEGA2561      [C:\WinAVR-20100110\bin\avrdude.conf:10951]
  m2560 = ATMEGA2560      [C:\WinAVR-20100110\bin\avrdude.conf:10758]
  m1281 = ATMEGA1281      [C:\WinAVR-20100110\bin\avrdude.conf:10570]
  m1280 = ATMEGA1280      [C:\WinAVR-20100110\bin\avrdude.conf:10381]
  m640 = ATMEGA640       [C:\WinAVR-20100110\bin\avrdude.conf:10193]
  t85  = ATtiny85        [C:\WinAVR-20100110\bin\avrdude.conf:10012]
  t45  = ATtiny45        [C:\WinAVR-20100110\bin\avrdude.conf:9833]
  t25  = ATtiny25        [C:\WinAVR-20100110\bin\avrdude.conf:9653]
  pwm3b = AT90PWM3B       [C:\WinAVR-20100110\bin\avrdude.conf:9472]
  pwm2b = AT90PWM2B       [C:\WinAVR-20100110\bin\avrdude.conf:9289]
  pwm3 = AT90PWM3        [C:\WinAVR-20100110\bin\avrdude.conf:9106]
  pwm2 = AT90PWM2        [C:\WinAVR-20100110\bin\avrdude.conf:8922]
  t2313 = ATtiny2313      [C:\WinAVR-20100110\bin\avrdude.conf:8735]
  m328p = ATMEGA328P      [C:\WinAVR-20100110\bin\avrdude.conf:8547]
  t88  = attiny88        [C:\WinAVR-20100110\bin\avrdude.conf:8361]
  m168 = ATMEGA168       [C:\WinAVR-20100110\bin\avrdude.conf:8173]
  m88  = ATMEGA88        [C:\WinAVR-20100110\bin\avrdude.conf:7987]
  m48  = ATMEGA48        [C:\WinAVR-20100110\bin\avrdude.conf:7800]
  t861 = ATTINY861       [C:\WinAVR-20100110\bin\avrdude.conf:7612]
  t461 = ATTINY461       [C:\WinAVR-20100110\bin\avrdude.conf:7423]
  t261 = ATTINY261       [C:\WinAVR-20100110\bin\avrdude.conf:7234]
  t26  = ATTINY26        [C:\WinAVR-20100110\bin\avrdude.conf:7077]
  m8535 = ATMEGA8535      [C:\WinAVR-20100110\bin\avrdude.conf:6919]
  m8515 = ATMEGA8515      [C:\WinAVR-20100110\bin\avrdude.conf:6761]
  m8   = ATMEGA8         [C:\WinAVR-20100110\bin\avrdude.conf:6600]
  m161 = ATMEGA161       [C:\WinAVR-20100110\bin\avrdude.conf:6460]
  m32  = ATMEGA32        [C:\WinAVR-20100110\bin\avrdude.conf:6285]
  m6490 = ATMEGA6490      [C:\WinAVR-20100110\bin\avrdude.conf:6092]
  m649 = ATMEGA649       [C:\WinAVR-20100110\bin\avrdude.conf:5907]
  m3290p = ATMEGA3290P     [C:\WinAVR-20100110\bin\avrdude.conf:5724]
  m3290 = ATMEGA3290      [C:\WinAVR-20100110\bin\avrdude.conf:5539]
  m329p = ATMEGA329P      [C:\WinAVR-20100110\bin\avrdude.conf:5354]
  m329 = ATMEGA329       [C:\WinAVR-20100110\bin\avrdude.conf:5170]
  m169 = ATMEGA169       [C:\WinAVR-20100110\bin\avrdude.conf:4990]
  m163 = ATMEGA163       [C:\WinAVR-20100110\bin\avrdude.conf:4832]
  m162 = ATMEGA162       [C:\WinAVR-20100110\bin\avrdude.conf:4636]
  m1284p = ATMEGA1284P     [C:\WinAVR-20100110\bin\avrdude.conf:4446]
  m644p = ATMEGA644P      [C:\WinAVR-20100110\bin\avrdude.conf:4254]
  m644 = ATMEGA644       [C:\WinAVR-20100110\bin\avrdude.conf:4064]
  m324p = ATMEGA324P      [C:\WinAVR-20100110\bin\avrdude.conf:3873]
  m164p = ATMEGA164P      [C:\WinAVR-20100110\bin\avrdude.conf:3682]
  m16  = ATMEGA16        [C:\WinAVR-20100110\bin\avrdude.conf:3504]
  c32  = AT90CAN32       [C:\WinAVR-20100110\bin\avrdude.conf:3313]
  c64  = AT90CAN64       [C:\WinAVR-20100110\bin\avrdude.conf:3123]
  c128 = AT90CAN128      [C:\WinAVR-20100110\bin\avrdude.conf:2933]
  m128 = ATMEGA128       [C:\WinAVR-20100110\bin\avrdude.conf:2755]
  m64  = ATMEGA64        [C:\WinAVR-20100110\bin\avrdude.conf:2574]
  m103 = ATMEGA103       [C:\WinAVR-20100110\bin\avrdude.conf:2434]
  8535 = AT90S8535       [C:\WinAVR-20100110\bin\avrdude.conf:2313]
  8515 = AT90S8515       [C:\WinAVR-20100110\bin\avrdude.conf:2199]
  4434 = AT90S4434       [C:\WinAVR-20100110\bin\avrdude.conf:2116]
  4433 = AT90S4433       [C:\WinAVR-20100110\bin\avrdude.conf:1992]
  2343 = AT90S2343       [C:\WinAVR-20100110\bin\avrdude.conf:1868]
  2333 = AT90S2333       [C:\WinAVR-20100110\bin\avrdude.conf:1740]
  2313 = AT90S2313       [C:\WinAVR-20100110\bin\avrdude.conf:1627]
  4414 = AT90S4414       [C:\WinAVR-20100110\bin\avrdude.conf:1514]
  1200 = AT90S1200       [C:\WinAVR-20100110\bin\avrdude.conf:1399]
  t15  = ATtiny15        [C:\WinAVR-20100110\bin\avrdude.conf:1266]
  t13  = ATtiny13        [C:\WinAVR-20100110\bin\avrdude.conf:1093]
  t12  = ATtiny12        [C:\WinAVR-20100110\bin\avrdude.conf:960]
  t11  = ATtiny11        [C:\WinAVR-20100110\bin\avrdude.conf:896]


When I change the device to atmega16 this is what happens:


Code: [Select]
avrdude -p atmega16 -P com12 -c arduino    -U flash:w:main.hex

avrdude: AVR device initialized and ready to accept instructions

Reading | ################################################## | 100% 0.00s

avrdude: Device signature = 0x1e950f
avrdude: Expected signature for ATMEGA16 is 1E 94 03
         Double check chip, or use -F to override this check.

avrdude done.  Thank you.


Any idea what might be wrong here?

RationalAsh

Quote
You can write some sophisticated complex programs on the Arduino, using C++. Forcing you to write in hex is a bit crazy, IMHO, because no-one writes like that these days. It's not a useful skill to acquire. Assembler, perhaps.

It would be like having a writing competition, but make you tap out the essay with a pencil taped to your nose. It's adding a ridiculous extra level of complexity that doesn't prove anything.


Also, after reading your comment,  I think I may have given the wrong impression. I am programming AVRs using C code written in WinAVR. I'm not allowed to use arduino code in the sense that I am not allowed to use functions like digitalWrite() and delay() which are intended to make coding on the arduino easier.

This is the code I attempted to upload:

Code: [Select]
#include <avr/io.h>


void main(void)
{
DDRB = 0b00000001;
PORTB = 0b00000001;

while (1)
{


}
}

westfw

Optiboot does not support the atmega16.

The 1e950f signature looks like it is from your 328p on the arduino, which means you probably havent disabled auto-reset.  And you didn't set the bit rate to 19200, either.

RationalAsh

Ooooh!! Yes!! I added the -b 19200 to the command and it uploaded the code successfully! XD

Thank You!!!

Go Up