Está en la página 1de 69

Ing.

Braulio Elas Chi Salavarra


Instituto Tecnolgico de Lerma
Curso de microcontroladores
PIC18F4550 Bootloader CCS y
Proteus
Ing. Braulio Elas Chi Salavarra

















































Ing. Braulio Elas Chi Salavarra








INTRODUCCIN

En este curso, se enfocara a desarrollar aplicaciones para
resolver problemas reales, con un alto grado de eficiencia y
complejidad, sin dejar de ser fcil de aprender por el alumno,
dando como resultado, prcticas y material realmente
importante para incursionar en el diseo y desarrollo de
aplicaciones avanzadas con tecnologa de ltima generacin.

Ing. Braulio Elas Chi Salavarra





La tecnologa..

La tecnologa avanza da con da, surgiendo nuevas necesidades, cada
vez mas especificas y complejas, esto requiere cierto nivel de
conocimiento mayor que el de hace aos, dejando los sistemas de
aprendizaje convencionales obsoletos, para la solucin de problemas
que enfrenta la sociedad tecnolgica.

Es por esto que nuevas herramientas surgen para tratar de resolver
esas necesidades, mejorando en eficiencia y complejidad. Es por esto,
que los estudiantes necesitan conocer cules son estas nuevas
herramientas de desarrollo, llmese, compiladores de lenguaje de alto
nivel, nuevas familias de microcontroladores, con sistemas embebidos
tales como: Ethernet, USB, CAN, PWM, USART, etc. Haciendo de estos
pequeos controladores, poderosas soluciones.


Ing. Braulio Elas Chi Salavarra




CAPITULO 1
INTRODUCCION A LOS MICROCONTROLADORES







Ing. Braulio Elas Chi Salavarra
Definicin de microcontroladores

Un microcontrolador es un circuito integrado o chip que incluye en su interior las tres
unidades funcionales de una computadora: CPU, Memoria y Unidades de E/S, es decir,
se trata de un computador completo en un solo circuito integrado.
Dando una explicacin ms sencilla, es una microcomputadora con la cual disponemos
de todo, en pequeas cantidades, para hacer uso en aplicaciones que requieran
automatizacin, sin la necesidad de tener toda una computadora funcionando.

Aplicaciones

Son diseados para disminuir el costo econmico y el consumo de energa de un
sistema en particular. Por eso el tamao de la CPU, la cantidad de memoria y los
perifricos incluidos dependern de la aplicacin. El control de un electrodomstico
sencillo como una batidora, utilizar un procesador muy pequeo (4 u 8 bit) por que
sustituir a un autmata finito. En cambio un reproductor de msica y/o vdeo digital
(mp3 o mp4) requerir de un procesador de 32 bit o de 64 bit y de uno o ms Cdec de
seal digital (audio y/o vdeo). El control de un sistema de frenos ABS (Antilock Brake
System) se basa normalmente en un microcontrolador de 16 bit, al igual que el sistema
de control electrnico del motor en un automvil.
Los microcontroladores representan la inmensa mayora de los chips de computadoras
vendidos, sobre un 50% son controladores "simples" y el restante corresponde a DSPs
ms especializados. Mientras se pueden tener uno o dos microprocesadores de
propsito general en casa, usted tiene distribuidos seguramente entre los
electrodomsticos de su hogar una o dos docenas de microcontroladores. Pueden
encontrarse en casi cualquier dispositivo electrnico como automviles, lavadoras,
hornos microondas, telfonos, etc.
Esquema de microcontrolador

Esquema microcontrolador
Ing. Braulio Elas Chi Salavarra

Algunas familias de microcontroladores




Clasificacin

Actualmente existen ms familias de microcontroladores, y ms marcas, hasta ahora,
la tendencia es emigrar a 32 bits en la industria, como son los microcontroladores con
arquitectura ARM.

Familia PIC18F4550

Las mejoras que podemos ver en esta familia de microcontroladores de 8 bits de la
compaa Microchip, son los siguientes:
Set de instrucciones extendidas, para optimizar la compilacin en lenguaje C
Consumo de corriente mnimo, gracias a su tecnologa Nano Watt
Mayores opciones embebidas en esta familia, como pueden ser:
USB
UART
I2C
CAN
Convertidores A/D
PLL integrado
PWM (modulacin por ancho de pulso)
Mayor numero de contadores (timer)
Ing. Braulio Elas Chi Salavarra
El microcontrolador que vamos a utilizar es el PIC18F4550, en el cual podemos ver sus
principales caractersticas:
Ideal para bajo consume (nanoWatt) y conectividad de las aplicaciones que se
benefician de la disponibilidad de tres puertos serie: FS-USB (12 Mbit / s), I C y SPI
(hasta 10Mbit / s) y uno asincrnico (LIN) de puerto serial (EUSART). Grandes
cantidades de memoria RAM, de memoria FLASH y mejora de la memoria del
programa lo hacen ideal para el control y aplicaciones de monitoreo peridico que
requieren una relacin con un ordenador personal a travs de datos USB para cargar /
descargar y / o actualizaciones de firmware.

Parameter Name Value
Program Memory Type Flash
Program Memory Size (Kbytes) 32
RAM 2,048
Data EEPROM (bytes) 256
I/O 24
Caractersticas
Full Speed USB 2.0 (12Mbit/s) interface
1K byte Dual Port RAM +1K byte GP RAM
Full Speed Transceiver
16 Endpoints (IN/OUT)
Internal Pull Up resistors (D+/D-)
48 MHz performance (12 MIPS)



Figura Microcontrolador 18F4550


Ing. Braulio Elas Chi Salavarra



CAPITULO 2
LENGUAJE DE PROGRAMACION C ORIENTADO A SISTEMAS EMBEBIDOS











Ing. Braulio Elas Chi Salavarra
Introduccin a lenguaje C

Si queremos realizar la programacin de los microcontroladores PIC en un lenguaje
como el C, es preciso utilizar un compilador de C.

Dicho compilador nos genera ficheros en formato Intel-hexadecimal, que es el
necesario para programar (utilizando un programador de PIC) un microcontrolador de
6, 8, 18 40 patillas.

El compilador de C que vamos a utilizar es el PCW de la casa CCS Inc. A su vez, el
compilador lo integraremos en un entorno de desarrollo integrado (IDE) que nos va a
permitir desarrollar todas y cada una de las fases que se compone un proyecto, desde
la edicin hasta la compilacin pasando por la depuracin de errores. La ltima fase, a
excepcin de la depuracin y retoques hardware finales, ser programar el PIC.
Al igual que el compilador de Turbo C, ste "traduce" el cdigo C del archivo fuente (.C)
a lenguaje mquina para los microcontroladores PIC, generando as un archivo en
formato hexadecimal (.HEX). Adems de ste, tambin genera otros seis ficheros.
Operandos
Operadores de asignacin

Una expresin de asignacin tradicional es de la forma expr1 =expr1 operador expr2,
es decir, i =i +5. Esta expresin se puede representar por otra forma ms corta: expr1
operador=expr2 siguiendo con el mismo ejemplo i +=5.

Es en las expresiones complejas, y no en una tan simple como la del ejemplo, donde se
puede apreciar la conveniencia de usar esta notacin. La siguiente tabla resume los
operadores de asignacin compuesta y su significado.

Operador Descripcin
+=Asignacin de suma
-=Asignacin de resta
*=Asignacin de multiplicacin
/=Asignacin de divisin
%=Asignacin de resto de divisin
<<=Asignacin de desplazamiento a la izquierda
>>=Asignacin de desplazamiento a la derecha
&=Asignacin de AND de bits
| =Asignacin de OR de bits
^^=Asignacin de OR exclusivo de bits
~=Asignacin de negacin de bits

Operadores aritmticos

Ing. Braulio Elas Chi Salavarra
Los operadores aritmticos se usan para realizar operaciones matemticas. Se listan en
la siguiente tabla:

Operador Descripcin Ejemplo

+Suma (enteros o reales) resul =var1 +var2
- Resta (enteros o reales) resul =var1 - var2
* Multiplicacin (enteros o reales) resul =var1 * var2
/ Divisin (enteros o reales) resul =var1 / var2
- Cambio de signo en enteros o reales -var1
% Mdulo; resto de una divisin entera rango =n [A1]% 256
Operadores relacionales

Su misin es comparar dos operandos y dar un resultado entero:
1 (verdadero); 0 (falso).
La siguiente tabla ilustra estos operadores:

Operadores lgicos

Al igual que los operadores relacionales, stos devuelven 1 (verdadero), 0 (falso) tras la
evaluacin de sus operandos. La tabla siguiente ilustra estos operadores.

Operador Descripcin
! NO lgico
&& Y lgico
| | O lgico

Operadores de manejo de bits
Estos operadores permiten actuar sobre los operandos a nivel de bits y slo pueden
ser de tipo entero (incluyendo el tipo char). Son los que siguen:
Operador Descripcin
~Negacin de bits (complemento a 1)
& Y de bits (AND)
^^O exclusivo de bits (EXOR)
| O de bits (OR)

Operador Descripcin
<Menor que
>Mayor que
<=Menor o igual que
>=Mayor o igual que
==Igual a
=Distinto de
Ing. Braulio Elas Chi Salavarra
Libreras Incorporadas

#USE DELAY (CLOCK=frecuencia)
Esta directiva indica al compilador la frecuencia del procesador, en ciclos por segundo,
a la vez que habilita el uso de las funciones DELAY_MS() y DELAY_US().
Opcionalmente podemos usar la funcin restart_WDT() para que el compilador reinicie
el WDT durante el retardo.
Ejemplos:
#use delay (clock=20000000)
#use delay (clock=32000, RESTART_WDT)

#USE FAST_IO (puerto)
Esta directiva afecta al cdigo que el compilador generar para las instrucciones de
entrada y salida. Este mtodo rpido de hacer I/O ocasiona que el compilador realice
I/O sin programar el registro de direccin. El puerto puede ser A-G.
Ejemplo:
#use fast_io(A)

#USE FIXED_IO (puerto_OUTPUTS=pin_x#, pin_x#...)
Esta directiva afecta al cdigo que el compilador generar para las instrucciones de
entrada y salida. El mtodo fijo de hacer I/O causar que el compilador genere cdigo
para hacer que un pin de I/O sea entrada o salida cada vez que se utiliza. Esto ahorra el
byte de RAM usado en I/O normal.
Ejemplo:
#use fixed_io(a_outputs=PIN_A2 ,PIN_A3)
#USE RS232 (BAUD=baudios, XMIT=pin, RCV=pin...)

Esta directiva le dice al compilador la velocidad en baudios y los pines utilizados para la
I/O serie. Esta directiva tiene efecto hasta que se encuentra otra directiva RS232.
La directiva #USE DELAY debe aparecer antes de utilizar #USE RS232. Esta directiva
habilita el uso de funciones tales como GETCH, PUTCHAR y PRINTF. Si la I/O no es
estndar es preciso poner las directivas FIXED_IO o FAST_IO delante de
#USE RS232
OPCIONES:
RESTART_WDT
Hace que GETC() ponga a cero el WDT mientras espera un carcter.
INVERT
Invierte la polaridad de los pines serie (normalmente no es necesario con el
convertidor de nivel, como el MAX232). No puede usarse con el SCI interno.
PARITY=X Donde X es N, E, u O.
BITS=X Donde X es 5-9 (no puede usarse 5-7 con el SCI).
FLOAT_HIGH Se utiliza para las salidas de colecctor abierto.
ERRORS
Indica al compilador que guarde los errores recibidos en la variable RS232_ERRORS
para restablecerlos cuando se producen.
BRGH1OK
Ing. Braulio Elas Chi Salavarra
Permite velocidades de transmisin bajas en chips (uC's, memorias, etc) que tienen
problemas de transmisin.
Cuando utilizamos dispositivos con SCI y se especifican los pines SCI, entonces se usar
el SCI. Si no se puede alcanzar una tasa de baudios dentro del 3% del valor deseado
utilizando la frecuencia de reloj actual, se generar un error.
ENABLE=pin El pin especificado estar a nivel alto durante la transmisin.
FORCE_SW
Usa una UART software en lugar del hardware aun cuando se especifican los pines del
hardware.
La definicin de RS232_ERRORS es como sigue:
Sin UART:
El bit 7 es el 9 bit para el modo de datos de 9 bit. El bit 6 a nivel alto indica un fallo en
el modo flotante alto.
Con UART:
Usado slo para conseguir:
Copia del registro RCSTA, excepto: que el bit 0 se usa para indicar un error de paridad.
Ejemplo:
#use rs232(baud=9600, xmit=PIN_A2,rcv=PIN_A3)
#USE STANDARD_IO (puerto)
Esta directiva afecta al cdigo que el compilador genera para las instrucciones de
entrada y salida. El mtodo standar de hacer I/O causar que el compilador genere
cdigo para hacer que un pin de I/O sea entrada o salida cada vez que se utiliza. En los
procesadores de la serie 5X esto necesita un byte de RAM para cada puerto
establecido como I/O estandar.
Ejemplo:
#use standard_io(A)
Funciones de I/O discreta
INPUT(pin)
Devuelve el estado '0' o '1' de la patilla indicada en pin. El mtodo de acceso de I/O
depende de la ltima directiva #USE *_IO utilizada. El valor de retorno es un entero
corto.
Ejemplo:
while ( !input(PIN_B1) );
Nota: El argumento para las funciones de entrada y salida es una direccin de bit. Por
ejemplo, para el bit 3 del port A (byte 5 de los SFR) tendra un valor direccin de
5*8+3=43.
Esto se puede definir como sigue: #define pin3_portA 43.
Los pines o patillas de los dispositivos estn definidos como PIN_XX en los archivos de
cabecera *.H. stos, se pueden modificar para que los nombres de los pines sean ms
significativos para un proyecto determinado.

OUTPUT_BIT(pin, value)

Esta funcin saca el bit dado en value(0 o 1) por la patilla de I/O especificada en pin. El
modo de establecer la direccin del registro, est determinada por la ltima directiva
Ing. Braulio Elas Chi Salavarra
#USE *_IO.
Ejemplo:
output_bit( PIN_B0, 0); // es lo mismo que output_low(pin_B0);
output_bit( PIN_B0,input( PIN_B1 ) ); // pone B0 igual que B1
output_bit( PIN_B0, shift_left(&data, 1, input(PIN_B1)));
// saca por B0 el MSB de 'data' y al mismo tiempo
// desplaza el nivel en B1 al LSB de data.

OUTPUT_FLOAT(pin)

Esta funcin pone la patilla especificada como pin en el modo de entrada. Esto
permitir que la patilla est flotante para representar un nivel alto en una conexin de
tipo colector abierto.
Ejemplo:
// guardamos la lectura del port A en dato
if( (dato & 0x80)==0 ) // comprobamos si es '1' el MSB
output_low(pin_A0); // si es '1' ponemos a cero el pin A0
else
output_float(pin_A0); // de lo contrario, ponemos el pin A0 a uno

OUTPUT_HIGH(pin)
Pone a 'uno' el pin indicado. El mtodo de acceso de I/O depende de la ltima directiva
#USE *_IO utilizada.
Ejemplo:
output_high(PIN_A0);
OUTPUT_LOW(pin)
Pone a 'cero' el pin indicado. El mtodo de acceso de I/O depende de la ltima
directiva
#USE *_IO.
Ejemplo:
output_low(PIN_A0);
PORT_B_PULLUPS(flag)
Esta funcin activa/desactiva las resistencias pullups en las entradas del puerto B. Flag
puede ser TRUE (activa) o FALSE (desactiva).
Ejemplo:
port_b_pullups(FALSE);
SET_TRIS_A(value)
SET_TRIS_B(value)
SET_TRIS_C(value)
SET_TRIS_D(value)
SET_TRIS_E(value)
Estas funciones permiten escribir directamente los registros tri-estado para la
configuracin de los puertos.
Esto debe usarse con FAST_IO() y cuando se accede a los puertos de I/O como si fueran
memoria, igual que cuando se utiliza una directiva #BYTE. Cada bit de value representa
una patilla. Un '1' indica que la patilla es de entrada y un '0' que es de salida.
Ejemplo:
Ing. Braulio Elas Chi Salavarra
SET_TRIS_B( 0x0F ); // pone B0, B1, B2 y B3 como entradas; B4, B5, B6 y B7
// como salidas, en un PIC 16c84
Funciones de retardos

DELAY_CYCLES(count)
Esta funcin realiza retardos segn el nmero de ciclos de instruccin especificado en
count; los valores posibles van desde 1 a 255. Un ciclo de instruccin es igual a cuatro
periodos de reloj.
Ejemplo:
delay_cycles( 3 ); // retardo de 3ciclos instruccin; es igual que un NOP

DELAY_MS(time)
Esta funcin realiza retardos del valor especificado en time. Dicho valor de tiempo es
en milisegundos y el rango es 0-65535.
Para obtener retardos ms largos as como retardos 'variables' es preciso hacer
llamadas a una funcin separada; vase el ejemplo siguiente.
Es preciso utilizar la directiva #use delay(clock=frecuencia) antes de la llamada a esta
funcin, para que el compilador sepa la frecuencia de reloj.
Ejemplos:
#use delay (clock=4000000) // reloj de 4MHz
delay_ms( 2 ); // retardo de 2ms
void retardo_segundos(int n) {// retardo de 'n' segundos; 0 <=n =>255
for (; n!=0; n--)
delay_ms( 1000 ); // 1 segundo
}

DELAY_US(time)
Esta funcin realiza retardos del valor especificado en time. Dicho valor es en
microsegundos y el rango va desde 0 a 65535. Es necesario utilizar la directiva #use
delay antes de la llamada a esta funcin para que el compilador sepa la frecuencia de
reloj.
Ejemplos:
#use delay(clock=20000000)
delay_us(50);
int espera =10;
delay_us(espera);
Pasos para hacer un programa en C
Edicin de un programa en C

Para crear un programa hay que seguir los pasos siguientes:
1. Especificaciones del programa (qu tiene que hacer)
2. Hacer organigrama
3. Escribir el cdigo fuente (conocer el lenguaje)
Ing. Braulio Elas Chi Salavarra
4. Compilar +Enlazar (Link)
5. Depurar errores, si los hay
Anlisis de un problema sencillo
Como ejemplo orientativo, se hace a continuacin el desarrollo de un programa
sencillo. Se trata de obtener la nota media de un alumno durante un trimestre. El
anlisis de esta tarea, que la hemos llamado MEDIA, puede dar el siguiente
procedimiento:

1. leer NOMBRE
2. leer NOTA
3. si no hay mas notas, ir al punto 5
4. ir al punto 2
5. calcular la MEDIA
6. imprimir NOMBRE
7. imprimir MEDIA

2.6.3 Diagrama de flujo del ejemplo media


Diagrama de Flujo



Ing. Braulio Elas Chi Salavarra
Estructura de un programa en C

De forma generalizada, la estructura de un programa en C tiene el siguiente aspecto:

declaraciones globales
prototipos de funciones
main() {
variables locales;
bloque de sentencias;
llamadas a las funciones;
}
funcin_1() {
variables locales a 17uncin_1;
bloque de sentencias;
llamada a otra/s funciones;
}
funcin_n() {

}













Ing. Braulio Elas Chi Salavarra





CAPITULO 3
INSTRUCCIONES PARA LA PROGRAMACIN DE MICROCONTROLADOR









Ing. Braulio Elas Chi Salavarra
Instrucciones de instalacin

Circuito que se montar para la programacin del circuito

Fig. Esquema de programacin
3.2 Programacin de PIC18F4550

Para empezar a programar nuestro microcontrolador daremos los pasos muy sencillos
de cmo hacerlo a continuacin
Primer paso
Abrir nuestro plantilla general que se encuentra en la carpeta de programas, con el
nombre de forma_general en formato .txt y copiar el texto, abrir nuestro programa
compilador CCS.

Ing. Braulio Elas Chi Salavarra



Y seleccionamos NEW-Source File, nos aparecer la opcin de crear nuestro proyecto,
y guardarlo en la carpeta que deseemos, aqu podemos escoger la ubicacin que
queramos, como consejo, guardar nuestro archivo en una carpeta exclusiva para
nuestro programa, ya que se crearn muchos archivos al compilar el programa, es solo
cuestin de orden.



Una vez creado el proyecto, pegamos el contenido que copiamos anteriormente (sin
modificar nada) y pegamos en el compilador

Finalmente cerramos nuestra forma_general y nos disponemos a modificar el
programa en nuestro compilador.
Ing. Braulio Elas Chi Salavarra
Segundo paso
Cuando nuestro programa est bien terminado, y simulado previamente, nos
disponemos a programar fsicamente nuestro microcontrolador de una manera muy
sencilla y rpida.
Una vez compilado nuestro programa, se crear un archivo programa.hex el cual es
el que necesitamos para poder cargarlo al microcontrolador.


Instalacin de Driver para Bootloader USB (Windows vista y 7)

Cuando instalemos el microcontrolador, nos dir Windows que no reconoce el
dispositivo, y no puede instalar el driver, esto lo haremos manualmente, de la
siguiente forma:
Primero seleccionamos EquipoPropiedades




Ing. Braulio Elas Chi Salavarra
Ahora seleccionamos Administrador de dispositivos.


Veremos un dispositivo desconocido conectado al puerto USB, seleccionamos botn
secundario sobre el dispositivo y seleccionamos propiedades.






Ing. Braulio Elas Chi Salavarra
Para instalar el driver, necesitamos seleccionar Actualizar Controlador

Nos aparecer una ventana, debemos seleccionar Buscar software manualmente.








Ing. Braulio Elas Chi Salavarra
Seleccionamos Examinar, donde buscaremos la carpeta del curso, dentro de la carpeta
seleccionamos Usb ToolsMCHPUSB Custom Driver








Ing. Braulio Elas Chi Salavarra
Programacin de microcontrolador con PDFSUSB

Ventana de software para programar microcontrolador


Identificacin del software de control.

Conectamos el PIC va USB, y abrimos el programa PDFSUSB, y buscamos la opcin
PICDEM FS USB.


Ing. Braulio Elas Chi Salavarra
Desde aqu, ya podemos leer el dispositivo, borrarlos, leer el programa compilado
previamente.
Aqu podemos ver, como se ley, borr y guard el programa directamente desde USB,
muy fcil y rpido.


Al cargar el programa con la opcin Load Hex File, nos saldr una ventana como esta


Seleccionamos la opcin No, para no grabar sobre nuestro programa especial.
Y para grabarlo finalmente, seleccionamos Program Device.




Ing. Braulio Elas Chi Salavarra







CAPITULO 4
PRACTICAS DE LABORATORIO

















Ing. Braulio Elas Chi Salavarra
Gua de Prcticas

Practica #1
Encendido de un led (parpadeo)
Practica #2
Manejo de un puerto como salida, y como entrada
Practica #3
Secuencia de leds con condiciones
Practica #4
Display de 7 segmentos
Practica #5
Motor paso a paso
Practica #6
Motor CD con puente h
Practica #7
ADC
Practica #8
Interrupcin timer
Practica #9
PWM (modulacin por ancho de pulso)
Practica #10
Manejo de LCD 16x2
Practica #11
LM35 (temperatura)
Practica #12
Puerto Serial RS232
Practica #13
EEPROM externa protocolo I2C
Practica #14
Frecuencmetro








Ing. Braulio Elas Chi Salavarra

Fig. Conexin practica 1 proteus
ESQUEMATICO PRIMERA PRCTICA
Hacemos el paso 1 de el capitulo programacin de PIC y nos disponemos a hacer
nuestro primer programa:



Ejercicio #1
Encender un led
Objetivo
En esta prctica podremos comenzar a familiarizarnos con los entornos
del compilador, programador, simulacin y finalmente programacin
fsica y montaje de nuestro microcontrolador.

Ing. Braulio Elas Chi Salavarra



Este es un programa muy sencillo, en el cual, encenderemos un led durante un
segundo, y se apagar un segundo tambin, en nuestro programa tenemos el tiempo
de 1 segundo o mejor dicho 1000 milisegundos=1000*Exp -3; con esta sencilla
conversin podremos darnos cuenta de que si ponemos DELAY_MS(2000) sern 2
segundos y as sucesivamente.
Con la opcin enciende(A0); ponemos a 1 lgico el pin A0 del puerto A, como
vemos en esta imagen:

enciende(A0);
delay_ms(1000);
apaga(A0);
delay_ms(1000);
































Ing. Braulio Elas Chi Salavarra


Fig. Esquema practica 2

Esquemtico de la prctica




Practica #2
Manejo de un puerto de entrada y salida
Objetivo
Manejar un puerto completo del microcontrolador, as como el manejo
de entrada de datos, por medio de un pulsador, haremos una
introduccin a nuevas instrucciones al compilador para poder testear el
puerto A como entrada.
Ing. Braulio Elas Chi Salavarra
Cdigo del programa




En este programa agregamos una condicin if, asi ya podemos tomar decisiones
dependiendo de las condiciones creados por nuestras entradas.


Con la condicin if(entrada(A0)) preguntamos si el pin A0 se encuentra a 1, si esta
condicin es verdadera, entonces enciendo B7, de lo contrario mantenemos apagado
el pin (A0);






























if(entrada(A0)){
enciende(B7);
}else{
apaga(B7);
}

Ing. Braulio Elas Chi Salavarra




Secuencia de leds (con condiciones)
En esta prctica pondremos a prueba todas las prcticas anteriores

En este programa, vemos una nueva
instruccin output_b(0x01) en esta
instruccin le decimos al microcontrolador
que utilice todo su puerto como salida, y
como en este ejemplo, despliegue un 0x00, y
as sucesivamente.











Practica #3
Secuencia de leds (con condiciones)
Objetivo
Dar nuevas condiciones a nuestros programas, para manejar una
secuencia de nuestro puerto B acondicionado por nuestro puerto A
como entrada.
if(entrada(A0)){
output_b(0x01);
delay_ms(1000);
output_b(0x02);
delay_ms(1000);
output_b(0x04);
delay_ms(1000);
output_b(0x08);
delay_ms(1000);
}else{
output_b(0x08);
delay_ms(1000);
output_b(0x04);
delay_ms(1000);
output_b(0x02);
delay_ms(1000);
output_b(0x01);
delay_ms(1000);
}
Ing. Braulio Elas Chi Salavarra

El visualizador de siete segmentos (llamado tambin display) es una forma de
representar nmeros en equipos electrnicos. Est compuesto de siete segmentos que
se pueden encender o apagar individualmente. Cada segmento tiene la forma de una
pequea lnea.













Para saber los valores que debemos desplegar en el display de 7 segmentos:
Nmero a b c d e f g Valor
hexadecimal
1 X X 0x60
2 X X X X X 0xd9
3 X X X X X 0xf1
4 X X X X 0x63
5 X X X X X 0xb3
6 X X X X X X 0xb7
7 X X X 0xe0
8 X X X X X X X 0xf7
9 X X X X X 0xe3
0 X X X X X X 0xf6

Practica #4
Display de 7 segmentos
Objetivo
En esta prctica haremos una secuencia de todo nuestro puerto,
especficamente el puerto B, que se comprende de 8 entradas o salidas,
en este ejemplo lo tomaremos como salidas, formando una palabra de
8 bits (binario). En el cual manejaremos un display de 7 segmentos.
Para nuestro montaje fsico, solo utilizaremos 7 bits. As como tambin
manejar tiempos de reloj para poder hacer una secuencia de datos
paso a paso.
Ing. Braulio Elas Chi Salavarra
En la tabla de arriba, podemos ver los valores que necesitamos tener en las salidas del
puerto que activar el display de 7 segmentos.
La posicin en la cual se conectarn ser la siguiente:
PIN D0 =g
PIN D1 =f
PIN D2 =e
PIN D4 = d
PIN D5 =c
PIN D6 =b
PIN D7 =a
Para poder hacer un pequeo contador de 0 a 3 lo realizamos de la siguiente forma:
for(;;){
output_d(0xf6);
delay_ms(500);
output_d(0x60);
delay_ms(500);
output_d(0xd9);
delay_ms(500);
output_d(0xf1);
delay_ms(500);
}





Ing. Braulio Elas Chi Salavarra
Introduccin:
Los motores paso a paso son ideales para la construccin de mecanismos en donde se
requieren movimientos muy precisos.
La caracterstica principal de estos motores es el hecho de poder moverlos un paso a la
vez por cada pulso que se le aplique. Este paso puede variar desde 90 hasta pequeos
movimientos de tan solo 1.8, es decir, que se necesitarn 4 pasos en el primer caso
(90) y 200 para el segundo caso (1.8), para completar un giro completo de 360.
Estos motores poseen la habilidad de poder quedar enclavados en una posicin o bien
totalmente libres. Si una o ms de sus bobinas estn energizadas, el motor estar
enclavado en la posicin correspondiente y por el contrario quedar completamente
libre si no circula corriente por ninguna de sus bobinas.
Secuencias para manejar motores paso a paso Unipolares
Existen tres secuencias posibles para este tipo de motores, las cuales se detallan a
continuacin. Todas las secuencias comienzan nuevamente por el paso 1 una vez
alcanzado el paso final (4 u 8). Para revertir el sentido de giro, simplemente se deben
ejecutar las secuencias en modo inverso.

Secuencia Normal: Esta es la secuencia ms usada y la que generalmente recomienda
el fabricante. Con esta secuencia el motor avanza un paso por vez y debido a que
siempre hay al menos dos bobinas activadas, se obtiene un alto torque de paso y de
retencin.


PASO Bobina A Bobina B Bobina C Bobina D
1 ON ON OFF OFF

2 OFF ON ON OFF

Practica #5
Motores paso a paso
Objetivo: La siguiente prctica mostrar el conexionado bsico para
usar un motor a pasos unipolar.
Agregando a nuestro circuito de prueba un driver ULN2803 al puerto M
y un motor a pasos unipolar a la salida del driver podremos crear un
programa que genere uno de los 3 tipos de movimientos generalizados
para este tipo de motores.
Ing. Braulio Elas Chi Salavarra
3 OFF OFF ON ON

4 ON OFF OFF ON

Fig. Secuencia normal
Secuencia del tipo wave drive: En esta secuencia se activa solo una bobina a la vez. En
algunos motores esto brinda un funcionamiento ms suave. La contrapartida es que al
estar solo una bobina activada, el torque de paso y retencin es menor.


PASO Bobina A Bobina B Bobina C Bobina D
1 ON OFF OFF OFF

2 OFF ON OFF OFF

3 OFF OFF ON OFF

4 OFF OFF OFF ON


Fig. secuencia del tipo wave drive
Secuencia del tipo medio paso: En esta secuencia se activan las bobinas de tal forma
de brindar un movimiento igual a la mitad del paso real. Para ello se activan primero 2
bobinas y luego solo 1 y as sucesivamente. Como vemos en la tabla la secuencia
completa consta de 8 movimientos en lugar de 4.
PASO Bobina A Bobina B Bobina C Bobina D
Ing. Braulio Elas Chi Salavarra
1 ON OFF OFF OFF

2 ON ON OFF OFF

3 OFF ON OFF OFF

4 OFF ON ON OFF

5 OFF OFF ON OFF

6 OFF OFF ON ON

7 OFF OFF OFF ON

8 ON OFF OFF ON


Fig. Secuencia del tipo medio paso
Como comentario final, cabe destacar que debido a que los motores paso a paso son
dispositivos mecnicos y como tal deben vencer ciertas inercias, el tiempo de duracin
y la frecuencia de los pulsos aplicados es un punto muy importante a tener en cuenta.
Ing. Braulio Elas Chi Salavarra
En tal sentido el motor debe alcanzar el paso antes que la prxima secuencia de pulsos
comience. Si la frecuencia de pulsos es muy elevada, el motor puede reaccionar en
alguna de las siguientes formas:
Puede que no realice ningn movimiento en absoluto.
Puede comenzar a vibrar pero sin llegar a girar.
Puede girar errticamente.
O puede llegar a girar en sentido opuesto.
Para obtener un arranque suave y preciso, es recomendable comenzar con una
frecuencia de pulso baja y gradualmente ir aumentndola hasta la velocidad deseada
sin superar la mxima tolerada. El giro en reversa debera tambin ser realizado
previamente bajando la velocidad de giro y luego cambiar el sentido de rotacin.

Una referencia importante:
Cuando se trabaja con motores P-P usados o bien nuevos, pero de los cuales no
tenemos hojas de datos. Es posible averiguar la distribucin de los cables a los
bobinados y el cable comn en un motor de paso unipolar de 5 o 6 cables siguiendo las
instrucciones que se detallan a continuacin:


Fig. Tipo de motores P.P.
1. Aislando el cable(s) comn que va a la fuente de alimentacin: Como se aprecia en
las figuras anteriores, en el caso de motores con 6 cables, estos poseen dos cables
comunes, pero generalmente poseen el mismo color, por lo que lo mejor es unirlos
antes de comenzar las pruebas.
Usando un tester para chequear la resistencia entre pares de cables, el cable comn
ser el nico que tenga la mitad del valor de la resistencia entre ella y el resto de los
cables.
Esto es debido a que el cable comn tiene una bobina entre ella y cualquier otro cable,
mientras que cada uno de los otros cables tiene dos bobinas entre ellos. De ah la
mitad de la resistencia medida en el cable comn.
2. Identificando los cables de las bobinas (A, B, C y D): aplicar un voltaje al cable
comn (generalmente 12 volts, pero puede ser ms o menos) y manteniendo uno de
los otros cables a masa (GND) mientras vamos poniendo a masa cada uno de los
dems cables de forma alternada y observando los resultados.
El proceso se puede apreciar en el siguiente cuadro:
Ing. Braulio Elas Chi Salavarra
Seleccionar un cable y conectarlo a masa. Ese ser
llamado cable A.

Manteniendo el cable A conectado a masa, probar
cul de los tres cables restantes provoca un paso en
sentido antihorario al ser conectado tambin a
masa. Ese ser el cable B.

Manteniendo el cable A conectado a masa, probar
cul de los dos cables restantes provoca un paso en
sentido horario al ser conectado a masa. Ese ser el
cable D.

El ltimo cable debera ser el cable C. Para
comprobarlo, basta con conectarlo a masa, lo que no
debera generar movimiento alguno debido a que es
la bobina opuesta a la A.

Fig. Funcionamiento de motores P.P.
Nota: La nomenclatura de los cables (A, B, C, D) es totalmente arbitraria.

Identificando los cables en Motores P-P Bipolares:
Para el caso de motores paso a paso bipolares (generalmente de 4 cables de salida), la
identificacin es ms sencilla. Simplemente tomando un tester en modo ohmetro
(para medir resistencias), podemos hallar los pares de cables que corresponden a cada
bobina, debido a que entre ellos deber haber continuidad (en realidad una resistencia
muy baja). Luego solo deberemos averiguar la polaridad de la misma, la cual se obtiene
fcilmente probando. Es decir, si conectado de una manera no funciona, simplemente
damos vuelta los cables de una de las bobinas y entonces ya debera funcionar
correctamente. Si el sentido de giro es inverso a lo esperado, simplemente se deben
invertir las conexiones de ambas bobinas y el H-Bridge.
Para recordar
Un motor de paso con 5 cables es casi seguro de 4 fases y unipolar.
Un motor de paso con 6 cables tambin puede ser de 4 fases y unipolar, pero con 2
cables comunes para alimentacin. Pueden ser del mismo color.
Un motor de pasos con solo 4 cables es comnmente bipolar.
Esquemtico
Unipolar: Estos motores suelen tener 6 o 5 cables de salida, dependiendo de su
conexionado interno (ver figura 2). Este tipo se caracteriza por ser ms simple
de controlar. En la figura 4 podemos apreciar un ejemplo de conexionado para
controlar un motor paso a paso unipolar mediante el uso de un ULN2803, el
cual es una array de 8 transistores tipo Darlington capaces de manejar cargas
Ing. Braulio Elas Chi Salavarra
de hasta 500mA. Las entradas de activacin (Activa A, B , C y D) pueden ser
directamente activadas por un microcontrolador.


Conexin ULN2803

Conexin practica 5
Cdigo
void secuencia(){
output_b(0xFE);
delay_ms(500);
output_b(0xFD);
delay_ms(500);
output_b(0xFB);
delay_ms(500);
output_b(0xF7);
delay_ms(500);
}
void secuencia2(){
output_b(0xF7);
delay_ms(500);
output_b(0xFB);
RA0/AN0
2
RA1/AN1
3
RA2/AN2/VREF-/CVREF
4
RA3/AN3/VREF+
5
RA4/T0CKI/C1OUT/RCV
6
RA5/AN4/SS/LVDIN/C2OUT
7
RA6/OSC2/CLKO
10
OSC1/CLKI
9
RB0/AN12/INT0/FLT0/SDI/SDA
21
RB1/AN10/INT1/SCK/SCL
22
RB2/AN8/INT2/VMO
23
RB3/AN9/CCP2/VPO
24
RB4/AN11/KBI0/CSSPP
25
RB5/KBI1/PGM
26
RB6/KBI2/PGC
27
RB7/KBI3/PGD
28
RC0/T1OSO/T1CKI
11
RC1/T1OSI/CCP2/UOE
12
RC2/CCP1
13
VUSB
14
RC4/D-/VM
15
RC5/D+/VP
16
RC6/TX/CK
17
RC7/RX/DT/SDO
18
RE3/MCLR/VPP
1
U1
PIC18F2550
1B
1
2B
2
3B
3
4B
4
5B
5
6B
6
7B
7
8B
8
1C
18
2C
17
3C
16
4C
15
5C
14
6C
13
7C
12
8C
11
COM
10
U2
ULN2803
+88.8
0
0
Ing. Braulio Elas Chi Salavarra
delay_ms(500);
output_b(0xFD);
delay_ms(500);
output_b(0xFE);
delay_ms(500);
}
Estas son funciones que vamos a llamar dentro de nuestro men principal, para que no
tengamos que poner todo, cuando queramos hacer la misma accin.
Programa principal
///////////poner programa desde aqui////////////
if(entrada(A0)){
secuencia();
}
if(entrada(A1)){
secuencia2();
}
//////////fin de programa///////










Ing. Braulio Elas Chi Salavarra
Introduccin
Un Puente H o Puente en H es un circuito electrnico que permite a un motor elctrico
DC girar en ambos sentidos, avance y retroceso. Son ampliamente usados en robtica
y como convertidores de potencia. Los puentes H estn disponibles como circuitos
integrados, pero tambin pueden construirse a partir de componentes discretos.


Funcionamiento puente H
Estructura de un puente H (marcado en rojo)

Puente H
Los 2 estados bsicos del circuito.
El trmino "puente H" proviene de la tpica representacin grfica del circuito. Un
puente H se construye con 4 interruptores (mecnicos o mediante transistores).
Cuando los interruptores S1 y S4 (ver primera figura) estn cerrados (y S2 y S3
abiertos) se aplica una tensin positiva en el motor, hacindolo girar en un sentido.
Abriendo los interruptores S1 y S4 (y cerrando S2 y S3), el voltaje se invierte,
permitiendo el giro en sentido inverso del motor.
Con la nomenclatura que estamos usando, los interruptores S1 y S2 nunca podrn
estar cerrados al mismo tiempo, porque esto cortocircuitara la fuente de tensin. Lo
mismo sucede con S3 y S4.
Como hemos dicho el puente H se usa para invertir el giro de un motor, pero tambin
puede usarse para frenarlo (de manera brusca), al hacer un corto entre las bornas del
motor, o incluso puede usarse para permitir que el motor frene bajo su propia inercia,
Practica #6
Motor CD con puente H
Objetivo
Conocer el funcionamiento de un Motor CD y dar una explicacin de
cmo poner a funcionarlo en ambas direcciones con una lgica de
control avanzada, en la cual ser controlada por variables la direccin
de un motor mediante un puente H.

Ing. Braulio Elas Chi Salavarra
cuando desconectamos el motor de la fuente que lo alimenta. En el siguiente cuadro
se resumen las diferentes acciones.
S1 S2 S3 S4 Resultado
1 0 0 1 El motor gira en avance
0 1 1 0 El motor gira en retroceso
0 0 0 0 El motor se detiene bajo su inercia
0 1 0 1 El motor frena (fast-stop)

Integrado L293D
Este integrado, es un puente H en el cual, ya no tenemos que hacer todo ese arreglo
de transistores y diodos, esto nos facilita a la hora de armar nuestro circuito, evitando
errores de cableado.


L293D
L293

Diagrama interno de nuestro integrado, en el cual vemos diferentes tipos de
aplicaciones.


Ing. Braulio Elas Chi Salavarra
Diagrama a bloques L293
Tabla de verdad de nuestro integrado


Tabla de verdad L293

Esquemtico




Cdigo
Declaramos una variable en el lugar donde nos indica que podemos hacerlo
int entradas=0;
Y en nuestro programa principal ponemos esto:
///////////poner programa desde aqui////////////
entradas=PORTA();
if (entradas==0x00){
enciende(B0);
enciende(B5);
enciende(B1);
apaga(B2);
IN1
2
OUT1
3
OUT2
6
OUT3
11
OUT4
14
IN2
7
IN3
10
IN4
15
EN1
1
EN2
9
VS
8
VSS
16
GND GND
U2
L293D
RA0/AN0
2
RA1/AN1
3
RA2/AN2/VREF-/CVREF
4
RA3/AN3/VREF+
5
RA4/T0CKI/C1OUT/RCV
6
RA5/AN4/SS/LVDIN/C2OUT
7
RA6/OSC2/CLKO
10
OSC1/CLKI
9
RB0/AN12/INT0/FLT0/SDI/SDA
21
RB1/AN10/INT1/SCK/SCL
22
RB2/AN8/INT2/VMO
23
RB3/AN9/CCP2/VPO
24
RB4/AN11/KBI0/CSSPP
25
RB5/KBI1/PGM
26
RB6/KBI2/PGC
27
RB7/KBI3/PGD
28
RC0/T1OSO/T1CKI
11
RC1/T1OSI/CCP2/UOE
12
RC2/CCP1
13
VUSB
14
RC4/D-/VM
15
RC5/D+/VP
16
RC6/TX/CK
17
RC7/RX/DT/SDO
18
RE3/MCLR/VPP
1
U1
PIC18F2550
0
0
Ing. Braulio Elas Chi Salavarra
enciende(B6);
apaga(B7);
}
if (entradas==0x01){
enciende(B0);
apaga(B5);
enciende(B1);
apaga(B2);
enciende(B6);
apaga(B7);
}
if (entradas==0x02){
apaga(B0);
enciende(B5);
enciende(B1);
apaga(B2);
enciende(B6);
apaga(B7);
}
if(entradas==0x03){
enciende(B0);
enciende(B5);

enciende(B2);
enciende(B7);
apaga(B1);
apaga(B6);
}
//////////fin de programa///////

Como podemos ver, en nuestro programa, tenemos que habilitar nuestro driver, y
hacer una combinacin de bits de habilitacin para poder ir en la direccin que
deseemos ya sea adelante o atrs.




Ing. Braulio Elas Chi Salavarra

Introduccin
El CNY70 es un sensor ptico reflexivo que tiene una construccin compacta dnde el
emisor de luz y el receptor se colocan en la misma direccin para detectar la presencia
de un objeto utilizando la reflexin del infrarrojo sobre el objeto.
La longitud de onda de trabajo es 950nm. El detector consiste en un fototransistor.



CNY70

Cmo configurar nuestro sensor?
Practica #7
ADC Convertidor analgico digital
Objetivo
Ensear el funcionamiento de sensores, los cuales son una parte importante en el
funcionamiento de un sistema automatizado, y como adaptar estas seales a un
microcontrolador.
Ing. Braulio Elas Chi Salavarra

Fig. Conexin CNY70

Valores analgicos y digitales
Los sensores trabajan con seales elctricas, pero no todos son con seales digitales o
discretas, esto porque su seal es analgica.
Nuestro microcontrolador cuenta con entradas analgicas digitales, esto que quiere
decir, que podemos convertir esas seales analgicas a digitales en forma de un valor
discreto, en esto caso, la hoja de datos nos dice que tenemos hasta 11 canales A/D
repartidos en el puerto A y B con una precisin de 10 bits.
10 bits?
Si queremos convertir 10 bits a un valor decimal, solo tendramos que hacer la
siguiente conversin:
2
10
=1024
Tenemos que un voltaje de 5 volts dividido entre 1024 unidades sera que cada
aumento de .00488 volts o 4.88 mili volts, es una cantidad bastante buena y
tendramos bastante precisin a la hora de medir un sensor.
La frmula para saber el voltaje adquirido es la siguiente:
Iolto]c oJquiriJo =
Iolor Jc conol AC 5
1024

Para que nuestro microcontrolador pueda leer valores analgicos cambiamos la
siguiente configuracin en nuestra forma_general.
setup_adc_ports(AN0_TO_AN1);
setup_adc(ADC_CLOCK_DIV_64);
Seleccionamos una divisin de 64 debido a que trabajamos a una frecuencia de 48MHz
en el CPU, la tabla del ADC nos dice que:
Ing. Braulio Elas Chi Salavarra


Que para una frecuencia de 48MHz seleccionemos una divisin de 64.
Declaramos una variable
int valor=0x00;
Declaramos una funcin para leer nuestro valor analgico
void toma_adc(void){
set_adc_channel(0);
delay_ms(1);
valor=read_adc(); }
Y en nuestro programa principal ponemos un valor a partir del cual, pondremos un
valor que cuando llegue, se encender nuestro led en el puerto B0.
///////////poner programa desde aqui////////////
toma_adc();
if (valor>100){
enciende(B0);
}else{
apaga(B0);
}
//////////fin de programa///////




















Ing. Braulio Elas Chi Salavarra
Introduccin

La interrupcin RTCC se produce cada vez que el contador TIMER0 pasa de FFh a 00h.
El timer0 est compuesto por 8 bits, es por esto que solo es de 00h a FFh.
El TIMER0 hace un cmputo completo de 00h a FFh cada 512 S, sin embargo este
tiempo puede ser cambiado mediante un preescaler o sea un divisor, ajustable. Los
tiempos generados para cada configuracin son :
:2 ->512 S al mnimo preescaler posible.
:4 ->1.0 mS
:8 ->2.0 mS
:16 ->4.0 mS
:32 ->8.1 mS
:64 ->16.3 mS
:128 ->33.3 mS
:256 ->66.6 mS al mximo preescaler posible.
El Template que propongo usa un Preescaler de 128 para producir una interrupcin
RTCC cada 33.3 mS y as cada 30 veces que se produce cambio de estado la variable
Flag, o sea 33.3 x 30 =999 mS.
Para declarar una interrupcin necesitamos declarar la interrupcin de la siguiente
forma
#int_timer0
void int_tiempo0(void){
}
Como se puede observar la directiva #int_timer0 declaramos que es una interrupcin
de tipo timer, y debajo de esta directiva tenemos que poner la funcin que queremos
que haga cuando detecte esta interrupcin.
Interrupcin timer para nuestro ejemplo

#int_timer0
void int_tiempo0(void){

++contRTCC;
if(contRTCC==30){
contRTCC=0;
if (val==1){
val=0;
}else{
val=1;
}
Practica #8
Interrupcin de Timer0
Objetivo
Conocer el funcionamiento de las interrupciones de los temporizadores del microcontrolador,
as como la configuracin de las mismas.
Ing. Braulio Elas Chi Salavarra

}

}

Lo que realizara esta funcin es cambiar los estados de de las banderas, para que se
apague y prenda A0, asi de esta manera nos evitamos utilizar un retardo y nuestro
programa sigue realizando sus funciones sin tener que parar y quedar en reposo.

En nuestro programa principal tenemos

if(val==1){
output_high(pin_a0);

}else{
output_low(pin_a0);
}

En el esquemtico de nuestra prctica nicamente pondremos un led en el puerto A0 y
veremos cmo parpadea, cabe mencionar que hay herramientas fciles de utilizar para
poder calcular los retardos que deseemos.

Como puede ser RRPic timer calculator
Como podemos observar en la siguiente figura




Ing. Braulio Elas Chi Salavarra

Introduccin
La modulacin por ancho de pulsos (o PWM, de pulse-width modulation en ingls) de
una seal o fuente de energa es una tcnica en la que se modifica el ciclo de trabajo
de una seal peridica (por ejemplo sinusoidal o cuadrada) ya sea para transmitir
informacin a travs de un canal de comunicaciones o control de la cantidad de
energa que se enva a una carga.

El ciclo de trabajo de una seal peridica es el ancho relativo de su parte positiva en
relacin al perodo. Matemticamente:

D es el ciclo de trabajo
es el tiempo en que la funcin es positiva (ancho del pulso)
T es el perodo de la funcin
La construccin tpica de un circuito PWM se lleva a cabo mediante un comparador
con dos entradas y una salida. Una de las entradas se conecta a un oscilador de onda
triangular, mientras que la otra queda disponible para la seal moduladora. En la salida
la frecuencia es generalmente igual a la de la seal triangular y el ciclo de trabajo esta
en funcin de la portadora.
La principal desventaja que presentan los circuitos PWM es la posibilidad de que haya
interferencias generadas por radiofrecuencia. Estas pueden minimizarse ubicando el
controlador cerca de la carga y realizando un filtrado de la fuente de alimentacin.
Practica #9
PWM (modulacin por ancho de pulso)
Objetivo
Aprender la teora de funcionamiento as como utilizar nuestro PWM
embebido a nuestro microcontrolador y como integrarlo a diferentes
aplicaciones.
Ing. Braulio Elas Chi Salavarra


Esquemtico a realizar

En esta prctica lo que haremos es configurar nuestro modulo PWM embebido a
nuestro microcontrolador, y variar la anchura de pulso dependiendo de nuestra
entrada de nuestro ADC en el canal A0.
Para empezar debemos de poner en nuestra forma general, los siguientes comandos e
instrucciones
Configuraremos nuestro timer 2, que es el que nos da la frecuencia continua del PWM,
as que pondremos lo siguiente
setup_timer_2(T2_DIV_BY_4, 0xc0, 2);
A continuacin configuraremos nuestro modulo CCP como PWM
setup_ccp1(CCP_PWM);
y utilizaremos el ejemplo de la practica #7 para configurar nuestro ADC y tomar los
valores de este.
En nuestro programa principal pondremos
toma_adc();
set_pwm1_duty (valor);
Ing. Braulio Elas Chi Salavarra
if (valor>100){
enciende(B0);
}else{
apaga(B0);
}
Y con esto tendremos una lectura parecida a esta en nuestro osciloscopio virtual


El cual variara el ancho de pulso, pero nunca la frecuencia.

















Ing. Braulio Elas Chi Salavarra

Introduccin

Para que podamos visualizar los resultados obtenidos de nuestros procesos o
monitoreo, una forma muy profesional de visualizarlos es utilizando una pantalla LCD
16x2 que es una excelente opcin debido a su bajo consumo y bajo precio en
comparacin con otras opciones.





Como podemos observar el
diagrama a bloques de
nuestra practica

En esta prctica lo que
haremos es visualizar el
contenido en nuestro canal
ADC y desplegarlo por la
pantalla.




Para poder llamar a esta
librera, es importante
mencionar que no se
encuentra en las libreras de
CCS, sino que hay que
instalarla en la carpeta de drivers en donde se guardo CCS. Aqu tienen los pasos:
Practica #10
LCD 16x2
Conocer el funcionamiento de un lcd 16x2 y las funciones necesarias
para su aplicacin en proyectos.
Ing. Braulio Elas Chi Salavarra




A continuacin configuraremos nuestro canal ADC y nuestro driver para poder
configurar nuestro LCD.
Antes de empezar, es importante decir que debemos quitar los #define para el puerto
B y poner:

#define LCD_DB4 PIN_B3
#define LCD_DB5 PIN_B5
#define LCD_DB6 PIN_B6
#define LCD_DB7 PIN_B7
//
#define LCD_RS PIN_B0
#define LCD_RW PIN_B1
#define LCD_E PIN_B2
Y ponemos al principio la inclusin del archivo
#include <flex_lcd.c>

Para renombrar los pines del puerto B con respecto a nuestra librera flex_lcd.c que se
encuentra en la carpeta.
Inicializamos nuestra funcin lcd
lcd_init();
lcd_gotoxy(1,1); /////con este comando, le decimos en que fila y que columna
queremos colocar nuestro mensaje
printf(lcd_putc,"PRACTICA 11");///imprimimos mensaje en la pantalla

delay_ms(1500);
lcd_putc('\f');///////borramos el mensaje

lcd_gotoxy(1,1);
printf(lcd_putc,"EJEMPLO LCD");
Ing. Braulio Elas Chi Salavarra

Cdigo para nuestro men principal

toma_adc();
lcd_gotoxy(1,1);
printf(lcd_putc,"VALOR ADC:%Lu",valor);

if (valor>1000){ ////esta funcion se utiliza para cuando es mayor a 1000 y se tiene
que borrar
flag_mayor=1; ////el ultimo cero, para que quede igual, y no salga flotando
}
if ((flag_mayor==1)&&(valor<1000)){
lcd_putc('\f');
flag_mayor=0;
}
//////////fin de programa///////
}












Ing. Braulio Elas Chi Salavarra
Introduccin

El LM35 es un sensor de temperatura con una precisin calibrada de 1C. Puede medir
temperaturas en el rango que abarca desde -55 a +150C. La salida es muy lineal y
cada grado centgrado equivale a 10 mV en la salida.



Sus caractersticas ms relevantes son:
Precisin de ~1,5C (peor caso), 0.5C garantizados a 25C.
No linealidad de ~0,5C (peor caso).
Baja corriente de alimentacin (60uA).
Amplio rango de funcionamiento (desde -55 a +150C).
Bajo costo.
Baja impedancia de salida.
Su tensin de salida es proporcional a la temperatura, en la escala Celsius. No necesita
calibracin externa y es de bajo costo. Funciona en el rango de alimentacin
comprendido entre 4 y 30 voltios.
Como ventaja adicional, el LM35 no requiere de circuitos adicionales para su
calibracin externa cuando se desea obtener una precisin del orden de 0.25 C a
temperatura ambiente, y 0.75 C en un rango de temperatura desde 55 a 150 C.
La baja impedancia de salida, su salida lineal y su precisa calibracin inherente hace
posible una fcil instalacin en un circuito de control.
Debido a su baja corriente de alimentacin (60uA), se produce un efecto de
autocalentamiento reducido, menos de 0.1 C en situacin de aire estacionario.
Practica #11
LM35 (sensor de temperatura)
Objetivo
Conocer el funcionamiento de un sensor de temperatura LM35,
caractersticas tcnicas y programacin de lectura de datos.
Ing. Braulio Elas Chi Salavarra

Para la configuracin de nuestro sensor de temperatura utilizaremos el siguiente
esquema:






Ajustamos para que nuestra ganancia para cada grado de aumento sea de .20mv de
voltaje.
Para este ejemplo, no utilizaremos este circuito, aunque se recomienda utilizarlo para
cuando la precisin es muy importante, exponemos el cdigo:

Declaramos variables:

int16 temp=0;
float tempreal=0;

Declaramos nuestra funcin:

void toma_adc(void){
set_adc_channel(0);
delay_ms(1);
temp=read_adc();
}

Y en nuestro men principal:

toma_adc();

tempreal=temp/2;

lcd_gotoxy(1,1);
Ing. Braulio Elas Chi Salavarra
printf(lcd_putc,"VALOR ADC:%f",tempreal);

Con la pequea conversin de divisin, podemos obtener el clculo correcto de
temperatura.





















Ing. Braulio Elas Chi Salavarra
Introduccin

RS-232 (tambin conocido como Electronic Industries Alliance RS-232C) es una interfaz
que designa una norma para el intercambio serie de datos binarios entre un DTE
(Equipo terminal de datos) y un DCE (Data Communication Equipment, Equipo de
Comunicacin de datos), aunque existen otras situaciones en las que tambin se utiliza
la interfaz RS-232.

Conector RS-232 (DE-9 hembra).
En particular, existen ocasiones en que interesa conectar otro tipo de equipamientos,
como pueden ser computadores. Evidentemente, en el caso de interconexin entre los
mismos, se requerir la conexin de un DTE (Data Terminal Equipment) con otro DTE.
El RS-232 consiste en un conector tipo DB-25 (de 25 pines), aunque es normal
encontrar la versin de 9 pines (DE-9), ms barato e incluso ms extendido para cierto
tipo de perifricos (como el ratn serie del PC).
El conector DB9 es






Practica #12
Protocolo Serial RS232
Objetivo

Aprender a utilizar el puerto serial y la comunicacin con la PC, as
como el uso de interrupcin RDA, e interfaz que se necesita para la
conexin.

Ing. Braulio Elas Chi Salavarra
Nmero de clavija Nombre
1 CD: Detector de transmisin
2 RXD: Recibir datos
3 TXD: Transmitir datos
4 DTR: Terminal de datos lista
5 GND: Seal de tierra
6 DSR: Ajuste de datos listo
7 RTS: Permiso para transmitir
8 CTS: Listo para enviar
9 RI: Indicador de llamada
Proteccin

Diagrama




PROGRAMA

Declaramos la directiva para nuestra interrupcin RDA, y nuestra funcin que hara un
eco a lo que escribamos, y activara una bandera para que cuando detecte el carcter
T imprima la temperatura.

#int_rda
void serial_isr() {

Keypress=0x00;
if(kbhit()){
Keypress=getc();
if(Keypress!=0x00){
Ing. Braulio Elas Chi Salavarra
putchar(keypress);
flag_print=1;
}
}
}



Y en nuestro programa principal tenemos

if (flag_print==1){
if(Keypress=='T'){
printf("VALOR ADC:%f\r",tempreal);
}
flag_print=0;
}


Asi es que sin importar que carcter le pongamos, no va a responder, solo con el
carcter T.



























Ing. Braulio Elas Chi Salavarra
IC es un bus de comunicaciones en serie. Su nombre viene de Inter-Integrated Circuit
(Circuitos Inter-Integrados). La versin 1.0 data del ao 1992 y la versin 2.1 del ao
2000, su diseador es Philips. La velocidad es de 100Kbits por segundo en el modo
estndar, aunque tambin permite velocidades de 3.4 Mbit/s. Es un bus muy usado en
la industria, principalmente para comunicar microcontroladores y sus perifricos en
sistemas integrados (Embedded Systems) y generalizando ms para comunicar
circuitos integrados entre s que normalmente residen en un mismo circuito impreso.
La principal caracterstica de IC es que utiliza dos lneas para transmitir la informacin:
una para los datos y por otra la seal de reloj. Tambin es necesaria una tercera lnea,
pero esta slo es la referencia (masa). Como suelen comunicarse circuitos en una
misma placa que comparten una misma masa esta tercera lnea no suele ser necesaria.
Las lneas se llaman:
* SDA: datos
* SCL: reloj
* GND: masa

Las dos primeras lneas son drenador abierto, por lo que necesitan resistencias de pull-
up. Los dispositivos conectados al bus IC tienen una direccin nica para cada uno.
Tambin pueden ser maestros o esclavos. El dispositivo maestro inicia la transferencia
de datos y adems genera la seal de reloj, pero no es necesario que el maestro sea
siempre el mismo dispositivo, esta caracterstica se la pueden ir pasando los
dispositivos que tengan esa capacidad. Esta caracterstica hace que al bus IC se le
denomine bus multimaestro.



Practica #13
Memoria EEPROM 24C02 (protocolo I2C)
Objetivo
Aprender el protocolo I2C y aplicar las libreras para la memoria
eeprom 24c02
Ing. Braulio Elas Chi Salavarra
La siguiente practica nos enseara como utilizar la memoria EEPROM externa 24C02,
estaremos monitoreando un sensor LM35 y el valor calculado se guardar en la
memoria EEPROM, el tiempo ser determinado por la interrupcin del timer 0.

La memoria eeprom cuenta con 2Kb de memoria, suficiente para 2000 muestras de 8
bits. Aqu vemos sus caractersticas tcnicas:


Pueden ponerse ms de una memoria en serie, hasta 4 memorias, y estas se controlan
mediante las lneas A0,A1,A2 de la memoria.
Para poder llamar a la librera, necesitamos incluir el archivo 2402.c el cual nos da las
funciones que veremos a continuacin:

Ing. Braulio Elas Chi Salavarra
///////////poner programa desde aqui////////////

if(flag_timer){
flag_timer=0;
output_toggle(C0);
temp=valor/2;
puntero++;
if(puntero>254)puntero=0;
toma_adc();
write_ext_eeprom(puntero,temp);
}
//////////fin de programa///////
En donde primero necesitamos llamar a la funcin init_ext_eeprom(); antes de llamar
a cualquier otra funcin de la librera. Es importante mencionar que el protocolo I2C
funciona con resistencias pull up. En la simulacin podemos ver como se guardan los
datos en la memoria externa.







Ing. Braulio Elas Chi Salavarra
Introduccin

Las interrupciones externas nos sirven para poder testear un entrada, sin tener que
estarlo haciendo todo el tiempo, solo cuando detecta un cambio lgico en su entrada,
as podemos realizar diversas funciones en nuestro programa, haciendo ms eficiente
nuestro cdigo.


Aqu podemos ver el diagrama lgico de todas las interrupciones soportados por
nuestro microcontrolador.

Programa

Nuestro programa capturara una seal desde nuestra interrupcin externa, la cual se
incrementar hasta que la interrupcin del timer0 llegue a aproximadamente 1
Practica #14
Frecuencimetro (Interrupcin Externa)
Objetivo:
Conocer el funcionamiento de una interrupcin Externa y sus aplicaciones reales en proyectos
avanzados.
Ing. Braulio Elas Chi Salavarra
segundo, debemos saber que no es del todo exacto debido a que la interrupcin del
timer0 no llega a 1 segundo exacto para tener un periodo de muestro exacto.




#int_ext
void isr_ext(){
contador++;

}

#int_timer0
void isr_timer0(){
set_timer0(93);
tick++;
if(tick>600){
tick=0;
frecuencia=contador;
contador=0;
}
}
Ahora en nuestro programa for(;;) solo imprimiremos la frecuencia en nuestro LCD:
lcd_gotoxy(1,2);
printf(lcd_putc,"Frec=%Lu",frecuencia);
Ing. Braulio Elas Chi Salavarra
REFERENCIAS BIBLIOGRFICAS Y VIRTUALES

http://www.elrincondelc.com/cursoc/cursoc7.html
http://www.todorobot.com.ar/informacion/tutorial%20stepper/stepper-tutorial.htm
http://www.terra.es/personal/fremiro/Archivos/CNY70%20web.pdf
http://www.picmania.net