Como soy un completo novato, pensé que empezaría con algo realmente simple: hacer un parpadeo en el led. Según varios sitios web, esto es algo que todos deberían poder hacer ... Hmmm ... En mi caso, el LED no hace nada. Se mantiene oscuro. ¿Por qué?
Este es el programa que he escrito (en una máquina con Ubuntu 12.04):
#define F_CPU 1000000UL
#include <avr/io.h>
#include <util/delay.h>
void sleep(int milliseconds)
{
while (milliseconds > 0)
{
_delay_ms(1);
milliseconds--;
}
}
int main()
{
// set lowest bit to output in DDRB register
DDRB |= 0x01;
while(1)
{
// switch led on
PORTB &= 0x01;
sleep(500);
// switch led off
PORTB &= 0x00;
sleep(500);
}
return 0;
}
Luego seguí estos pasos:
-
Compilé mi programa:
avr-gcc -mmcu = atmega8 test-001-blinkingled.c -o test-001-blinkingled.o -Os
-
Hex
avr-objcopy -j .text -j .data -O ihex test-001-blinkingled.o test-001-blinkingled.hex
-
Subido al microcontrolador (usando un AVRISPmkII):
sudo avrdude -p m8 -P usb -c avrispv2 -U flash: w: test-001-blinkingled.hex -F -v
con el siguiente resultado:
salida de avrdude http://users.telenet.be/cedalion/avrdude-output.png
Esta es una imagen de mi circuito muy básico: (Yo uso un viejo adaptador de 9V para la alimentación, así que usé 2 resistencias para regular el voltaje a 4.95V)
Mi circuito de placa de pruebas http://users.telenet.be/cedalion/circuit.JPG
¿Qué estoy haciendo mal? Si ves otras cosas extrañas o estúpidas, ¡educame!