Sei sulla pagina 1di 0

Tabla de contenido

Prologo ................................................................................................................................ 3
Programas a Manejar .......................................................................................................... 4
1.2 Entorno de MPlab IDE .............................................................................................. 5
1.3 Contador de 0 a 9 ...................................................................................................... 9
1.4 Contador de 00 a 99 ................................................................................................ 13
1.5 HOLA MUNDO con LCD 16x2 ......................................................................... 19
1.6 Reloj con LCD ........................................................................................................ 22
1.7 Cronometro con LCD ............................................................................................. 26
1.8 Contrasea con LCD y Teclado 4x4 ....................................................................... 30
1.9 Sensor de Temperatura ........................................................................................... 34
2.0 Matrix de LED ........................................................................................................ 48
2.1 Controlador de un Motor CD .................................................................................. 61
2.2 Temperatura y Display de 7 segmentos .................................................................. 69

Prologo




Antes de empezar estos cursos de microcontroladores, les quiero dar las gracias por a ver
bajado este libro, a mi siempre me ha gustado compartir las ideas a los dems, ya que lo
que yo he aprendido es por la culpa de otros que han querido compartir sus
conocimientos, y de ah proviene esta causa que es querer compartir.

Cuando empec a investigar sobre los microcontroladores, se me hacia un mundo muy
complicado para mi, ya que su programacin era muy difcil, pero en ese momento vea
que programaban en ensamblador y pues se me hacia un lenguaje muy difcil de dominar,
pero pues las necesidades de querer entrar a ese gran mundo del diseo de circuitos con
estos microcontroladores, no tenia otra forma de empezar a programarlos.
Entonces empec a programar en ensamblador, pero cuando quera hacer cosas ya mas
complicadas, no tenia mucho tiempo para desarrollar programar tan extensos en
ensamblador y entonces, busque otro programa para programar estos bichos, y encontr
un compilador llamado PicBasic Pro, se me facilito la vida con este compilador, pero al
querer hacer mas programas complejos, empec a batallar con el, entonces mi ultimo
recurso era buscar otro software mas poderoso para realizar mis caprichos.
Y por fin encontr CCS C, aunque era para mi en ese tiempo muy difcil programar en
lenguaje de alto nivel, preferira complicarme la vida programando en Basic, pero el que
no arriesga no gana entonces consegu el dichoso programa PIC C compiler.

Y por fin mis deseos de hacer lo que yo quera construir llego!!!!


Un cambio de paradigma en nuestra vida, es un riesgo que hay que tomar para triunfar






Programas a Manejar

Primero empecemos a saber que tipo de herramientas necesitamos para programar los
microcontroladores.

Software:

Mplab IDE Este programa es uno de los
mas conocidos entre los
programadores de PIC.
Se pude bajar gratuitamente
en la pagina de Microchip

www.microchip.com

PIC C compiler Este compilador nos servir
para empezar a programar
en lenguaje de alto nivel
que es el C.
Puedes ingresar a su pgina
para mayor informacin.

www.ccsinfo.com

Proteus Este simulador es un de los
mas convenientes para
poder simular nuestros
circuitos y tener la garanta
de que si funciona en
proteus funciona en la
realidad.
Para mayor informacin
sobre este simulador entra a
su pagina.

www.labcenter.co.uk

Microsoft Visual C# Bueno este programa nos
servir para hacer software
necesarios para la
comunicacin entre el PIC
y PC
Se pude bajar gratuitamente.



Hardware:

Programador de PICs
(VOLNIA)

Bueno este programador
que tengo solo puede
programar algunos pics de
la serie 12,16,18.
Ustedes pueden adquirir
otro o hacerlo.
Lo que necesitamos es solo
programar el PIC.
Para mayor informacin
entra a su pgina.

www.volnia.com











1.2 Entorno de MPlab IDE

Empecemos a mirar detenidamente este programa, como sabemos este programa esta
hecho especialmente para programar en distintos lenguajes, tiene un indicador de la
memoria del PIC, que nos ayuda a saber si el programa que estamos haciendo aun sigue
siendo mas pequeo que la memoria del microcontrolador.



Para crear un proyecto en este entorno de mplab solo hay que ir donde dice <project> y
despus damos click en <Project Wizard>


Y Despus nos abrir un ventana donde nos saluda, saltamos ese saludo donde dice
<Next> y nos avienta al paso uno.


Nos pedira que microcontrolador tenemos en mente a usar, y en este caso empecemos a
programar el PIC16F886.



Y le hacemos click en <Next> y pasamos al segundo paso, que compilador queremos
usar, en este caso usaremos el CCS C.



Despus nos pedir, donde queremos grabar el proyecto, lo grabamos donde nosotros
queramos y despus hacemos click <next> next y finish!!!!


Despus creamos una hoja en blanco y esa misma hoja la grabamos en la misma carpeta
donde se grabo el proyecto creado con la extensin .c, para referirnos que es lenguaje
C.

Hacemos click derecho en <Source File> y despus <Add File> y agregamos la hoja en
blanco.


Nos vamos a donde dice <Build Option>



Despus buscamos <Include Search Path> esto nos sirve para que las libreras o drivers
sean trasladados a nuestra hoja de trabajo.
Y despus hacemos click en <New> y despus buscamos los drivers y las librerias.



Y Listo para empezar programar.


1.3 Contador de 0 a 9

El primer programa que vamos empezar es un contador de 0 a 9 con un display de 7
segmentos.

Primero que nada debemos tener en cuenta para comenzar a programar es un algoritmo
de programacin, para cuando saber lo que estamos haciendo.

Sabemos que un display tiene 7 led en forma de un 8, hay en el mercado varios de
distintos colores (verde, rojo), o distintas conexiones (nodo o Ctodo comn),

Para poder controlar tal display debemos manipular los 0s y 1s, por ejemplo para
mostrar un 0 en el display.

Se debe de prender los leds los segmentos:



A,B,C,D,E,F

Siempre y cuando sea el display de nodo comn.
Y as sucesivamente, para todos los nmeros, el nmero mximo en decimal es de 0 a 9,
Si fuera en hexadecimal seria de 0 a F. Pero en este caso usaremos nuestro display que
muestre nmeros decimales a base en binario ya que como son 7 segmentos que hay que
prender al mismo tiempo para mostrar un nmero especifico.

Pasemos al microcontrolador PIC16F886.


Este micro consta de 3 puertos completos, que es el A,B y C, en este proyecto solo
necesitamos un puerto completo, usaremos el PUERTO C.

Conectamos de tal forma que el PIN C0 sea la letra A con una resistencia de 330Ohms,
el PIN C1 sea B, y etc.
Nos quedara as.


En este caso el microcontrolador tiene un RC interno que pude generar una frecuencia de
4Mhz o 8Mhz. Por esa razn no tenemos que colocar un cristal externo.

Bueno como haba dicho antes la lgica para mostrar los nmeros es el siguiente.
Se tiene que hacer un arreglo donde su contenido sea los nmeros a mostrar en forma de
binario. Cada vez que te pida el numero que corresponda este envie el numero en binario
para despus mostrarlo en el puerto b.

Hay una forma para implemnter esto en C.

unsigned int NUMERO[]={ 0b11000000, //0
0b11111001, //1
0b10100100, //2
0b10110000, //3
0b10011001, //4
0b10010010, //5
0b10000011, //6
0b11111000, //7
0b10000000, //8
0b00011000}; //9
Con este arreglo podemos vizualizar cada numero del 0 al 9, su funcion es muy simple al
introducir un numero de 0 a 9, este arrojara el numero binario correspondiente.










Ejemplo

VALOR=NUMERO[8];

Este causa que busque valor que se encuentra en la posicin 8. Se debe de aclarar que
empieza el conteo desde 0 en el arreglo que hicimos arriba.

0
1
2
3
4
5
6
7
8 -> Aqu arroja el valor que se encuentre en el arreglo.
9

La variable VALOR ahora va tener el nmero binario que es 0b10000000

VALOR= 0b10000000

Y esa variable se saca por el puerto b para visualizar el numero decimal 8.

A continuacin se observa el programa en CCS.

//CONFIGURACION///////////////////
#include<16f886.h>
#fuses INTRC_IO,NOWDT,NOLVP,MCLR,NOPROTECT
#use delay(clock=4000000)


//INICIO DEL PROGRAMA///////////////
void main(void){

//VARIBALES///////////////////////////
int mostrar[]={0b11000000,0b11111001,0b10100100,0b10110000,
0b10011001,0b10010010,0b10000011,0b11111000,
0b10000000,0b00011000};
int contador;
//CONFIGURACION E/S///////////////

set_tris_c(0x00);
do{
for(contador=0;contador<=9;++contador){
output_c(mostrar[contador]);
delay_ms(1000);
}
}while(TRUE);
}

Compilamos el programa y los simulamos.





1.4 Contador de 00 a 99

Bueno empecemos otro programa ya algo que intervenga interrupciones en los pic, para
meternos ms a fondo en la programacin.

Que es una interrupcin?

Una interrupcin es un evento que interrumpe un proceso y cuando termina esa
interrupcin regresa el proceso donde se quedo.
Por ejemplo:
Si estas charlando con un amigo y derepente suena tu telfono celular, interrumpes la
conversacin para poder contestar, cuando terminas de hablar por celular, regresas a la
pltica, donde se quedaron.
En eventualmente lo mismo cuando hablamos de una interrupcin en un micro.

Que interrupciones hay en un microcontrolador?

Bueno pues existe una gran cantidad de interrupciones en un micrcontrolador:

Interrupciones por:

UART= Donde surge una interrupcin cuando recibimos un dato de la PC o enviamos un
dato.
TIMER= Este es una interrupcin por tiempo, cuando llega un cierto tiempo ya
programado por el usuario, el timer provoca una interrupcin. Esta interrupcin es una de
las ms usadas, por la necesidad de hacer dos operaciones en el microcontrolador a
ciertos tiempos.
PORTO B= Estas interrupciones son externas, ya que cuando queremos que surga una
interrupcin por un evento externo, colocando el puerto b del microcontrolador como
entrada. Para identificar en que pata del micro se puede usar como una interrupcin se
pude buscar el pin que diga INT.
Por ejemplo:

RB0\INT0

Se observa todas las interrupciones que hay en un microcontrolador


En el microcontrolador del pic16f886, contiene mas de un timer, pude ser de 0 a 2,
nosotros usaremos el timer0.

Este timer contiene las siguientes caractersticas;

Es un contador de 8 bit, y proporciona una interrupcin al llegar al tiempo cargado en el
timer0 y se le dice que a desbordado.

Bueno ya conocemos el timer0, pero como opera este dichoso contador, para poder usar
correctamente esta interrupcin, se debe de configurar de a cuerdo a la siguiente formula.

Tiempo deseado= (1/(Osc/4)) x preescalar x (256 - Timer0)

En el preescalar solo se pude cambiar por los siguientes parmetros.



Por ejemplo, deseamos que ocurra una interrupcin cada 10ms.

Entonces:

10mS = ( 1 / (4Mhz/4) ) x 256 x ( 256 TIMER0 )

Despejando;

Tenemos que el TIMER0 se debe de cargar con un valor de 217

Con la instruccin

SET_TIMER0( VALOR A CARGAR );

SET_TIMER0(217);

Este har una interrupcin cada 1ms aproximadamente.

Vamos hacer el programa en C, para conocer su algoritmo.







Configuracion




Se nota que el desbordamiento se hace cada 10ms con la interrupcin, entonces damos
como conclusin que es muy eficiente usar las interrupciones.

Ahora bien como vimos en el primer ejemplo como usar un display, pero en este circuito
se usara dos, para ahorrar dinero y espacio en nuestros circuitos. Se usara una tcnica de
multiplexor.
Consta simplemente hacer un switcheo entre varios elementos y cada elemento pude
visualizar o adquirir datos en un cierto tiempo programado.
La lgica que llevaremos es simplemente visualizar un numero a la vez en su
correspondiente display. Por ejemplo.

Para visualizar el numero 25, se tendr que pedir el numero del primer display y
visualizarlo en el display que corresponde, y luego desactivar el display antes prendido, y
luego pedir el siguiente valor para mostrarlo en el segundo display y despus activarlo. Y
as sucesivamente. Esto ser a una velocidad moderadamente alta para que parezca que
estn encendidos los dos al mismo tiempo, pero en realidad se estn turnando muy rpido

.
Enciende el primer display y despus el otro



Parecer que estn encendidos los dos

Pasemos al programa en C.



Se desborda aprox. A
los 65mS
65ms x 9 veces = 500ms

La simulacin Correspondiente.





1.5 HOLA MUNDO con LCD 16x2

Bueno no entrare tan profundamente como opera un LCD, ya que si quiero explicar cada
detalle pues nos aburriramos leyendo todo, por esa razn simplemente haremos un par de
programas y circuitos con LCD, ya que el compilador que estamos usando contiene una
librera especialmente para manejar este dispositivo.



Las funciones que nos ofrece el compilador son simples:

lcd_init(); Inicializa el lcd, y se tiene que llamar antes de cualquier funcin.

lcd_putc(c); Pone un carcter en el lcd

ejemplo;

lcd_putc(A); o una cadena de caracteres
lcd_putc(HOLA MUNDO);

lcd_gotoxy( x , y); establece la posicin para escrbir

ejemplo:

lcd_goto(1,2); le dice que escriba en la segunda linea
lcd_putc(HOLA MUNDO);

lcd_getc( x , y ); regresa el carcter en la posicin indicada


Tiene otros parmetros que hay que tomar en cuenta.



1.-Aqu se debe de definir que puerto se va a usar en el micro, por default esta en puerto
D.

2.-Aqu se define los pines a usar del puerto, en este caso el D.

Si queremos cambiarlo simplemente hacemos lo siguiente

Y listo para usar el puerto b para el lcd.

1
2

Programa simple para mostrar HOLA MUNDO en el LCD.


El circuito en proteus.



1.6 Reloj con LCD

Ya sabemos como usar la interrupcin por timer0, y podemos usar el lcd 16x2, entonces
estamos capacitados para realizar un reloj digital.
Es simple hacer un reloj digital, y mas cuando usamos microcontroladores, ya que nos
proporciona mayor precisin en base del tiempo.
La idea para desarrollar este reloj, se basa en usar la interrupcin del timer0 para que cada
10ms se produzca una interrupcin, y con una variable, contemos esas interrupciones
para tener aproximadamente 1 segundo y podemos cambiar el segundero, a su valor
correspondiente.

1 / 10ms = 100 interrupciones se deben de provocar para tener un 1 segundo
aproximadamente.

Bien, para poder visualizar los nmeros que se estn incrementados con el tiempo.
Se usa una instruccin para hacer lo siguiente.

Printf( lcd_putc,%u, VALOR )

%u= se refiere que es un numero entero de 8 bit, sea solo se pude visualizar nmeros de
0 a 255.


Configuracion del
Lcd, cosa que ya
habiamos visto
Definimos los
botones de control



Cada 100
interrupciones se tiene
1 segundo






Mientras el boton
SET este presionado
Mostramos los valores de
cada numero

Muestro el diagrama completo


Se debe estar
suelto para que
pueda contar

1.7 Cronometro con LCD

Ya realizamos algo muy difcil, que era un reloj digital con el LCD, un cronometro ya es
algo muy simple para hacer, no?

Hay que tener un detalle muy presente en este proyecto, es que el LCD, necesita un cierto
tiempo para mostrar un digito la pantalla. Como se muestra en la tabla siguiente.


Vemos esto para que nuestro programa que vallamos a hacer tenga un rango de operacin
para que en 10ms pueda mostrar correctamente todos los caracteres en la pantalla.

La logica que vamos a desarrollar es la siguiente, que muestre horas, minutos, segundos,
decimas de segundos, entonces lo mximo a proyectar es.

11 : 59 : 59 . 99

El programa es igual que el del reloj pero en este caso, solo tenemos dos botones, uno va
ser el RESET, y el otro va hacer PAUSA.
Y as cuando queramos empezar de nuevo, presionamos el boton RESET, y por lo
contrario queremos solo pausar el cronometro pues presionamos PAUSA.

Usaremos el reloj interno del Micro que trabaje a 8Mhz, para que las instrucciones se
ejecuten cada 0.5uS, que es la mitad de lo que trabajbamos anteriormente, y as sea mas
exacto los 10ms.
Pero si hacemos esto el timer0 que tenia un valor de 217, ya no ser ese valor, ya que
cambiamos el oscilador, entonces tenemos que hacer nuevamente la operacin antes
vista.


Tiempo deseado= (1/(Osc/4)) x preescalar x (256 - Timer0)

10ms= ( 1 / (8Mhz / 4 ) ) x 256 x (256 timer0)

Despejamos el timer0.

Timer0= 177 ese valor tenemos que cargarlo siempre cuando se produzca la interrupcin.

Como dije hace rato, que es igual que el proyecto anterior, que era el del reloj, aqu esta
el programa.


Configuaracion del
LCD, cosa que ya
vimos
Se cambia lo que
teniamos en el
programa anterior
Se agrega dos
variable mas



Se ve que ya no usamos
la variable overflow ya
que el conteo se muestra
desde los 10ms
Valor obtenido en la
operacion anterior para
10ms




Vemos el circuito:
Se carga otra vez
Se pone todo a
0

1.8 Contrasea con LCD y Teclado 4x4

He aadido una librera para un teclado 4x4, ya que el compilador tiene un driver para un
teclado 4x3, pero lo mas comn es usar teclados 4x4, ya que tenemos mas botones para
llevar acabo mas cosas.
Como vemos el driver 4x4 consta con las siguientes funciones:



kbd_init(); //Debe de llamarse antes de cualquier funcin

c= kbd_getc(c); //Regresa un numero o un 0 si no se presiono nada.

Esta ultima funcin, se puede escribir de la siguiente manera en el compilador.

do{
c=kbd_getc();

if(c!=0) {
//acciones a desarrollar con la letra obtenida
}

}while(TRUE);

Al no presionar nada, la funcin devolver 0 y no se efectuara las acciones, si lo
contrario se presiona alguno este arrojara la letra que obtuvo.

*Nota: Abrimos la carpeta de driver, donde esta instalado el compilador, y pegamos este
driver del teclado 4x4. Y listo para poder usarlo.


Al estar programando, se debe de agregar un USE ms con el siguiente parmetro.

#use fast_io(b)

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.

Se debe tambin activar las resistencias pullup en el puerto b, esto nos evita usar
resistencias externas para el uso del teclado.

port_b_pullups(0xF0);

El teclado funciona en el puerto b, pero ah es donde teniamos el LCD, ahora debemos de
mover el LCD al puerto C, pero como en las configuraciones del driver del LCD, solo se
puede cambiar para el puerto B o D, he modificado, ese driver para poder usar el puerto
C.
Para poder usarlo se hace igual que el driver del teclado, solo lo copiamos y lo pegamos a
la carpeta que contiene todos los driver y listo.

#include<LCD_PORTC.C>




Se usara dos arreglos en este proyecto, uno ser la clave para acceder, y el otro donde se
va a grabar nuestra clave, para compararse con la clave verdadera.

Unsigned char NUESTRA[3]; //Aqu se grabara nuestra clave temporalmente.

Unsigned char CLAVE[]= {0, 1 , 3 , 6 }; //Clave definida el valor de 0 no cuenta la
clave es 136.


Observemos el programa



Agregamos las libreras
Antes explicadas.
Funcin que te
devuelve el valor
presionado
Comparacin de
cada numero
Con el verdadero

Se muestra el esquema del proyecto:



Propuesta:

-Haga otro programa que te pida otra contrasea extensa.


-Otro programa que automticamente se auto ajuste al tamao de la contrasea.
Por ejemplo:
Al inicio que te pida que ingrese la contrasea, y escribas 5 caracteres, y esos 5
sean la contrasea, pero al resetear el circuito, te pida la contrasea a guardar,
ahora que sean otro numero de caracteres y as, que se auto ajuste al tamao
guardado de la contrasea.



1.9 Sensor de Temperatura

En esta seccin se vera algunos proyectos con el Sensor LM35:

1.9.1 Sensor LM35 al LCD
1.9.2 Sensor LM35 al PC

Que es el sensor LM35?

Es muy comn encontrar proyectos que emplean como sensor a un transistor LM35DZ
modelo TO-92, el cual es in sensor de temperatura con una buena presicion en escala
Celsius. Este dispositivo transforma la temperatura del ambiente en voltaje, del orden de
mV.
Este dispositivo tiene un rango de operacin de -50 a 100 grados Celsius, que es mas que
suficiente para hacer pequeas practicas.

La conexin tpica es la siguiente:


Se pude usar amplificadores para cambiar la ganancia de este dispositivo, pero este
arreglo es usado ms en sistemas PID.
Nosotros usaremos un microcontrolador para convertir la entrada anloga a digital
(CAD).

El microcontrolador que hemos usado tiene 11 entradas anlogas, que podemos
configurarlo a 8 bit o a 10 bit de conversin.


Usaremos la siguiente instruccin para cambiar esos bits de conversin.

#device ADC=10 // o 8 depende de la aplicacin

Nuestro primer proyecto con este sensor es visualizarlo en una pantalla LCD, que marque
la temperatura ambiente.
El CAD segn su calibracin te pude dar un rango muy amplio, por ejemplo usaremos
una conversin de 10 bits, este nos proporciona un rango de 0 a 1023.
Al medir voltaje, tenemos que:

0 volts = 0b0000000000 = 0
5 volts = 0b1111111111 = 1023

Entonces el incremento se pude sacar con una regla de tres simple:

X= 5 / 1023
X= 4.88mV

Se entiende que por cada 4.88mV se obtiene un 1 decimal.

Como estamos usando un sensor que tiene un incremento de 10mV por grado centgrado.
Usaremos una operacin para convertir esa variacin en la temperatura.
Por ejemplo:

Si el sensor capta una temperatura de 27 grados su salida en voltaje ser de
270mV, y entra a la conversin.
Primero lo que hace es convertir ese voltaje a decimal:

( 270mV*1023 ) / 5 = 55.242

Y despus ese valor lo usamos para transformarlo a grados.

(55.242*300) / 614 = 26.99

Casi exacto a la temperatura medida, con esta logica podemos crear un sensor de
temperatura ambiente y que se proyecte a un LCD.



El programa se da a continuacin.


Se hace esta
comparacin
para que no este
siempre
visualizando,
solo cuando hay
un cambio de
temperatura
Para
valores
con
dcimas

Se muestra el diagrama a manejar:



Ya hemos trabajado con LCD, solo ahora hemos aadido el sensor de temperatura.

Propuesta:

-Haga un sistema donde tenga dos valores MXIMO Y MNIMO de temperatura, donde
la variable de TEMPERATURA al llegar al valor MXIMO prenda un abanico para que
enfre el sensor, y cuando llegue al valor MNIMO apague el abanico.
Ejemplo:

Tenemos:
MAXIMO= 40 grados
MNIMO =20 grados

Al llegar la temperatura a 40 grados un abanico prenda hasta que llegue la temperatura a
20 grados apague el abanico.


Bueno ya tenemos un pequeo programa que capta la temperatura ambiente, pero la
mayora de las veces se desea adquirir ese dato y enviarlo a la computadora.
Para poder graficar el cambio que ocurre a ciertas horas o minutos.
El programa que vamos a usar es una aplicacin que Windows ya tiene incluido en su
sistema, que es el hyperterminal. Este programa nos ayudara a adquirir los datos de
temperatura.
Lo buscamos en <accesorios>, y luego <comunicaciones>, despus hyperterminal.



Antes de configurar este programa, debemos de hacer un programa para el
microcontrolador, para que se pueda comunicar.
Hay dos formas para comunicacin hacia la laptop:

-Comunicacin Serial
-Comunicacin Paralela
-USB

En este proyecto se empezara la comunicacin por puerto serial, aunque ya estn mas
populares hacer circuitos con USB, vamos a exprimir este mtodo de comunicaciones,
antes de pasar al USB.

Qu es la comunicacin serial?

Una manera de conectara dos dispositivos es mediante comunicaciones serie
asncronas. En ellas los bits de datos se transmiten "en serie" (uno de tras de otro) y cada
dispositivo realiza tiene su propio reloj. Previamente se ha acordado que ambos
dispositivos transmitirn datos a la misma velocidad.

La Norma RS-232 fue definida para conectar un ordenador a un modem. Adems de
transmitirse los datos de una forma serie asncrona son necesarias una serie de seales
adicionales, que se definen en la norma. Las tensiones empleadas estn comprendidas
entre +15/-15 voltios.

Conexin de un microcontrolador al puerto serie del PC

Para conectar el PC a un microcontrolador por el puerto serie se utilizan las seales Tx,
Rx y GND. El PC utiliza la norma RS232, por lo que los niveles de tensin de los pines
estn comprendidos entre +15 y -15 voltios. Los microcontroladores normalmente
trabajan con niveles TTL (0-5v). Es necesario por tanto intercalar un circuito que adapte
los niveles:

Uno de estos circuitos, que se utiliza mucho, es el MAX232.

El conector DB9 del PC
En los PCs hay conectores DB9 macho, de 9 pines, por el que se conectan los
dispositivos al puerto serie. Los conectores hembra que se enchufan tienen una
colocacin de pines diferente, de manera que se conectan el pin 1 del macho con el pin 1
del hembra, el pin2 con el 2, etc...

La informacin asociada a cada uno de los pines es la siguiente:


El chip MAX 232

Conexion MAX Y PIC








PIC

Si por casualidad tienes una laptop, se pude comprar un adaptador de usb a serial,
recordar que solo este sirve para la comunicacin no para programar PIC.

Bueno ahora pasemos al programa.
Se usara una instruccin para la comunicacin por rs232, y ser:

#use rs232 (baud=baudios,xmit=pin, rcv=pin)
#use rs232 (uart1,baud=xxxx)

-Para el primero:
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.
-Para el segundo.
Dice que se va usar el USART integrado del microcontrolador a tantos baud. La
diferencia entre el anterior, es que en este se puede usar las interrupciones de recepcin
de datos o trasmisin.

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

Contiene ms opciones de configuracin:




Se muestra el programa que contiene el PIC.


Para hacer una comunicacin virtual entre el prorama proteus y hyperterminal se debe de
usar una aplicacin que te crea dos puertos viruales. Usaremos el Virtual Serial Port

Se creo dos
puertos
virtuales
Aqu se
seleccionamos el
par para ser
enlazados

Ahora si, pasemos al Hyperterminal, lo abrimos y le ponemos nombre a la conexin:

Despus conectamos en el COM1


Despus solo checamos que esten bien los baudios, que sean igual al que hallamos puesto
en nuestro programa


Y listo!
Se nota en el programa virtual serial port que en el COM1 esta conectado!

Ahora nos pasamos a proteus para dar avance a la simulacin.


Vamos a la propiedades del COMPIM en proteus para cambiar el COM1 A COM2.

Y empezamos la simulacin.


Propuesta:

-Haga un circuito que capte 4 sensores, y que te lo proyecte en el hyperterminal de la
siguiente manera:

SENSOR1 SENSOR2 SENSOR3 SENSOR4
VALOR VALOR VALOR VALOR

Y haga una grafica en EXCEL.

2.0 Matrix de LED

En este tema se vera los siguientes circuitos:

2.0.1 Letras Estticas
2.0.2 Letras con Desplazamiento

Que es una Matriz de Led?

Un cartel formado por varias filas y columnas de LEDs, convenientemente programado,
puede servir para pasar mensajes publicitarios, decorar nuestra habitacin, ordenador o lo
que se nos ocurra. No solo se trata de un proyecto ms que interesante para llevarlo a
cabo como hobbysta, sino que puede resultar interesante como un producto
comercializable. Es que estas matrices, que en algunos pases se las conoce como cartel
de LEDs o Publik, son un recurso muy frecuentemente utilizado con fines
publicitarios o informativos.






Como funciona?

Como dijimos antes, la pantalla est formada por una serie de filas y columnas. La
interseccin entre ambas contiene un LED. Para que este encienda, tiene que recibir
simultneamente un 0 en la fila, y un 1 en la columna. Cuando se dan estas
condiciones, la electrnica de la placa se encarga del encendido del LED en cuestin.
FILA
COLUMNA

Por ejemplo:







Se nota que solo prenden los led que se intersectacon con 1 a 0, mientras cuando se
intersectan 0 y 1 no prenden por la polaridad del diodo.





Hay una tcnica para mostrar figuras o letras, sin necesidad de estar de tener muchos
circuitos, una de ellas es por corrimiento.

Que es esta tcnica?

Es una tcnica donde se desplazan led con razn al dato recibido.
sea:
1 1 0 0 0 0 1 1
0
0

1
1

1

1

0
0


1
0
011111111111111111
101111111111111111
110111111111111111

111111111111111110

Esta tcnica es empleada a una gran velocidad de transicin, por decir un nmero a 2mS,
para que el ojo humano no perciba el parpadeo.

Daremos un ejemplo que muestre una letra:


Esto se va hacer demasiado rpido y el ojo humano va ver la letra A



Para manipular el corrimiento en la programacin, se usara una funcin especial, que se
usara en nuestro programita con la ayuda del circuito 74HC164.




DATA = Podria ser 0 o un 1 depende del dato a enviar
DATO = El pin que se va usar para llevar acabo esta accin definida por el usuario
CLOCK = Es el que te desplaza al DATA, el pin puede ser cualquiera, solo hay que
definirla antes.

Circuito 74HC164

Este circuito se encarga de mandar a todas las columnas el dato necesario, y lo recorre
cada vez que se da un pulso de reloj.

La letra A antes vista se tuvo que dibujar primero, y sacar los valores correspondientes
a cada fila.

0xFC, 0xFE, 0x1B ,0x19, 0x1B, 0xFE, 0xFC, 0x00

Se debe de hacer esto para cada letra que se valla a mostrar.

El programa simple que muestra una letra esttica es la siguiente:

Se usa el Puerto c
para la fila
Se puede cambiar si quieren
usar otros pines



Es el mximo de
columnas a limpiar.
Esta funcin se vera
mas a adelante


La simulacin es la siguiente


Por cada 8 columnas se debe de poner otro 74HC164.

Es hora de usar mas de 1 matriz, usaremos 4 matrices, y que nos imprima HOLA


(Sin desplazamiento de letras)

Como vimos antes simplemente hay que en enviar un dato 0 para que cada vez se
proyecte la fila correspondiente.

Las columnas son 8x4=32 columnas, entonces usaremos 4 circuitos 74HC164.



Cuando el desplazamiento llegue la ltima columna enviara otra vez el dato para que
empiece otra vez.



Mximo de
columnas


Y obtenemos:

Aun no se usa esta funcin


Propuesta:

-Haga un programa que muestre varias palabras estticas.
Si se requiere ms Matrices recuerde cambiar los parmetros antes vistos.
Cada palabra que dure un cierto tiempo, y luego que cambie a la palabra que sigue.


Ahora empecemos a desplazar las letras, todos queremos saber como hacer que empiecen
a desplazarse las letras no?, jeje.

Bueno la lgica es mas simple que la anterior, ya que usaremos una funcin que nos
proporciona el dato requerido al momento en que se debe de empezar otra vez.
La funcin anterior que deca aun no se usa ahora es el momento para usarla.



Esta funcin ser de gran utilidad para mandar el dato exactamente cuando se requiera.
Solo voy a mostrar el programa principal, ya que todo las funciones son las mismas de la
anterior.



Se agrega estos
parmetros para que
espere el momento,
Para resetear el dato
En la funcin
HABILITO
Se observa que hemos
quitado el SEND_DATA();
Ya que la funcin
HABILITO es la que se
encarga de mandar el dato
al momento en que se
llegue al mximo de
columnas
Se cambio el nombre para mayor
entendimiento




Usted dir que el traslado es de derecha a izquierda, eso!! Esta mal. El traslado es de
izquierda a derecha, para que se pueda leer correctamente. Debe de usted encontrar la
manera, para solucionar este error. Si lo hace es una mente maestra!!!

Se aprecia que no hay espacio, se tuvo que hacer sin espacios ya que en la simulacin no
se apreciara correctamente. Pero en la realidad al poner ese espacio se notara ntidamente
bien.



2.1 Controlador de un Motor CD

En esta seccin se vera lo siguiente:

2.1.1 Motor CD y L293
2.1.2 Seguidor de lnea

Como funciona un motor CD?
El funcionamiento de un motor se basa en la accin de campos magnticos opuestos que
hacen girar el rotor (eje interno) en direccin opuesta al estator (imn externo o bobina),
con lo que si sujetamos por medio de soportes o bridas la carcasa del motor el rotor con el
eje de salida ser lo nico que gire.
Para cambiar la direccin de giro en un motor de Corriente Continua tan solo tenemos
que invertir la polaridad de la alimentacin del motor.
Para modificar su velocidad podemos variar su tensin de alimentacin con lo que el
motor perder velocidad, pero tambin perder par de giro (fuerza) o para no perder par
en el eje de salida podemos hacer un circuito modulador de anchura de pulsos (pwm) con
una salida a transistor de mas o menos potencia segn el motor utilizado.

Con que podemos cambiar el giro del Moto?
Con Control de direccin por medio del Circuito Integrado L293B


Cada canal o driver es controlado por medio de una seal de control compatible TTL (no
superior a 7V) y los canales se habilitan de dos en dos por medio de las seales de control
EN1 (canal 1 y 2) y EN2 (canal 3 y 4), en la siguiente tabla vemos el funcionamiento de
las entradas y como responden las salidas.

As pues, vemos que poniendo a nivel alto la entrada de habilitacin "EN" del driver, la
salida de este "OUT" pasa de alta impedancia al mismo nivel que se encuentre la entrada
del driver "IN" pero amplificado en tensin y en corriente, siendo esta de 1A mximo. La
tensin de alimentacin del circuito integrado no es la misma que se aplica a las carga
conectada a las salidas de los drivers, y para estas salidas se a de alimentar el driver por
su patita nmero 8 (Vs), la tensin mxima aplicable a estas patitas es de 36V.
Tipica Aplicaciones:
Con un L293B podemos tener control bidireccional con 2 motores o control
unidireccional con 4 motores, a continuacin vamos a ver como se han de conectar los
motores.
Control Unidireccional: En la siguiente figura vemos las dos formas de conectar un motor
para control unidireccional, M1 se activa al poner la entrada del driver conectado a este, a
nivel bajo "0", mientras que M2 se activa al poner la entrada del driver a nivel alto "1" y
se para al ponerla a nivel bajo "0".


La entrada enable es como un interruptor general y deber ponerse a nivel alto "1" para
poder operar con los drivers que controla, o a nivel bajo "0" si se quiere desconectar el
control de estos.
"Vs" ser la tensin de alimentacin necesaria para los motores.
Los diodos modelo 1N4007 son para proteger el circuito de los picos de arranque y
parada de los motores debido a la corriente inversa inducida por estos.
Control Bidireccional: En el siguiente circuito vemos el modo de conectar un motor para
permitir controlarlo tanto hacia delante como hacia atrs.

Para tener el control de dos direcciones o bidireccional se usan dos de drivers del l293b
conectando sus salidas a los polos del motor, entonces podremos cambiar la polaridad de
alimentacin del motor con tan solo cambiar de estado las entradas de los drivers.
Por ejemplo, para que el motor gire hacia la derecha pondremos la entrada "A" a nivel
alto "1" y "B" a nivel bajo "0" y para hacer girar el motor a la izquierda tendremos que
invertir las seales de entrada de tal manera, la entrada "A" a nivel bajo "0" y "B" a nivel
alto "1". Los diodos son como en el caso anterior para proteger el integrado de corrientes
inversas.
Haremos un pequeo circuito que por medio de va serial, cambie el giro del motor:
Ya hemos trabajado con el UART, solo hay que hallar la lgica de lo que queremos,
deseamos que al recibir la letra I gire a la derecha, o cuando se reciba la letra D
gire a la derecha y as.

Se da el programa para hacer lo antes dicho.


Cada vez que se
resiva un dato
salta a esta
function de
interrupcion.

Se da el circuito correspondiente.

Si se desea hacer fisicamente, solo recuerde que se debe de usar el MAX232
Vamos hacer un simple seguidor de Linea.
Usaremos el sensor CYN70

Para detectar lo blanco o negro de la lnea a seguir, usaremos tambin los comparadores
internos que contiene el Micro, para comparar la seal obtenida de los CYN70.
Tambin necesitaremos 2 potencimetros de 100kohm



Dos motores CD de cualquier tipo, solo que tenga la potencia necesaria para poder mover
el carrito.

He pegado los dos motores en el chasis del carrito, sold las terminales a cables largos
para que entren en el proto.
En el programa que contiene el microcontrolador, le he aadido un pequea memoria
para cuando se de la casualidad que se salga de la lnea, este empiece a girar al ultimo
movimiento que se realizo para poder volver a la lnea.
Recuerde, que el para armarlo debe de colocar sensor CYN70 del comparador 1, debe ir a
la Izquierda del Robot, mientras que el otro debe de estar a la derecha. (Los dos bien
juntos)

Este a la derecha
Este a la izquierda
Motor debe de
estar a la
derehca
Motor debe de estar
a la izquierda

He aqu el programa:


Vemos como quedo nuestro robot.








2.2 Temperatura y Display de 7 segmentos
Como vimos en las primeras practicas de cmo usar dos display de 7 segmentos,
intercalando cada display, ahora he aadido un sensor LM35, para mostrar la
temperatura. Con el uso de la interrupcin por timer0, se sensara la temperatura, y el
valor obtenido se sacara las centsimas, dcimas y unidades.
Para que cada uno se muestre en el display que corresponde.
Aqu esta la simulacin:

El rango de operacin es de 0 grados a 106 grados, cada display esta prendido 2mS
suficiente para poder mostrarse a una intensidad que se vea.

El programa que contiene el PIC;






Nota: El display es nodo comn, y se usa un transistor 2N2222 para activar cada uno de
ellos, como se vio en el ejemplo de Contador de 00 a 99.


As se debe de conectar los
transistores al pin de
alimentacin de cada display.
En la simulacin se uso un
display estndar de 4 elementos
para simularlo correctamente.


















HECHO EN MEXICO

V1.4

03/01/2010 10:36:52













La mejor manera de aprender es leer, y no COPIAR Y PEGAR

Potrebbero piacerti anche