Koeohjelma:
#include <avr/io.h>
#include <util/delay.h>
int main(void)
{
#ifdef DDRA
DDRA |= 3;
#else
DDRB |= (3 << 4);
#endif
char a = 0;
while(1) {
a++;
a&=3;
#ifdef PORTA
PORTA |= a;
#else
PORTB |= (a << 4);
#endif
_delay_ms(1000);
#ifdef PORTA
PORTA &= ~(a);
#else
PORTB &= ~(a << 4);
#endif
}
}
makefile:
MCU=atmega644p
#MCU=atmega328p
F_CPU=8000000
CC=avr-gcc
OBJCOPY=avr-objcopy
CFLAGS=-std=c99 -Wall -g -Os -mmcu=${MCU} -DF_CPU=${F_CPU} -I.
TARGET=main
SRCS=main.c
all:
${CC} ${CFLAGS} -o ${TARGET}.bin ${SRCS}
${OBJCOPY} -j .text -j .data -O ihex ${TARGET}.bin ${TARGET}.hex
flash:
avrdude -p ${MCU} -c usbasp-clone -U flash:w:${TARGET}.hex:i -F -P usb
clean:
rm -f *.bin *.hex
Samoilla käskyillä mene ihan kiltisti atmega328p:hen, joka on arduino-levyssä (arduino nano).
Kotoa löytyy myös Arduino Uno-levyjä, joten silläkin jos keksitte ohjelmoinnin, niin käypi.
Tällaista herjaa antaa, kun yritän flashata sen atmega644p:hen.
~/avr-cpp$ make flash
avrdude -p atmega644p -c usbasp-clone -U flash:w:main.hex:i -F -P usb
avrdude: warning: cannot set sck period. please check for usbasp firmware update.
avrdude: error: program enable: target doesn't answer. 1
avrdude: initialization failed, rc=-1
avrdude: AVR device initialized and ready to accept instructions
avrdude: Device signature = 0xd026bb
avrdude: Expected signature for ATmega644P is 1E 96 0A
avrdude: NOTE: "flash" memory has been specified, an erase cycle will be performed
To disable this feature, specify the -D option.
avrdude done. Thank you.
make: *** [makefile:15: flash] Virhe 1
Kääntyy kyllä ihan kiltisti, mutta flashääminen epäonnistuu ...
... ja olen yrittänyt googlaillakin, mutta en ole löytänyt toimivaa ratkaisua.