O makefile abaixo automatiza todo o processo:
GCCFLAGS=-g -Os -Wall -mcall-prologues -mmcu=atmega8
LINKFLAGS=-Wl,-Map,${PROGNAME}.map
AVRDUDEFLAGS=-c usbtiny -p atmega8
LINKOBJECTS=ht1632c.o
PROGNAME=Teste1
all: ${PROGNAME}.hex
program: ${PROGNAME}-upload
${PROGNAME}.hex: ${PROGNAME}.c ht1632c.c
avr-gcc ${GCCFLAGS} -o ht1632c.o -c ht1632c.c
avr-gcc ${GCCFLAGS} ${LINKFLAGS} -o ${PROGNAME}.o ${PROGNAME}.c ${LINKOBJECTS}
avr-objcopy -O ihex ${PROGNAME}.o ${PROGNAME}.hex
${PROGNAME}-upload: ${PROGNAME}.hex
avrdude ${AVRDUDEFLAGS} -U flash:w:${PROGNAME}.hex:a
Estamos usando aqui alguns recursos mais avançados do make:
- Nas linhas iniciais definimos algumas "macros", isto é, nomes para textos que serão usados posteriormente. Por exemplo, definimos que PROGNAME corresponde a Teste1.
- Usamos a sintaxe $(MACRO) para colocar o texto correspondente à macro MACRO. Por exemplo, a primeira regra do makefile é all: $(PROGNAME).hex, o que equivale a all: Teste1.hex. Reparar que com o uso de macros fica fácil fazer uma alteração se refletir em todo o arquivo.
A gravação da Flash usa o nosso velho conhecido avrdude. Neste caso estamos gravando somente a Flash, mantendo os fuses com os valores anteriores.
O vídeo abaixo mostra o programa em execução no display.
Reparar que a sequência na qual os LEDs são acendidos é um pouco estranha. Os quatro bits de cada posição da memória do controlador controlam quatro LEDs consecutivos com o bit menos significativo controlando o LED mais à direita. As posições de memória são mapeadas em "zig-zag" dentro de cada módulo 8x8 do display. O endereço 0 controla os primeiros quatro LEDs do primeiro módulo, o endereço 1 controla os quatro LEDs à direita; o endereço 2 os LEDs à esquerda na segunda linha do primeiro módulo e assim por diante até o final do módulo. O endereço 16 controla os primeiros quatro LEDs do segundo módulo e assim sucessivamente.
No próximo post faremos uma rotina para endereçar os LEDs de uma forma mais simples.
Nenhum comentário:
Postar um comentário