Documenti di Didattica
Documenti di Professioni
Documenti di Cultura
}
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