Mini Curso CONTROL

XIII MUSTRA TECNOLOGICA Y XII SEMINARIO TALLER DE INSTRUMENTACIÓN Y CONTROL MINI CURSO: APLIQUEMOS C CCS Y PROTEUS EN MI

Views 102 Downloads 4 File size 11MB

Report DMCA / Copyright

DOWNLOAD FILE

Recommend stories

Citation preview

XIII MUSTRA TECNOLOGICA Y XII SEMINARIO TALLER DE INSTRUMENTACIÓN Y CONTROL MINI CURSO: APLIQUEMOS C CCS Y PROTEUS EN MICROCONTROLADORES PIC

DOCENTE:

EDWARD MARÍN GARCÍA INGENIERO Y TECNÓLOGO ELECTRÓNICO MAGISTER EN INGENIERÍA ELÉCTRICA.

MINI CURSO: APLIQUEMOS C CCS Y PROTEUS EN MICROCONTROLADORES PIC

EL MINI CURSO INCLUYE: • Libreta de apuntes conmemorativas al XIII seminario taller y XII muestra tecnológica. • Presentación del mini curso. • Aplicaciones simuladas en el mini curso. • Instalador para compilador C CCS (opcional). • Instalador simulador proteus (opcional). • Archivo con instrucciones para el manejo del compilador C CCS.

HERRAMIENTAS • Compilador PIC – C. PCW

• Simulador PROTEUS. ISIS profesional

• Documentos de trabajo con ejemplos, ejercicios y simulaciones.

COMPILADORES PARA PIC PROGRAMACION EN LENGUAJES DE BAJO NIVEL: • Códigos en lenguaje de maquina. (0 – 1). En paquetes de bits. PROGRAMACIÓN EN LENGUAJES DE ALTO NIVEL: • Utiliza programas independientes a la plataforma utilizada por los dispositivos. • Algunos programas son: BASIC, FORTRAN, PASCAL y C.

DIFERENCIAS DESCRIPCIÓN

ENSAMBLADOR

LENGUAJE C

Facilidad de programación.

X

Tiempos de desarrollo menor.

X

Portabilidad entre sistemas.

X

Desarrollos de programas estructurados.

X

Fuertemente dependiente al hardware

X

Menor numero de instrucciones para generar una tarea.

X

Mayor velocidad de ejecución.

X

Reducido numero de instrucciones

X

COMPILADORES DE C PARA PIC Para la elección del compilador se deben tener en cuenta los siguientes factores: • Optimización del código generado. • Dispositivos para los que compilador es capaz de generar código. • Funciones y directivas definidas. • Posibilidades adicionales como inserción de código ensamblador…

• Precio.

SOFTWARE USADO • MPLAB – C18 (Microchip): usado para PIC de 8 bits. • MPLAB – C24 (Microchip): usado para PIC de 16 bits y dsPIC. • MPLAB – C32 (Microchip): usado para PIC de 32 bits, PIC gama alta. • PICC (Hi – Tech): soporte para gama de 24 y 32 bits. Muy reservado por los fabricantes.

• PCW compiler: • MikroC: compilador liviano. Básico para iniciar a trabajar con los PIC. • MPC, CC5X, SDCC compiler…

COMPILADOR C CCS INTRODUCCIÓN Desarrollado específicamente para PIC, obteniendo la máxima optimización del compilador con esos dispositivos. Es un compilador que convierte el lenguaje de alto nivel en código de maquina.

COMPILADOR C CCS CARACTERÍSTICAS • Amplia librería de funciones predefinidas. • Comandos de preprocesado. • Suministra los controladores para: – LCD. – Convertidores AD. – Relojes en tiempo real. – EEprom.

COMPILADOR C CCS CARACTERÍSTICAS Además contiene: • Directivas estándar (#include, etc). • Directivas específicas para PIC (#device, etc). • Funciones específicas (bit_set(), etc)

INICIAMOS CON LA FORMA DE PROGRAMACION CON EL COMPILADOR C CCS PARA MICROCONTROLADORES PIC SIGAMOS LA PRESENTACIÓN DETALLADAMENTE

ENTORNO DE TRABAJO Existen tres compiladores básicos: • PCB: usado en PIC de 12 bits. • PCM: usado en PIC 14 bits. • PCH: usado para PIC 16 bits. Incluye compiladores con windows IDE (PCW y PCWH). Los ficheros utilizados son: C, H, PJT, HEX, COF

ENTORNO DE TRABAJO

COMO CREAR UN PROYECTO?

COMO CREAR UN ARCHIVO FUENTE?

ENTORNO DEL ARCHIVO FUENTE

CREA PROYECTO MANUAL

SELECCION DEL MICROCONTROLADOR A TRABAJAR

OJO!!!!!! DIRECTIVAS, FUNCIONES E INSTRUCCIONES USADAS EN C CCS

Para escribir un programa en C en CCS se debe tener en cuenta la siguiente estructura: • Directivas de preprocesado: controlan la conversión del programa a código máquina por parte del compilador. #include • Programas o funciones: conjunto de instrucciones. void main() • Instrucciones: Indica el comportamiento del PIC en todo momento. eneable_interrupts(global);

• Comentarios: permite describir lo que significa cada línea. // habilita interrupción general

VARIABLES “Global - Local” Se utilizan para nombrar posiciones de memoria. Pueden ser de tipo LOCAL o GLOBAL.

OPERADORES ASIGNACION:

OPERADORES ARITMETICOS

OPERADORES RELACIONALES - LOGICOS

OPERADORES DE BITS - PUNTEROS

FUNCIONES EN C Las funciones pueden devolver valores a las sentencias que la invocan, indicando el tipo de dato. En caso que no se requiera devolver valores se debe especificar con el valor VOID.

Las funciones pueden agruparse en ficheros de librerías , que se pueden utilizar mediante la directiva #include

DIRECTIVAS comienzan con el símbolo # y continúan con un comando específico.

COMO LAS EMPLEAMOS? #DEVICE chip: permite definir el PIC a utilizar. #device PIC16f877 #FUSES options: define la palabra de configuración para programar un PIC. #device PIC16f877 #fuses XT, NOWDT #INCLUDE “filename”: permite incluir el fichero en el programa. #include #USE DELAY (CLOCK=SPEED): define la frecuencia del oscilador del PIC. #include #use delay(clock=4000000)

FUNCIONES PREDEFINIDAS EN C CCS C CCS posee funciones predefinidas para usar el PIC y sus periféricos.

LISTO!!! EMPECEMOS A CAMELLAR

MANEJO DE PUERTOS Se pueden gestionar de dos formas: • Definiendo su posición de memoria en RAM. #byte variable = cte; • Usando las directivas específicas del compilador. #use fast_io(), #use fixed_io(), #standard_io().

PRIMERA FORMA Accediendo a la RAM usando declaración de registros en C.

la

#BYTE TRISB = 0x86; #BYTE PORTB = 0x06; Después de declaradas, pueden ser usadas por medio de asignaciones sencillas en C: TRISB = 0x00; PORTB = 0Xff;

//Puerto B como salida //Pines del puerto B activos

FUNCIONES RELACIONADAS El uso de estas directivas debe venir acompañado de algunas funciones específicas del compilador como son: output_x(valor); //saca el valor por el puerto. input_x(); //obtiene el valor del puerto. set_tris_x(valor); //carga el registro TRIS con valor. port_b_pullups(TRUE/FALSE);

FUNCIONES RELACIONADAS O con funciones para el manejo de los bits: bit_clear(variable,bit); //0 en bit de variable. bit_set(variable,bit); //1 en bit de variable. bit_test(variable,bit); //muestra el bit de variable. swap(variable); //intercambio de bits. O con funciones definidas a los terminales: output_low(pin definido); //pin definido en 0. output_high(pin definido); //pin definido en 1. output_bit(pin definido,valor); //pin a valor. output_toggle(pin definido); //invierte pin. input(pin definido);

//lee el pin

APLICACION 1

Desarrollar un sistema que permita prender y apagar dos LEDs, a manera de complemento, en donde, el primero encienda y el segundo apague, usando como mando un suiche.

#include #use DELAY (clock = 4000000) //reloj 4 MHz #FUSES XT, NOWDT //definición de registros por RAM #BYTE TRISA = 0x85 #BYTE PORTA = 0x05 #BYTE TRISB = 0x86 #BYTE PORTB = 0x06 #BYTE OPTION_REG = 0x81

//programa principal void main(){ //habilitar pull-up bit_clear(OPTION_REG,7); //pines como entrada / salida bit_set(TRISB,0); //B0 entrada bit_clear(TRISB,1); //B1 salida bit_clear(TRISA,0); //A0 salida

//ciclo infinito de ejecución while(1){ //prendo/apago LEDs if(bit_test(PORTB,0) == 1){ bit_set(PORTB,1); bit_clear(PORTA,0);} //prendo/apago LEDs else{ bit_clear(PORTB,1); bit_set(PORTA,0);} } }

SIMULACION

AHORA MANEJEMOS… DISPLAY LCD. TECLADOS MATRICIALES.

COMO MANEJO UN DISPLAY LCD? El compilador C CCS tiene un driver que permite manipular los LCD. El archivo es LCD.C y debe llamarse como:

#include

FUNCIONES RELACIONADAS Funciones definidas para el manejo de LCD:

lcd_init();

//primera función que debe ser llamada.

//¿Qué hace? //borra LCD - configuración a 4 bits – doble línea – modo //encendido – cursor apagado y sin parpadeo – autoincremento //de puntero de direcciones – sin desplazamiento real.

OTRAS FUNCIONES RELACIONADAS lcd_gotoxy(x,y); lcd_getc(x,y); lcd_putc(s);

//posición en LCD (x,y). //lee carácter en posición (x,y). //escribe variable tipo char.

También se tiene las siguientes funciones: \f \n \b

//limpia LCD. //cursor salta de línea. //cursor retrocede.

Además: printf(string); printf(cstring, values…); printf(fname, cstring, values…); //string es una cadena o arreglo de caracteres, values es una lista de variables, fname es una función.

El formato utilizado es %nt, cuya indicación lo muestran las siguientes tablas: n puede ser: 1-9

indicación Cuantos caracteres.

01 – 09

Cantidad de ceros a la izquierda.

1.1-9.9

Coma flotante.

t puede ser: c s u d Lu Ld x X Lx LX f g e w

indicación caracter Cadena o carácter Entero sin signo. Entero con signo. Entero largo sin signo Entero largo con signo Entero hexadecimal (minúscula). Entero hexadecimal (mayúscula). Entero largo hexadecimal (minúscula). Entero largo hexadecimal (mayúscula). Flotante con truncado. Flotante con redondeo Flotante en formato exponencial. Entero sin signo con decimales insertados.

COMO CONECTO LA LCD AL MICROCONTROLADOR? Por defecto se usa el PORTD, pero en caso que se requiera usarlo en el PORTB, se debe acceder directamente al driver de la LCD y se comenta la instrucción:

//#define use_portb_lcd TRUE

LIBRERIA LCD

APLICACION 2

Desarrollar un sistema que permita visualizar en display LCD el resultado de una operación matemática y obtener los resultados en decimal y hexadecimal, cambiando los resultados por medio de un mando externo ingresados por el PORTA.

#include #fuses XT, NOWDT #use delay (clock = 4000000) #include #BYTE TRISA = 0x85 //definición de registros por RAM. #BYTE PORTA = 0x05 int i=0, resultado;

//declaración de variables globales

void decimal(); void hexa();

//declaración de funciones.

void main(){ //programa principal int valor1=3, valor2=17;

//declaración de variable de operación

lcd_init();

//inicialización de LCD

bit_set(TRISA,0); resultado = valor1 + valor2; //ciclo infinito de ejecución while(1){

//A0 entrada //operación

//ciclo infinito de ejecución while(1){ //menú principal lcd_gotoxy(1,1); printf(lcd_putc, "INICIO OPERACION"); lcd_gotoxy(1,2); printf(lcd_putc, "SELECCIONE...");

//pregunta por pulso de mando externo PORTA

if(bit_test(PORTA,0) == 1){ if(i == 0){ delay_ms(300); //anti rebote decimal();} } if(bit_test(PORTA,0) == 1){ if(i == 1){ delay_ms(300); //anti rebote hexa();} }

//función para resultado decimal

void decimal(){ lcd_gotoxy(1,1); printf(lcd_putc, "\fRESUL DECIMAL:%u\n", resultado); delay_ms(1000); i++; } //función para resultado hexadecimal

void hexa(){ lcd_gotoxy(1,1); printf(lcd_putc, "\fRESUL HEXA:%x\n", resultado); delay_ms(1000); i=0; }

SIMULACION

COMO MANEJO UN TECLADO MATRICIAL? Este compilador tiene incluido en sus librerías, el driver KBD.C, usado para el manejo de teclados matriciales de 3 x 4.

#include

FUNCIONES DEFINIDAS PARA EL MANEJO DEL TELADO MATRICIAL kbd_init(); //primera función que debe ser llamada. kbd_getc (); //retorna valor de tecla pulsada. COMO CONECTO UN TECLADO MICROCONTROLADOR?

MATRICIAL

AL

Este archivo viene por defecto para trabajar por el PORTD, pero en caso de requerir el manejo del dispositivo por el PORTB, se debe desactivar la siguiente instrucción del driver utilizado:

#define use_portb_kbd TRUE

APLICACION 3

Desarrollar un sistema que permita ingresar una clave de tres dígitos por medio de un teclado matricial de 3 x 4. Visualizar el carácter “*” cuando se van ingresando los datos en un display LCD de 2 x 16. El usuario en caso de ingresar los datos mal, en la pantalla aparecerá un mensaje , en caso de acertar con la clave, aparecerá el mensaje , e inmediatamente encenderá un LED.

#include #fuses XT,NOWDT,NOPROTECT,NOLVP #use delay(clock= 4000000) #include

//llamada a librería del LCD

#include

//llamada a librería de teclado.

char valido[3]={'1','2','3'};

//clave valida

void main() {

//programa principal

char k; int i, a, b; char data[3], clave[3];

//variables guardar clave y datos

kbd_init(); //inicializa teclado lcd_init(); //inicializa LCD port_b_pullups(TRUE); //activa resistencias de pull up

while (TRUE) { i=0; a=2; b=3;

//ciclo de ejecución infinito

printf(lcd_putc,"\fnumero 1\n"); while(i