curso de mcu_proteus

Upload: william-giovanny-sanchez

Post on 08-Apr-2018

239 views

Category:

Documents


0 download

TRANSCRIPT

  • 8/7/2019 Curso de Mcu_proteus

    1/72

  • 8/7/2019 Curso de Mcu_proteus

    2/72

    Prologo

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

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

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

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

  • 8/7/2019 Curso de Mcu_proteus

    3/72

    1.1Programas a ManejarPrimero empezemos a saber que tipo de herramientas necesitamos para programar losmicrocontroladores.

    Software:

    Mplab IDE Este programa es uno de losmas conocidos entre losprogramadores de PIC.

    Se pude bajar gratuitamenteen la pagina de Microchip

    www.microchip.com

    PIC C compiler Este compilador nos servirpara empezar a programaren lenguaje de alto nivelque es el C.

    Puedes ingresar a su pginapara mayor informacin.

    www.ccsinfo.com

    Proteus Este simulador es un de losmas convenientes parapoder simular nuestroscircuitos y tener la garanta

    de que si funciona enproteus funciona en larealidad.

    Para mayor informacinsobre este simulador entra asu pagina.

    www.labcenter.co.uk

    Microsoft Visual C# Bueno este programa nosservir para hacer softwarenecesarios para lacomunicacin entre el PICy PC

    Se pude bajar gratuitamente.

    Hardware:

    Programador de PICs

    (VOLNIA)

    Bueno este programador

    que tengo solo puedeprogramar algunos pics dela serie 12,16,18.Ustedes pueden adquirirotro o hacerlo.Lo que necesitamos es soloprogramar el PIC.

    Para mayor informacin

    entra a su pgina.

    www.volnia.com

  • 8/7/2019 Curso de Mcu_proteus

    4/72

    1.2 Entorno de MPlab IDE

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

    Para crear un proyecto en este entorno de mplab solo hay que ir donde dice ydespus damos click en

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

  • 8/7/2019 Curso de Mcu_proteus

    5/72

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

    Y le hacemos click en y pasamos al segundo paso, que compilador queremosusar, en este caso usaremos el CCS C.

    Despus nos pedir, donde queremos grabar el proyecto, lo grabamos donde nosotrosqueramos y despus hacemos click next y finish!!!!

  • 8/7/2019 Curso de Mcu_proteus

    6/72

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

    Hacemos click derecho en y despus y agregamos la hoja enblanco.

    Nos vamos a donde dice

  • 8/7/2019 Curso de Mcu_proteus

    7/72

    Despus buscamos esto nos sirve para que las libreras o driverssean trasladados a nuestra hoja de trabajo.Y despus hacemos click en y despus buscamos los drivers y las librerias.

    Y Listo para empezar programar.

  • 8/7/2019 Curso de Mcu_proteus

    8/72

    1.3 Contador de 0 a 9

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

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

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

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

    Se debe de prender los leds los segmentos:

    A,B,C,D,E,F

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

    prender al mismo tiempo para mostrar un nmero especifico.

    Pasemos al microcontrolador PIC16F886.

  • 8/7/2019 Curso de Mcu_proteus

    9/72

    Este micro consta de 3 puertos completos, que es el A,B y C, en este proyecto solonecesitamos 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 de4Mhz o 8Mhz. Por esa razn no tenemos que colocar un cristal externo.

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

    Hay una forma para implemnter esto en C.

    unsigned int NUMERO[]={ 0b11000000, //0

    0b11111001, //10b10100100, //20b10110000, //30b10011001, //40b10010010, //50b10000011, //60b11111000, //70b10000000, //80b00011000}; //9

    Con este arreglo podemos vizualizar cada numero del 0 al 9, su funcion es muy simple alintroducir un numero de 0 a 9, este arrojara el numero binario correspondiente.

    Ejemplo

    VALOR=NUMERO[8];

  • 8/7/2019 Curso de Mcu_proteus

    10/72

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

    0123456

    78 -> 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.

  • 8/7/2019 Curso de Mcu_proteus

    11/72

    A continuacin se observa el programa en CCS.

    //CONFIGURACION///////////////////#include#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

  • 8/7/2019 Curso de Mcu_proteus

    12/72

    1.4 Contador de 00 a 99

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

    Que es una interrupcin?

    Una interrupcin es un evento que interrumpe un proceso y cuando termina esa

    interrupcin regresa el proceso donde se quedo.Por ejemplo:Si estas charlando con un amigo y derepente suena tu telfono celular, interrumpes laconversacin para poder contestar, cuando terminas de hablar por celular, regresas a laplatica, donde se quedaron.En eventualmente lo mismo cuando hablamos de una interrupcin en un micro.

    Que interrupciones hay en un microcontrolador?

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

    Interrupciones por:

    UART= Donde surge una interrupcin cuando recibimos un dato de la PC o enviamos undato.TIMER= Este es una interrupcin por tiempo, cuando llega un cierto tiempo yaprogramado por el usuario, el timer provoca una interrupcin. Esta interrupcin es una delas ms usadas, por la necesidad de hacer dos operaciones en el microcontrolador aciertos tiempos.PORTO B= Estas interrupciones son externas, ya que cuando queremos que surga unainterrupcin por un evento externo, colocando el puerto b del microcontrolador comoentrada. Para identificar en que pata del micro se puede usar como una interrupcin se

    pude buscar el pin que diga INT.Por ejemplo:

    RB0\INT0

    Se observa todas las interrupciones que hay en un microcontrolador

  • 8/7/2019 Curso de Mcu_proteus

    13/72

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

    Este timer contiene las siguientes caractersticas;

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

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

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

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

  • 8/7/2019 Curso de Mcu_proteus

    14/72

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

    Entonces:

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

    Despejando;

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

    Con la instruccin

    SET_TIMER0( VALOR A CARGAR );

    SET_TIMER0(217);

    Este har una interrupcin cada 1ms aproximadamente.

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

    Configuracion

  • 8/7/2019 Curso de Mcu_proteus

    15/72

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

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

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

    .Enciende el primer display y despus el otro

    Parecer que estn encendidos los dos

  • 8/7/2019 Curso de Mcu_proteus

    16/72

    Pasemos al programa en C.

    Se desborda aprox. Alos 65mS

    65ms x 9 veces = 500ms

  • 8/7/2019 Curso de Mcu_proteus

    17/72

    La simulacin Correspondiente.

  • 8/7/2019 Curso de Mcu_proteus

    18/72

    1.5 HOLA MUNDO con LCD 16x2

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

    Las funciones que nos ofrece el compilador son simples:

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

    lcd_putc(c); Pone un carcter en el lcd

    ejemplo;

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

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

    ejemplo:

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

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

  • 8/7/2019 Curso de Mcu_proteus

    19/72

    Tiene otros parmetros que hay que tomar en cuenta.

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

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

    Si queremos cambiarlo simplemente hacemos lo siguiente

    Y listo para usar el puerto b para el lcd.

    1

    2

  • 8/7/2019 Curso de Mcu_proteus

    20/72

    Programa simple para mostrar HOLA MUNDO en el LCD.

    El circuito en proteus.

  • 8/7/2019 Curso de Mcu_proteus

    21/72

    1.6 Reloj con LCD

    Ya sabemos como usar la interrupcin por timer0, y podemos usar el lcd 16x2, entoncesestamos capacitados para realizar un reloj digital.Es simple hacer un reloj digital, y mas cuando usamos microcontroladores, ya que nosproporciona mayor precisin en base del tiempo.La idea para desarrollar este reloj, se basa en usar la interrupcin del timer0 para que cada10ms se produzca una interrupcin, y con una variable, contemos esas interrupcionespara tener aproximadamente 1 segundo y podemos cambiar el segundero, a su valorcorrespondiente.

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

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

    Printf( lcd_putc,%u, VALOR )

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

    Configuracion delLcd, cosa que yahabiamos visto

    Definimos losbotones de control

  • 8/7/2019 Curso de Mcu_proteus

    22/72

    Cada 100interrupciones se tiene1 segundo

  • 8/7/2019 Curso de Mcu_proteus

    23/72

    Mientras el botonSET este presionado

    Mostramos los valores decada numero

  • 8/7/2019 Curso de Mcu_proteus

    24/72

    Muestro el diagrama completo

    Se debe estarsuelto para quepueda contar

  • 8/7/2019 Curso de Mcu_proteus

    25/72

    1.7 Cronometro con LCD

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

    Hay que tener un detalle muy presente en este proyecto, es que el LCD, necesita un ciertotiempo 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 operacinpara que en 10ms pueda mostrar correctamente todos los caracteres en la pantalla.

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

    11 : 59 : 59 . 99

  • 8/7/2019 Curso de Mcu_proteus

    26/72

  • 8/7/2019 Curso de Mcu_proteus

    27/72

    Se ve que ya no usamosla variable overflow yaque el conteo se muestradesde los 10ms

    Valor obtenido en laoperacion anterior para10ms

  • 8/7/2019 Curso de Mcu_proteus

    28/72

    Vemos el circuito:

    Se car a otra vez

    Se pone todo a

    0

  • 8/7/2019 Curso de Mcu_proteus

    29/72

    1.8 Contrasea con LCD y Teclado 4x4

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

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

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

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

    do{c=kbd_getc();

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

    }

    }while(TRUE);

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

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

  • 8/7/2019 Curso de Mcu_proteus

    30/72

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

    #use fast_io(b)

    Esta directiva afecta al cdigo que el compilador generar para las instrucciones deentrada y salida. Este mtodo rpido de hacer I/O ocasiona que el compilador realiceI/O sin programar el registro de direccin. El puerto puede ser A-G.

    Se debe tambin activar las resistencias pullup en el puerto b, esto nos evita usarresistencias 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 demover el LCD al puerto C, pero como en las configuraciones del driver del LCD, solo sepuede cambiar para el puerto B o D, he modificado, ese driver para poder usar el puertoC.Para poder usarlo se hace igual que el driver del teclado, solo lo copiamos y lo pegamos ala carpeta que contiene todos los driver y listo.

    #include

    Se usara dos arreglos en este proyecto, uno ser la clave para acceder, y el otro donde seva 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 laclave es 136.

  • 8/7/2019 Curso de Mcu_proteus

    31/72

  • 8/7/2019 Curso de Mcu_proteus

    32/72

    Se muestra el esquema del proyecto:

    Propuesta:

    -Haga otro programa que te pida otra contrasea extensa.

    -Otro programa que automticamente se auto ajuste al tamao de la contrasea.Por ejemplo:

    Al inicio que te pida que ingrese la contrasea, y escribas 5 caracteres, y esos 5

    sean la contrasea, pero al resetear el circuito, te pida la contrasea a guardar,ahora que sean otro numero de caracteres y as, que se auto ajuste al tamaoguardado de la contrasea.

  • 8/7/2019 Curso de Mcu_proteus

    33/72

    1.9 Sensor de Temperatura

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

    1.9.1 Sensor LM35 al LCD1.9.2 Sensor LM35 al PC

    Que es el sensor LM35?

    Es muy comn encontrar proyectos que emplean como sensor a un transistor LM35DZ

    modelo TO-92, el cual es in sensor de temperatura con una buena presicion en escalaCelsius. Este dispositivo transforma la temperatura del ambiente en voltaje, del orden demV.Este dispositivo tiene un rango de operacin de -50 a 100 grados Celsius, que es mas quesuficiente para hacer pequeas practicas.

    La conexin tpica es la siguiente:

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

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

  • 8/7/2019 Curso de Mcu_proteus

    34/72

    Usaremos la siguiente instruccin para cambiar esos bits de conversin.

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

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

    0 volts = 0b0000000000 = 05 volts = 0b1111111111 = 1023

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

    X= 5 / 1023X= 4.88mV

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

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

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

    ( 270mV*1023 ) / 5 = 55.242

    Y despus ese valor lo usamos para transformarlo a grados.

    (55.242*300) / 614 = 26.99

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

  • 8/7/2019 Curso de Mcu_proteus

    35/72

    El programa se da a continuacin.

    Se hace estacomparacin

    para que no estesiemprevisualizando,solo cuando hayun cambio detem eratura

    Paravalores

    condcimas

  • 8/7/2019 Curso de Mcu_proteus

    36/72

    Se muestra el diagrama a manejar:

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

    Propuesta:

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

    Tenemos:MAXIMO= 40 gradosMNIMO =20 grados

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

  • 8/7/2019 Curso de Mcu_proteus

    37/72

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

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

    -Comunicacin Serial-Comunicacin Paralela-USB

    En este proyecto se empezara la comunicacin por puerto serial, aunque ya estn mas

    populares hacer circuitos con USB, vamos a exprimir este mtodo de comunicaciones,antes de pasar al USB.

    Qu es la comunicacin serial?

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

  • 8/7/2019 Curso de Mcu_proteus

    38/72

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

    Conexin de un microcontrolador al puerto serie del PC

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

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

  • 8/7/2019 Curso de Mcu_proteus

    39/72

    El conector DB9 del PC

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

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

  • 8/7/2019 Curso de Mcu_proteus

    40/72

    El chip MAX 232

    Conexion MAX Y PIC

    PIC

  • 8/7/2019 Curso de Mcu_proteus

    41/72

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

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

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

    -Para el primero:

    Esta directiva le dice al compilador la velocidad en baudios y los pines utilizados para laI/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. Ladiferencia entre el anterior, es que en este se puede usar las interrupciones de recepcinde datos o trasmisin.

    La directiva #USE DELAY debe aparecer antes de utilizar #USE RS232. Esta directivahabilita el uso de funciones tales como GETCH, PUTCHAR y PRINTF. Si la I/O no esestndar es preciso poner las directivas FIXED_IO o FAST_IO delante de #USE RS232

    Contiene ms opciones de configuracin:

  • 8/7/2019 Curso de Mcu_proteus

    42/72

  • 8/7/2019 Curso de Mcu_proteus

    43/72

    Se muestra el programa que contiene el PIC.

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

    Se creo dospuertosvirtuales

    Aqu seseleccionamos elpar para serenlazados

  • 8/7/2019 Curso de Mcu_proteus

    44/72

  • 8/7/2019 Curso de Mcu_proteus

    45/72

  • 8/7/2019 Curso de Mcu_proteus

    46/72

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

    Y empezamos la simulacin.

    Propuesta:

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

    SENSOR1 SENSOR2 SENSOR3 SENSOR4VALOR VALOR VALOR VALOR

    Y haga una grafica en EXCEL.

  • 8/7/2019 Curso de Mcu_proteus

    47/72

    2.0 Matrix de LED

    En este tema se vera los siguientes circuitos:

    2.0.1 Letras Estticas2.0.2 Letras con Desplazamiento

    Que es una Matriz de Led?

    Un cartel formado por varias filas y columnas de LEDs, convenientemente programado,

    puede servir para pasar mensajes publicitarios, decorar nuestra habitacin, ordenador o loque se nos ocurra. No solo se trata de un proyecto ms que interesante para llevarlo acabo como hobbysta, sino que puede resultar interesante como un productocomercializable. Es que estas matrices, que en algunos pases se las conoce como cartelde LEDs o Publik, son un recurso muy frecuentemente utilizado con finespublicitarios o informativos.

    Como funciona?

    Como dijimos antes, la pantalla est formada por una serie de filas y columnas. Lainterseccin entre ambas contiene un LED. Para que este encienda, tiene que recibirsimultneamente un 0 en la fila, y un 1 en la columna. Cuando se dan estascondiciones, la electrnica de la placa se encarga del encendido del LED en cuestin.

    FILA

  • 8/7/2019 Curso de Mcu_proteus

    48/72

    Por ejemplo:

    Se nota que solo prenden los led que se intersectacon con 1 a 0, mientras cuando se

    intersectan 0 y 1 no prenden por la polaridad del diodo.

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

    Que es esta tcnica?

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

    1 1 0 0 0 0 1 1

    00

    11

    1

    1

    00

    1

    0

    011111111111111111101111111111111111110111111111111111111111111111111110

  • 8/7/2019 Curso de Mcu_proteus

    49/72

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

    Daremos un ejemplo que muestre una letra:

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

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

  • 8/7/2019 Curso de Mcu_proteus

    50/72

  • 8/7/2019 Curso de Mcu_proteus

    51/72

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

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

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

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

    Se usa el Puerto cpara la fila

    Se puede cambiar si quierenusar otros pines

  • 8/7/2019 Curso de Mcu_proteus

    52/72

    Es el mximo decolumnas a limpiar.

    Esta funcin se veramas a adelante

  • 8/7/2019 Curso de Mcu_proteus

    53/72

    La simulacin es la siguiente

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

  • 8/7/2019 Curso de Mcu_proteus

    54/72

    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 seproyecte 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 queempiece otra vez.

  • 8/7/2019 Curso de Mcu_proteus

    55/72

    Mximo decolumnas

  • 8/7/2019 Curso de Mcu_proteus

    56/72

    Y obtenemos:

    Aun no se usa esta funcin

  • 8/7/2019 Curso de Mcu_proteus

    57/72

    Propuesta:

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

  • 8/7/2019 Curso de Mcu_proteus

    58/72

  • 8/7/2019 Curso de Mcu_proteus

    59/72

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

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

  • 8/7/2019 Curso de Mcu_proteus

    60/72

    2.1 Controlador de un Motor CD

    En esta seccin se vera lo siguiente:

    2.1.1 Motor CD y L2932.1.2 Seguidor de lnea

    Como funciona un motor CD?

    El funcionamiento de un motor se basa en la accin de campos magnticos opuestos que

    hacen girar el rotor (eje interno) en direccin opuesta al estator (imn externo o bobina),con lo que si sujetamos por medio de soportes o bridas la carcasa del motor el rotor con eleje de salida ser lo nico que gire.

    Para cambiar la direccin de giro en un motor de Corriente Continua tan solo tenemosque invertir la polaridad de la alimentacin del motor.

    Para modificar su velocidad podemos variar su tensin de alimentacin con lo que elmotor perder velocidad, pero tambin perder par de giro (fuerza) o para no perder paren el eje de salida podemos hacer un circuito modulador de anchura de pulsos (pwm) conuna salida a transistor de mas o menos potencia segn el motor utilizado.

    Con que podemos cambiar el giro del Moto?

    Con Control de direccin por medio del Circuito Integrado L293B

  • 8/7/2019 Curso de Mcu_proteus

    61/72

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

    As pues, vemos que poniendo a nivel alto la entrada de habilitacin "EN" del driver, lasalida de este "OUT" pasa de alta impedancia al mismo nivel que se encuentre la entradadel driver "IN" pero amplificado en tensin y en corriente, siendo esta de 1A mximo. Latensin de alimentacin del circuito integrado no es la misma que se aplica a las cargaconectada a las salidas de los drivers, y para estas salidas se a de alimentar el driver porsu patita nmero 8 (Vs), la tensin mxima aplicable a estas patitas es de 36V.

    Tipica Aplicaciones:Con un L293B podemos tener control bidireccional con 2 motores o controlunidireccional con 4 motores, a continuacin vamos a ver como se han de conectar losmotores.

    Control Unidireccional: En la siguiente figura vemos las dos formas de conectar un motorpara control unidireccional, M1 se activa al poner la entrada del driver conectado a este, anivel bajo "0", mientras que M2 se activa al poner la entrada del driver a nivel alto "1" yse para al ponerla a nivel bajo "0".

  • 8/7/2019 Curso de Mcu_proteus

    62/72

    La entrada enable es como un interruptor general y deber ponerse a nivel alto "1" parapoder operar con los drivers que controla, o a nivel bajo "0" si se quiere desconectar elcontrol de estos.

    "Vs" ser la tensin de alimentacin necesaria para los motores.

    Los diodos modelo 1N4007 son para proteger el circuito de los picos de arranque yparada de los motores debido a la corriente inversa inducida por estos.

    Control Bidireccional: En el siguiente circuito vemos el modo de conectar un motor para

    permitir controlarlo tanto hacia delante como hacia atrs.

    Para tener el control de dos direcciones o bidireccional se usan dos de drivers del l293bconectando sus salidas a los polos del motor, entonces podremos cambiar la polaridad dealimentacin 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 nivelalto "1" y "B" a nivel bajo "0" y para hacer girar el motor a la izquierda tendremos queinvertir las seales de entrada de tal manera, la entrada "A" a nivel bajo "0" y "B" a nivelalto "1". Los diodos son como en el caso anterior para proteger el integrado de corrientes

    inversas.

    Haremos un pequeo circuito que por medio de va serial, cambie el giro del motor:

    Ya hemos trabajado con el UART, solo hay que hallar la lgica de lo que queremos,deseamos que al recibir la letra I gire a la derecha, o cuando se reciba la letra D gire a la derecha y as.

  • 8/7/2019 Curso de Mcu_proteus

    63/72

  • 8/7/2019 Curso de Mcu_proteus

    64/72

  • 8/7/2019 Curso de Mcu_proteus

    65/72

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

    He pegado los dos motores en el chasis del carrito, sold las terminales a cables largospara que entren en el proto.

    En el programa que contiene el microcontrolador, le he aadido un pequea memoriapara cuando se de la casualidad que se salga de la lnea, este empiece a girar al ultimomovimiento que se realizo para poder volver a la lnea.

    Recuerde, que el para armarlo debe de colocar sensor CYN70 del comparador 1, debe ir a

    la Izquierda del Robot, mientras que el otro debe de estar a la derecha. (Los dos bienjuntos)

    Este a la derecha

    Este a la izquierda

    Motor debe deestar a laderehca

    Motor debe de estara la izquierda

  • 8/7/2019 Curso de Mcu_proteus

    66/72

    He aqu el programa:

  • 8/7/2019 Curso de Mcu_proteus

    67/72

    Vemos como quedo nuestro robot.

  • 8/7/2019 Curso de Mcu_proteus

    68/72

  • 8/7/2019 Curso de Mcu_proteus

    69/72

    El programa que contiene el PIC;

  • 8/7/2019 Curso de Mcu_proteus

    70/72

  • 8/7/2019 Curso de Mcu_proteus

    71/72

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

    As se debe de conectar lostransistores al pin dealimentacin de cada display.En la simulacin se uso undisplay estndar de 4 elementospara simularlo correctamente.

  • 8/7/2019 Curso de Mcu_proteus

    72/72

    HECHO EN MEXICO

    V1.4

    03/01/2010 10:36:52

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