You are on page 1of 28

00ZNXX-FA684X-21PQZQ-41H89P

Men ya utilice este si funciona tienes q descargar el trial y ponerle la clave es super facil y
es bueno este prograqma pero te sugiero q limpies el registro con varios limpiadores
como el jet clean es super y rapido aki esta el serial para ponerlo en pro el jet clean si lo
necesitas algun dia 7368B-578F2-5837B-E6EB1 y si quieres usa el argente es gratis y
tiene buen motor lo que pasa es que es lento pero es bueno y el tune up si quieres el
serial aki hay uno de todas maneras bajalo con keigen PFEK3B-8XMTD1-RWAADWCK69QA-HCRHQA-63V0N... si te sale q no es valida vuelve a meterla

http://www.ladelec.com/practicas/ci
rcuitos-por-arossini/539electroestimulador-parte-2-el-pic
TecMikro http://www.programarpicenc.com - Paso a paso, primer proyecto en el
compilador mikroC PRO for PIC para lenguaje C con el PIC16F628A (Serie completa de
videos al final de la descripcin).
mikroC PRO for PIC es un software para escribir programas en lenguaje C para los
microcontroladores PIC de Microchip. En trminos ms precisos, mikroC PRO for PIC es
un IDE (ambiente de desarrollo integrado), que incluye un editor de texto (para escribir el
cdigo fuente en lenguaje C), un compilador (software que se encarga de generar el
cdigo de mquina .hex), libreras de funciones (que se pueden usar fcilmente dentro del
cdigo fuente) y algunas herramientas adicionales que simplifican enormemente el
proceso de programacin.
De manera general, mikroC PRO for PIC trabaja con Proyectos (conjunto de archivos que
resultan al crear un programa). Para crear un Proyecto se debe seguir un proceso bsico,
que consiste de forma general en la seleccin del microcontrolador, la frecuencia de
operacin, la creacin de la carpeta del proyecto, el establecimiento de los bits de
configuracin, la escritura del cdigo fuente en lenguaje C y la compilacin.
Todos estos pasos se explican por medio de un ejemplo bsico para hacer parpadear un
LED usando el microcontrolador PIC 16F628A. Por ltimo se describen los archivos ms
importantes que forman parte del Proyecto creado.

Display LCD 16x2 (LCD 2x16) con el HD44780 en mikroC PRO


Extracto
del
Captulo
III
del
libro
Cmo programar en lenguaje C los microcontroladores PIC16F88, 16F628A y 16F877A. 2da
edicin
Las pantallas de cristal lquido (LCD) se han popularizado mucho en los ltimos aos, debido a su
gran versatilidad para presentar mensajes de texto (fijos y en movimiento), valores numricos y
smbolos especiales, su precio reducido, su bajo consumo de potencia, el requerimiento de solo 6
pines del PIC para su conexin y su facilidad de programacin en lenguajes de alto nivel (por
ejemplo, lenguaje C). Desde todo punto de vista el empleo del display LCD 16x2 (LCD 2x16)
debera considerarse como la primera opcin a la hora de decidir por un dispositivo de presentacin
alfanumrica, excepto cuando las condiciones de iluminacin ambiental no sean las ms favorables.
En este ltimo caso se debera pensar en el empleo de displays de 7 segmentos, que aunque no

tienen la misma versatilidad tienen la ventaja innegable de sus mejores caractersticas de visibilidad
an en los ambientes ms desfavorables. En la actualidad existen diversos modelos de display LCD,
aunque los ms comunes son los LCD 16x2 (16 caracteres x 2 filas) o LCD 2x16, gobernados por el
controlador Hitachi HD44780, que se ha convertido en el estndar de facto para las aplicaciones con
microcontroladores PIC.
Especficamente se har referencia al display LM016L, que tiene las caractersticas mencionadas,
aunque cualquier otro display LCD con el controlador HD44780 o compatible se puede utilizar.
Existen LCD 16x2 con diferentes combinaciones de colores de fondo y texto.

Pinout (patillaje) del LCD 16x2 (LCD 2X16) con HD44780


El LCD 16x2 (LCD 2x16) tiene en total 16 pines (tome en cuenta que la posicin correcta
del display es con los pines en la parte superior, aunque existen modelos en los que la
posicin correcta es con los pines en la parte inferior) . La datasheet (pdf) muestra 14
pines, los dos pines adicionales son el nodo (15) y el ctodo (16) del LED de fondo.
Debe notarse que el controlador Hitachi HD44780 se encuentra incorporado al circuito
impreso del mdulo LCD y que sirve de interfaz entre la propia pantalla LCD (donde se
muestran los caracteres) y el microcontrolador PIC. Por lo tanto, de todos los pines del
HD44780 nicamente se tiene acceso a aquellos necesarios para la conexin al PIC y
para el control de contraste.

La polarizacin del LED de fondo se logra conectando una resistencia externa de 50 ohm1/4 W con lo que se asegura el correcto encendido sin una corriente excesiva. El control
de contraste se consigue con un potencimetro de 10 k con el cual se ajusta el nivel de
voltaje en el pin 3 (Vee VLC).

Conexin del LCD 16x2 al PIC


La conexin ms recomendable del display LCD 16x2 (2x16) requiere 4 pines para los
datos (D7:D4), 1 pin para habilitar/deshabilitar el display (E) y 1 pin para los modos
comando/carcter (RS). En la figura 3.1.1 se indica la forma de conectar el display al
PIC16F88 y al PIC16F628A.

Figura 3.1.1 Conexin del LCD al PIC16F88 (16F628A) con 4 bits

Librera LCD de mikroC PRO


mikroC PRO proporciona una librera para comunicacin con el display (con el controlador
HD44780 o compatibles) a travs de un interfaz de 4 bits para datos. Para el trabajo con el mdulo
LCD se debe aadir la librera Lcd, que contiene las funciones listadas en la tabla 3.1. Para poder
utilizar estas funciones se debe declarar previamente un total de 12 variables: 6 que definen los
pines del PIC y otras 6 que permiten programar su sentido de circulacin de datos (se detallarn en
los ejemplos de este captulo).

Tabla 3.1 Funciones de la librera Lcd de mikroC PRO

PIC16F88 en C (mikroC PRO) - Ejemplo


Estos ejemplos corresponden al PIC16F88 programado en mikroC PRO. El cdigo fuente
para los microcontroladores PIC16F628A y 16F877A se encuentra en las carpetas
correspondientes
que
acompaan
a
este
libro.
En el siguiente ejemplo se emplea la funcin ByteToStr de la librera Conversions de
mikroC PRO, para convertir el contenido de la variable contador (un byte) en una cadena
de caracteres (string) y as poderlo visualizar en el display con la funcin Lcd_Out.
Ejemplo-LCD1.c: Cada vez que presiona el pulsador conectado en RA4 se incrementa un
contador que se visualiza en el centro de la segunda lnea de la pantalla (figura 3.1.1). Si
la cuenta supera 100, el conteo se reinicia desde 0. En el centro de la primera lnea se
muestra la palabra Conteo:.
//LCD1.c
//Declaracin de las 12 variables necesarias para la conexin
//de la pantalla LCD 2x16.
sbit LCD_RS at RB4_bit;
sbit LCD_EN at RB5_bit;
sbit LCD_D4 at RB0_bit;
sbit LCD_D5 at RB1_bit;
sbit LCD_D6 at RB2_bit;
sbit LCD_D7 at RB3_bit;
sbit LCD_RS_Direction
sbit LCD_EN_Direction
sbit LCD_D4_Direction
sbit LCD_D5_Direction
sbit LCD_D6_Direction
sbit LCD_D7_Direction
// Fin de declaracin

at
at
at
at
at
at
de

TRISB4_bit;
TRISB5_bit;
TRISB0_bit;
TRISB1_bit;
TRISB2_bit;
TRISB3_bit;
variables de conexin.

char contador=0,estado=1,texto1[]="Conteo:", texto2[4];


void main(){
OSCCON=0x40; //Oscilador interno a 1MHz.
while (OSCCON.IOFS==0);//Esperar mientras el oscilador est inestable.
ANSEL=0x00; //Bits AN6:AN0 como E/S digital.
Lcd_Init();
//Inicializa el LCD.
Lcd_Cmd(_LCD_CLEAR);
//Borra el display.
Lcd_Cmd(_LCD_CURSOR_OFF); //Apaga el cursor.
Lcd_Out(1,6,texto1);
//Escribe el texto1.
while (1)
{
if (Button(&PORTA,4,1,0)) estado=0;
//Si se pulsa.
if (estado==0 && Button(&PORTA,4,1,1)) //Si se pulsa y se libera.
{
contador++; //"contador" contiene el nmero de pulsaciones.
if (contador>100) contador=0;
estado=1;
}
ByteToStr(contador,texto2); //Convierte el contenido de la variable
//en texto.
Lcd_Out(2,6,texto2);
//Escribe el texto2.
}
}

Temas relacionados que tambin encontrars en este libro:

Creacin de caracteres especiales


RAM del Generador de Caracteres (CGRAM)

Herramienta LCD Custom Character de mikroC PRO

Presentacin de nmeros decimales en el LCD 16x2 (2x16)

La memoria EEPROM de los microcontroladores PIC en


mikroC PRO
Extracto
del
Captulo
IV
del
libro
Cmo programar en lenguaje C los microcontroladores PIC16F88, 16F628A y
16F877A. 2da edicin
En este captulo se estudia el uso de una de las bibliotecas ms tiles del conocido compilador
mikroC PRO.
La memoria EEPROM de los microcontroladores PIC tiene la capacidad para ser programada y
reprogramada por la CPU del PIC, para asegurar que en caso de una falla o desconexin de la
energa los valores o variables crticas se puedan mantener en una memoria no voltil.
La memoria EEPROM es muy til en procesos que deben continuar a partir del ltimo dato
obtenido cuando se ha producido una interrupcin en la energa. mikroC PRO incluye una librera
con funciones que facilitan enormemente el trabajo de programacin.

Librera EEPROM de mikroC PRO


En la tabla 4.1 se describen las funciones que permiten la lectura y escritura en la
memoria EEPROM.

Tabla 4.1 Funciones de mikroC PRO


Ambas funciones soportan microcontroladores PIC inclusive con ms de 256 bytes
(recuerde que los microcontroladores PIC16F88 y 16F877A tienen 256 bytes, mientras
que el 16F628A tiene 128 bytes). Todas las interrupciones deben estar deshabilitadas
durante la ejecucin de la funcin EEPROM_Write (el bit GIE del registro INTCON debe
ser igual a cero). Al finalizar la ejecucin, la funcin restaura el estado previo de este bit.
Se debe asegurar un retardo mnimo de 20 ms entre el uso sucesivo de las funciones
EEPROM_Write y EEPROM_Read; de lo contrario, aunque el PIC escribir el valor

correcto, la lectura con EEPROM_Read puede dar un resultado indefinido. Para tener a
disposicin estas funciones se debe aadir la librera EEPROM.

PIC16F88 en C (mikroC PRO) - Ejemplo


Estos ejemplos corresponden al PIC16F88 en mikroC PRO. El cdigo fuente para los
microcontroladores PIC16F628A y 16F877A as como la simulacin en Proteus se
encuentra en las carpetas correspondientes que acompaan a este libro.
En los ejemplos EEPROM1.c y EEPROM2.c debe observarse que las 2 instrucciones
resaltadas slo deben ejecutarse en una ocasin (la primera vez que se enciende el PIC),
con el propsito de colocar un valor inicial (0) en la primera direccin (0x00); por lo tanto
estos programas deben compilarse en dos ocasiones y el PIC debe ser programado
igualmente en dos ocasiones: la primera con las 2 instrucciones activadas (no
comentadas), y la segunda con las dos instrucciones desactivadas (comentadas). El
conteo
empieza
la
segunda
vez
que
se
enciende
el
PIC.
Ejemplo-EEPROM1.c: Cada vez que el PIC es reiniciado se incrementa un contador que
se guarda en la primera posicin de la memoria EEPROM y es visualizado en el LCD
(circuito de la figura 3.2).
//EEPROM1.c
//Declaracin de las 12 variables necesarias para la conexin
//del mdulo LCD.
sbit LCD_RS at RB4_bit;
sbit LCD_EN at RB5_bit;
sbit LCD_D4 at RB0_bit;
sbit LCD_D5 at RB1_bit;
sbit LCD_D6 at RB2_bit;
sbit LCD_D7 at RB3_bit;
sbit LCD_RS_Direction
sbit LCD_EN_Direction
sbit LCD_D4_Direction
sbit LCD_D5_Direction
sbit LCD_D6_Direction
sbit LCD_D7_Direction
// Fin de declaracin

at
at
at
at
at
at
de

TRISB4_bit;
TRISB5_bit;
TRISB0_bit;
TRISB1_bit;
TRISB2_bit;
TRISB3_bit;
variables de conexin.

char contador, texto[4];


void main(){
OSCCON=0x40; //Oscilador interno a 1MHz.
while (OSCCON.IOFS==0);//Esperar mientras el oscilador est inestable.
ANSEL=0x00; //Bits AN6:AN0 como E/S digital.
Lcd_Init();
//Inicializa el LCD.
Lcd_Cmd(_LCD_CLEAR);
//Borra el display.
Lcd_Cmd(_LCD_CURSOR_OFF); //Apaga el cursor.
//EEPROM_Write(0x00,0);
//Valor inicial(slo la 1era vez) .
//Delay_ms(20);
//Slo la 1era vez.
contador=EEPROM_Read(0x00);
ByteToStr(contador, texto);
Lcd_Out(1,1,texto);
contador++;
EEPROM_Write(0x00,contador);
}

Timer 0 (Timer0 / TMR0) temporizador / contador con PIC


Extracto
del
Captulo
V
del
libro
Cmo programar en lenguaje C los microcontroladores PIC16F88, 16F628A y
16F877A. 2da edicin
El Timer 0 del PIC tiene las siguientes caractersticas:
Temporizador - contador de 8 bits.
Se puede leer y escribir.

Prescaler programable de 8 bits.

Seleccin de reloj interno o externo.

Genera una interrupcin al desbordarse desde 0xFF a 0x00.

Seleccin de flanco del reloj externo.

La operacin del Timer0 se controla a travs del registro OPTION_REG (figura 5.1). En el
modo temporizador (TOCS=0), se produce un incremento del registro TMR0 cada ciclo de
instruccin (prescaler asignado al perro guardin WDT). Si se escribe en el registro
TMR0, no se produce el incremento durante los dos siguientes ciclos de instruccin; este
hecho debe tenerse muy en cuenta por parte del usuario y, de ser necesario, ajustar el
valor escrito en TMR0.

Figura 5.1 Bits del registro de control del Timer 0


En el modo contador (TOCS=1), se produce un incremento por cada transicin
ascendente (T0SE=0) o descendente (T0SE=1) en el pin RA4 del Timer0.
Prescaler
Un prescaler es un circuito que reduce la frecuencia que ingresa a un temporizadorcontador dividindola para un determinado valor (figura 5.2). Por ejemplo, si la relacin es
1:8, el prescaler entrega una frecuencia igual a la octava parte de la frecuencia del
oscilador.

Figura 5.2 Prescaler actuando como divisor de frecuencia


El prescaler es compartido entre el Timer 0 y el watchdog timer (WDT) del PIC, y no se
puede leer ni escribir. Cuando se asigna el prescaler al Timer 0 no puede ser utilizado por
el
WDT
al
mismo
tiempo,
y
viceversa.
Los bits PSA y PS<2:0> determinan la asignacin y la relacin de divisin del prescaler.
Cuando se asigna al Timer0, todas las instrucciones de escritura en el registro TMR0
reinician el prescaler. Cuando se asigna al WDT, una instruccin CLRWDT reinicia el
prescaler y tambin el WDT.

PIC16F88 en C (mikroC PRO) - Ejemplo


Estos ejemplos corresponden al PIC16F88 en mikroC PRO. El cdigo fuente para los
microcontroladores PIC16F628A y PIC16F877A se encuentra en las carpetas
correspondientes
que
acompaan
a
este
libro.
Ejemplo-Timer0_1.c: Cada vez que se acte sobre el pulsador conectado en RA4 se
incrementa un contador que se visualiza en el LCD (circuito de las figuras 3.1.1 y 3.1.2).
//Timer0_1.c
//El registro OPTION_REG tiene todos sus bits en 1 despus del encendido
//por lo tanto el Timer 0 acta como contador, incrementa en transicin
//descendente y el prescaler est asignado al WDT.
//Declaracin de las 12 variables necesarias para la conexin
//del mdulo LCD.
sbit LCD_RS at RB4_bit;
sbit LCD_EN at RB5_bit;
sbit LCD_D4 at RB0_bit;
sbit LCD_D5 at RB1_bit;
sbit LCD_D6 at RB2_bit;
sbit LCD_D7 at RB3_bit;
sbit LCD_RS_Direction
sbit LCD_EN_Direction
sbit LCD_D4_Direction
sbit LCD_D5_Direction
sbit LCD_D6_Direction
sbit LCD_D7_Direction
// Fin de declaracin
char texto[4];
void main(){

at
at
at
at
at
at
de

TRISB4_bit;
TRISB5_bit;
TRISB0_bit;
TRISB1_bit;
TRISB2_bit;
TRISB3_bit;
variables de conexin.

OSCCON=0x40; //Oscilador interno a 1MHz.


while (OSCCON.IOFS==0);//Esperar mientras el oscilador est inestable.
ANSEL=0x00; //Pines AN<6:0> como E/S digital.
TMR0=0;
//Inicializa el registro TMR0.
Lcd_Init();
//Inicializa el LCD.
Lcd_Cmd(_LCD_CLEAR);
//Borra el display.
Lcd_Cmd(_LCD_CURSOR_OFF); //Apaga el cursor.
Lcd_Out(1,6,"Conteo:");
while (1)
{
ByteToStr(TMR0,texto);
Lcd_Out(2,6,texto);
}
}

Cuando este mdulo trabaja como temporizador cuenta los ciclos de instruccin (sin
prescaler) o los ciclos que recibe del prescaler. Como es un contador ascendente el TMR0
debe ser cargado con el valor de los ciclos que se desean contar restados de 256 que es
el valor de desbordamiento. Por ejemplo, para contar 28 ciclos (de instruccin/prescaler),
se carga el TMR0 con 256-28=228. El ciclo de instruccin tiene una duracin de 4 us para
una frecuencia de oscilador de 1 MHz (16F88). Sin prescaler medira un tiempo de 28x4x1
us = 112 us. Con un prescaler 1:8, el tiempo medido sera 28x4x8 us = 896 us. De manera
general, el intervalo de temporizacin T se puede calcular con la siguiente frmula:
T=NxTCIxn
Donde:
N
TCI
n

=
=

nmero
perodo
=

de

ciclos
del
valor

de
ciclo
del

instruccin/prescaler
de
instruccin
prescaler

Mientras que el valor de carga Q del TMR0 se calcula as:


Q=256-N
Para medir 500 us, con un prescaler 1:1 (prescaler asignado al perro guardin WDT) y un TCI = 4 us
se necesitan 500/4 = 125 ciclos de instruccin. El valor inicial del TMR0 debe ser 256-125=131.
Encontrar ms ejemplos acerca de este tema en el libro.

Teclado matricial 4x4 con los microcontroladores PIC


Extracto
del
Captulo
VIII
del
libro
Cmo programar en lenguaje C los microcontroladores PIC16F88, 16F628A y 16F877A. 2da
edicin.
En este captulo se har el estudio del teclado matricial 4x4 (figura 8.1), que son los ms utilizados
en el desarrollo de proyectos con microcontroladores PIC y que tienen su aplicacin en el ingreso
de datos de manera manual por parte del usuario, en aquellos casos en que el empleo de pulsadores
simples no es lo ms apropiado, ya sea por la presentacin final del producto o por la restriccin del
nmero de lneas de entrada de los microcontroladores PIC.
El teclado matricial 4x4 est constituido por una matriz de pulsadores dispuestos en filas (A,B,C,D)
y columnas (1,2,3,4), con la intencin de reducir el nmero de pines necesarios para su conexin.
Las 16 teclas necesitan slo 8 pines del microcontrolador, en lugar de los 16 pines que se
requeriran para la conexin de 16 teclas independientes.

Figura 8.1 Teclado matricial 4x4


Su funcionamiento es muy sencillo, cuando se presiona una tecla, se conectan
internamente la fila y columna correspondientes; por ejemplo, al presionar la tecla 7 se
conectan la fila C y la columna 1. Si no hay ninguna tecla presionada, las filas estn
desconectadas de las columnas.

Librera Keypad4x4 de mikroC PRO para teclado matricial


4x4
En la tabla 8.1 se describen las funciones que se incluyen en la librera Keypad4x4 de
mikroC PRO para el manejo del teclado matricial 4x4.

Para poder utilizar estas funciones se tiene que declarar previamente una variable que
especifica el puerto que se emplear para la conexin del teclado matricial 4x4, como se
observa en los ejemplos de programacin. La conexin a los microcontroladores
PIC16F88, 16F628A y 16F877A se muestra en las figuras 8.2.1, 8.2.2 y 8.2.3 donde se ha
empleado el puerto B: las columnas se conectan al nibble bajo, mientras que las filas se
conectan al nibble alto del mismo puerto.

Figura 8.2.1 Conexin de un teclado matricial 4x4 a los microcontroladores PIC16F88 y


16F628A

PIC16F88 en C (mikroC PRO) - Ejemplo


Estos ejemplos se pueden probar en el circuito de la figura 8.2.1 y corresponden al
microcontrolador PIC16F88. El cdigo fuente para los microcontroladores PIC16F628A y
16F877A se encuentra en las carpetas correspondientes que acompaan a este libro.
Debe notarse que el cdigo que se obtiene al presionar una tecla es un nmero entero
entre 1 y 16, de izquierda a derecha y de arriba abajo, comenzando por la fila A. Este
nmero se emplea para asociarle el smbolo respectivo impreso en el teclado matricial
4x4 (por medio de los cdigos ASCII), para su uso posterior en el programa. Esto se

detalla

en

el

siguiente

ejemplo.

Ejemplo-Teclado_1.c: Lo que se va escribiendo por el teclado es visualizado en la


primera lnea del LCD. Cuando llega al final se borra todo y comienza de nuevo.
//Teclado_1.c
// Variable necesaria para la conexin del teclado.
char keypadPort at PORTB;
//Declaracin de las 12 variables necesarias para la conexin
//del mdulo LCD.
sbit LCD_RS at RA4_bit;
sbit LCD_EN at RA6_bit;
sbit LCD_D4 at RA0_bit;
sbit LCD_D5 at RA1_bit;
sbit LCD_D6 at RA2_bit;
sbit LCD_D7 at RA3_bit;
sbit LCD_RS_Direction
sbit LCD_EN_Direction
sbit LCD_D4_Direction
sbit LCD_D5_Direction
sbit LCD_D6_Direction
sbit LCD_D7_Direction
// Fin de declaracin
char kp, contador=0;

at
at
at
at
at
at
de

TRISA4_bit;
TRISA6_bit;
TRISA0_bit;
TRISA1_bit;
TRISA2_bit;
TRISA3_bit;
variables de conexin.

void main(){
OSCCON=0x40;
//Oscilador interno a 1MHz (TCI=4 us).
while (OSCCON.IOFS==0); //Esperar mientras el oscilador est inestable.
ANSEL=0x00;
//Bits AN6:AN0 como E/S digital.
Keypad_Init();
//Inicializa el teclado.
Lcd_Init();
//Inicializa el LCD.
Lcd_Cmd(_LCD_CLEAR);
//Borra el display.
Lcd_Cmd(_LCD_CURSOR_OFF);
//Apaga el cursor.
while (1){
kp=0;
do
//Espera por una tecla.
kp=Keypad_Key_Click(); //Lee el nmero de la tecla y lo guarda en kp.
while (!kp);
switch (kp){
case 1: kp = 49; break; //49 es el cdigo ASCII del nmero 1.
case 2: kp = 50; break; //50 es el cdigo ASCII del nmero 2.
case 3: kp = 51; break; //51 es el cdigo ASCII del nmero 3.
case 4: kp = 65; break; // A
case 5: kp = 52; break; // 4
case 6: kp = 53; break; // 5
case 7: kp = 54; break; // 6
case 8: kp = 66; break; // B
case 9: kp = 55; break; // 7
case 10: kp = 56; break; // 8
case 11: kp = 57; break; // 9
case 12: kp = 67; break; // C
case 13: kp = 42; break; // *
case 14: kp = 48; break; // 0
case 15: kp = 35; break; // #
case 16: kp = 68; break; // D
}
Lcd_Chr_CP(kp);
//Presenta el carcter en el LCD.
contador++;
//Cuenta el nmero de pulsaciones.
if (contador==16){
//Si se han efectuado 16 pulsaciones.
contador=0;
Delay_1sec();
//Espera 1 s.
Lcd_Cmd(_LCD_CLEAR);
//Borra la pantalla y retorna el cursor al
}
//origen.
}
}

Temas relacionados que tambin encontrars en este libro:

Otros ejemplos de programacin del teclado matricial 4x4

L293D / L293B: driver para motores CC (DC)


Extracto
del
Captulo
XII
del
libro
Cmo programar en lenguaje C los microcontroladores PIC16F88, 16F628A y 16F877A. 2da
edicin
Las aplicaciones que tienen los motores CC ( DC) en el rea de la automatizacin son muy amplias,
van desde los juguetes hasta la robtica industrial, pasando por la medicina, las aplicaciones
militares, la investigacin espacial y submarina, los electrodomsticos, las computadoras, los
dispositivos de entretenimiento, los simuladores, las mquinas herramientas, los automviles, etc.
En este captulo se estudia en detalle el control de sentido de giro, velocidad y posicin angular de
los motores CC ( DC) convencionales y los motores paso a paso (PAP) o stepper motor usando el
driver L293D / L293B con los microcontroladores PIC programados en mikroC PRO.

Driver L293B
El circuito integrado L293B (tabla 12.1 y figuras 12.1, 12.2, 12.3 y 12.4) se ha diseado con el
propsito de realizar el control de los motores CC ( DC) de manera ptima y econmica. Est
conformado por cuatro amplificadores push-pull capaces de entregar una corriente de salida de 1A
por canal.
Cada canal est controlado por entradas compatibles con los niveles TTL y cada par de
amplificadores (un puente completo) est equipado con una entrada de habilitacin, que puede
apagar los cuatro transistores de salida. Tiene una entrada de alimentacin independiente para la
lgica, de manera que se puede polarizar con bajos voltajes para reducir la disipacin de potencia.
Los cuatro pines centrales se emplean para conducir el calor generado hacia el circuito impreso. Sus
caractersticas sobresalientes son las siguientes:

Corriente de salida de 1A por canal.


Corriente pico de salida 2A por canal (no repetitiva).

Pines de Habilitacin.

Alta inmunidad al ruido.

Fuentes de alimentacin separadas.

Proteccin contra exceso de temperatura.

Tabla 12.1 Valores mximos absolutos del driver L293B

Figura 12.1 Distribucin de terminales del driver L293B

Figura 12.2 Diagrama de bloques del driver L293B y tabla de verdad (Z= Alta impedancia
de salida). Se muestran diferentes tipos de conexin de motores CC ( DC).
Observe con cuidado la tabla de verdad de la figura 12.2 y note que si el voltaje de
entrada de habilitacin Vinh tiene un nivel ALTO el voltaje de salida Vo tendr el mismo
nivel (ALTO o BAJO), aunque NO el mismo valor, del nivel de entrada Vi. Algo que debe
tenerse muy en cuenta es que los valores del voltaje de entrada Vi no son los mismos
valores del voltaje de salida Vo, ya que Vi corresponde a valores TTL mientras que Vo es
el
voltaje
de
alimentacin
de
los
motores
Vs.
Por otro lado, si Vinh tiene un valor BAJO, el pin de salida se pone en estado de alta
impedancia (sin importar el valor del voltaje de entrada Vi).

Figura 12.3 Control de motores CC ( DC) (con conexin al


positivo y al negativo de la fuente). Tabla de verdad.
La tabla de verdad de la figura 12.3 muestra la posibilidad de controlar dos motores CC
( DC) en el mismo sentido de giro, con la diferencia de que M1 girar si la entrada A tiene
un nivel BAJO, mientras que M2 girar si la entrada B tiene un nivel ALTO.

Figura 12.4 Control de giro en ambos sentidos de un motor


elctrico DC
Driver L293D
El driver L293D (figura 12.5) es similar al L293B, se diferencia fundamentalmente en su
mxima corriente de salida y en la incorporacin de los diodos de proteccin en cada uno
de los cuatro amplificadores. Sus caractersticas principales son las siguientes:

Corriente de salida de 600 mA por canal.


Corriente pico de salida 1,2A por canal (no repetitiva).

Pines de Habilitacin.

Alta inmunidad al ruido.

Fuentes de alimentacin separadas.

Proteccin contra exceso de temperatura.

Diodos de proteccin incorporados.

Figura 12.5 Diagrama de bloques del driver L293D


El L293D diseado para recibir niveles TTL y alimentar cargas inductivas (rels, motores
DC y PAP bipolares y unipolares) y transistores de potencia de conmutacin. Este
dispositivo se puede usar en aplicaciones de conmutacin hasta los 5 kHz. Est
encapsulado en formato DIP16 y sus cuatro pines centrales se han conectado juntos y se
emplean como disipadores de calor.

Conexin del driver L293D al PIC


El control de giro de motores DC por medio del driver L293D se detalla en el siguiente
ejemplo. Tambin puede emplearse el L293B tomando en cuenta que se deben aadir los
diodos de proteccin (pueden ser del tipo 1N4007) como se indica en la figura 12.4.
Ejemplo-MotorDC_01.c: Conexin tpica de un motor elctrico DC al PIC a travs del
driver L293D (figuras 12.6.1 y 12.6.2). El giro del motor est determinado por el estado de
los pines RB0 y RB1 de acuerdo a la tabla 12.2. El pin RB0 determina el encendido o
apagado del motor, mientras que RB1 controla el sentido de giro.

Tabla 12.2 Tabla de verdad del problema MotorDC_01.c

Figura 12.6.1 Circuito de control de motores CC (DC) con el


L293D
//MotorDC_01.c
void main(){
OSCCON=0x60;
//Oscilador interno a 4MHz (TCI=1 us).
while (OSCCON.IOFS==0);
//Esperar mientras el oscilador est inestable.
PORTB=0x00;
//Inicializacin.
NOT_RBPU_bit=0;
//Habilitar las pull-up.
TRISB=0b11100011;
//RB<4:2> como salidas.
while (1){
if (RB0_bit==0) RB4_bit=0;
//Motor desconectado.
if (RB0_bit==1){
if (RB1_bit==0) PORTB=0b00011000; //Giro a la derecha.
if (RB1_bit==1) PORTB=0b00010100; //Giro a la izquierda.
}
}
}

Electroestimulacin www.arossini.com.ar

Para conocer sobre la Electroestimulacin, bajar el paquete de artculos bajados de


Internet. Son aproximadamente 7 Mb.
Todo lo aqu mostrado como Firmware (Fuentes y Hex), esquema de mayor definicin,
simulacin en Proteus, se baja de Archivo ZIP.
En lugar de explayarme aqu sobre teora de la electroestimulacin, prefiero que lo lean
directamente de los artculos de los expertos.
El dispositivo que les ofrezco, funciona con onda cuadrada simtrica. Lo eleg as como
conclusin despus de leer todos los artculos presentados. Hice muchas pruebas, y esta
onda es la ms suave desde el punto de vista de los efectos elctricos de la corriente en
el cuerpo (En el mo). An las personas muy sensibles o temerosas la soportan muy bien
(Otras personas en las cuales lo prob).
Tiene dos canales de salida y cada uno se regula en intensidad en forma independiente.
La programacin se aplica por igual a los dos.
Esta es la forma de una onda:

El PIC permite controlar:


Amplitud, Ancho del pulso, Separacin entre pulsos, Descanso y Frecuencia.
Adems se puede seleccionar Pulso Bifsico (Un pulso positivo y uno negativo) o
Monofsico, donde todos los pulsos son positivos.
De acuerdo a la experiencia que se quiera realizar, se programan los valores en el PIC.
Hay disponibles 23 posibilidades de programar. Los aparatos comerciales no permiten
hacer esto.
El PIC genera una onda a voluntad, y luego se repite durante el tiempo programado.
El dibujo muestra el tren de ondas formado a partir de una onda como la anterior.

El PIC permite generar un pulso con un ancho de 1 a 5 mSeg, y lo hace durante un


segundo. Luego provee un descanso que puede ser de 2, 1,5 o 1 segundo, para que el
msculo se recupere, y as sucesivamente.
En el PIC se programa Separacin, Ancho de Pulso y Frecuencia. Estas tres variables
dependen del tratamiento a realizar. El tren de pulsos es siempre de un segundo, de
manera que a mayor frecuencia entrarn en 1 segundo mayor cantidad de pulsos.
Se decide si el tratamiento ser o no bifsico.
Se decide el tiempo del tratamiento segn necesidad, dividido en tres etapas. La primera
se ajusta entre 0 y 30 minutos; las otras dos entre 0 y 15. Aqu se elige tambin para solo
la primera etapa, el tiempo del tren de pulsos, incluido el descanso. Tres minutos
significan uno de pulsos y dos de descanso. Continuo significa que no tiene descanso.
Las etapas siguientes no permiten seleccionar, pues estn programadas a 2,5 y 2
segundos. Es as porque usualmente se hace la primera etapa lenta, para acostumbrar el
msculo, y luego acelerar las dos siguientes. Si se hace un tratamiento especial, se usa
solo la primera.
Para operar, con los botones sube y baja se selecciona el programa (Ya preprogramado),
que se muestra el nmero en el display.
El botn arrancar, arranca cuando ya est elegido el programa. El nmero elegido queda
grabado en el PIC, de manera que en otra sesin comienza con el mismo programa. Para
cuando transcurren los tiempos programados.
Tambin se para el tratamiento con una llave de seguridad que tiene el paciente en su
mano, si ocurriera algo que no le gustara.
En el Firmware hay 3 programas (Preprogramados). Los tres primeros se usan para:
descontracturar cualquier msculo, eliminar dolores de nervios, fundamentalmente el
nervio citico y el tercero para tonificar msculos.
En la bibliografa entregada, debern encontrar toda la ayuda mdica necesaria para usar
el aparato sin riesgos, e inclusive podrn comunicarse con sus autores. Todo fue bajado
de Internet. He eliminado todos los artculos que no me parecan serios.
Encontrarn muchos ejemplos con fotos y dibujos, de los lugares de aplicacin, de
acuerdo a la dolencia.
Algo sobre la filosofa del diseo.
El diseo es totalmente propio, ya que no encontr en Internet ninguno que me
satisficiera. Ninguno cumple con los requisitos que plantean los mdicos con experiencia
en el tema. De manera que fui avanzando muy lentamente, creando mdulos a medida
que los fui probando. Todo el circuito est formado por bloques o mdulos, que son casi
independientes y se pueden usar para muchas otras cosas.

Por ejemplo, el mdulo de control mediante PIC, puede ser usado (Su filosofa) para
controlar cualquier proceso. El mdulo 555 es un generador de pulsos de la frecuencia
que se desee, que se usa para generar hasta altas frecuencias variando solo dos
resistencias y un condensador. El mdulo que genera la tensin es usado para hacer
fuentes hasta de alta tensin. El mdulo puente, es un inversor puente de tensin, que se
maneja con la seal de la computadora y se usa para controlar giros e inversiones de
motores de contnua u electroimanes.
En la pgina WEB encontrarn mdulos que se le pueden agregar, tales como: Voltmetro
a LEDs para controlar la salida y la fuente de alta tensin, indicador de batera baja,
cargador de batera y un detector de puntos de acupuntura, que indica exactamente
cuales son los puntos de aplicacin.
Sobre el uso de los voltmetros, hay una complicacin interesante con las tierras, ya que
la salida del puente y la salida propiamente dicha, est aisladas de tierra, y por lo tanto la
tierra de los voltmetros no debe mezclarse porque causa problemas. Es por eso que para
alimentar a los voltmetros de salida hay dos pilas de 9 Volt y un relay que corta su
alimentacin cuando no se usa el aparato.

Operacin
Verificar que la batera de 12 Volt est cargada.
Colocar los electrodos en el lugar elegido.
Poner en marcha el Electroestimulador mediante la llave de mano, al extremo del cable.
El LED verde se debe encender.
Elegir el programa mediante los pulsadores sube/baja. El display marcar el nmero de
programa seleccionado, sin punto. El valor se guarda en memoria solo.
Verificar que los potencimetros estn en mnimo.
Entregarle al paciente la llave de mano, para que corte la tensin cuando sienta molestias.
Subir la tensin de la fuente al valor deseado, segn la prctica.
Subir lentamente la tensin de aplicacin (muy lentamente) en uno o los dos canales,
segn se use. Consultar con el paciente continuamente sobre como soporta la tensin. Se
debe ajustar al mximo tolerable.
Al pasar tiempo, se puede soportar ms tensin, por lo que deber subirse. El mismo
paciente puede ir ajustndola a su gusto, al mximo tolerable.
Arrancar la secuencia mediante el pulsador de arranque.
El display mostrar 1. ( con punto) que significa que est corriendo el tiempo 1. Luego de
transcurrido marcar 2. y despus 3. . Cuando termine la secuencia marcar F. . El punto
significa que est en operacin.
La secuencia se detiene en cualquier momento con la llave de mano, resetendose el
PIC, por lo que se reiniciar la secuencia cuando se le d arranque.

Programas disponibles en el Firmware


Pro
gra
ma.

Ca
rac
ter

Ancho

Separac.

Frec.

Descanso

Bifasica

Tiempo
1

Tiemp
o2

Tiempo3

Usos

Uni
dad

mSeg

mSeg

1/Seg

mSeg

1/0

Min

Min

Min

---------------------

3000

10

10

10

Descontracturar

3000

10

10

10

Nervio Citico

10

3000

10

10

10

Estimulacin
muscular

255

Pruebas a 255 Hz
que es frecuencia
bifsica mxima

333

333

Pruebas a 1 Hz que
es la frecuencia
bifsica mnima

100

100

Pruebas monofsica
a 3 Hz

10

10

33

Pruebas bifsica a
33 Hz

100

100

Pruebas bifsica a 3
Hz

10

11

12

13

14

15

16

17

18

19

20

21

22

23

Los programas 1 a 8 son los programados en el Firmware.


Los programas 9 a 23 estn disponibles para programar a voluntad.
Los programas 4 a 8 son solo para pruebas del PIC y del Electroestimulador. NO DEBEN
APLICARSE EN EL CUERPO. Se muestran como ejemplo y sera conveniente que fueran
borrados al concluir el proyecto.
Se aplica la siguiente frmula:
Frecuencia = Parte entera de ( 1000 / (2 * Ancho + Separacion))
Frecuencia en Hz; Ancho y Separacion en mSeg.

Electrodos
Se muestran en la foto siguiente:

Los mostrados miden 5 x 5 cm y 10 x 5 cm. Se hacen tambin los dos de 5 x 5 cm. El uso
de cada tipo se encontrar en los artculos provistos. Estn fabricados en Papel Espaa
como aqu se lo conoce. Es laminado de bronce de 0,25 mm de espesor.
Para usarlos, antes de aplicarlos sobre la piel, humedecerlos con alcohol en gel.

Se fijan con una faja de neoprene, de las finas, que vienen con abrojos. Las venden como
fajas reductoras, o para luxaciones.

Gabinete
Se muestra en la foto siguiente:
Est hecho en plstico de alto impacto de 2 mm de espesor.
Se ven los tres voltmetros,
debajo de ellos las dos salidas
con sus potencimetros.
Debajo del voltmetro de LEDs
redondos est el potencimetro
que controla la tensin
generada.
En la esquina superior izquierda
est la ficha y los controles del
detector de puntos de
acupuntura.
Arriba del gabinete est el cable
con llave de control que maneja
el paciente.
Las perforaciones muestran la
posicin del parlante.
Cable y llave de control

La llave est armada en forma casera, con el LED indicador. No encontr una llave
comercial que pudiera servir.
Cables para conexin

Se observa el cable con doble aislamiento y las fichas RCA.

Vista de frente del gabinete

Vista general del interior del gabinete con los adicionales incluidos

Detector de Puntos de Acupuntura


No es requerido para el funcionamiento del ElectroEstimulador.
Este adicional est en:

Detector Acupuntura

Esquema del ElectroEstimulador

El esquema se puede copiar a un programa grfico por ejemplo PAINT de Windows para
imprimirlo a mayor tamao.
Posee tres pulsadores: uno para seleccionar nmero de programa en forma ascendente,
uno dem pero en forma descendente, y el tercero pone en marcha el programa elegido y
lo ejecuta hasta finalizar.
Si se elige parar en forma anticipada se lo hace con el pulsador que est en la mano de la
persona bajo tratamiento.
Cada programa tiene una secuencia determinada con valores preprogramados. Se
proveen tres programas de aplicacin y 5 para hacer pruebas durante la construccin.
Estos ltimos no se deben aplicar sobre el cuerpo y sera conveniente borrarlos al
terminar la construccin para no tener equivocaciones.
Puede programarse un total de 23, y de ser necesario se pueden agregar varios mas.
Por simplicidad puse un solo dgito de display, pero quedan sin usar 3 pines, de manera
que se pueden colocar tres dgitos de display y mostrar entonces los dos dgitos de
programa y alguna variable durante el proceso.
Para los que quieran experimentar, se puede usar el PIC 18F4550, para disponer de ms
pines. La opcin es entonces programar las variables con pulsadores guardndolas en la
memoria EEPROM y visualizar en el proceso las distintas variables siguiendo el avance
del mismo. En este caso, adems de pre programar, se pueden variar las variables a
voluntad sin necesidad de re grabar el PIC.
La salida se conecta en el lugar de la ficha DB25 (Puerto Paralelo).
La alimentacin se conecta a 12 Volt, despus de la llave de mano del aparato.

La ficha RJ11 es para programar el PIC con el Programador Alf (Bajar).


El programador est diseado para alimentar la plaqueta sin tener que desenchufarla del
mismo. Para ponerla en marcha se debe correr la llave del programador que corresponde
al Vpp, ya que este resetea al PIC.
Adems, como los Pines de Clock y Data, alimentan al display, se ha colocado una llave
doble que asla esta conexin. De no hacerlo, el consumo del display hace caer las
tensiones de Data y Clock y a veces falla la grabacin.
En caso de usar otro mtodo de grabacin, no hara falta el RJ11 y las dos llaves.

Firmware
Est hecho en CCS; comentado en todas sus lneas, de manera que no creo que requiera
ninguna explicacin porque es bastante simple e intuitivo.
El programa seleccionado se guarda en la memoria EEPROM, en el registro nmero 0, de
manera que con un corte de energa, al arrancar otra vez el PIC, se retoma el nmero de
programa guardado.
Los tres programas (1, 2, 3) pre programados son los que uso normalmente.

Proteus
En la entrega hay un archivo con la simulacin en Proteus.
Est simulado el mdulo PIC, y la salida se ve en el osciloscopio. Se ven perfectamente
los dos pulsos positivos que salen del PIC, el tren generado y los tiempos de descanso.
Se miden exactamente los tiempos programados en mseg. Si los tiempos no son exactos
es porque han modificado la frecuencia del clock del PIC o en las propiedades del PIC en
Proteus.
Pueden preparar un programa donde vayan variando los parmetros para visualizarlos.
Tengan en cuenta que debern entrar en propiedades del PIC y variar el path del archivo
HEX si lo colocan en un directorio distinto al del ZIP.

Comentarios sobre la construccin


Con el generador de frecuencias 555 no hay problemas. Genera una corriente pulsante de
unos 6 Volts (Medidos con voltmetro. Con osciloscopio debera ser casi 12 Volt pico) y
cerca de 700 Hz. Prob con distintas frecuencias y esta fue la mejor, la que entregaba
mayor tensin. El transistor aumenta la corriente del 555, los 220 Ohm regulan la corriente
mxima y por lo tanto la tensin mxima de salida. El potencimetro regula la tensin de
salida y su valor no es crtico. La resistencia de 0.9 es vlida para el transformador que
us. Si el trafo tuviera ms resistencia en el bobinado que el mo la resistencia debera ser
menor. El valor de 0.9 es el de una de 1 Ohm que al medirla tena ese valor.
El trafo lo saqu de un timbre viejo, por eso tiene ese valor raro.
La tensin mxima de salida es contnua y filtrada. Debe indefectiblemente llegar a los
180 Volt, porque de esa manera se puede tener en la salida hasta cerca de 140 Volt, que
es lo necesario.
Llegar a los 180 Volt fue un trabajo artesanal.
Veo en mis anotaciones que tengo 5,65 Volt y 717 Hz en la salida del 555. La tensin en
la base del transistor es de 0.35 Volt. La mxima es 0.65 Volt, Corriente de base 4.3 mA y
corriente Ic en primario (al revs) del trafo 350 mA con ganancia 81.4.
La resistencia del trafo es de 0.8 Ohm ms la de 0.9 = 1.7 Ohm. Con ste valor se debe
jugar para sacarle el mximo al transistor, que puede dar una corriente mayor an. No uso

disipador. Recuerden que la corriente es pulsante y que lo que midan con el tester es solo
indicativo, ya que son valores eficaces de un ancho de pulso desconocido.
El transistor trabaja en zona activa, para regular corriente y tensin en salida (Bornes del
condensador.
No recuerdo bien, pero creo que le saqu algunas espiras al trafo del lado de los 220 volt
o salida en este circuito.
Segn un clculo en borrador, veo que la R del trafo es 0.8 Ohm, la impedancia medida a
50 Hz es de 6 Ohm y la impedancia calculada para 1000 Hz es de 120 Ohm, lo que limita
mucho la corriente en el transistor.
Para cualquier explicacin adicional, por favor escriban a mailto:correo@arossini.com.ar

www.arossini.com.ar