system
February 8, 2013, 9:18pm
1
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?
system
February 8, 2013, 9:19pm
2
I should also mention that I am going to program the ATmega16A with AVR (hex) code. Not Arduino sketches.
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.
system
February 8, 2013, 10:32pm
4
The organizer's think that Arduino programming is "too easy". I'll try to upload using the Arduino then...
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.
system
February 9, 2013, 7:40am
6
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:
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:
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?
system
February 9, 2013, 8:19am
7
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:
#include <avr/io.h>
void main(void)
{
DDRB = 0b00000001;
PORTB = 0b00000001;
while (1)
{
}
}
westfw
February 9, 2013, 8:33am
8
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.
system
February 9, 2013, 9:59am
9
Ooooh!! Yes!! I added the -b 19200 to the command and it uploaded the code successfully! XD
Thank You!!!