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

Mini Curso CONTROL

Embed Size (px)

DESCRIPTION

TALLER DEINSTRUMENTACIÓN YCONTROL

Citation preview

Page 1: Mini Curso CONTROL

XIII MUSTRA TECNOLOGICA Y XII SEMINARIO TALLER DE

INSTRUMENTACIÓN Y CONTROL

MINI CURSO:APLIQUEMOS C CCS Y

PROTEUS EN MICROCONTROLADORES PIC

Page 2: Mini Curso CONTROL

DOCENTE:EDWARD MARÍN GARCÍA

INGENIERO Y TECNÓLOGO ELECTRÓNICOMAGISTER EN INGENIERÍA ELÉCTRICA.

MINI CURSO:APLIQUEMOS C CCS Y

PROTEUS EN MICROCONTROLADORES PIC

Page 3: Mini Curso CONTROL

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.

Page 4: Mini Curso CONTROL

HERRAMIENTAS• Compilador PIC – C.

PCW

• Simulador PROTEUS.ISIS profesional

• Documentos de trabajo con ejemplos, ejercicios y simulaciones.

Page 5: Mini Curso CONTROL

COMPILADORES PARA PICPROGRAMACION 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.

Page 6: Mini Curso CONTROL

DIFERENCIAS DESCRIPCIÓN ENSAMBLADOR LENGUAJE C

Facilidad de programación. XTiempos de desarrollo menor. XPortabilidad entre sistemas. XDesarrollos de programas

estructurados.X

Fuertemente dependiente al hardware XMenor numero de instrucciones para

generar una tarea.X

Mayor velocidad de ejecución. XReducido numero de instrucciones X

Page 7: Mini Curso CONTROL

COMPILADORES DE C PARA PIC

Para la elección del compilador se deben teneren cuenta los siguientes factores:

• Optimización del código generado.• Dispositivos para los que compilador es capazde generar código.

• Funciones y directivas definidas.• Posibilidades adicionales como inserción decódigo ensamblador…

• Precio.

Page 8: Mini Curso CONTROL

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…

Page 9: Mini Curso CONTROL

COMPILADOR C CCS

INTRODUCCIÓN

Desarrollado específicamente para PIC,obteniendo la máxima optimización del compiladorcon esos dispositivos.

Es un compilador que convierte el lenguaje de altonivel en código de maquina.

Page 10: Mini Curso CONTROL

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.

Page 11: Mini Curso CONTROL

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)

Page 12: Mini Curso CONTROL

INICIAMOS CON LA FORMA DE PROGRAMACION CON EL

COMPILADOR C CCS PARA MICROCONTROLADORES PIC

SIGAMOS LA PRESENTACIÓN DETALLADAMENTE

Page 13: Mini Curso CONTROL

ENTORNO DE TRABAJOExisten 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 yPCWH).

Los ficheros utilizados son: C, H, PJT, HEX,COF

Page 14: Mini Curso CONTROL
Page 15: Mini Curso CONTROL

ENTORNO DE TRABAJO

Page 16: Mini Curso CONTROL

COMO CREAR UN PROYECTO?

Page 17: Mini Curso CONTROL

COMO CREAR UN ARCHIVO FUENTE?

Page 18: Mini Curso CONTROL

ENTORNO DEL ARCHIVO FUENTE

Page 19: Mini Curso CONTROL

CREA PROYECTO MANUAL

Page 20: Mini Curso CONTROL

SELECCION DEL MICROCONTROLADOR A TRABAJAR

Page 21: Mini Curso CONTROL

OJO!!!!!!DIRECTIVAS, FUNCIONES

E INSTRUCCIONES USADAS EN C CCS

Page 22: Mini Curso CONTROL

Para escribir un programa en C en CCS sedebe tener en cuenta la siguiente estructura:

• Directivas de preprocesado: controlan la conversióndel programa a código máquina por parte delcompilador.

#include<16f877.h>• Programas o funciones: conjunto de instrucciones.

void main()• Instrucciones: Indica el comportamiento del PIC entodo momento.

eneable_interrupts(global);• Comentarios: permite describir lo que significa cadalínea.

// habilita interrupción general

Page 23: Mini Curso CONTROL
Page 24: Mini Curso CONTROL

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

Page 25: Mini Curso CONTROL

OPERADORESASIGNACION:

Page 26: Mini Curso CONTROL

OPERADORES

ARITMETICOS

Page 27: Mini Curso CONTROL

OPERADORES

RELACIONALES - LOGICOS

Page 28: Mini Curso CONTROL

OPERADORES

DE BITS - PUNTEROS

Page 29: Mini Curso CONTROL

FUNCIONES EN CLas funciones pueden devolver valores a lassentencias que la invocan, indicando el tipo de dato.En caso que no se requiera devolver valores se debeespecificar con el valor VOID.

Las funciones pueden agruparse en ficheros delibrerías <fichero.h>, que se pueden utilizar mediante ladirectiva #include<fichero.h>

Page 30: Mini Curso CONTROL

DIRECTIVAScomienzancon el símbolo# y continúancon uncomandoespecífico.

Page 31: Mini Curso CONTROL

COMO LAS EMPLEAMOS?#DEVICE chip: permite definir el PIC a utilizar.

#device PIC16f877#FUSES options: define la palabra de configuraciónpara programar un PIC.

#device PIC16f877#fuses XT, NOWDT

#INCLUDE “filename”: permite incluir el fichero en elprograma.

#include<16f877>#USE DELAY (CLOCK=SPEED): define la frecuenciadel oscilador del PIC.

#include<16f877>#use delay(clock=4000000)

Page 32: Mini Curso CONTROL

FUNCIONES PREDEFINIDAS EN C CCSC CCS poseefuncionespredefinidaspara usar elPIC y susperiféricos.

Page 33: Mini Curso CONTROL

LISTO!!!EMPECEMOS A CAMELLAR

Page 34: Mini Curso CONTROL

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().

Page 35: Mini Curso CONTROL

PRIMERA FORMA

Accediendo a la RAM usando ladeclaración de registros en C.

#BYTE TRISB = 0x86;#BYTE PORTB = 0x06;

Después de declaradas, pueden ser usadas por medio de asignaciones sencillas en C:

TRISB = 0x00; //Puerto B como salidaPORTB = 0Xff; //Pines del puerto B activos

Page 36: Mini Curso CONTROL

FUNCIONES RELACIONADASEl uso de estas directivas debe veniracompañado de algunas funciones específicasdel 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);

Page 37: Mini Curso CONTROL

FUNCIONES RELACIONADASO 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

Page 38: Mini Curso CONTROL

APLICACION 1

Page 39: Mini Curso CONTROL

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

Page 40: Mini Curso CONTROL

#include <16f887.h>#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

Page 41: Mini Curso CONTROL

//programa principalvoid main(){

//habilitar pull-upbit_clear(OPTION_REG,7);

//pines como entrada / salidabit_set(TRISB,0); //B0 entradabit_clear(TRISB,1); //B1 salidabit_clear(TRISA,0); //A0 salida

Page 42: Mini Curso CONTROL

//ciclo infinito de ejecuciónwhile(1){

//prendo/apago LEDsif(bit_test(PORTB,0) == 1){

bit_set(PORTB,1);bit_clear(PORTA,0);}

//prendo/apago LEDselse{

bit_clear(PORTB,1);bit_set(PORTA,0);}

}}

Page 43: Mini Curso CONTROL

SIMULACION

Page 44: Mini Curso CONTROL

AHORA MANEJEMOS… DISPLAY LCD.

TECLADOS MATRICIALES.

Page 45: Mini Curso CONTROL

COMO MANEJO UN DISPLAY LCD?

El compilador C CCS tiene un driver quepermite manipular los LCD.

El archivo es LCD.C y debe llamarsecomo:

#include <lcd.c>

Page 46: Mini Curso CONTROL

FUNCIONES RELACIONADASFunciones definidas para el manejo de LCD:

lcd_init(); //primera función que debe ser llamada.

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

Page 47: Mini Curso CONTROL

OTRAS FUNCIONES RELACIONADAS

lcd_gotoxy(x,y); //posición en LCD (x,y).

lcd_getc(x,y); //lee carácter en posición (x,y).

lcd_putc(s); //escribe variable tipo char.

También se tiene las siguientes funciones:

\f //limpia LCD.

\n //cursor salta de línea.

\b //cursor retrocede.

Page 48: Mini Curso CONTROL

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 lomuestran las siguientes tablas:

n puede ser: indicación1-9 Cuantos caracteres.

01 – 09 Cantidad de ceros a la izquierda.

1.1-9.9 Coma flotante.

Page 49: Mini Curso CONTROL

t puede ser: indicaciónc caracters Cadena o carácteru Entero sin signo.d Entero con signo.

Lu Entero largo sin signoLd Entero largo con signox Entero hexadecimal (minúscula).X Entero hexadecimal (mayúscula).Lx Entero largo hexadecimal (minúscula).LX Entero largo hexadecimal (mayúscula).f Flotante con truncado.g Flotante con redondeoe Flotante en formato exponencial.w Entero sin signo con decimales

insertados.

Page 50: Mini Curso CONTROL

COMO CONECTO LA LCD AL MICROCONTROLADOR?

Por defecto se usa el PORTD, pero en caso quese requiera usarlo en el PORTB, se debeacceder directamente al driver de la LCD y secomenta la instrucción:

//#define use_portb_lcd TRUE

LIBRERIA LCD

Page 51: Mini Curso CONTROL

APLICACION 2

Page 52: Mini Curso CONTROL

Desarrollar un sistema que permita visualizaren display LCD el resultado de una operaciónmatemática y obtener los resultados endecimal y hexadecimal, cambiando losresultados por medio de un mando externoingresados por el PORTA.

Page 53: Mini Curso CONTROL

#include <16f887.h>#fuses XT, NOWDT#use delay (clock = 4000000)#include <LCD.C>

#BYTE TRISA = 0x85 //definición de registros por RAM.#BYTE PORTA = 0x05

int i=0, resultado; //declaración de variables globales

void decimal(); //declaración de funciones.void hexa();

Page 54: Mini Curso CONTROL

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); //A0 entradaresultado = valor1 + valor2; //operación

//ciclo infinito de ejecuciónwhile(1){

Page 55: Mini Curso CONTROL

//ciclo infinito de ejecuciónwhile(1){

//menú principallcd_gotoxy(1,1);printf(lcd_putc, "INICIO OPERACION");lcd_gotoxy(1,2);printf(lcd_putc, "SELECCIONE...");

Page 56: Mini Curso CONTROL

//pregunta por pulso de mando externo PORTA

if(bit_test(PORTA,0) == 1){if(i == 0){

delay_ms(300); //anti rebotedecimal();}

}if(bit_test(PORTA,0) == 1){

if(i == 1){delay_ms(300); //anti rebotehexa();}

}

Page 57: Mini Curso CONTROL

//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;

}

Page 58: Mini Curso CONTROL

SIMULACION

Page 59: Mini Curso CONTROL

COMO MANEJO UN TECLADO MATRICIAL?

Este compilador tiene incluido en sus librerías,el driver KBD.C, usado para el manejo deteclados matriciales de 3 x 4.

#include <kbd.c>

Page 60: Mini Curso CONTROL

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 MATRICIAL ALMICROCONTROLADOR?

Este archivo viene por defecto para trabajar por elPORTD, pero en caso de requerir el manejo deldispositivo por el PORTB, se debe desactivar lasiguiente instrucción del driver utilizado:

#define use_portb_kbd TRUE

Page 61: Mini Curso CONTROL

APLICACION 3

Page 62: Mini Curso CONTROL

Desarrollar un sistema que permita ingresar una clave de tresdígitos por medio de un teclado matricial de 3 x 4. Visualizar elcarácter “*” cuando se van ingresando los datos en un displayLCD de 2 x 16. El usuario en caso de ingresar los datos mal, en lapantalla aparecerá un mensaje <<calve incorrecta>>, en caso deacertar con la clave, aparecerá el mensaje <<clave correcta>>, einmediatamente encenderá un LED.

Page 63: Mini Curso CONTROL

#include <16F877.h>#fuses XT,NOWDT,NOPROTECT,NOLVP#use delay(clock= 4000000)

#include <lcd.c> //llamada a librería del LCD

#include <kbd.c> //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 tecladolcd_init(); //inicializa LCDport_b_pullups(TRUE); //activa resistencias de pull up

Page 64: Mini Curso CONTROL

while (TRUE) { //ciclo de ejecución infinitoi=0; a=2; b=3;

printf(lcd_putc,"\fnumero 1\n"); //Para primer dato

while(i<=2){ //corrimiento de tres datosk=kbd_getc(); //Lee el tecladoif (k!=0) { //Si se ha pulsado alguna tecla

data[i]=k; //se guarda en la posición correspondiente

i++;

Page 65: Mini Curso CONTROL

printf(lcd_putc,"\fnumero %u\n",i+1); //Siguiente dato

lcd_gotoxy(1,2); //visualiza caracter '*'printf(lcd_putc, "*");lcd_gotoxy((a-1),2); //visualiza caracter '*'printf(lcd_putc, "*");lcd_gotoxy((b-2),2); //visualiza caracter '*'printf(lcd_putc, "*");

a++;b++;

}}

for (i=0;i<=2;i++) { clave[i]=valido[i]; } //Clave valida

Page 66: Mini Curso CONTROL

//Compara los datos con la claveif ((data[0]==clave[0])&&(data[1]==clave[1])&&(data[2]==clave[2])){

//datos correctos!!!printf(lcd_putc,"\fClave correcta"); output_high(PIN_A0); //activa LEDdelay_ms(1000);output_low(PIN_A0); //desactiva LED

}

else //datos incorrectos!!!printf(lcd_putc,"\fClave incorrecta"); //Clave incorrectadelay_ms(1000);

}}

Page 67: Mini Curso CONTROL

SIMULACION

Page 68: Mini Curso CONTROL

OTRA VENTAJAOtra ventaja que ofrece el compilador C CCSpara el manejo de teclados matriciales es queestos se pueden trabajar con los display LCDen el mismo puerto, permitiendo ladisminución de pines a la hora de algunaaplicación especial.

NOTA: esto se puede realizar siempre ycuando no requiera el manejo de lasinterrupciones externas por RB4 – RB7.

Page 69: Mini Curso CONTROL

APLICACION 4

Page 70: Mini Curso CONTROL

Desarrollar un sistema que permita visualizaren un display LCD de 2 x 16, la palabracorrespondiente a la tecla presionada. Use elmínimo de pines posible.

Page 71: Mini Curso CONTROL

#include <16F877.h>#fuses XT,NOWDT,NOPROTECT,NOLVP#use delay(clock= 4000000)

#include <lcd.c>#include <kbd.c>

void main() { //función principalchar k; //declaración de variablesint x;

lcd_init(); //inicialización de LCD.kbd_init(); //inicialización de teclado.port_b_pullups(TRUE); //resistencias de pullups activas

Page 72: Mini Curso CONTROL

lcd_putc("\fOprima tecla...\n");

//ciclo de ejecucion infinitowhile (TRUE) {

k=kbd_getc(); //lectura de tecladox=k-48; //Conversión numéricaif(k! =0){

//pregunta por la tecla presionada y visualiza su nombre

Page 73: Mini Curso CONTROL

if(k=='1')printf(lcd_putc,"\fUNO");

if(k=='2')printf(lcd_putc,"\fDOS");

if(k=='3')printf(lcd_putc,"\fTRES");

if(k=='4')printf(lcd_putc,"\fCUATRO");

if(k=='5')printf(lcd_putc,"\fCINCO");

if(k=='6')printf(lcd_putc,"\fSEIS");

Page 74: Mini Curso CONTROL

if(k=='7')printf(lcd_putc,"\fSIETE");

if(k=='8')printf(lcd_putc,"\fOCHO");

if(k=='9')printf(lcd_putc,"\fNUEVE");

if(k=='0')printf(lcd_putc,"\fDIEZ");

if(k=='*')printf(lcd_putc,"\fASTERISCO");

if(k=='#')printf(lcd_putc,"\fNUMERAL");

delay_ms(1000);lcd_putc("\fOprima tecla...\n");

Page 75: Mini Curso CONTROL

SIMULACION

Page 76: Mini Curso CONTROL

AHORA MANEJEMOS…

LA INTERRUPCION EXTERNA RB0/INT.

Page 77: Mini Curso CONTROL

LA INTERRUPCION EXTERNA RB0La fuente de interrupciones externa INT/RB0 es muyimportante para atender eventos externos en tiemporeal. Cuando la línea RB0/INT se hace una petición deinterrupción el bit INTF del registro INTCON se pone a“1” de forma automática y, si el bit GIE está a “1”, sepone en marcha el mecanismo ya comentado de lainterrupción.

Page 78: Mini Curso CONTROL

LA INTERRUPCION EXTERNA RB0Mediante el bit INTDEG del registro OPTION_REG esseleccionado el flanco activo de RB0/INT, ya que conéste puesto a “1” el flanco activo es el ascendente ycuando está a “0” el flanco activo es el descendente. Elprograma de atención a la interrupción antes deregresar al programa principal debe borrar el flag INTF,puesto que en caso contrario al ejecutar la instrucciónde retorno de interrupción RETFIE se volverá adesarrollar el mismo proceso de interrupción.

Page 79: Mini Curso CONTROL

COMO TRABAJO CON LA INTERRUPCION EXTERNA RB0?

Si se utilizan las directivas de interrupción, elcompilador genera el código necesario paraejecutar la función que sigue a la directiva.Además genera el código necesario paraguardar al principio y restituir al final elcontexto; también borrara el flag activo por lainterrupción.

#INT_EXT

Page 80: Mini Curso CONTROL

FUNCIONES DEFINIDASenable_interrupts(aplicacion); //habilita interrupción.

desable_interrupts(aplicacion); //deshabilita interrupción.

aplicación es un constante definida en el fichero de cabecera#include<16F87x.h>

Además se pueden utilizar las siguientes funciones:

ext_int_edge(H_TO_L); //interrupción por flanco de bajada.

ext_int_edge(L_TO_H); //interrupción por flanco de subida.

Enable_interrupts(aplicacion) INTCONGLOBAL 11000000 – C0hINT_EXT 00010000 – 10h

Page 81: Mini Curso CONTROL

APLICACION 5

Page 82: Mini Curso CONTROL

Desarrollar un sistema que permita encenderun LED durante 1 segundo cuando seproduzca una pulsación originada en el pinRB0.

Page 83: Mini Curso CONTROL

#include <16F887.h>#fuses XT, NOWDT, PUT, NOWRT#use delay(clock= 4000000) //frecuencia de reloj

#BYTE TRISB = 0x86 //definición de registros

#BYTE PORTA = 0x06

Page 84: Mini Curso CONTROL

#INT_EXT //directiva de interrupción por cambio en RB0

ext_isr(){ //Función de interrupción

output_high(PIN_B1); //enciende LED

delay_ms(1000); //tiempo de 1 segundo

output_low(PIN_B1); //Apaga LED

}

Page 85: Mini Curso CONTROL

void main() { //Programa principal

bit_set(TRISB,0); //B0 entradabit_clear(TRISB,1); //B1 salida

output_low(PIN_B1); //Apaga LEDport_b_pullups(TRUE); //Pull-up para RB0

enable_interrupts(INT_EXT); //Habilita interrupción RB0.ext_int_edge(L_TO_H); //flanco de subidaenable_interrupts(GLOBAL); //Habilita interrupción global

while (1){ //ciclo de ejecución infinito}

}

Page 86: Mini Curso CONTROL

SIMULACION

Page 87: Mini Curso CONTROL

AHORA MANEJEMOS…

EL TMR0

Page 88: Mini Curso CONTROL

EL CONTADOR/TEMPORIZADOR TMR0

Los TIMERs interrumpen la ejecución del programacuando los registros vinculados a estos, se desbordan,es decir, reinician su conteo después de llegar almáximo del valor. El máximo valor depende del tamañode este.

El TMR0 tiene asociado un registro de 8 bits.

Los registros asociados son:• OPTION_REG: configura el hardware.• INTCON: permite trabajar con la interrupción.• TRISA: habilita la patita RA4.

Page 89: Mini Curso CONTROL

EL CONTADOR/TEMPORIZADOR TMR0

El registro OPTION_REG modifica lo siguiente:

T0CS: bit de selección de la fuente de reloj para el TMR0.1 = transición RA4/T0CKI. 0 = ciclo de reloj interno (CLKOUT).

T0SE: flanco de transición del TMR0.1 = incrementa con transición de alto a bajo.0 =incrementa con transición de bajo a alto.

PSA: asignación del preescalador.1 = el preescalador es asignado a el WDT.0 = el preescalador es asignado al modulo Timer0.

PS2:PS0: bits de selección para la frecuencia del preescalador.

Page 90: Mini Curso CONTROL

EL CONTADOR/TEMPORIZADOR TMR0

La siguiente tabla determina el divisor de frecuencia programado:

El tiempo de desbordamiento el TMR0 se calcula según lasiguiente ecuación:

PS2, PS1 y PS0 TMR0000 1:2001 1:4010 1:8011 1:16100 1:32101 1:64110 1:128111 1:256

Page 91: Mini Curso CONTROL

COMO TRABAJO CON LA INTERRUPCION POR DESBORDAMIENTO DEL TMR0?

El compilador C CCS tiene una directiva usada para elmanejo de interrupciones usando el desbordamientodel TMR0:

#INT_TIMER0

Funciones definidas para el manejo del TMR0:setup_timer_0(mod); //configura el TMR0Donde mod indica la función a realizar por el TMR0

set_timer0(valor); //escribe valor (8 bits) en el registro.

aux=get_timer0(valor); //lee valor (8 bits) actual del registro.

Page 92: Mini Curso CONTROL

FUNCIONES DEFINIDAS

Los mod se pueden agrupar mediante elsímbolo |.

mod OPTION_REGRTCC_INTERNAL 0X00

RTCC_EXT_L_TO_H 0X20RTCC_EXT_H_TO_L 0X30

RTCC_DIV_1 0X08RTCC_DIV_2 0X00RTCC_DIV_4 0X01RTCC_DIV_8 0X02

RTCC_DIV_16 0X03RTCC_DIV_32 0X04RTCC_DIV_64 0X05

RTCC_DIV_128 0X06RTCC_DIV_256 0X07

Page 93: Mini Curso CONTROL

APLICACION 6

Page 94: Mini Curso CONTROL

Desarrollar un sistema que permita generaruna señal cuadrada de 1 kHz utilizando lainterrupción TMR0

Page 95: Mini Curso CONTROL

EXPLICACION!!!Para generar una señal de 1 kHz se necesita unsemiperiodo de 500 us. Según la ecuación para calculodel TMR0, utilizando un cristal de 4 MHz y upreescalador de 2, se tiene:

Esta relación solo se cumple en ensamblador, pero enlenguaje C, el compilador genera líneas de código queaumentan el tiempo de ejecución. Por tanto el valor acargar es:

Page 96: Mini Curso CONTROL

#INCLUDE <16F876.h>#use delay(clock=4000000)#fuses XT,NOWDT#use standard_io(B)

#int_TIMER0 //directiva de int. desb. TMR0

void TIMER0_isr(void) {output_toggle(PIN_B0);set_timer0 (0x1B); } //Se recarga el timer0

Page 97: Mini Curso CONTROL

void main() {setup_timer_0(RTCC_INTERNAL|RTCC_DIV_2); //Configuración timer0

set_timer0 (0x1B); //Carga del timer0

enable_interrupts(INT_TIMER0); //Habilita interrupción timer0

enable_interrupts(global); //Habilita interrupción general

while (1); //bucle infinito

Page 98: Mini Curso CONTROL

SIMULACION

Page 99: Mini Curso CONTROL

SIGAMOS CON…

EL CONVERSOR ANALOGO DIGITAL (A/D)

Page 100: Mini Curso CONTROL

CARACTERISTICASLos microcontroladores PIC de gama mediaposee un C A/D con las siguientescaracterísticas:

• 10 bits de resolución.• 8 Canales de entrada.• La resolución es función de la tensión de referencia.

Page 101: Mini Curso CONTROL

EJEMPLO

Vref+ = 5Vdc Vref- = tierraY el numero de bits del convertidor es: N = 10Resolución= 5 / 1024Resolución = 4.8 mV / bit.

Ahora, si la lectura es 512 LSB, la tensión analógica leída es:

VIN = 512 * 4.8 mVVIN = 2,4567 V

Page 102: Mini Curso CONTROL

REGISTROS DE TRABAJOEl módulo de A/D tiene cuatro registros. Estos

registros son:• ADRESH : Parte alta del resultado de la

conversión.• ADRESL: Parte baja del resultado de la

conversión.• ADCON0: Registro de Control 0 ;control del

funcionamiento del conversor.• ADCON1: Registro de Control 1;

configuración de los pines del puerto.

Page 103: Mini Curso CONTROL

REGISTRO ADCON0Controla la operación del CA/D

• ADCS1:ADCS0: En estos dos bits se hace laselección de la frecuencia de reloj para elConvertidor A/D.

00 = Fosc/201 = Fosc /810 = Fosc/3211 = FRC (Procede del oscilador RC interno)

Page 104: Mini Curso CONTROL

REGISTRO ADCON0Controla la operación del CA/D

• CH2:CH0: Aquí se selecciona el canal analógico por dondeentrará la señal a digitalizar.

000 = Canal 0, (RA0/AN0)001 = Canal 1, (RA1/AN1)010 = Canal 2, (RA2/AN2)011 = Canal 3, (RA3/AN3)100 = Canal 4, (RA4/AN4)101 = Canal 5, (RA5/AN5)110 = Canal 6, (RA6/AN6)111 = Canal 7, (RA7/AN7)

Page 105: Mini Curso CONTROL

REGISTRO ADCON0Controla la operación del CA/D

• GO/#DONE: bit de estado de la conversión A/D.1 = La conversión A/D está en marcha (mientras está a 1 se está

realizando la conversión).0 = La conversión ha finalizado. (el bit se pone a cero

automáticamente por hardware cuando la conversión A/D finaliza)el resultado de la conversión aparece en ADRESH:ADRESL.

• ADON: bit de puesta en marcha1 = El convertidor A/D está operativo.0 = El convertidor A/D está apagado y no consume corriente.

Page 106: Mini Curso CONTROL

REGISTRO ADECON1Se trata de un registro de configuración de los pinesdel puerto, este registro se compone de 8 bits:

• ADFM: Selecciona el formato del resultado de laconversión A/D.1 = Pone en el registro ARDESH los seis bits de mayor peso a “0”.0 = Pone los 6 bits de menor peso del registro ADRESL a “0”.

Page 107: Mini Curso CONTROL

REGISTRO ADECON1

• PCFG3:PCFG0: bits de configuración de los canalesde entrada del convertidor A/D. Se utilizan paraconfigurar las patillas como E/S digital o comoentrada analógica: A= Entrada Analógica; D = E/S Digital

Page 108: Mini Curso CONTROL

REGISTROS ADRESH - ADRESL

El par de registros ADRESH:ADRESL se carga con elresultado de 10 bits de la conversión A/D. Este par deregistros se extienden hasta 16 bits. El módulo A/Dtiene la posibilidad de justificar el resultado de 10 bitsdentro de los 16 bits de la pareja de registros. Laselección del formato de justificación a la izquierda oderecha se realiza con el bit ADFM (ADCON1). Los bitsrestantes (a los 10 de la conversión) se llenan conceros.

NOTA:Estos dos registros cuando el convertidor A/D está enOFF y no se utiliza, pueden utilizarse como dosregistros de 8 bits de propósito general.

Page 109: Mini Curso CONTROL

COMO TRABAJO CON EL CONVERSOR ANALOGO DIGITAL?

En el compilador C las funciones para manejarel conversor A/D son las siguientes:setup_adc(modo);modo: para la configuración del módulo conversor A/Dcorrespondientes a los bits 7:6 del registro ADCON0.

setup_adc(modo); ADCON0(1Fh)

ADC_OFF 00000000 - 00h

ADC_CLOCK_INTERNAL 11000000 - C0h

ADC_CLOCK_DIV_2 00000000 - 00h

ADC_CLOCK_DIV_8 01000000 - 40h

ADC_CLOCK_DIV_32 10000000 - 80h

Page 110: Mini Curso CONTROL

COMO TRABAJO CON EL CONVERSOR ANALOGO DIGITAL?

setup_adc_ports(valor);Valor: definición de las entradas analógicas correspondientes alos bits 3 – 0 del ADCON1.

setup_adc_channel(canal);Canal: selección del canal analógico correspondiente a los bits5:3 del registro ADCON0.

Page 111: Mini Curso CONTROL

Posibles valores para SETUP_ADC_PORTS(VALOR);

Page 112: Mini Curso CONTROL

ADEMAS…Valor = read_adc(); //Lectura del ADC.Lectura del resultado donde valor es un número enterode 16 bits según la directiva #DEVICE ADC =empleada. Dicha directiva trabaja según la tabla:

Page 113: Mini Curso CONTROL

APLICACION 7

Page 114: Mini Curso CONTROL

Desarrollar un sistema que permita leer unatensión analógica por el canal 0 (AN0),proveniente de una fuente, realizando lavariación por medio de un potenciómetro.

Page 115: Mini Curso CONTROL

#include <16F876.h>#device adc=10 //directiva para manejo ADC 10 bits

#FUSES XT, NOWDT#use delay(clock=4000000) //reloj

#include <LCD.C> //librería LCD

void main() { //inicio de programaint16 q; //declaracion de variables.float p;

Page 116: Mini Curso CONTROL

setup_adc_ports(AN0); //Canal 0 analógicosetup_adc(ADC_CLOCK_INTERNAL); //Fuente de reloj RC

lcd_init();

for (;;) { //ciclo infinito de ejecuciónset_adc_channel(0); //Habilitación canal 0delay_us(20); //tiempo de estabilizaciónq = read_adc(); //Lectura canal 0p = 5.0 * q / 1024.0; //Conversión a tensión

printf(lcd_putc, "\fADC = %4ld", q);printf(lcd_putc, "\nVoltage = %01.2fV", p);

delay_ms(100);}

Page 117: Mini Curso CONTROL

SIMULACION

Page 118: Mini Curso CONTROL

SIGAMOS CON…

COMUNICACION SERIAL USANDO EL MODULO

USART

Page 119: Mini Curso CONTROL

COMUNICACION SERIALCARACTERISTICAS:

• Transmisión de un bit a la vez.• Comunicación mucho más lenta.• Requiere de un número menor de líneas para

la transmisión.• Distancia de transferencia mayor.

Page 120: Mini Curso CONTROL

COMUNICACION SERIALEs una interfaz que designa una norma para elintercambio serie de datos binarios entre un equipoterminal de datos (DTE) y un equipo de terminación delcircuito de datos (DCE). Permite comunicación conotras computadoras y otros dispositivos como: mouse,impresoras, microcontroladores.

Page 121: Mini Curso CONTROL

COMUNICACION SERIALEl RS-232 C es una norma para la conexión entre un DTE y unDCE que define:

• Las características eléctricas.• Los niveles de tensión.• Las longitudes máximas a distintas velocidades.• Los nombres de las señales que intervienen en el

funcionamiento y la estructura del protocolo de comunicación.• El tipo de conector a emplear.

Esta norma establece una señalización eléctrica bipolar:

Recepción:• Nivel lógico 0 : +15...+3Voltios.• Nivel lógico 1 : -15...-3Voltios.Transmisión:• Nivel lógico 0 : +15…+5 Voltios.• Nivel lógico 1 : -15…-5 Voltios.

Page 122: Mini Curso CONTROL

COMUNICACION SERIALExisten dos formas de comunicación serial:

Sincrónica: además de una línea sobre la quetransfieren los datos, se necesita otra que contengalos pulsos de reloj.La duración del bit está determinada por la duracióndel pulso de sincronismo.

Page 123: Mini Curso CONTROL

COMUNICACION SERIALExisten dos formas de comunicación serial:

Asincrónica: los pulsos de reloj no son necesarios yse acude a otros mecanismos para realizar lalectura/escritura de los datos.la duración de cada bit está determinada por lavelocidad con la cual se realiza la transferencia dedatos.

Page 124: Mini Curso CONTROL

COMUNICACION SERIE SINCRONA: USART

Los microcontroladores PIC16f8xx dispone de unmódulo USART capaz de soportar la comunicaciónsíncrona y asíncrona.En el modo asíncrono, la transferencia de informaciónse realiza sobre dos líneas TX (transmisión) y RX(recepción), a ritmo de una frecuencia controladainternamente por el USART.

Page 125: Mini Curso CONTROL

COMUNICACION SERIE SINCRONA: USART

Los bloques que configuran la arquitectura USART:

• Circuito de muestreo: identifica el bit de informaciónrecibido por medio de muestreo.

• Generador de Baudios: frecuencia en Baudios (bitspor segundo) a la que se realiza la transferencia:

330, 600, 1200,2400,4800,9600,19200,38400,….

Registro SPBRG, TXSTA.

Page 126: Mini Curso CONTROL

COMUNICACION SERIE SINCRONA: USART

Ecuación para el cálculo del valor conque se carga el registro generador defrecuencia SPBRG:

X=(Fosc/(FrecBaudios*K))-1

K = 64, BRGH = 0, baja velocidad.K = 16, BRGH = 1, alta velocidad.

Page 127: Mini Curso CONTROL

REGISTROS QUE INTERVIENEN EN UNA COMUNICACION ASINCRONA

TXSTA: transmisor asíncrono. Registro queinterviene en la transferencia de información:

Bit [0] TX9D.- Este es el noveno bit de datos en el caso de una transmisión de 9 bits. Bit [1] TRMT.-Cuando está en 1 indica que el registro de transmisión TXREG está vacío, esto

implica que puede escribirse un nuevo dato. Bit [2] BRGH.- Este bit sólo se utiliza en modo asíncrono, y sirve para seleccionar uno de los dos

modos de velocidades. Bit [3] No se utiliza, se lee como 0. Bit [4] SYNC.- Este bit se pone a 1 para utilizar el modo síncrono o a 0 para el modo asíncrono. Bit [5] TXEN.- En modo asíncrono este bit se pone a 1 para activar las transmisiones de datos. Bit [6] TX8/9.- Este bit selecciona una transmisión de 8 bits si está a 1 o de 9 bits si está a 1. Bit [7] CSRC.- En modo asíncrono, este bit no se utiliza.

Page 128: Mini Curso CONTROL

REGISTROS QUE INTERVIENEN EN UNA COMUNICACION ASINCRONA

BRG: depende del valor X cargado en el registro degeneración de la relación de baudios SPBRG y delestado del bit BRGH del registro TXSTA

Page 129: Mini Curso CONTROL

REGISTROS QUE INTERVIENEN EN UNA COMUNICACION ASINCRONA

RCSTA: receptor asíncrono. Los datos se reciben enserie bit a bit por la patita RC7 y se va introduciendosecuencialmente en el registro de desplazamiento.

• Bit [0] RX9D.- Este es el noveno bit de datos en el caso de una transmisión de 9 bits.• Bit [1] OERR.- Este bit se pone a 1 en caso de error de desbordamiento.• Bit [2] FERR.- Este bit se pone a 1 en caso de error de formato.• Bit [3]. – Detección de dirección. Maestro y esclavos.• Bit [4] CREN.- En modo asíncrono debe estar a 1 para autorizar la recepción. En modo

asíncrono autoriza que se continúe la recepción.• Bit [5] SREN.- En modo asíncrono no se utiliza, en modo asíncrono este bit debe estar a 1 para

activar la recepción.• Bit [6] RX8/9.- Este bit debe estar a 1 para activar la transmisión de 9 bits.• Bit [7] SPEN.- Este bit debe estar a 1 para activar la USART.

Page 130: Mini Curso CONTROL

COMO MANEJO EL MODULO USART EN MODO ASINCRONO?

Configuración genérica de la USART:

# USE rs232 (opciones) //Directiva para rs232

Se configuran varios parámetros de la USART:

• velocidad de transmisión (EN BAUDIOS).– BAUD = X

• bits de transmisión (8 o 9 bits).– BITS = X

• pines utilizados (transmisión / recepción).– XMIT = pin

Page 131: Mini Curso CONTROL

COMO MANEJO EL MODULO USART EN MODO ASINCRONO?

Una anotación importante para el uso de la directiva esque se debe definir primero la directiva: # use delay()

Ejemplo:

#use delay (clock = 4000000)#use rs232(baud=9600,xmit=pin_c6,rcv=pin_c7, bits=8)

Page 132: Mini Curso CONTROL

FUNCIONES DEFINIDASAlgunas funciones de la USART:

setup_uart(baud);baud es una constante que define la velocidad.

set_uart_speed(baud);baud es una constante que define la velocidad.

Ejemplo:set_uart_speed(2400);set_uart_speed(4800);set_uart_speed(9600);set_uart_speed(19200);

Page 133: Mini Curso CONTROL

FUNCIONES DEFINIDASPara transmisión de datos:

putc(cdata);putchar(cdata);

cdata es un carácter de 8 bits.

puts(string);string es una cadena de caracteres constante o matrizde caracteres terminada con un 0. (puts () manda loscaracteres de la cadena uno a uno por medio de lafunción putc ()…).

Page 134: Mini Curso CONTROL

OTRAS FUNCIONESprintf (fname, cstring, values…);

cstring: es una cadena de caracteres o matriz decaracteres terminados con un 0.

fname: las funciones utilizadas para escribir la cadenaindicada (por defecto se utiliza la función putc).

values: valores a incluir en la cadena separados porcomas. %nt, donde n es opcional.

1 – 9: para especificar cuantos caracteres se quiere.01 – 09: para indicar la cantidad de ceros a la izquierda.1.1 – 1.9 para coma flotante.

Page 135: Mini Curso CONTROL

c carácters Cadena o carácteru Entero sin signod Entero con signo

Lu Entero largo sin signoLd Entero largo con signox Entero hexadecimal (minúsculas)X Entero hexadecimal (mayúsculas)Lx Entero largo hexadecimal (minúsculas)LX Entero largo hexadecimal (mayúsculas)

f Flotante con truncadog Flotante con redondeoe Flotante en formato exponencialw Entero sin signo con decimales insertados

Page 136: Mini Curso CONTROL

FUNCIONES DEFINIDASFunciones para recepción de datos:

value = getc ();value = getch ();value = getchar ();

value es un carácter de 8 bits.

valor = kbhit ();valor es 0 (FALSE) getc() debe esperar a que llegueun carácter.valor es 1 (TRUE) ya hay un carácter que puede serleído por la función getc().

Page 137: Mini Curso CONTROL

APLICACION 8

Page 138: Mini Curso CONTROL

Desarrollar un sistema que permita enviar los datos del0 al 10, en modo asíncrono, entre dos PIC, visualizarcon LCD los datos enviados y los recibidos. Larecepción de datos se realizara por interrupción deUSART.

Page 139: Mini Curso CONTROL

DESARROLLO DEL SISTEMA DE

TRANSMISION PARA EL MICROCONTROLADOR A

Page 140: Mini Curso CONTROL

#include <16F877.h>#FUSES XT,NOWDT

#use delay(clock=4000000) //reloj

#use rs232(baud=9600, xmit=pin_c6, rcv=pin_c7)//Configura velocidad en baudios 9600, pin C6 para TX,//pin C7 para RX

#include <LCD.C> //directiva LCD

Page 141: Mini Curso CONTROL

void main() { //función principalint valor; //declaración de variable.

lcd_init(); //inicializa LCD

while(1){ //ciclo de ejecución infinitofor (valor=0;valor<=10;valor++) { //envío de datosPUTC(valor); //envía datos al hiper terminalprintf(lcd_putc,"\fenviando=%1D",valor); //envía dato a LCDdelay_ms(500);

}}

}

Page 142: Mini Curso CONTROL

DESARROLLO DEL SISTEMA DE RECEPCION

PARA EL MICROCONTROLADOR B

Page 143: Mini Curso CONTROL

#include <16F876.h>#FUSES XT,NOWDT

#use delay(clock=4000000) //reloj

#use rs232(baud=9600, xmit=pin_c6, rcv=pin_c7, bits=8)//Configura velocidad en baudios 9600, pin C6 para TX,//pin C7 para RX, 8 bits de datos.

#include <LCD.C> //directiva para manejo de LCD

Page 144: Mini Curso CONTROL

//para el manejo de interrupción cuando se recibe un datose usa la //directiva #INT_RDA

#INT_RDA //Directiva de interrupción por//recepción de datos

RDA_isr(){

valor=GETC(); //lee el dato recibido y guarda en valor

}

Page 145: Mini Curso CONTROL

void main() { //función principallcd_init(); //inicializa LCDenable_interrupts(INT_RDA); //int. Por recepción activa

enable_interrupts(GLOBAL); //permiso global de int.

for (;;) { //ciclo infinito de ejecución

lcd_gotoxy(1,1);printf(lcd_putc,"recibiendo=%1D",valor);//escribe en LCD en la posición 1,1.

}}

Page 146: Mini Curso CONTROL

SIMULACION

Page 147: Mini Curso CONTROL

PARA FINALIZAR…

EL MODULO I2C (InterfazInter – Circuitos) Y LAS MEMORIAS EEPROM

Page 148: Mini Curso CONTROL

EL BUS I2C…

Page 149: Mini Curso CONTROL

CARACTERISTICAS:

• Se basa en la comunicación a través de dos hilos.• Dos líneas de colector abierto reloj (SCL) y datos (SDA).• Se debe usar resistencias de pullups.• Cada dispositivo conectado al bus tiene una dirección.• Se configura como mono maestro o multi maestro.• El maestro se encarga de: inicio y finalización de transferencia,

con quien y el sentido de la misma.• El maestro inicia transferencia enviando la dirección del

dispositivo con que se quiere conectar, ya sea para lectura oescritura.

• El numero de dispositivos conectados y la longitud de conexiónse limitan por la capacidad de direccionamiento (de 7 a 10 bits) ypor la máxima carga del bus (400pF).

• La velocidad máxima estándar es 100 Kbps y en adelante paraversiones mejoradas.

Page 150: Mini Curso CONTROL

CONDICIONES DELBUS

Page 151: Mini Curso CONTROL

FORMATOS DE TRANSFERENCIA DE INFORMACION

• ESCRITURA EN EL ESCLAVO: Maestro como transmisor y esclavocomo receptor.

• LECTURA DEL ESCLAVO: El maestro lee informacion proveniente delesclavo inmediatamente después de transmitir el byte de control y seconfigura como receptor.

Page 152: Mini Curso CONTROL

FORMATOS DE TRANSFERENCIA DE INFORMACION

• FORMATO COMBINADO: este formato implica elcambio de sentido de la informacion, así que eldispositivo que en principio se comporta comoreceptor, luego lo hará como transmisor.

Page 153: Mini Curso CONTROL

CARACTERISTICAS ELECTRICAS• Permite la interconexión de diversas tecnologías (CMOS,

NMOS, TTL,…).• Dispositivos con niveles de entrada fijos (5 V):

– VIL = 1.5 v (estado bajo “0”).– VIL = 3 v (estado alto “1”).

• Terminales conectados al bus I2C, no deberán sumir ni drenarcorrientes superiores a 10 uA, ni capacidad mayor a 10 pF.

Page 154: Mini Curso CONTROL

LA MEMORIA EEPROM…

Page 155: Mini Curso CONTROL

LA MEMORIA 24LC256• Fabricada por microchip.• Capacidad de almacenamiento de 256 Kbits (32

Kbyts).• Compone de 512 paginas de 64 bytes cada una.• Tiempo de escritura 5 ms.• Ciclos de escritura/lectura 1’000.000.• Velocidad máxima de operación 400 KHz.• Consumo durante la escritura 3 mA a 5.5 V.• Consumo durante la lectura 400 uA a 5.5 V.• Capacidad de retención mayor a 200 años.

Page 156: Mini Curso CONTROL

COMO MANEJO EL BUS I2C?Configuración genérica:

#USE I2C(opciones)MULTI_MASTER Establece modo multi maestro

MASTER Establece modo maestro.SLAVE Establece modo esclavo.

SCL = pin Especifica el pin SCL.SDA = pin Especifica el pin SDA.

ADDRESS = pin Especifica la dirección en modo esclavo.FAST Utiliza velocidad alta.SLOW Utiliza velocidad baja.

RESTART_WDT Borra el WDT mientras espera una lectura.FORCE_HW Utiliza las funciones I2C hardware.

NOFLOAT_HIGH No permite señales flotantes.SMBUS Utiliza el bus en formato SMBUS.

STREAM = id Asocia un identificador stream.

Page 157: Mini Curso CONTROL

FUNCIONES DEFINIDAS PARA EL MANEJO DE LA MEMORIA EEPROM

Función de escritura:

write_ext_eeprom(direccion, valor);

Función de lectura:

valor = read_ext_eeprom(direccion);

Page 158: Mini Curso CONTROL

APLICACION 9

Page 159: Mini Curso CONTROL

Desarrollar un sistema que permita guardar yleer 50 datos en una memoria EEPROM I2C.Mostrar los valores escritos y leídos en undisplay LCD.

Page 160: Mini Curso CONTROL

#include <16f877.h> //usamos el pic 16f877#fuses xt, nowdt, nolvp, noprotect#use delay(clock=4000000) //reloj

#include <LCD.C> //Librería LCD#include <J24lc256.H> //librería EEPROM I2C//se define I2C con modo maestro, pines SDA y SCL#use i2c(MASTER,SDA=PIN_C4,SCL=PIN_C3)

INT cnt=0,JASO=0; //variables globales

Page 161: Mini Curso CONTROL

void main() //función principal{lcd_init(); //Inicia LCDinit_ext_eeprom(); //Inicia memoria

while(true) // bucle infinito{

Page 162: Mini Curso CONTROL

// escritura de la memoria con el valor de la posi +2for(cnt=0;cnt<=50;cnt++){

write_ext_eeprom(cnt,(cnt+2)); // función de escrituraprintf(lcd_putc,"\fESCRI.. POSI %u",cnt);delay_ms(500);

}

Page 163: Mini Curso CONTROL

//lectura de las 50 posi de la memoriafor(cnt=0;cnt<=50;cnt++){

jaso=read_ext_eeprom(cnt); // función de lecturaprintf(lcd_putc,"\fLEER.. POSI %u",jaso);delay_ms(500);}

}}

Page 164: Mini Curso CONTROL

SIMULACION

Page 165: Mini Curso CONTROL

El mini curso que acabamos depresenciar permite explorar un poco masacerca de cómo podemos programar losmicrocontroladores PIC usandoherramientas de alto nivel como lo es elcompilador C CCS y el simuladorproteus, que permiten obtener el máximorendimiento en nuestras habilidadescomo programador y la optimización yfuncionalidad del microcontrolador ensus diferentes aplicaciones.

Page 166: Mini Curso CONTROL

Recordemos que este mini curso e unapequeña introducción a lo que USTEDcomo programador se puede enfrentarde ahora en adelante…

ANIMO!!!A PROGRAMARSE DIJO!!!...

Page 167: Mini Curso CONTROL
Page 168: Mini Curso CONTROL
Page 169: Mini Curso CONTROL