Mostrando entradas con la etiqueta compiler. Mostrar todas las entradas
Mostrando entradas con la etiqueta compiler. Mostrar todas las entradas

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





lunes, 2 de agosto de 2021

SimulIDE Avra asm compiler

 




Avra  Avr asm compiler.


Después de varios artículos sobre el programa simulIDE, nos ponemos a programar en ensamblador con Avra  Avr asm compiler.
Hace unos años había programado en ensamblador para el microcontrolador ATmega88, y ahora que quiero probar simulIDE es un buen comienzo.
miATa2.html
miATa1.html
Trabajo en un entorno de Linux con Debian 10, por lo cual tengo instalado el ensamblador avra que es el que utilizo para ensamblar el código máquina.
En primer lugar realizo un programa que hace parpadear un LED , es el hola mundo en cuanto a programación.

Es un programa sencillo que permite probar el entorno de simulIDE junto con avra.



El siguiente programa es el clásico de utilizar un pulsador para encender un LED




El siguiente es un contador automático. Sirve para probar un LCD.


En este contador cuenta las pulsaciones de un botón.
También tenemos otro botón para contar, pero en este caso utiliza las interrupciones.


En este montaje realizo un reloj con fecha.

Utilizo el reloj interno de 8Mhz y coloco en el contador-2 el cristal de 32768 Hz.
Este cristal de cuarzo (32768) se debe colocar entre los pins B6-B7, en el simulador no lo he podido representar.
En un circuito real deberíamos programar los FUSES para que se emplee el reloj interno de 8MHz.

Para terminar con estas prácticas realizaré un semáforo simple.



Espero que les guste esta serie de montajes.

PROGRAMAS FUENTE

VIDEO DEMOSTRATIVO.


Saludos.
Juan Galaz