Curso de-mcu-proteus

11,628 views

Published on

Published in: Entertainment & Humor
1 Comment
16 Likes
Statistics
Notes
No Downloads
Views
Total views
11,628
On SlideShare
0
From Embeds
0
Number of Embeds
7
Actions
Shares
0
Downloads
1,848
Comments
1
Likes
16
Embeds 0
No embeds

No notes for slide

Curso de-mcu-proteus

  1. 1. PrologoAntes 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 demás, 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 programación era muy difícil, pero en ese momento veíaque 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 conestos microcontroladores, no tenia otra forma de empezar a programarlos.Entonces empecé a programar en ensamblador, pero cuando quería hacer cosas ya mascomplicadas, no tenia mucho tiempo para desarrollar programar tan extensos enensamblador 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 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 difícil programar enlenguaje de alto nivel, preferiría 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 quería construir llego!!!!“Un cambio de paradigma en nuestra vida, es un riesgo que hay que tomar para triunfar”
  2. 2. 1.1 Programas a ManejarPrimero empezemos a saber que tipo de herramientas necesitamos para programar losmicrocontroladores.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.comPIC 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.comProteus 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 PCHardware: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.
  3. 3. 1.2 Entorno de MPlab IDEEmpecemos 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 pequeño que la memoria del microcontrolador.Para crear un proyecto en este entorno de mplab solo hay que ir donde dice <project> ydespué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.
  4. 4. Nos pedira que microcontrolador tenemos en mente a usar, y en este caso empecemos aprogramar el PIC16F886.Y le hacemos click en <Next> y pasamos al segundo paso, que compilador queremosusar, en este caso usaremos el CCS C.Después nos pedirá, donde queremos grabar el proyecto, lo grabamos donde nosotrosqueramos y después hacemos click <next> next y finish…!!!!
  5. 5. Después creamos una hoja en blanco y esa misma hoja la grabamos en la misma carpetadonde se grabo el proyecto creado con la extensión “.c”, para referirnos que es lenguajeC.Hacemos click derecho en <Source File> y después <Add File> y agregamos la hoja enblanco.Nos vamos a donde dice <Build Option>
  6. 6. Después buscamos <Include Search Path> esto nos sirve para que las librerías o driverssean 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.
  7. 7. 1.3 Contador de 0 a 9El 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 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 dedistintos 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 paramostrar un “0” en el display.Se debe de prender los led’s los segmentos: A,B,C,D,E,FSiempre 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 quemuestre números decimales a base en binario ya que como son 7 segmentos que hay queprender al mismo tiempo para mostrar un número especifico.Pasemos al microcontrolador PIC16F886.
  8. 8. 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 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 debinario. Cada vez que te pida el numero que corresponda este envie el numero en binariopara 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}; //9Con 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.EjemploVALOR=NUMERO[8];
  9. 9. Este causa que busque valor que se encuentra en la posición 8. Se debe de aclarar queempieza el conteo desde 0 en el arreglo que hicimos arriba.012345678 -> Aquí arroja el valor que se encuentre en el arreglo.9La variable “VALOR” ahora va tener el numero binario que es 0b10000000VALOR= 0b10000000Y esa variable se saca por el puerto b para visualizar el numero decimal “8”.
  10. 10. 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.
  11. 11. 1.4 Contador de 00 a 99Bueno empecemos otro programa ya algo que intervenga interrupciones en los pic, parameternos 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 esainterrupción regresa el proceso donde se quedo.Por ejemplo:Si estas charlando con un amigo y derepente suena tu teléfono celular, interrumpes laconversación para poder contestar, cuando terminas de hablar por celular, regresas a laplatica, 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 undato.TIMER= Este es una interrupción por tiempo, cuando llega un cierto tiempo yaprogramado por el usuario, el timer provoca una interrupción. Esta interrupción es una delas más 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 unainterrupción por un evento externo, colocando el puerto b del microcontrolador comoentrada. Para identificar en que pata del micro se puede usar como una interrupción sepude buscar el pin que diga “INT”.Por ejemplo:RB0INT0Se observa todas las interrupciones que hay en un microcontrolador
  12. 12. 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 eltimer0 y se le dice que a “desbordado”.Bueno ya conocemos el timer0, pero como opera este dichoso contador, para poder usarcorrectamente 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.
  13. 13. 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 217Con la instrucciónSET_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
  14. 14. Se nota que el desbordamiento se hace cada 10ms con la interrupción, entonces damoscomo conclusión 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 técnica demultiplexor.Consta simplemente hacer un switcheo entre varios elementos y cada elemento pudevisualizar o adquirir datos en un cierto tiempo programado.La lógica 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 después activarlo. Yasí sucesivamente. Esto será a una velocidad moderadamente alta para que parezca queestá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
  15. 15. Pasemos al programa en C. Se desborda aprox. A los 65mS 65ms x 9 veces = 500ms
  16. 16. La simulación Correspondiente.
  17. 17. 1.5 “HOLA MUNDO” con LCD 16x2Bueno no entrare tan profundamente como opera un LCD, ya que si quiero explicar cadadetalle pues nos aburriríamos leyendo todo, por esa razón simplemente haremos un par deprogramas y circuitos con LCD, ya que el compilador que estamos usando contiene unalibrerí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 lcdejemplo;lcd_putc(‘A’); o una cadena de caractereslcd_putc(“HOLA MUNDO”);lcd_gotoxy( x , y); establece la posición para escrbirejemplo:lcd_goto(1,2); le dice que escriba en la segunda linealcd_putc(“HOLA MUNDO”);lcd_getc( x , y ); regresa el carácter en la posición indicada
  18. 18. Tiene otros parámetros que hay que tomar en cuenta. 1 21.-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 siguienteY listo para usar el puerto b para el lcd.
  19. 19. Programa simple para mostrar “HOLA MUNDO” en el LCD. El circuito en proteus.
  20. 20. 1.6 Reloj con LCDYa sabemos como usar la interrupción 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 precisión en base del tiempo.La idea para desarrollar este reloj, se basa en usar la interrupción del timer0 para que cada10ms se produzca una interrupción, 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 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 de0 a 255. Configuracion del Lcd, cosa que ya habiamos visto Definimos los botones de control
  21. 21. Cada 100interrupciones se tiene1 segundo
  22. 22. Mientras el boton “SET” este presionadoMostramos los valores decada numero
  23. 23. Muestro el diagrama completoSe debe estarsuelto para quepueda contar
  24. 24. 1.7 Cronometro con LCDYa realizamos algo muy difícil, 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 operaciónpara 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
  25. 25. El programa es igual que el del reloj pero en este caso, solo tenemos dos botones, uno vaser el RESET, y el otro va hacer PAUSA.Y así cuando queramos empezar de nuevo, presionamos el boton RESET, y por locontrario queremos solo pausar el cronometro pues presionamos PAUSA.Usaremos el reloj interno del Micro que trabaje a 8Mhz, para que las instrucciones seejecuten cada 0.5uS, que es la mitad de lo que trabajábamos anteriormente, y así sea masexacto los 10ms.Pero si hacemos esto el timer0 que tenia un valor de 217, ya no será ese valor, ya quecambiamos el oscilador, entonces tenemos que hacer nuevamente la operación antesvista. 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í estael programa. Configuaracion del LCD, cosa que ya vimos Se cambia lo que teniamos en el Se agrega dos programa anterior variable mas
  26. 26. Valor obtenido en la operacion anterior para 10msSe ve que ya no usamosla variable overflow yaque el conteo se muestradesde los 10ms
  27. 27. Se carga otra vez Se pone todo a “0”Vemos el circuito:
  28. 28. 1.8 Contraseña con LCD y Teclado 4x4He añadido una librería para un teclado 4x4, ya que el compilador tiene un driver para unteclado 4x3, pero lo mas común 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 funciónc= 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 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.
  29. 29. 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 deentrada y salida. Este método rápido de hacer I/O ocasiona que el compilador realiceI/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 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<LCD_PORTC.C>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”.
  30. 30. Observemos el programa Agregamos las librerías Antes explicadas. Función que te devuelve el valor presionadoComparación decada numeroCon el verdadero
  31. 31. 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.
  32. 32. 1.9 Sensor de TemperaturaEn 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 LM35DZmodelo 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 operación de -50 a 100 grados Celsius, que es mas quesuficiente 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 estearreglo 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 podemosconfigurarlo a 8 bit o a 10 bit de conversión.
  33. 33. Usaremos la siguiente instrucción para cambiar esos bit’s de conversión. #device ADC=10 // o 8 depende de la aplicaciónNuestro primer proyecto con este sensor es visualizarlo en una pantalla LCD, que marquela temperatura ambiente.El CAD según su calibración te pude dar un rango muy amplio, por ejemplo usaremosuna 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 = 1023Entonces el incremento se pude sacar con una regla de tres simple: X= 5 / 1023 X= 4.88mVSe 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.99Casi exacto a la temperatura medida, con esta logica podemos crear un sensor detemperatura ambiente y que se proyecte a un LCD.
  34. 34. El programa se da a continuación. Para valores con décimasSe hace estacomparaciónpara que no estesiemprevisualizando,solo cuando hayun cambio detemperatura
  35. 35. 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, dondela variable de TEMPERATURA al llegar al valor MÁXIMO prenda un abanico para queenfríe el sensor, y cuando llegue al valor MÍNIMO apague el abanico.Ejemplo:Tenemos:MAXIMO= 40 gradosMÍNIMO =20 gradosAl llegar la temperatura a 40 grados un abanico prenda hasta que llegue la temperatura a20 grados apague el abanico.
  36. 36. Bueno ya tenemos un pequeño programa que capta la temperatura ambiente, pero lamayorí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 susistema, que es el hyperterminal. Este programa nos ayudara a adquirir los datos detemperatura.Lo buscamos en <accesorios>, y luego <comunicaciones>, después hyperterminal.Antes de configurar este programa, debemos de hacer un programa para elmicrocontrolador, para que se pueda comunicar.Hay dos formas para comunicación hacia la laptop:-Comunicación Serial-Comunicación Paralela-USBEn este proyecto se empezara la comunicación por puerto serial, aunque ya están maspopulares 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 serieasíncronas. 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 transmitirán datos a la misma velocidad.
  37. 37. La Norma RS-232 fue definida para conectar un ordenador a un modem. Además detransmitirse los datos de una forma serie asíncrona son necesarias una serie de señalesadicionales, que se definen en la norma. Las tensiones empleadas están comprendidasentre +15/-15 voltios.Conexión de un microcontrolador al puerto serie del PCPara 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 pinesestán 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.
  38. 38. El conector DB9 del PCEn 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 unacolocación 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 información asociada a cada uno de los pines es la siguiente:
  39. 39. El chip MAX 232Conexion MAX Y PIC PIC
  40. 40. 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 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 recepciónde datos o trasmisión.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 esestándar es preciso poner las directivas FIXED_IO o FAST_IO delante de #USE RS232Contiene más opciones de configuración:
  41. 41. Se muestra el programa que contiene el PIC.Para hacer una comunicación virtual entre el prorama proteus y hyperterminal se debe deusar 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
  42. 42. Ahora si, pasemos al Hyperterminal, lo abrimos y le ponemos nombre a la conexión: Después conectamos en el COM1Después solo checamos que esten bien los baudios, que sean igual al que hallamos puesto en nuestro programa
  43. 43. 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.
  44. 44. 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 lasiguiente manera: SENSOR1 SENSOR2 SENSOR3 SENSOR4 VALOR VALOR VALOR VALORY haga una grafica en EXCEL.
  45. 45. 2.0 Matrix de LEDEn 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 loque se nos ocurra. No solo se trata de un proyecto más que interesante para llevarlo acabo como hobbysta, sino que puede resultar interesante como un productocomercializable. Es que estas matrices, que en algunos países se las conoce como “cartelde LEDs” o “Publik”, son un recurso muy frecuentemente utilizado con finespublicitarios o informativos. FILA COLUMNA¿Como funciona?Como dijimos antes, la pantalla está formada por una serie de filas y columnas. Laintersección entre ambas contiene un LED. Para que este encienda, tiene que recibirsimultáneamente un “0” en la fila, y un “1” en la columna. Cuando se dan estascondiciones, la electrónica de la placa se encarga del encendido del LED en cuestión.
  46. 46. Por ejemplo: 0 0 1 1 1 1 0 0 1 1 0 0 0 0 1 1Se nota que solo prenden los led que se intersectacon con 1 a 0, mientras cuando seintersectan 0 y 1 no prenden por la polaridad del diodo. 1 0Hay una técnica para mostrar figuras o letras, sin necesidad de estar de tener muchoscircuitos, 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
  47. 47. 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 seusara en nuestro programita con la ayuda del circuito 74HC164.
  48. 48. DATA = Podria ser 0 o un 1 depende del dato a enviarDATO = El pin que se va usar para llevar acabo esta acción definida por el usuarioCLOCK = Es el que te desplaza al DATA, el pin puede ser cualquiera, solo hay quedefinirla antes.Circuito 74HC164Este circuito se encarga de mandar a todas las columnas el dato necesario, y lo recorrecada vez que se da un pulso de reloj.
  49. 49. La letra “A” antes vista se tuvo que dibujar primero, y sacar los valores correspondientesa cada fila. 0xFC, 0xFE, 0x1B ,0x19, 0x1B, 0xFE, 0xFC, 0x00Se 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
  50. 50. Es el máximo decolumnas a limpiar. Esta función se vera mas a adelante
  51. 51. La simulación es la siguiente Por cada 8 columnas se debe de poner otro 74HC164.
  52. 52. 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.
  53. 53. Máximo decolumnas
  54. 54. Aun no se usa esta funciónY obtenemos:
  55. 55. 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.
  56. 56. 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 entendimientoSe agrega estosparámetros para queespere el momento,Para resetear el dato Se observa que hemosEn 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
  57. 57. 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 simulación nose apreciaría correctamente. Pero en la realidad al poner ese espacio se notara nítidamentebien.
  58. 58. 2.1 Controlador de un Motor CDEn 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 quehacen 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 eleje de salida será lo único que gire.Para cambiar la dirección de giro en un motor de Corriente Continua tan solo tenemosque invertir la polaridad de la alimentación del motor.Para modificar su velocidad podemos variar su tensión de alimentación con lo que elmotor perderá velocidad, pero también 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 según el motor utilizado.¿Con que podemos cambiar el giro del Moto?Con Control de dirección por medio del Circuito Integrado L293B
  59. 59. Cada canal o driver es controlado por medio de una señal de control compatible TTL (nosuperior a 7V) y los canales se habilitan de dos en dos por medio de las señales 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 habilitación "EN" del driver, lasalida de este "OUT" pasa de alta impedancia al mismo nivel que se encuentre la entradadel driver "IN" pero amplificado en tensión y en corriente, siendo esta de 1A máximo. Latensión de alimentación 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 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 controlunidireccional con 4 motores, a continuación 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".
  60. 60. 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 tensión de alimentación 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 parapermitir controlarlo tanto hacia delante como hacia atrás.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 dealimentació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 nivelalto "1" y "B" a nivel bajo "0" y para hacer girar el motor a la izquierda tendremos queinvertir las señales 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 corrientesinversas.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í.
  61. 61. Se da el programa para hacer lo antes dicho.Cada vez que seresiva un datosalta a estafunction deinterrupcion.
  62. 62. Se da el circuito correspondiente.Si se desea hacer fisicamente, solo recuerde que se debe de usar el MAX232Vamos hacer un simple seguidor de Linea.Usaremos el sensor CYN70Para detectar lo blanco o negro de la línea a seguir, usaremos también los comparadoresinternos que contiene el Micro, para comparar la señal obtenida de los CYN70.También necesitaremos 2 potenciómetros de 100kohm
  63. 63. 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 añadido un pequeña memoriapara cuando se de la casualidad que se salga de la línea, este empiece a girar al ultimomovimiento 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 ala Izquierda del Robot, mientras que el otro debe de estar a la derecha. (Los dos bienjuntos) Este a la derecha Motor debe de estar a la izquierda Motor debe de estar a la derehca Este a la izquierda
  64. 64. He aquí el programa:
  65. 65. Vemos como quedo nuestro robot.
  66. 66. 2.2 Temperatura y Display de 7 segmentosComo 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 latemperatura. Con el uso de la interrupción por timer0, se sensara la temperatura, y elvalor 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 2mSsuficiente para poder mostrarse a una intensidad que se vea.
  67. 67. El programa que contiene el PIC;
  68. 68. Nota: El display es ánodo común, 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 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.
  69. 69. HECHO EN MEXICO V1.4 03/01/2010 10:36:52“La mejor manera de aprender es leer, y no COPIAR Y PEGAR”

×