SlideShare une entreprise Scribd logo
1  sur  72
Télécharger pour lire hors ligne
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 demás, 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 programación era muy difícil, pero en ese momento veía
que programaban en ensamblador y pues se me hacia un lenguaje muy difícil de dominar,
pero pues las necesidades de querer entrar a ese gran mundo del diseño de circuitos con
estos microcontroladores, no tenia otra forma de empezar a programarlos.
Entonces empecé a programar en ensamblador, pero cuando quería 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 difícil programar en
lenguaje de alto nivel, preferiría 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 quería construir llego!!!!


“Un cambio de paradigma en nuestra vida, es un riesgo que hay que tomar para triunfar”
1.1 Programas a Manejar
Primero empezemos a saber que tipo de herramientas necesitamos para programar los
microcontroladores.

Software:

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

PIC C compiler               Este compilador nos servirá     Puedes ingresar a su página
                             para empezar a programar        para mayor información.
                             en lenguaje de alto nivel
                             que es el C.                       www.ccsinfo.com

Proteus                      Este simulador es un de los     Para mayor información
                             mas convenientes para           sobre este simulador entra a
                             poder simular nuestros          su pagina.
                             circuitos y tener la garantía
                             de que si funciona en              www.labcenter.co.uk
                             proteus funciona en la
                             realidad.
 Microsoft Visual C#          Bueno este programa nos        Se pude bajar gratuitamente.
                              servirá para hacer software
                              necesarios para la
                              comunicación entre el PIC
                              y PC
Hardware:

Programador de PIC’s         Bueno este programador          Para mayor información
(VOLNIA)                     que tengo solo puede            entra a su página.
                             programar algunos pic’s de
                             la serie 12,16,18.                www.volnia.com
                             Ustedes pueden adquirir
                             otro o hacerlo.
                             Lo que necesitamos es solo
                             programar el PIC.
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 pequeño que la memoria del microcontrolador.




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




Y Después 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.




Después nos pedirá, donde queremos grabar el proyecto, lo grabamos donde nosotros
queramos y después hacemos click <next> next y finish…!!!!
Después creamos una hoja en blanco y esa misma hoja la grabamos en la misma carpeta
donde se grabo el proyecto creado con la extensión “.c”, para referirnos que es lenguaje
C.

Hacemos click derecho en <Source File> y después <Add File> y agregamos la hoja en
blanco.




Nos vamos a donde dice <Build Option>
Después buscamos <Include Search Path> esto nos sirve para que las librerías o drivers
sean trasladados a nuestra hoja de trabajo.
Y después hacemos click en <New> y después 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 programación, 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 Cátodo común),

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

Se debe de prender los led’s los segmentos:




                                      A,B,C,D,E,F

Siempre y cuando sea el display de ánodo común.
Y así sucesivamente, para todos los números, el número máximo 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 números decimales a base en binario ya que como son 7 segmentos que hay que
prender al mismo tiempo para mostrar un número 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 razón no tenemos que colocar un cristal externo.

Bueno como había dicho antes la lógica para mostrar los números es el siguiente.
Se tiene que hacer un arreglo donde su contenido sea los números a mostrar en forma de
binario. Cada vez que te pida el numero que corresponda este envie el numero en binario
para después 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 posición 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 numero binario que es 0b10000000

VALOR= 0b10000000

Y esa variable se saca por el puerto b para visualizar el numero decimal “8”.
A continuación 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 más a fondo en la programación.

¿Que es una interrupción?

Una interrupción es un evento que interrumpe un proceso y cuando termina esa
interrupción regresa el proceso donde se quedo.
Por ejemplo:
Si estas charlando con un amigo y derepente suena tu teléfono celular, interrumpes la
conversación para poder contestar, cuando terminas de hablar por celular, regresas a la
platica, donde se quedaron.
En eventualmente lo mismo cuando hablamos de una interrupción 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 interrupción cuando recibimos un dato de la PC o enviamos un
dato.
TIMER= Este es una interrupción por tiempo, cuando llega un cierto tiempo ya
programado por el usuario, el timer provoca una interrupción. Esta interrupción es una de
las más 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
interrupción por un evento externo, colocando el puerto b del microcontrolador como
entrada. Para identificar en que pata del micro se puede usar como una interrupción se
pude buscar el pin que diga “INT”.
Por ejemplo:

RB0INT0

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 características;

Es un contador de 8 bit, y proporciona una interrupción 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 interrupción, 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 parámetros.
Por ejemplo, deseamos que ocurra una interrupción 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 instrucción

SET_TIMER0( VALOR A CARGAR );

SET_TIMER0(217);

Este hará una interrupción 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 interrupción, entonces damos
como conclusión 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 técnica de
multiplexor.
Consta simplemente hacer un switcheo entre varios elementos y cada elemento pude
visualizar o adquirir datos en un cierto tiempo programado.
La lógica 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 después activarlo. Y
así sucesivamente. Esto será a una velocidad moderadamente alta para que parezca que
están encendidos los dos al mismo tiempo, pero en realidad se están turnando muy rápido




                                             .
                       Enciende el primer display y después el otro




                          Parecerá que están encendidos los dos
Pasemos al programa en C.




                                           Se desborda aprox. A
                                           los 65mS


                            65ms x 9 veces = 500ms
La simulación 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 aburriríamos leyendo todo, por esa razón simplemente haremos un par de
programas y circuitos con LCD, ya que el compilador que estamos usando contiene una
librería 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 función.

lcd_putc(c); Pone un carácter en el lcd

ejemplo;

lcd_putc(‘A’); o una cadena de caracteres
lcd_putc(“HOLA MUNDO”);

lcd_gotoxy( x , y); establece la posición 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 carácter en la posición indicada
Tiene otros parámetros que hay que tomar en cuenta.



                                                                                   1




                                                                    2




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.
Programa simple para mostrar “HOLA MUNDO” en el LCD.




                            El circuito en proteus.
1.6 Reloj con LCD

Ya sabemos como usar la interrupción 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 precisión en base del tiempo.
La idea para desarrollar este reloj, se basa en usar la interrupción del timer0 para que cada
10ms se produzca una interrupción, 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 números que se están incrementados con el tiempo.
Se usa una instrucción 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 números 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 difícil, 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 operación
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 máximo 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 trabajábamos 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 operación 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 interrupción.

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              Se agrega dos
                                                      programa anterior           variable mas
Valor obtenido en la
           operacion anterior para
           10ms



Se ve que ya no usamos
la variable overflow ya
que el conteo se muestra
desde los 10ms
Se carga otra vez




                                         Se pone todo a
                                         “0”




Vemos el circuito:
1.8 Contraseña con LCD y Teclado 4x4
He añadido una librería para un teclado 4x4, ya que el compilador tiene un driver para un
teclado 4x3, pero lo mas común 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 función

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

Esta ultima función, 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 función 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” más con el siguiente parámetro.

                                      #use fast_io(b)

Esta directiva afecta al código que el compilador generará para las instrucciones de
entrada y salida. Este método rápido de hacer I/O ocasiona que el compilador realice
I/O sin programar el registro de dirección. El puerto puede ser A-G.

Se debe también 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 librerías
                              Antes explicadas.




                                     Función que te
                                     devuelve el valor
                                     presionado




Comparación de
cada numero
Con el verdadero
Se muestra el esquema del proyecto:




Propuesta:

-Haga otro programa que te pida otra contraseña extensa.


-Otro programa que automáticamente se auto ajuste al tamaño de la contraseña.
Por ejemplo:
       Al inicio que te pida que ingrese la contraseña, y escribas 5 caracteres, y esos 5
       sean la contraseña, pero al resetear el circuito, te pida la contraseña a guardar,
       ahora que sean otro numero de caracteres y así, que se auto ajuste al tamaño
       guardado de la contraseña.
1.9 Sensor de Temperatura

En esta sección 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 común 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 operación de -50 a 100 grados Celsius, que es mas que
suficiente para hacer pequeñas practicas.

La conexión típica es la siguiente:




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

El microcontrolador que hemos usado tiene 11 entradas análogas, que podemos
configurarlo a 8 bit o a 10 bit de conversión.
Usaremos la siguiente instrucción para cambiar esos bit’s de conversión.

                    #device ADC=10 // o 8 depende de la aplicación

Nuestro primer proyecto con este sensor es visualizarlo en una pantalla LCD, que marque
la temperatura ambiente.
El CAD según su calibración te pude dar un rango muy amplio, por ejemplo usaremos
una conversión de 10 bit’s, 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 centígrado.
Usaremos una operación para convertir esa variación 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 conversión.
              Primero lo que hace es convertir ese voltaje a decimal:

                              ( 270mV*1023 ) / 5 = 55.242

              Y después 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 continuación.




   Para
   valores
   con
   décimas




Se hace esta
comparación
para que no este
siempre
visualizando,
solo cuando hay
un cambio de
temperatura
Se muestra el diagrama a manejar:




Ya hemos trabajado con LCD, solo ahora hemos añadido el sensor de temperatura.

Propuesta:

-Haga un sistema donde tenga dos valores MÁXIMO Y MÍNIMO de temperatura, donde
la variable de TEMPERATURA al llegar al valor MÁXIMO prenda un abanico para que
enfríe el sensor, y cuando llegue al valor MÍNIMO apague el abanico.
Ejemplo:

Tenemos:
MAXIMO= 40 grados
MÍNIMO =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 pequeño programa que capta la temperatura ambiente, pero la
mayoría 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 aplicación 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>, después hyperterminal.




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

-Comunicación Serial
-Comunicación Paralela
-USB

En este proyecto se empezara la comunicación por puerto serial, aunque ya están mas
populares hacer circuitos con USB, vamos a exprimir este método de comunicaciones,
antes de pasar al USB.

¿Qué es la comunicación serial?

Una manera de conectara dos dispositivos es mediante comunicaciones serie
asíncronas. 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 transmitirán datos a la misma velocidad.
La Norma RS-232 fue definida para conectar un ordenador a un modem. Además de
transmitirse los datos de una forma serie asíncrona son necesarias una serie de señales
adicionales, que se definen en la norma. Las tensiones empleadas están comprendidas
entre +15/-15 voltios.




Conexión de un microcontrolador al puerto serie del PC

Para conectar el PC a un microcontrolador por el puerto serie se utilizan las señales Tx,
Rx y GND. El PC utiliza la norma RS232, por lo que los niveles de tensión de los pines
están 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
colocación 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 información 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 comunicación no para programar PIC.

Bueno ahora pasemos al programa.
Se usara una instrucción para la comunicación 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 recepción
de datos o trasmisión.

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
estándar es preciso poner las directivas FIXED_IO o FAST_IO delante de #USE RS232

Contiene más opciones de configuración:
Se muestra el programa que contiene el PIC.




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


                                                                           Aquí se
                                                                           seleccionamos el
                                                                           par para ser
                                                                           enlazados




   Se creo dos
   puertos
   virtuales
Ahora si, pasemos al Hyperterminal, lo abrimos y le ponemos nombre a la conexión:




                           Después conectamos en el COM1




Después 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 simulación.
Vamos a la propiedades del COMPIM en proteus para cambiar el COM1 A COM2.




Y empezamos la simulación.




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 Estáticas
       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 habitación, ordenador o lo
que se nos ocurra. No solo se trata de un proyecto más que interesante para llevarlo a
cabo como hobbysta, sino que puede resultar interesante como un producto
comercializable. Es que estas matrices, que en algunos países se las conoce como “cartel
de LEDs” o “Publik”, son un recurso muy frecuentemente utilizado con fines
publicitarios o informativos.

                                       FILA




                                                              COLUMNA




¿Como funciona?

Como dijimos antes, la pantalla está formada por una serie de filas y columnas. La
intersección entre ambas contiene un LED. Para que este encienda, tiene que recibir
simultáneamente un “0” en la fila, y un “1” en la columna. Cuando se dan estas
condiciones, la electrónica de la placa se encarga del encendido del LED en cuestión.
Por ejemplo:

                                                                           0
                                                                           0

                                                                           1
                                                                           1

                                                                           1

                                                                           1

                                                                           0
                                                                           0




                           1    1       0   0   0   0   1    1

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.


                                    1




                                                0

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

¿Que es esta técnica?

Es una técnica donde se desplazan led con razón al dato recibido.
Ósea:

                                        011111111111111111
                                        101111111111111111
                                        110111111111111111
                                        ………………………
                                        111111111111111110
Esta técnica es empleada a una gran velocidad de transición, por decir un número a 2mS,
para que el ojo humano no perciba el parpadeo.

Daremos un ejemplo que muestre una letra:




Esto se va hacer demasiado rápido y el ojo humano va ver la letra “A”




Para manipular el corrimiento en la programación, se usara una función 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 acción 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 estática es la siguiente:




                                                 Se puede cambiar si quieren
                                                 usar otros pines




                                                 Se usa el Puerto c
                                                 para la fila
Es el máximo de
columnas a limpiar.




           Esta función se vera
           mas a adelante
La simulación 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.
Máximo de
columnas
Aun no se usa esta función




Y obtenemos:
Propuesta:

-Haga un programa que muestre varias palabras estáticas.
Si se requiere más Matrices recuerde cambiar los parámetros 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 lógica es mas simple que la anterior, ya que usaremos una función que nos
  proporciona el dato requerido al momento en que se debe de empezar otra vez.
  La función anterior que decía “aun no se usa” ahora es el momento para usarla.




  Esta función 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 cambio el nombre para mayor
                                                         entendimiento


Se agrega estos
parámetros para que
espere el momento,
Para resetear el dato                                                     Se observa que hemos
En la función                                                             quitado el SEND_DATA();
“HABILITO”                                                                Ya que la función
                                                                          “HABILITO” es la que se
                                                                          encarga de mandar el dato
                                                                          al momento en que se
                                                                          llegue al máximo de
                                                                          columnas
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 simulación no
se apreciaría correctamente. Pero en la realidad al poner ese espacio se notara nítidamente
bien.
2.1 Controlador de un Motor CD
En esta sección se vera lo siguiente:

       2.1.1 Motor CD y L293
       2.1.2 Seguidor de línea

¿Como funciona un motor CD?

 El funcionamiento de un motor se basa en la acción de campos magnéticos opuestos que
hacen girar el rotor (eje interno) en dirección opuesta al estator (imán 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 dirección de giro en un motor de Corriente Continua tan solo tenemos
que invertir la polaridad de la alimentación del motor.

Para modificar su velocidad podemos variar su tensión de alimentación con lo que el
motor perderá velocidad, pero también 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 según el motor utilizado.




¿Con que podemos cambiar el giro del Moto?

Con Control de dirección por medio del Circuito Integrado L293B
Cada canal o driver es controlado por medio de una señal de control compatible TTL (no
superior a 7V) y los canales se habilitan de dos en dos por medio de las señales 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 habilitación "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 tensión y en corriente, siendo esta de 1A máximo. La
tensión de alimentación 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 número 8 (Vs), la tensión máxima 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 continuación 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 tensión de alimentación 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 atrás.




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
alimentación 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 señales 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 pequeño circuito que por medio de vía serial, cambie el giro del motor:

Ya hemos trabajado con el UART, solo hay que hallar la lógica 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 línea a seguir, usaremos también los comparadores
internos que contiene el Micro, para comparar la señal obtenida de los CYN70.

También necesitaremos 2 potenciómetros 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 añadido un pequeña memoria
para cuando se de la casualidad que se salga de la línea, este empiece a girar al ultimo
movimiento que se realizo para poder volver a la línea.

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                                       Motor debe de estar
                                                                                     a la izquierda




                                                                                       Motor debe de
                                                                                       estar a la
                                                                                       derehca
                         Este 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 cómo usar dos display de 7 segmentos,
intercalando cada display, ahora he añadido un sensor LM35, para mostrar la
temperatura. Con el uso de la interrupción por timer0, se sensara la temperatura, y el
valor obtenido se sacara las centésimas, décimas y unidades.

Para que cada uno se muestre en el display que corresponde.

Aquí esta la simulación:




El rango de operación 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 común, 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
                          alimentación de cada display.
                          En la simulación se uso un
                          display estándar 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”

Contenu connexe

Tendances

PLC y Electroneumática: Maquinas Eléctricas Paraninfo por Juan Carlos Martín.pdf
PLC y Electroneumática: Maquinas Eléctricas Paraninfo por Juan Carlos Martín.pdfPLC y Electroneumática: Maquinas Eléctricas Paraninfo por Juan Carlos Martín.pdf
PLC y Electroneumática: Maquinas Eléctricas Paraninfo por Juan Carlos Martín.pdfSANTIAGO PABLO ALBERTO
 
Guia de practicas s7 1200 tia portal
Guia de practicas s7 1200 tia portalGuia de practicas s7 1200 tia portal
Guia de practicas s7 1200 tia portalDavidSnchez297251
 
54599266 ejercicios-flip-flops
54599266 ejercicios-flip-flops54599266 ejercicios-flip-flops
54599266 ejercicios-flip-flopsSENA-CIMI-GIRON
 
Funciones y subrutinas
Funciones y subrutinasFunciones y subrutinas
Funciones y subrutinasFelipe Rivera
 
Programacion PLD
Programacion PLDProgramacion PLD
Programacion PLDdavic_exe
 
Multiplexor 4 Entradas 1 Salida (4-1)
Multiplexor 4 Entradas 1 Salida (4-1)Multiplexor 4 Entradas 1 Salida (4-1)
Multiplexor 4 Entradas 1 Salida (4-1)251089luis
 
01 T1 2021 Sistemas Embebidos.pptx
01 T1 2021 Sistemas Embebidos.pptx01 T1 2021 Sistemas Embebidos.pptx
01 T1 2021 Sistemas Embebidos.pptxDyllanBastidas
 
Microcontroladores
MicrocontroladoresMicrocontroladores
Microcontroladoresabemen
 
Fortmulario de Diagrama de bloques
Fortmulario  de  Diagrama de bloquesFortmulario  de  Diagrama de bloques
Fortmulario de Diagrama de bloquesjackvale
 
Electrónica: Manual básico de programación en Labview MASTERHACKS
Electrónica: Manual básico de programación en Labview MASTERHACKSElectrónica: Manual básico de programación en Labview MASTERHACKS
Electrónica: Manual básico de programación en Labview MASTERHACKSSANTIAGO PABLO ALBERTO
 
PLC y Electroneumática: Control de motores eléctricos
PLC y Electroneumática: Control de motores eléctricos PLC y Electroneumática: Control de motores eléctricos
PLC y Electroneumática: Control de motores eléctricos SANTIAGO PABLO ALBERTO
 
Técnico especialista PLC
Técnico especialista PLCTécnico especialista PLC
Técnico especialista PLCGHP
 

Tendances (20)

PLC y Electroneumática: Maquinas Eléctricas Paraninfo por Juan Carlos Martín.pdf
PLC y Electroneumática: Maquinas Eléctricas Paraninfo por Juan Carlos Martín.pdfPLC y Electroneumática: Maquinas Eléctricas Paraninfo por Juan Carlos Martín.pdf
PLC y Electroneumática: Maquinas Eléctricas Paraninfo por Juan Carlos Martín.pdf
 
Microcontroladores pic
Microcontroladores picMicrocontroladores pic
Microcontroladores pic
 
Guia de practicas s7 1200 tia portal
Guia de practicas s7 1200 tia portalGuia de practicas s7 1200 tia portal
Guia de practicas s7 1200 tia portal
 
Sumador\Restador
Sumador\RestadorSumador\Restador
Sumador\Restador
 
Adc fpga
Adc fpgaAdc fpga
Adc fpga
 
54599266 ejercicios-flip-flops
54599266 ejercicios-flip-flops54599266 ejercicios-flip-flops
54599266 ejercicios-flip-flops
 
Funciones y subrutinas
Funciones y subrutinasFunciones y subrutinas
Funciones y subrutinas
 
Programacion PLD
Programacion PLDProgramacion PLD
Programacion PLD
 
PROYECTOS CON PIC 16F84
PROYECTOS CON PIC 16F84PROYECTOS CON PIC 16F84
PROYECTOS CON PIC 16F84
 
Diagrama escalera
Diagrama escaleraDiagrama escalera
Diagrama escalera
 
Multiplexor 4 Entradas 1 Salida (4-1)
Multiplexor 4 Entradas 1 Salida (4-1)Multiplexor 4 Entradas 1 Salida (4-1)
Multiplexor 4 Entradas 1 Salida (4-1)
 
01 T1 2021 Sistemas Embebidos.pptx
01 T1 2021 Sistemas Embebidos.pptx01 T1 2021 Sistemas Embebidos.pptx
01 T1 2021 Sistemas Embebidos.pptx
 
Microcontroladores
MicrocontroladoresMicrocontroladores
Microcontroladores
 
TTL-CMOS
TTL-CMOSTTL-CMOS
TTL-CMOS
 
Fortmulario de Diagrama de bloques
Fortmulario  de  Diagrama de bloquesFortmulario  de  Diagrama de bloques
Fortmulario de Diagrama de bloques
 
Electrónica: Manual básico de programación en Labview MASTERHACKS
Electrónica: Manual básico de programación en Labview MASTERHACKSElectrónica: Manual básico de programación en Labview MASTERHACKS
Electrónica: Manual básico de programación en Labview MASTERHACKS
 
Los Flip Flops
Los Flip FlopsLos Flip Flops
Los Flip Flops
 
PLC y Electroneumática: Control de motores eléctricos
PLC y Electroneumática: Control de motores eléctricos PLC y Electroneumática: Control de motores eléctricos
PLC y Electroneumática: Control de motores eléctricos
 
Domotica con logo
Domotica con logoDomotica con logo
Domotica con logo
 
Técnico especialista PLC
Técnico especialista PLCTécnico especialista PLC
Técnico especialista PLC
 

En vedette

Fundamentos de programacion
Fundamentos de programacionFundamentos de programacion
Fundamentos de programacionVale
 
Hot Typography SMPS Pacific Regional Conference
Hot Typography SMPS Pacific Regional ConferenceHot Typography SMPS Pacific Regional Conference
Hot Typography SMPS Pacific Regional ConferenceDavid Lecours
 
Analysis optimization and monitoring system
Analysis optimization and monitoring system Analysis optimization and monitoring system
Analysis optimization and monitoring system slmnsvn
 
Manual swiss manager
Manual swiss managerManual swiss manager
Manual swiss managerIzzquierdo
 
New total english_pre-intermediate_-_sb (1)
New total english_pre-intermediate_-_sb (1)New total english_pre-intermediate_-_sb (1)
New total english_pre-intermediate_-_sb (1)Astrid Caballero
 
A critical review of academic institutions and quality in higher education
A critical review of academic institutions and quality in higher educationA critical review of academic institutions and quality in higher education
A critical review of academic institutions and quality in higher educationDr. Trilok Kumar Jain
 
Hirsch s.w., smale s. differential equations, dynamical systems and linear ...
Hirsch s.w., smale s.   differential equations, dynamical systems and linear ...Hirsch s.w., smale s.   differential equations, dynamical systems and linear ...
Hirsch s.w., smale s. differential equations, dynamical systems and linear ...yuejia2001
 
Benny and the biscuits
Benny and the biscuitsBenny and the biscuits
Benny and the biscuitsmuod873
 
Handbook of mechanical engineering calculations
Handbook of mechanical engineering calculationsHandbook of mechanical engineering calculations
Handbook of mechanical engineering calculationsRoddy Castro
 
Treatment for diabetes with herbs and herbal supplements
Treatment for diabetes with herbs and herbal supplementsTreatment for diabetes with herbs and herbal supplements
Treatment for diabetes with herbs and herbal supplementsroycv
 

En vedette (15)

Fundamentos de programacion
Fundamentos de programacionFundamentos de programacion
Fundamentos de programacion
 
capitulos 6
capitulos 6capitulos 6
capitulos 6
 
Hot Typography SMPS Pacific Regional Conference
Hot Typography SMPS Pacific Regional ConferenceHot Typography SMPS Pacific Regional Conference
Hot Typography SMPS Pacific Regional Conference
 
Analysis optimization and monitoring system
Analysis optimization and monitoring system Analysis optimization and monitoring system
Analysis optimization and monitoring system
 
Sách new cutting edge - pre intermediate -Book
Sách new cutting edge - pre intermediate -BookSách new cutting edge - pre intermediate -Book
Sách new cutting edge - pre intermediate -Book
 
Manual swiss manager
Manual swiss managerManual swiss manager
Manual swiss manager
 
Oxford Word Skills
Oxford Word SkillsOxford Word Skills
Oxford Word Skills
 
New total english_pre-intermediate_-_sb (1)
New total english_pre-intermediate_-_sb (1)New total english_pre-intermediate_-_sb (1)
New total english_pre-intermediate_-_sb (1)
 
Total english -_elementary
Total english -_elementaryTotal english -_elementary
Total english -_elementary
 
A critical review of academic institutions and quality in higher education
A critical review of academic institutions and quality in higher educationA critical review of academic institutions and quality in higher education
A critical review of academic institutions and quality in higher education
 
Hirsch s.w., smale s. differential equations, dynamical systems and linear ...
Hirsch s.w., smale s.   differential equations, dynamical systems and linear ...Hirsch s.w., smale s.   differential equations, dynamical systems and linear ...
Hirsch s.w., smale s. differential equations, dynamical systems and linear ...
 
Benny and the biscuits
Benny and the biscuitsBenny and the biscuits
Benny and the biscuits
 
Handbook of mechanical engineering calculations
Handbook of mechanical engineering calculationsHandbook of mechanical engineering calculations
Handbook of mechanical engineering calculations
 
Uml
UmlUml
Uml
 
Treatment for diabetes with herbs and herbal supplements
Treatment for diabetes with herbs and herbal supplementsTreatment for diabetes with herbs and herbal supplements
Treatment for diabetes with herbs and herbal supplements
 

Similaire à Curso de-mcu-proteus

Iniciando c
Iniciando cIniciando c
Iniciando c____
 
Introducción a la programación del amigo bot
Introducción a la programación del amigo botIntroducción a la programación del amigo bot
Introducción a la programación del amigo botjhonsoomelol
 
Introducción al curso de C.docx
Introducción al curso de C.docxIntroducción al curso de C.docx
Introducción al curso de C.docxNidia Castro Campo
 
Programación de un PIC con Niple
Programación de un PIC con NipleProgramación de un PIC con Niple
Programación de un PIC con NipleHamiltonn Casallas
 
Guia basica-microbit (1)
Guia basica-microbit (1)Guia basica-microbit (1)
Guia basica-microbit (1)anep
 
PROGRAMACION DE LOS PIC 2021-1.pdf
PROGRAMACION DE LOS  PIC 2021-1.pdfPROGRAMACION DE LOS  PIC 2021-1.pdf
PROGRAMACION DE LOS PIC 2021-1.pdfSistemadeEstudiosMed
 
Como programar un PIC
Como programar un PICComo programar un PIC
Como programar un PICMicroPart
 
Como programar en Arduino
Como programar en ArduinoComo programar en Arduino
Como programar en ArduinoJavier Leyva
 
02 programarpic
02 programarpic02 programarpic
02 programarpicaserege66
 
1+ +introduccion+al+code warrior+para+hcs08
1+ +introduccion+al+code warrior+para+hcs081+ +introduccion+al+code warrior+para+hcs08
1+ +introduccion+al+code warrior+para+hcs08Dario Klug
 
Tutorial proton part 2
Tutorial proton part 2Tutorial proton part 2
Tutorial proton part 2dar851112
 

Similaire à Curso de-mcu-proteus (20)

Curso de-mcu-proteus
Curso de-mcu-proteusCurso de-mcu-proteus
Curso de-mcu-proteus
 
53592868 curso-de-mcu-proteus
53592868 curso-de-mcu-proteus53592868 curso-de-mcu-proteus
53592868 curso-de-mcu-proteus
 
Labview & pic
Labview & picLabview & pic
Labview & pic
 
Iniciando c
Iniciando cIniciando c
Iniciando c
 
Introducción a la programación del amigo bot
Introducción a la programación del amigo botIntroducción a la programación del amigo bot
Introducción a la programación del amigo bot
 
Introducción al curso de C.docx
Introducción al curso de C.docxIntroducción al curso de C.docx
Introducción al curso de C.docx
 
Uso Mplab
Uso MplabUso Mplab
Uso Mplab
 
Programación de un PIC con Niple
Programación de un PIC con NipleProgramación de un PIC con Niple
Programación de un PIC con Niple
 
Como programar un pic en 4 pasos
Como programar un pic en 4 pasosComo programar un pic en 4 pasos
Como programar un pic en 4 pasos
 
Guia basica-microbit (1)
Guia basica-microbit (1)Guia basica-microbit (1)
Guia basica-microbit (1)
 
PROGRAMACION DE LOS PIC 2021-1.pdf
PROGRAMACION DE LOS  PIC 2021-1.pdfPROGRAMACION DE LOS  PIC 2021-1.pdf
PROGRAMACION DE LOS PIC 2021-1.pdf
 
Rostro Expresivo
Rostro ExpresivoRostro Expresivo
Rostro Expresivo
 
como programar un pic
como  programar un piccomo  programar un pic
como programar un pic
 
Como programar un PIC
Como programar un PICComo programar un PIC
Como programar un PIC
 
Como programar en Arduino
Como programar en ArduinoComo programar en Arduino
Como programar en Arduino
 
02 programar
02 programar02 programar
02 programar
 
02 programarpic
02 programarpic02 programarpic
02 programarpic
 
1+ +introduccion+al+code warrior+para+hcs08
1+ +introduccion+al+code warrior+para+hcs081+ +introduccion+al+code warrior+para+hcs08
1+ +introduccion+al+code warrior+para+hcs08
 
Contador
ContadorContador
Contador
 
Tutorial proton part 2
Tutorial proton part 2Tutorial proton part 2
Tutorial proton part 2
 

Curso de-mcu-proteus

  • 1.
  • 2. 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 demás, 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 programación era muy difícil, pero en ese momento veía que programaban en ensamblador y pues se me hacia un lenguaje muy difícil de dominar, pero pues las necesidades de querer entrar a ese gran mundo del diseño de circuitos con estos microcontroladores, no tenia otra forma de empezar a programarlos. Entonces empecé a programar en ensamblador, pero cuando quería 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 difícil programar en lenguaje de alto nivel, preferiría 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 quería construir llego!!!! “Un cambio de paradigma en nuestra vida, es un riesgo que hay que tomar para triunfar”
  • 3. 1.1 Programas a Manejar Primero empezemos a saber que tipo de herramientas necesitamos para programar los microcontroladores. Software: Mplab IDE Este programa es uno de los Se pude bajar gratuitamente mas conocidos entre los en la pagina de Microchip programadores de PIC. www.microchip.com PIC C compiler Este compilador nos servirá Puedes ingresar a su página para empezar a programar para mayor información. en lenguaje de alto nivel que es el C. www.ccsinfo.com Proteus Este simulador es un de los Para mayor información mas convenientes para sobre este simulador entra a poder simular nuestros su pagina. circuitos y tener la garantía de que si funciona en www.labcenter.co.uk proteus funciona en la realidad. Microsoft Visual C# Bueno este programa nos Se pude bajar gratuitamente. servirá para hacer software necesarios para la comunicación entre el PIC y PC Hardware: Programador de PIC’s Bueno este programador Para mayor información (VOLNIA) que tengo solo puede entra a su página. programar algunos pic’s de la serie 12,16,18. www.volnia.com Ustedes pueden adquirir otro o hacerlo. Lo que necesitamos es solo programar el PIC.
  • 4. 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 pequeño que la memoria del microcontrolador. Para crear un proyecto en este entorno de mplab solo hay que ir donde dice <project> y después damos click en <Project Wizard> Y Después nos abrirá un ventana donde nos saluda, saltamos ese saludo donde dice <Next> y nos avienta al paso uno.
  • 5. 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. Después nos pedirá, donde queremos grabar el proyecto, lo grabamos donde nosotros queramos y después hacemos click <next> next y finish…!!!!
  • 6. Después creamos una hoja en blanco y esa misma hoja la grabamos en la misma carpeta donde se grabo el proyecto creado con la extensión “.c”, para referirnos que es lenguaje C. Hacemos click derecho en <Source File> y después <Add File> y agregamos la hoja en blanco. Nos vamos a donde dice <Build Option>
  • 7. Después buscamos <Include Search Path> esto nos sirve para que las librerías o drivers sean trasladados a nuestra hoja de trabajo. Y después hacemos click en <New> y después buscamos los drivers y las librerias. Y Listo para empezar programar.
  • 8. 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 programación, 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 Cátodo común), Para poder controlar tal display debemos manipular los 0’s y 1’s, por ejemplo para mostrar un “0” en el display. Se debe de prender los led’s los segmentos: A,B,C,D,E,F Siempre y cuando sea el display de ánodo común. Y así sucesivamente, para todos los números, el número máximo 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 números decimales a base en binario ya que como son 7 segmentos que hay que prender al mismo tiempo para mostrar un número especifico. Pasemos al microcontrolador PIC16F886.
  • 9. 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 razón no tenemos que colocar un cristal externo. Bueno como había dicho antes la lógica para mostrar los números es el siguiente. Se tiene que hacer un arreglo donde su contenido sea los números a mostrar en forma de binario. Cada vez que te pida el numero que corresponda este envie el numero en binario para después 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];
  • 10. Este causa que busque valor que se encuentra en la posición 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 numero binario que es 0b10000000 VALOR= 0b10000000 Y esa variable se saca por el puerto b para visualizar el numero decimal “8”.
  • 11. A continuación 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.
  • 12. 1.4 Contador de 00 a 99 Bueno empecemos otro programa ya algo que intervenga interrupciones en los pic, para meternos más a fondo en la programación. ¿Que es una interrupción? Una interrupción es un evento que interrumpe un proceso y cuando termina esa interrupción regresa el proceso donde se quedo. Por ejemplo: Si estas charlando con un amigo y derepente suena tu teléfono celular, interrumpes la conversación para poder contestar, cuando terminas de hablar por celular, regresas a la platica, donde se quedaron. En eventualmente lo mismo cuando hablamos de una interrupción 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 interrupción cuando recibimos un dato de la PC o enviamos un dato. TIMER= Este es una interrupción por tiempo, cuando llega un cierto tiempo ya programado por el usuario, el timer provoca una interrupción. Esta interrupción es una de las más 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 interrupción por un evento externo, colocando el puerto b del microcontrolador como entrada. Para identificar en que pata del micro se puede usar como una interrupción se pude buscar el pin que diga “INT”. Por ejemplo: RB0INT0 Se observa todas las interrupciones que hay en un microcontrolador
  • 13. 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 características; Es un contador de 8 bit, y proporciona una interrupción 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 interrupción, 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 parámetros.
  • 14. Por ejemplo, deseamos que ocurra una interrupción 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 instrucción SET_TIMER0( VALOR A CARGAR ); SET_TIMER0(217); Este hará una interrupción cada 1ms aproximadamente. Vamos hacer el programa en C, para conocer su algoritmo. Configuracion
  • 15. Se nota que el desbordamiento se hace cada 10ms con la interrupción, entonces damos como conclusión 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 técnica de multiplexor. Consta simplemente hacer un switcheo entre varios elementos y cada elemento pude visualizar o adquirir datos en un cierto tiempo programado. La lógica 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 después activarlo. Y así sucesivamente. Esto será a una velocidad moderadamente alta para que parezca que están encendidos los dos al mismo tiempo, pero en realidad se están turnando muy rápido . Enciende el primer display y después el otro Parecerá que están encendidos los dos
  • 16. Pasemos al programa en C. Se desborda aprox. A los 65mS 65ms x 9 veces = 500ms
  • 18. 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 aburriríamos leyendo todo, por esa razón simplemente haremos un par de programas y circuitos con LCD, ya que el compilador que estamos usando contiene una librería 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 función. lcd_putc(c); Pone un carácter en el lcd ejemplo; lcd_putc(‘A’); o una cadena de caracteres lcd_putc(“HOLA MUNDO”); lcd_gotoxy( x , y); establece la posición 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 carácter en la posición indicada
  • 19. Tiene otros parámetros que hay que tomar en cuenta. 1 2 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.
  • 20. Programa simple para mostrar “HOLA MUNDO” en el LCD. El circuito en proteus.
  • 21. 1.6 Reloj con LCD Ya sabemos como usar la interrupción 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 precisión en base del tiempo. La idea para desarrollar este reloj, se basa en usar la interrupción del timer0 para que cada 10ms se produzca una interrupción, 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 números que se están incrementados con el tiempo. Se usa una instrucción 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 números de 0 a 255. Configuracion del Lcd, cosa que ya habiamos visto Definimos los botones de control
  • 22. Cada 100 interrupciones se tiene 1 segundo
  • 23. Mientras el boton “SET” este presionado Mostramos los valores de cada numero
  • 24. Muestro el diagrama completo Se debe estar suelto para que pueda contar
  • 25. 1.7 Cronometro con LCD Ya realizamos algo muy difícil, 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 operación 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 máximo a proyectar es. 11 : 59 : 59 . 99
  • 26. 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 trabajábamos 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 operación 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 interrupción. 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 Se agrega dos programa anterior variable mas
  • 27. Valor obtenido en la operacion anterior para 10ms Se ve que ya no usamos la variable overflow ya que el conteo se muestra desde los 10ms
  • 28. Se carga otra vez Se pone todo a “0” Vemos el circuito:
  • 29. 1.8 Contraseña con LCD y Teclado 4x4 He añadido una librería para un teclado 4x4, ya que el compilador tiene un driver para un teclado 4x3, pero lo mas común 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 función c= kbd_getc(c); //Regresa un numero o un 0 si no se presiono nada. Esta ultima función, 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 función 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.
  • 30. Al estar programando, se debe de agregar un “USE” más con el siguiente parámetro. #use fast_io(b) Esta directiva afecta al código que el compilador generará para las instrucciones de entrada y salida. Este método rápido de hacer I/O ocasiona que el compilador realice I/O sin programar el registro de dirección. El puerto puede ser A-G. Se debe también 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”.
  • 31. Observemos el programa Agregamos las librerías Antes explicadas. Función que te devuelve el valor presionado Comparación de cada numero Con el verdadero
  • 32. Se muestra el esquema del proyecto: Propuesta: -Haga otro programa que te pida otra contraseña extensa. -Otro programa que automáticamente se auto ajuste al tamaño de la contraseña. Por ejemplo: Al inicio que te pida que ingrese la contraseña, y escribas 5 caracteres, y esos 5 sean la contraseña, pero al resetear el circuito, te pida la contraseña a guardar, ahora que sean otro numero de caracteres y así, que se auto ajuste al tamaño guardado de la contraseña.
  • 33. 1.9 Sensor de Temperatura En esta sección 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 común 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 operación de -50 a 100 grados Celsius, que es mas que suficiente para hacer pequeñas practicas. La conexión típica es la siguiente: Se pude usar amplificadores para cambiar la ganancia de este dispositivo, pero este arreglo es usado más en sistemas PID. Nosotros usaremos un microcontrolador para convertir la entrada análoga a digital (CAD). El microcontrolador que hemos usado tiene 11 entradas análogas, que podemos configurarlo a 8 bit o a 10 bit de conversión.
  • 34. Usaremos la siguiente instrucción para cambiar esos bit’s de conversión. #device ADC=10 // o 8 depende de la aplicación Nuestro primer proyecto con este sensor es visualizarlo en una pantalla LCD, que marque la temperatura ambiente. El CAD según su calibración te pude dar un rango muy amplio, por ejemplo usaremos una conversión de 10 bit’s, 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 centígrado. Usaremos una operación para convertir esa variación 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 conversión. Primero lo que hace es convertir ese voltaje a decimal: ( 270mV*1023 ) / 5 = 55.242 Y después 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.
  • 35. El programa se da a continuación. Para valores con décimas Se hace esta comparación para que no este siempre visualizando, solo cuando hay un cambio de temperatura
  • 36. Se muestra el diagrama a manejar: Ya hemos trabajado con LCD, solo ahora hemos añadido el sensor de temperatura. Propuesta: -Haga un sistema donde tenga dos valores MÁXIMO Y MÍNIMO de temperatura, donde la variable de TEMPERATURA al llegar al valor MÁXIMO prenda un abanico para que enfríe el sensor, y cuando llegue al valor MÍNIMO apague el abanico. Ejemplo: Tenemos: MAXIMO= 40 grados MÍNIMO =20 grados Al llegar la temperatura a 40 grados un abanico prenda hasta que llegue la temperatura a 20 grados apague el abanico.
  • 37. Bueno ya tenemos un pequeño programa que capta la temperatura ambiente, pero la mayoría 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 aplicación 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>, después hyperterminal. Antes de configurar este programa, debemos de hacer un programa para el microcontrolador, para que se pueda comunicar. Hay dos formas para comunicación hacia la laptop: -Comunicación Serial -Comunicación Paralela -USB En este proyecto se empezara la comunicación por puerto serial, aunque ya están mas populares hacer circuitos con USB, vamos a exprimir este método de comunicaciones, antes de pasar al USB. ¿Qué es la comunicación serial? Una manera de conectara dos dispositivos es mediante comunicaciones serie asíncronas. 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 transmitirán datos a la misma velocidad.
  • 38. La Norma RS-232 fue definida para conectar un ordenador a un modem. Además de transmitirse los datos de una forma serie asíncrona son necesarias una serie de señales adicionales, que se definen en la norma. Las tensiones empleadas están comprendidas entre +15/-15 voltios. Conexión de un microcontrolador al puerto serie del PC Para conectar el PC a un microcontrolador por el puerto serie se utilizan las señales Tx, Rx y GND. El PC utiliza la norma RS232, por lo que los niveles de tensión de los pines están 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.
  • 39. 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 colocación 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 información asociada a cada uno de los pines es la siguiente:
  • 40. El chip MAX 232 Conexion MAX Y PIC PIC
  • 41. Si por casualidad tienes una laptop, se pude comprar un adaptador de usb a serial, recordar que solo este sirve para la comunicación no para programar PIC. Bueno ahora pasemos al programa. Se usara una instrucción para la comunicación 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 recepción de datos o trasmisión. 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 estándar es preciso poner las directivas FIXED_IO o FAST_IO delante de #USE RS232 Contiene más opciones de configuración:
  • 42.
  • 43. Se muestra el programa que contiene el PIC. Para hacer una comunicación virtual entre el prorama proteus y hyperterminal se debe de usar una aplicación que te crea dos puertos viruales. Usaremos el Virtual Serial Port Aquí se seleccionamos el par para ser enlazados Se creo dos puertos virtuales
  • 44. Ahora si, pasemos al Hyperterminal, lo abrimos y le ponemos nombre a la conexión: Después conectamos en el COM1 Después solo checamos que esten bien los baudios, que sean igual al que hallamos puesto en nuestro programa
  • 45. 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 simulación.
  • 46. Vamos a la propiedades del COMPIM en proteus para cambiar el COM1 A COM2. Y empezamos la simulación. 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.
  • 47. 2.0 Matrix de LED En este tema se vera los siguientes circuitos: 2.0.1 Letras Estáticas 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 habitación, ordenador o lo que se nos ocurra. No solo se trata de un proyecto más que interesante para llevarlo a cabo como hobbysta, sino que puede resultar interesante como un producto comercializable. Es que estas matrices, que en algunos países se las conoce como “cartel de LEDs” o “Publik”, son un recurso muy frecuentemente utilizado con fines publicitarios o informativos. FILA COLUMNA ¿Como funciona? Como dijimos antes, la pantalla está formada por una serie de filas y columnas. La intersección entre ambas contiene un LED. Para que este encienda, tiene que recibir simultáneamente un “0” en la fila, y un “1” en la columna. Cuando se dan estas condiciones, la electrónica de la placa se encarga del encendido del LED en cuestión.
  • 48. Por ejemplo: 0 0 1 1 1 1 0 0 1 1 0 0 0 0 1 1 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. 1 0 Hay una técnica para mostrar figuras o letras, sin necesidad de estar de tener muchos circuitos, una de ellas es por corrimiento. ¿Que es esta técnica? Es una técnica donde se desplazan led con razón al dato recibido. Ósea: 011111111111111111 101111111111111111 110111111111111111 ……………………… 111111111111111110
  • 49. Esta técnica es empleada a una gran velocidad de transición, por decir un número a 2mS, para que el ojo humano no perciba el parpadeo. Daremos un ejemplo que muestre una letra: Esto se va hacer demasiado rápido y el ojo humano va ver la letra “A” Para manipular el corrimiento en la programación, se usara una función especial, que se usara en nuestro programita con la ayuda del circuito 74HC164.
  • 50. DATA = Podria ser 0 o un 1 depende del dato a enviar DATO = El pin que se va usar para llevar acabo esta acción 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.
  • 51. 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 estática es la siguiente: Se puede cambiar si quieren usar otros pines Se usa el Puerto c para la fila
  • 52. Es el máximo de columnas a limpiar. Esta función se vera mas a adelante
  • 53. La simulación es la siguiente Por cada 8 columnas se debe de poner otro 74HC164.
  • 54. 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.
  • 56. Aun no se usa esta función Y obtenemos:
  • 57. Propuesta: -Haga un programa que muestre varias palabras estáticas. Si se requiere más Matrices recuerde cambiar los parámetros antes vistos. Cada palabra que dure un cierto tiempo, y luego que cambie a la palabra que sigue.
  • 58. Ahora empecemos a desplazar las letras, todos queremos saber como hacer que empiecen a desplazarse las letras ¿no?, jeje. Bueno la lógica es mas simple que la anterior, ya que usaremos una función que nos proporciona el dato requerido al momento en que se debe de empezar otra vez. La función anterior que decía “aun no se usa” ahora es el momento para usarla. Esta función 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 cambio el nombre para mayor entendimiento Se agrega estos parámetros para que espere el momento, Para resetear el dato Se observa que hemos En la función quitado el SEND_DATA(); “HABILITO” Ya que la función “HABILITO” es la que se encarga de mandar el dato al momento en que se llegue al máximo de columnas
  • 59. 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 simulación no se apreciaría correctamente. Pero en la realidad al poner ese espacio se notara nítidamente bien.
  • 60. 2.1 Controlador de un Motor CD En esta sección se vera lo siguiente: 2.1.1 Motor CD y L293 2.1.2 Seguidor de línea ¿Como funciona un motor CD? El funcionamiento de un motor se basa en la acción de campos magnéticos opuestos que hacen girar el rotor (eje interno) en dirección opuesta al estator (imán 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 dirección de giro en un motor de Corriente Continua tan solo tenemos que invertir la polaridad de la alimentación del motor. Para modificar su velocidad podemos variar su tensión de alimentación con lo que el motor perderá velocidad, pero también 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 según el motor utilizado. ¿Con que podemos cambiar el giro del Moto? Con Control de dirección por medio del Circuito Integrado L293B
  • 61. Cada canal o driver es controlado por medio de una señal de control compatible TTL (no superior a 7V) y los canales se habilitan de dos en dos por medio de las señales 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 habilitación "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 tensión y en corriente, siendo esta de 1A máximo. La tensión de alimentación 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 número 8 (Vs), la tensión máxima 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 continuación 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".
  • 62. 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 tensión de alimentación 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 atrás. 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 alimentación 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 señales 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 pequeño circuito que por medio de vía serial, cambie el giro del motor: Ya hemos trabajado con el UART, solo hay que hallar la lógica 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í.
  • 63. Se da el programa para hacer lo antes dicho. Cada vez que se resiva un dato salta a esta function de interrupcion.
  • 64. 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 línea a seguir, usaremos también los comparadores internos que contiene el Micro, para comparar la señal obtenida de los CYN70. También necesitaremos 2 potenciómetros de 100kohm
  • 65. 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 añadido un pequeña memoria para cuando se de la casualidad que se salga de la línea, este empiece a girar al ultimo movimiento que se realizo para poder volver a la línea. 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 Motor debe de estar a la izquierda Motor debe de estar a la derehca Este a la izquierda
  • 66. He aquí el programa:
  • 67. Vemos como quedo nuestro robot.
  • 68. 2.2 Temperatura y Display de 7 segmentos Como vimos en las primeras practicas de cómo usar dos display de 7 segmentos, intercalando cada display, ahora he añadido un sensor LM35, para mostrar la temperatura. Con el uso de la interrupción por timer0, se sensara la temperatura, y el valor obtenido se sacara las centésimas, décimas y unidades. Para que cada uno se muestre en el display que corresponde. Aquí esta la simulación: El rango de operación es de 0 grados a 106 grados, cada display esta prendido 2mS suficiente para poder mostrarse a una intensidad que se vea.
  • 69. El programa que contiene el PIC;
  • 70.
  • 71. Nota: El display es ánodo común, 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 alimentación de cada display. En la simulación se uso un display estándar de 4 elementos para simularlo correctamente.
  • 72. HECHO EN MEXICO V1.4 03/01/2010 10:36:52 “La mejor manera de aprender es leer, y no COPIAR Y PEGAR”