martes, 10 de agosto de 2021

SimulIDE - gcc-avr compiler

 




gcc-avr , GNU C compiler


En este artículo muestro como utilizar el compilador GCC-AVR .
Lo primero que debemos tener instalado el compilador gcc-avr , GNU C compiler (cross compiler for avr) .
Yo trabajo en Debian 10 y es fácil instalarlo de sus repositorios con Synaptic.
Ademas del fichero de simulación, debemos crear el Makefile junto con el programa  blink.c .
Para que se compile el programa debemos compilar el Makefile, que generará el fichero blink.hex , este será el que carguemos en el micro en la simulación.
Todos estos pasos se pueden ver bien en el vídeo demostrativo.


Circuito para blink.

blink.c
/*
 * blink
 * Juan Galaz
 * seta43.duckdns.org
 * seta43.blogspot.com
 * 2021
*/

#define F_CPU 16000000L

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


int main (void)
{
   DDRB  = 0xff;            
   PORTB = 0x03;            

    while(1)
        {
             PORTB = 0x01;
            _delay_ms(500);
             PORTB = 0x00;
            _delay_ms(500);
        }
    return 0;           
}

Makefile
MCU=atmega328
#F_CPU=16000000
CC=avr-gcc
OBJCOPY=avr-objcopy
#CFLAGS=-std=c99 -Wall -g -Os -mmcu=${MCU} -DF_CPU=${F_CPU} -I.
CFLAGS=-std=c99 -Wall -g -Os -mmcu=${MCU}  -I.
TARGET=blink
SRCS=blink.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 -U flash:w:${TARGET}.hex:i -F -P usb

clean:
    rm -f *.bin *.hex

He creado dos blink, el segundo llamado hola2.c , donde la funcion de delay las creo yo mediante un código en ensamblador insertado en el código C.


Programa que genera una serie de pulso con diferentes frecuencias, dependiendo del pulsador seleccionado.


Un contador automático que muestra la cuenta en un LCD.
Además dispone de un pulsador para poner el contador a cero.
He de comentar que en la utilización del LCD he tenido que cambiar la inicialización del desplazamiento.
//SENDI(0x04);    //modo decremento para el 1602
SENDI(0x06);     //modo incremento para el Hd44780
Aún tengo la duda si son diferentes o el simulador funciona mal.


Un contador que cuenta las pulsaciones en un pulsador.
Mediante otro pulsador ponemos el contador a cero.


Un simple semáforo


Espero que les guste esta serie de montajes.

PROGRAMAS FUENTE

VIDEO DEMOSTRATIVO.


Saludos.
Juan Galaz





No hay comentarios:

Publicar un comentario