Você está na página 1de 5

Parpadeo de Leds en un Atmega

Resumen:
En esta segunda leccion de programacion de microcontroladores de la fabrica Atmel con
lenguaje C, vamos a realizar un programa que haga que una fila de leds, tengan un parpadeo
que nos da la sensacion del movimiento de una luz que se desplaza.
Esquema Electronico:

Programando en C:
1. Abrimos el programa Atmel Studio 6.0, nos mostrara la siguiente pantalla:

2. Hacemos clic en New Proyect, nos aparece la pantalla en cual vamos a especificar, el
nombre del proyecto, el tipo de lenguaje de programacin que vamos a utilizar (tenemos dos
lenguanje C++ y C), as que escribimos y seleccionamos la ruta donde se guardaran los
archivos que nos genere al compilar el programa, todo lo dejamos tal como nos muestra la
siguiente imagen:

3. Le damos OK, luego nos aparece el cuadro en el cual vamos a seleccionar el


microcontrolador Atmel que vamos a utilizar, vamos a utilizar el microcontrolador Atmega8, tal
como se muestra a continuacin:

4. Finalmente le damos OK, y nos aparecer la pagina principal, en el cual vamos a escribir
todo nuestro programa en lenguaje C, la imagen que nos presenta es la siguiente:

5. Empecemos con la programacin, as que les presento el programa elaborado, que


posteriormente se explicara paso a paso, cada una de las funciones y palabras reservadas
usadas.

6. Analizando el cdigo del programa:


//Se utiliza para introducir comentarios.
#include <avr/io.h>
/*Llamamos a nuestra hoja la librera que contiene las funciones para la configuracin y
manejo de los puertos de entrada y salida del microcontrolador*/
#include <util/delay.h>
/*Llamamos a nuestra hoja la librera que contiene todas las funciones para el control de
retardos de tiempo, entre las funciones mas usadas son: _delay_ms(), _delay_loop_1(),
delay_loop_2(), entre otras funciones que miden el tiempo de retardo que deseemos dar al
realizar una accin.*/
int main(void){
}
/*Funcin principal, en el se encuentra todo lo que va ha realizar nuestro microcontrolador*/
DDRD = 0xFF;
/*Con la funcin DDRD, le decimos que vamos a configurar el puerto D, si fuera DDRB,
configuramos el puerto B, etc.
El valor 0xFF, el un valor Hexadecimal, 0x...Significa que vamos a escribir un valor
Hexadecimal, 0xb..,significa que vamos a escribir un valor binario, para este caso FF = 255, es
decir que todos los pines del puerto D, van ha ser configurados como salidas (0 = entrada; 1 =
salida).*/

while(1){
}
/*Es una sentencia de control, es decir, esta funcin proviene del lenguanje C, lo que dice es
que mientras sea 1, hacemos todo lo que esta dentro, para este caso al introducir en su

parmetro (1), esto siempre sera verdadero y por lo tanto se ha creado un lazo cerrado,
siempre se va ha repetir todo lo que esta dentro de esta funcin de control.
for(int i=1; i<=128; i=i*2){
}
/*Esta es otra funcin de control, el cual hace uso de una variable llamada i de tipo int (valor de
8 bits), bueno lo que dice esta funcin es que configuramos a la variable i con int(valor de 0 a
255), todo lo que este dentro se va ha repetir mientras i<=128, y cada vez que se repita i va ha
tomar el valor de i*2, es decir cada vez que el bucle se repita la variable i se va ha multiplicar
por 2 (i=i*2) y esto se va ha repetir hasta que i sea menor o igual a 128 (i<=128).*/
PORTD = i;
/*A todos los pines del puerto D, o mejor aun todo el puerto D va ha tomar el valor de i, es decir
cada pin del puerto D, va ha funcionar como un dgito de una numero de 8 bits.*/
_delay_loop_2(30000);
/*Esta funcin hace que el proceso anterior se repita por el tiempo que engloba su parmetro,
para este caso es de 30000, recuerde que _delay_loop_2(), es una funcin que genera tiempo
cortos, es decir en el orden de los micro segundo (us) as que cuando decimos
_delay_loop_2(30000), le estamos dando 30000us de retardo.*/

for( int i=128; i>=1; i-=i/2){


}
/*En esta parte del programa vamos a hacer una lectura inversa, si se han dado cuenta en el
primer for, el puerto D toma los valores de 1, 2, 4, 8, 16, 32, 64, 128, estos valores en forma
fsica son los valores que tiene por separado cada pin del puerto D, en este for se hace el
proceso inverso, es decir empezamos del valor mas alto 128, 64, 32..., 1; y as logramos el
efecto del encendido o mejor dicho del recorrido de un led en toda una fila de 8 leds.
7. Finalmente compilamos el programa, si no tenemos errores, nos mostrara la siguiente
ventana, al compilar:

Lo que nos importa es que al final, en la parte de la salida nos muestre la siguiente frase:

Build succeeded.
========== Build: 1 succeeded or up-to-date, 0 failed, 0 skipped ==========
Esto nos indica que se ha creado correctamente nuestro archivo hexadecimal, as como nos
muestra la siguiente imagen:

Bueno eso es todo, espero que lo simulen en proteus e intente modificar el cdigo, para que se
familiaricen con la programacin de microcontroladores Atmel, con lenguanje C.

Você também pode gostar