Programación de microcontroladores Atmel en Linux (Parte III Hello World.)


El clásico hello-world aquel trozo de código que es ejecutado por primera vez en los cursos de programación y que obviamente ejecutaremos también para entender como funciona supongo que si alguien ha llegado a este entrada he de suponer que ha manejado algún tipo de programación sin embargo intentare ser lo mas claro posible para que sea de fácil aprendizaje para alguien igual de novato a mi.


De aquí en adelante y como lo dije antes no importa en que sistema operativo o que entorno de desarrollo queramos usar para empezar a programar nuestros microcontroladores el código sera siempre el mismo así que si eres usuario de otro sistema operativo no importa puedes seguir estas publicaciones sin ningún problema.

Herramientas

  • Necesitaremos el software Proteus de Labcenter Electronics (de momento eso es todo)

Manos a la obra

Bien lo primero sera abrir nuestro Code::Blocks (o el IDE que hallas escogido). y crearemos un nuevo proyecto no importa el nombre que le des yo le he dado el nombre de hola_mundo, he escogido el microcontrolador ATmega328p y deje la frecuencia por defecto.

el código que escribiremos sera el siguiente

#include <avr/io.h>
#include <util/delay.h>

int main(void)
{
    DDRB = 0x00;
    DDRD = 0xFF;

    while(1)
    {
        if(PINB == 0x01)
        {
            PORTD = 0x01;
            _delay_ms(150);
            PORTD = 0x00;
        }
    }

    return 0;
}

Antes de compilar es momento de explicar el código

#include <avr/io.h>  donde include es la directiva usada por C para incluir un archivo de cabecera o una librería y avr/io.h es aquella cabecera que contiene las definiciones de los registros, las entradas, las salidas y todo lo relacionado con el microcontrolador.

#include <util/delay.h> util/delay.h incluye toda la información en el manejo de tiempos, retardos es mas fácil entenderlo en el código.

int main(void) junto con el primer { y el ultimo } es la forma en que devuelve el dato  de la función main la cual no tiene ningún parámetro de entrada, ummm puede sonar un poco complicado así que por ahora digamos que dentro del primer { y el ultimo } va a ir el código que queremos que se ejecute mientras se comprende mejor el significado de lo que es una función.

DDRx Es el Data Direction Register del puerto x donde x puede ser cualquiera de nuestros puertos para el caso del ejemplo seria B o D.

DDRB = 0x00; Se le esta diciendo el puerto B sea configurado como entrada
DDRD = 0xFF; Se le esta diciendo a nuestro microcontrolador que el puerto D sera salida, para la configuración de los puertos si ponemos un 0 sera entrada y si ponemos un 1 sera una salida.

while(1) La mayoría de los veces que programamos un microcontrolador queremos que realice una tarea la cual sea infinita me explico queremos que un microcontrolador habra una puerta cada vez que pase una persona por lo tanto siempre estaremos leyendo el estado del sensor si hay persona abrirá la puerta si no pues no entonces es una tarea que nunca termina, el while es una estructura de control que se utiliza en microcontroladores para hacer un loop infinito y todo codigo que se encuentre dentro de el siempre se volverá a ejecutar

if (PINB == 0X01)  La instrucción if es otra estructura de control que permite decidir que hacer, PINx Pin INput del puerto seleccionado en nuestro probrama en este caso seria de puerto B. la traducción de esta linea seria si el puerto b es igual al detectar un 1 logico en el primer pin del puerto haga las instrucciones que se encuentran denttro de los corchetes del if.

PORTx Es un puerto de nuestro microcontrolador donde x puede ser el puerto d o el puerto b esta instrucción es utilizada para poner niveles lógicos en un puerto de salida.

PORTD = 0x01; En el pin1 del puerto d se pone en estado alto.

_delay_ms(150); es la razón por la que incluimos la cabecera util/delay.h, esta instrucción le dice al microcontrolador que espere 150 milisegundos antes de ejecutar la próxima orden

PORTD = 0x00; se apaga la salida del puerto d

return 0; En la programación con microcontroladores esta linea no tiene mucho sentido pero es necesario ponerlo.

presionamos el botón de compilar y en la consola nos dara el siguiente mensaje


Abrimos ISIS y realizamos el siguiente esquema


No es necesario colocar el cristal debido a que solo vamos a simular en caso de realizar el montaje físico si deberíamos incluir el resto de componentes.
Damos clic derecho sobre el micro y escogemos la opción de editar propiedades


Se abre una ventana donde nos interesa el apartado de program file y le damos clic en la carpeta.


buscaremos el .hex que se creo al compilar este se encuentra en la carpeta del proyecto/bin/release


Presionamos en abrir y luego en ok y le damos en el botón de play a la simulación si todo salio bien veras encender el led cada vez que presiones el botón conectado al pin1 del puerto b (PB0)

Comentarios

Entradas más populares de este blog

SAFE MODE en PS Vita

Instalar HENkaku ENSO en PS Vita