Go Down

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


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?


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)



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.


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

Thank You!!!

Go Up