2010
MICROCONTROLADORES Y SU APLICACIÓN EN ROBÓTICA
TEC NO NOL LOGÍA IN INDU DUS STRIA IAL L MIC ROC ONTROLADO MIC DOR RES Y SUS APLIC ICA AC IO IONE NES S EN ROBÓTIC ICA A LADO IZQUIERDO DEL MICROBOT
LADO DERECHO DEL MICROBOT
PARALLAX CONTINOUSROTATION www.parallax.com
Vdd = 5V
CONTROL
GND +5V
Vss = 0 V 20 ms 1,7 ms GIRO TRIGONOMÉTRICO A VELOCIDAD MÁXIMA
© .Garri ós DPTO. DE TECNOLOGÍA © J.Garrigós
I.E.S. ANDRÉS DE VANDELVIRA
Pag. 0
MICROCONTROLADORES Y SU APLICACIÓN EN ROBÓTICA
ÍNDICE. ÍNDICE.___________ ÍNDICE. ______________________ ______________________ ______________________ ______________________ _________________ ______ 0 ÍNDICE.___________ ÍNDICE. ______________________ ______________________ ______________________ ______________________ _________________ ______ 1 1. INTRODUCCIÓ INTRODUCCIÓN N A LA NOCIÓN NOCIÓN DE MICROCONTROLA MICROCONTROLADOR._____ DOR._________ _______ ___ 3 2. ARQUITECTURA INTERNA INTERNA DE LOS MICROCONTROLADORES MICROCONTROLADORES PIC. ____ 4 3. PRINCIPALES CARACTERÍSITICAS CARACTERÍSITICAS DEL MÓDULO MÓDULO OEM BS2_IC Y EL PIC16C57______________________________ PIC16C57___________________ ______________________ ______________________ ___________________ ________ 6 4. INTRODUCCIÓN AL LENGUAJE LENGUAJE PBASIC.__________________________ PBASIC._____________________________ ___ 8 4.1 LOS LENGUAJES LENGUAJES UTILIZADOS UTILIZADOS POR LOS LOS MICROCONTROL MICROCONTROLADORES ADORES _____ _____ 8 4.2. LOS MODULOS BASIC STAMP DE PARALLAX __________________________ 9 4.3. EDITOR PBASIC ____________________________ _____________________________________________________ _________________________ 11 4.4. OPERACION OPERACIONES ES ARITMÉTICAS ARITMÉTICAS Y LÓGICAS EN PBASIC PBASIC __________ _______________ _______ 12 4.4.1. PROGRAMAS PROGRAMAS DE EJEMPLO CON OPERACIONES OPERACIONES MATEMÁTICAS MATEMÁTICAS _____________13 _____________ 13
4.5. ORGANIZACIÓN DE LA MEMORIA RAM DE DATOS DEL BS2___________ 16 4.6. INSTRUCCIONES PBASIC _____________________________ ____________________________________________ _______________ 17 4.6.1. INSTRUCCIONE INSTRUCCIONESS DE ENTRADA/S ENTRADA/SALIDA ALIDA DIGITALES DIGITALES ______________ ____________________ __________17 ____17 4.6.2. INSTRUCCIONES PARA BUCLES REPETITIVOS _____________________________ 17 4.6.3. INSTRUCCIO INSTRUCCIONES NES DE SALTO ______________ _____________________ ______________ ______________ ______________ ___________18 ____18 4.6.4 .INSTRUCCIONES NUMÉRICAS ____________________________________ ____________________________________________ ________18 18 4.6.5. INSTRUCCIONES DE E/S SERIE ASÍNCRONA________________________________18 4.6.6. INSTRUCCIONES DE E/S SERIE SERIE SÍNCRONA__________________________ SÍNCRONA_________________________________ _______18 18 4.6.7. INSTRUCCIONE INSTRUCCIONESS DE E/S ANALÓGICA ANALÓGICA ______________ _____________________ ______________ _______________ _________18 _18 4.6.8. INSTRUCCIONES DE CONTROL DE TIEMPO ________________________________ 18 4.6.11. INSTRUCCIONES INSTRUCCIONES DE ACCESO ACCESO A LA EEPROM EEPROM ______________________________ 18 4.6.12. INSTRUCCIONES DE DEPURACIÓN DEL PROGRAMA_______________________18
5. PRACTICA 1: CONTROLANDO CONTROLANDO UN LED Y UN UN ZUMBADOR. ____________ ____________ 19 6. VARIABLES EN PBASIC. _____________________ ________________________________ ______________________ ___________ 20 6.1. VARIABLES VARIABLES DE NOMBRES FIJOS EN PBASIC. __________ _______________ __________ __________ _____ 20 6.2. DECLARACIÓN DECLARACIÓN DE VARIABLES VARIABLES DEL BS2 __________ _______________ __________ __________ _________ ____ 20 6.3. DECLARACIÓN DE ARRAYS DE VARIABLES (Matrices)_________________ 22 6.4. MODIFICADORES MODIFICADORES (ALIAS) DE LAS VARIABLES. __________ _______________ __________ ________ ___ 23
7. CONSTANT CONSTANTES ES EN PBASIC PBASIC ________ ____________ ________ ________ ________ ________ ________ ________ ________ ______ 24 7.1 DECLARACIÓN DE CONSTANTES EN PBASIC__________________________ 24
8. PRACTIC PRACTICA2: A2: INTERMI INTERMITENC TENCIA IA DE UN DIODO DIODO LED. LED. ________ ____________ ________ ______ __ 25 9. DIRECCIONAMIENTO DIGITAL DIGITAL DE ENTRADAS SALIDAS SALIDAS CONSIDERANDO EL MAPA DE MEMORIA._________________ MEMORIA.____________________________ ______________________ _________________ ______ 26 10. PRACTICA 3: CONFIGURACIÓN DE ENTRADAS-SALIDAS Y SALTO CONDICIONAL. ______________________ _________________________________ ______________________ ____________________ _________ 27 11. PRACTICA 4: PROGRAMACION DE ECUACIONES LÓGICAS CON OPERADORES OPERADORES BOLEANOS. BOLEANOS. ________ ____________ ________ ________ ________ ________ ________ ________ ________ ______ __ 28 12. PRACTICA 5: CUENTA ATRÁS MEDIANTE DISPLAY DE 7 SEGMENTOS.33 DPTO. DE TECNOLOGÍA © J.Garrigós
I.E.S. ANDRÉS DE VANDELVIRA
Pag. 1
MICROCONTROLADORES Y SU APLICACIÓN EN ROBÓTICA
13. PRACT PRACTICA ICA 6: MANEJO MANEJO DE ARRAYS: ARRAYS: JUEGO JUEGO DE LUCES LUCES.. ________ ____________ ______ 14. PRACTIC PRACTICA A 7: CONTROL CONTROL DE DE MOTORES MOTORES DE CC CC POR PWM. PWM. ________ ____________ ____ 15. INSTRUCCIO INSTRUCCIONES NES DEBUG TERMINA TERMINAL L Y DO… LOOP ________ ____________ ________ ______ 16. PRÁCTIC PRÁCTICA A 8: CONTROL CONTROL DE DE SENSORES SENSORES DE DE CONTACTO. CONTACTO. ________ ____________ ______ 17. INSTRUCCIÓN INSTRUCCIÓN DTMFOUT DTMFOUT ________ ____________ ________ ________ ________ ________ ________ ________ ________ ____
36 39 43 45 48
17.1. FUNCIONAM FUNCIONAMIENTO IENTO TÉCNICO DEL DTMFOUT DTMFOUT __________ _______________ __________ ________ ___ 49
18. OPERADOR OPERADORADORE ADORES S MATEMÁTICO MATEMÁTICOS S NCD Y DCD ________ ____________ ________ _______ ___ 51 18.1. OPERADOR OPERADOR MATEMÁTICO MATEMÁTICO NCD __________ _______________ __________ __________ __________ __________ _______ 51 18.2. OPERADOR OPERADOR MATEMÁTICO MATEMÁTICO DCD __________ _______________ __________ __________ __________ __________ _______ 51
19. PRÁCTICA PRÁCTICA 9: JUEGO DE LUCES LUCES DE GUSANO ________ ____________ ________ ________ _______ ___ 53 20. COMANDO BRANCH BRANCH ______________________ _________________________________ _____________________ ____________ __ 54 21. PRÁCTICA 10: GOBERNANDO GOBERNANDO EL TELÉFONO TELÉFONO _____________________ _______________________ 55 22. SERVOMOTORES ______________________ _________________________________ ______________________ _______________ ____ 58 23. COMANDO PULSOUT PULSOUT ______________________ _________________________________ ______________________ ___________ 60 24. PRÁCTICA 11: POSICIONAMIENTO POSICIONAMIENTO DE UN SERVOMOTOR. SERVOMOTOR. __________ 61 25. PRÁCTICA 12: CONTROL CONTROL DE UN SERVOMOTOR SERVOMOTOR DE ROTACIÓN ROTACIÓN CONTINUA _______________________ __________________________________ ______________________ ______________________ _____________ 63 26. EMISIÓN Y DETECCIÓN DETECCIÓN DE ONDAS ELECTROMAGNÉTICAS ELECTROMAGNÉTICAS INFRAROJAS ______________________ _________________________________ ______________________ ______________________ ___________ 66 27. COMANDO FREQOUT: FREQOUT: NAVEGACIÓN POR IR________________ IR_______________________ _______ 68 28. MICROBOT SEGUIDOR SEGUIDOR DE LÍNEA NEGRA. ______________________ _________________________ ___ 71
DPTO. DE TECNOLOGÍA © J.Garrigós
I.E.S. ANDRÉS DE VANDELVIRA
Pag. 2
MICROCONTROLADORES Y SU APLICACIÓN EN ROBÓTICA
1. INTRODUCCIÓN A LA NOCIÓN DE MICROCONTROLADOR. En los cursos anteriores se ha estudiado en varias ocasiones, con diferente nivel de profundización, la arquitectura del PC. A este respecto, se indicaba que un ordenador era una máquina, eminentemente electrónica, que era capaz de leer, interpretar y realizar operaciones con un conjunto de instrucciones y datos lógicos en forma de ceros y unos. Aunque es sabido que la estructura interna del PC es mucho más compleja, podemos considerar que está formada por tres grandes bloques: 1. Microprocesador o CPU (Unidad Central de Proceso). 2. Memorias. 3 . E n t r a d a s / Sa l i d a s ( E / S ) . Los distintos elementos del PC están conectados a través de los BUSES y regulados por los controladores del tráfico de datos ( Chipset, tecnología Hypertransport, etc..).
MEMORIAS s e s u B
CPU
E/S
Una vez definidos de forma simplista los bloques de un PC, podemos afrontar el concepto de microcontrolador como un circuito integrado que contiene un ordenador completo en su interior, pero con características simplificadas respecto a él. En este sentido, las prestaciones de un microcontrolador son mucho más limitadas y reducidas que las de un PC, pero también es muchísimo más barato y pequeño, lo que le hace apropiado para ser utilizado en multitud de aplicaciones. Los microcontroladores son dispositivos que admiten un conjunto de instrucciones sencillo y poco numeroso. Su memoria tiene poca capacidad lo que condiciona el tamaño del programa y de los datos que se pueden manejar con estos dispositivos. Ahora bien, dado que su utilización se aplica a elementos concretos y delimitados se les suele añadir recursos adicionales que les permitan la implementación en distintos proyectos. ¿Dónde se emplean los microcontroladores?; pues, en todos lados, mira en tu bolsillo, si llevas un teléfono móvil en el habrá dos o tres microcontroladores, en un reproductor MP3, en un microondas, en un mando a distancia, en el televisor, en el coche, en la consola, en una
DPTO. DE TECNOLOGÍA © J.Garrigós
I.E.S. ANDRÉS DE VANDELVIRA
Pag. 3
MICROCONTROLADORES Y SU APLICACIÓN EN ROBÓTICA máquina expendedora, en el ratón del PC, en la impresora, en un cartel luminoso, en cualquier robot, etc, etc…. Para darnos una idea de la importancia de los microcontroladores, basta fijarse en las ventas de estos dispositivos a nivel mundial de la empresa Microchip, pasando de un consumo de 7 millones de unidades en 1990 a más de 500 millones en 2002, el la actualidad esta cifra crece exponencialmente. El principal fabricante de microcontroladores a nivel mundial es la empresa Motorota, aunque en los últimos años ha subido mucho la empresa Microchip a través de sus dispositivos PIC (Circuito Integrado Programable). Aunque existen microcontroladores de 4, 8, 16 y 32 bits los más utilizados a nivel de usuario son los de 8 bits. Se comercializan cuatro series de microcontrolad ores PIC de 8 bits, entre los que existe más de un centenar de modelos distintos. SERIE BÁSICA: Familia PIC16C5x, soporta un conjunto de 33 instrucciones de 12 bits cada una. Son sencillos y muy baratos. SERIE MEDIA: Familia PIC16Cxxx, cuentan con 35 instrucci ones de 14 bits. Es la gama más ampliamente comercializada y tiene modelos con encapsulados que van de las 8 a las 68 patillas. Dentro del propio chip se suelen implementar circuitos auxiliares para adaptar su uso a aplicaciones concretas. GAMA ALTA: Familia PIC17Cxxx, que soportan 58 instrucciones de 16 bits y están destinados a aplicaciones con requerimientos técnicos elevados. GAMA MEJORADA: Pueden funcionar a frecuencias de 40 MHz y disponen de 77 instrucciones de 16 bits. Estos modelos se emplean en proyectos muy concretos.
2. ARQUITECTURA INTERNA DE LOS MICROCONTROLADORES PIC. La arquitectura fundamentales:
de
un
PIC
se
estructura
en
4
bloques
Procesador Memoria de programa Memoria de datos Recursos auxiliares
Si en la memoria RAM de un ordenador contiene datos e instrucciones, en los PIC existen dos memorias separadas, una que únicamente contiene instrucciones y la otra que sólo contiene datos. Este tipo de arquitectura se denomina Harvard y se caracteriza por permitir un acceso simultáneo a los datos y a las instrucciones, incrementando así el rendimiento del PIC.
DPTO. DE TECNOLOGÍA © J.Garrigós
I.E.S. ANDRÉS DE VANDELVIRA
Pag. 4
MICROCONTROLADORES Y SU APLICACIÓN EN ROBÓTICA
MEMORIA DE PROGRAMA
PROCESADOR
MEMORIA DE DATOS
Además de las dos memorias independientes, el microcontrolador, dispone de módulos de entrada/salida que no se han dibujado en la figura anterior. La memoria de programa contiene las instrucciones que van a controlar el proceso a que se destina el microcontrolador. Esta memoria admite diferentes tipos de tecnología según las características de la aplicación. Si se van a necesitar gran número de microcontroladores idénticos con un mismo programa, se suelen utilizar memorias ROM (memoria de sólo lectura) en la que el fabricante graba el programa de usuario, obteniéndose elementos con gran nivel de seguridad y a precios muy competitivos. Si la aplicación del microcontrolador está destinada a un uso menos generalizado, los PIC contienen una memoria grabable y borrable por el usuario a través de una grabadora con la ayuda de un PC y el software adecuado. Hay memorias de tipo EPROM, son grabables desde un PC, pero para borrarlas hay que someterlas a luz ultravioleta durante un cierto tiempo a través de una ventana de cuarzo existente en el encapsulado del microcontrolador. Las más ampliamente utilizadas son las EEPROM y las FLASH que se pueden grabar y borrar eléctricamente desde un PC. Hay versiones, denominadas OTP, que son muy económicas que son grabables por el usuario una sola vez. La memoria de datos debe ser leíble y escribible, por esto se usan memorias de tipo RAM, que tienen el inconveniente de perder la información que contienen cuando se interrumpe la alimentación eléctrica. Por tal motivo, se suele complementar la memoria RAM con un pequeño espacio de memoria EEPROM leíble y escribible, pero no volátil. Un inconveniente de las memorias EEPROM es la lentitud de acceso. En cuanto a los recursos auxiliares que opcional y optativamente se implementan en el encapsulado del microcontrolador existe un abanico de posibilidades entre las que destacan las siguientes: Conversor analógico-digital (ADC) y digital-analógico (DAC). Temporizadores Puertos de comunicación serie y paralelo. Comparadores, capturadotes de señal y módulos PWM (Modulación de Ancho de Pulsos)
DPTO. DE TECNOLOGÍA © J.Garrigós
I.E.S. ANDRÉS DE VANDELVIRA
Pag. 5
MICROCONTROLADORES Y SU APLICACIÓN EN ROBÓTICA
3. PRINCIPALES CARACTERÍSITICAS DEL MÓDULO OEM BS2_IC Y EL PIC16C57 El PIC16C57 es el modelo de microcontrolador de gama básica de los módulos PARALLAX destinados a prácticas y experimentación con el que se trabajara durante este curso. Uno de esos módulos es el OEM BS2-IC que se muestra en la figura donde el PIC es el chip de mayor tamaño.
Las principales características del módulo BS2-IC basado en el PIC16C57 son:
Microcontrolador...............................................PIC16C 57 V e l o c i d a d d e e j e c u c i ó n d e l p r o g r am a . . . . . . . . . . . . . . . . . . . . 4 0 0 0 i n s t r u c c i o n e s / s e gu n d o V e l o c i d a d d e l p r o c e s a do r . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2 0 M H z C a p a c i d a d d e l a m e m o r i a d e p r o g r a ma E E P R O M . . . . . . 2 K B L o n g i t u d má x i m a d e l p r o g r a m a . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5 0 0 l í n e a s P B A S I C Capacidad de la memoria RAM de datos.................32Bytes (6 para E/S y variables N º d e p a t i t a s d e E / S . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1 6 ( P 0 a P 1 5 ) C o n s u m o de c o r r i e n t e . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 8 m A e n m o d o e j e c u c i ó n 100 A en modo sleep C o r r i e n t e p o r E / S s u m i n i s tr a d a / a b s o r b i da . . . . . . . . . . . . . . 2 0 m A / 2 5 m A N º d e i n s t r u c c i o n e s P B A S I C . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3 6 I n t e r f a z c o n P C . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . P u e r t o s e r i e ( 9 6 0 0 b a u d io s ) Programa editor.................................................STAMP2 .EXE (DOS) STAMPW.EXE (WINDOWS)
26
para
h t t p : / / w w w . m s e b i l b ao . c o m / n o t a s/ s o f t w a r e / E d i t or B A S I C S t a m p V 2 _ 2 m u l t i l e n g u a j e . e x e
Esquema simplificado del módulo OEM BS2
DPTO. DE TECNOLOGÍA © J.Garrigós
I.E.S. ANDRÉS DE VANDELVIRA
Pag. 6
MICROCONTROLADORES Y SU APLICACIÓN EN ROBÓTICA Esquema de conexionado
del módulo OEM BS2-IC
El modo de funcionamiento de estos módulos está basado en depositar el programa, confeccionado en PBASIC y editado en el PC, en una memoria EEPROM, que puede leerse y borrarse para volver a escribirse un millón de veces. Después, en el interior del módulo y de forma automática, se va pasando el programa instrucción a instrucción a un microcontrolador PIC de Microchip en cuya memoria está grabado un programa I n t é r p r e t e que traduce cada instrucción PBASIC en las instrucciones máquina correspondientes para proceder a su ejecución. Los dos elementos principales del módulo BASIC Stamp son el microcontrolador grabado con el Intérprete PBASIC y la EEPROM que contiene el programa editado en el PC, pero también existen otros elementos auxiliares para la estabilización de la tensión, el Reset, el oscilador de la frecuencia En lo que respecta al chip del microcontrolador, las patitas OSC1 y OSC2 se emplean para controlar la frecuencia de trabajo del procesador. Entre ellas se suele colocar un cristal de cuarzo o un resonador cerámico (se puede observar, en la figura del chip, en la parte superior izquierda en color anaranjado) con la frecuencia de funcionamiento 20 MHz. La patilla MCLR#/Vpp tiene dos funciones. Observe que el símbolo # significa que su estado activo es el negado, por lo cual cuando pasa a nivel bajo se produce un RESET o reinicialización del programa. La otra función de esta patita representada por Vpp sirve para introducir por ella, cuando se graba el programa, la tensión especial que se necesita y que es del orden de 13,8 VDC. La patilla RTCC se usa para aplicar en ella una
DPTO. DE TECNOLOGÍA © J.Garrigós
I.E.S. ANDRÉS DE VANDELVIRA
Pag. 7
MICROCONTROLADORES Y SU APLICACIÓN EN ROBÓTICA frecuencia externa de funcionamiento de un temporizador que posee el PIC. Cuando no se usa es temporizador conviene conectar esta patita a positivo para reducir el consumo. Las restantes patillas del chip son líneas de entrada y salida por las que el microcontrolador recibe o envía la información correspondiente al procesamiento del programa. Las conexiones RA0-RA3 son 4 patitas bidireccionales, de nivel TTL de la puerta A para la conexión de periféricos externos. RB0-RB7 son 8 líneas bidireccionales TTL de la puerta B y RC0-RC7 son 8 líneas bidireccionaes TTL, pertenecientes a la puerta C.
4. INTRODUCCIÓN AL LENGUAJE PBASIC. 4.1 LOS LENGUAJES UTILIZADOS POR LOS MICROCONTROLADORES .
Los microcontroladores se usan fundamentalmente tres lenguajes: Lenguaje Ensamblador, de bajo nivel. Lenguaje C, de alto nivel. Lenguaje “BASIC”, de alto nivel.
El lenguaje Ensamblador se dice que es de bajo nivel porque sus instrucciones son exactamente las que el procesador sabe interpretar y ejecutar. En realidad, el computador digital sólo acepta instrucciones en código binario y el Ensamblador facilita su escritura al programador permitiendo expresarlas mediante nemónicos, que con tres o cuatro letras significativas expresan, en inglés, la operación que conlleva la instrucción. Por ejemplo una instrucción que “mueve” un dato de un sitio (A) a otro (B), en Ensamblador se escribe MOV A,B. El problema surge en el Ensamblador por la poca potencia de las instrucciones que es capaz de ejecutar el procesador. Normalmente los correspondientes a los microcontroladores de 8 bits, que usaremos, saben sumar, restar, hacer operaciones lógicas AND, OR, XOR, saben rotar un dato de 8 bits, moverlo de un sitio a otro y muy poquito más. Si deseamos hacer una multiplicación hay que confeccionar un programa que para conseguirlo repita las sumas las veces necesarias. Es un lenguaje de “bajo nivel”. El programa Ensamblador lo único que hace es traducir los nemónicos con los que se escriben las instrucciones a código binario para q u e e l p r o c e s a d o r s e a c a p a z d e i n t e r p r e t a r l a s y e j e c u t a r l as . Desarrollar programas en lenguaje Ensamblador exige un conocimiento profundo de la arquitectura interna del procesador lo que
DPTO. DE TECNOLOGÍA © J.Garrigós
I.E.S. ANDRÉS DE VANDELVIRA
Pag. 8
MICROCONTROLADORES Y SU APLICACIÓN EN ROBÓTICA supone una base muy sólida de conocimientos informáticos y electrónicos, y su nivel va mucho más allá de este curso. Los lenguajes de alto nivel tienen instrucciones más potentes: saben multiplicar, sacar la raíz cuadrada y realizar funciones y operaciones mucho más complicadas que las que pueden hacer las instrucciones de la máquina. Pero como la máquina es la misma, la realización de esas instrucciones se tiene que hacer con programas de instrucciones elementales. Cada instrucción de alto nivel se convierte en un pequeño programa de instrucciones de bajo nivel. Por eso para que el procesador pueda ejecutar las instrucciones de un lenguaje de alto nivel precisa otro programa que las descomponga en las instrucciones de bajo nivel correspondientes. A estos programas se llama c o m p i l a d o r e s . Los compiladores se encargan de traducir un programa confeccionado con instrucciones de alto nivel a otro equivalente con instrucciones de bajo nivel. Hay una variante de estos programas que reciben el nombre de i n t é r p r e t e s que realizan dicha traducción pero instrucción por instrucción, o sea, traducen una instrucción de alto nivel en las correspondientes de bajo nivel que ejecuta el procesador y a continuación pasan a la siguiente. Los compiladores traducen el programa completo El lenguaje C es de tipo profesional, muy completo y potente, pero su manejo requiere un sólida base en informática, y por supuesto, en la aplicación que nos ocupa será necesario un conocimiento a fondo de la arquitectura interna del microcontrolador. El lenguaje BASIC tiene potentes instrucciones que se escriben igual que se denominan en inglés y su manejo no requiere conocimientos de arquitectura de procesadores, de electrónica y casi tampoco de informática; es para todos. A título de ejemplo el siguiente programa calcula el área de un círculo 10 20 30 40
INPUT R LET S=3.14*R*R PRINT S END
‘Nos pide el valor del radio ‘Calcula el área ‘Nos muestra el valor del área calculada ‘Fin del programa
4.2. LOS MODULOS BASIC STAMP DE PARALL AX La empresa americana Parallax diseño y comercializó en 1992 el primer módulo BASIC-Stamp cuya originalidad y utilidad ha revolucionado el mundo del diseño de la electrónica programable basada en los microcontroladores.
DPTO. DE TECNOLOGÍA © J.Garrigós
I.E.S. ANDRÉS DE VANDELVIRA
Pag. 9
MICROCONTROLADORES Y SU APLICACIÓN EN ROBÓTICA Su gran aportación consiste en ofrecer un módulo con todo el hardware resuelto y listo para acoplarle los periféricos a controlar, y un software accesible para cualquier persona al estar basado en un lenguaje BASIC, denominado PBASIC, que une la sencillez del BASIC y su adaptación al microcontrolador que emplea. Estos dos fabulosos ingredientes los mezcla con una política comercial de completa información de sus productos y una gran generosidad en la creación y libre disposición de manuales, programas, aplicaciones, cursos, asistencia técnica y una red de distribuidores esparcida por todo el mundo. Basta pinchar o insertar el módulo BASIC Stamp en la tarjeta de aplicación que contiene los periféricos a controlar. Se conecta después al PC para editar el programa y volcarlo al PIC para poner en marcha el sistema. Luego se puede modificar el programa directamente sobre el prototipo para llevar a cabo cualquier cambio o mejora. El modo de funcionamiento de estos módulos está basado en depositar el programa, confeccionado en PBASIC y editado en el PC, en una memoria EEPROM, que puede leerse y borrarse para volver a escribirse un millón de veces. Después, en el interior del módulo y de
forma automática, se va pasando el programa instrucción a instrucción a un microcontrolador PIC de Microchip en cuya memoria está grabado un programa Intérprete que traduce cada instrucción PBASIC en las instrucciones máquina correspondientes y procede a su ejecución. Los
DPTO. DE TECNOLOGÍA © J.Garrigós
I.E.S. ANDRÉS DE VANDELVIRA
Pag. 10
MICROCONTROLADORES Y SU APLICACIÓN EN ROBÓTICA dos elementos principales del módulo BASIC Stamp son el microcontrolador grabado con el Intérprete PBASIC y la EEPROM que contiene el programa editado en el PC, pero también existen otros elementos auxiliares. La memoria EEPROM que utiliza el módulo OEMBS2_IC es la denominada 24LC16B, en la que se almacena el programa en PBASIC recibido desde el PC. Las características más importantes de esta memoria son: Capacidad: 2KB C i c l o s d e e s c r i t u r a / l e c t ur a : 1 m i l l ó n Velocidad de escritura: 10 ms Frecuencia de funcionamiento: 400 KHz Tensión de funcionamiento: de 2,5 a 5,5 VDC Las memorias EEPROM pueden ser leídas y escritas. No son volátiles, es decir, la información almacenada se mantiene aún después de desconectar la alimentación.
4.3. EDITOR PBASIC El editor PBASIC es el programa donde escribimos el conjunto de instrucciones para programar el módulo Basic Stamp. Es similar en apariencia a cualquier editor de texto del sistema operativo Windows. El editor contiene una serie de herramientas específicas como el identificador del módulo Basic Stamp, corrector ortográfico de sintaxis, mapa de memoria y ventana del depurador.
Editor PBASIC Stamp
DPTO. DE TECNOLOGÍA © J.Garrigós
I.E.S. ANDRÉS DE VANDELVIRA
Pag. 11
MICROCONTROLADORES Y SU APLICACIÓN EN ROBÓTICA El editor tiene la capacidad de abrir 16 ventanas simultáneamente. Las operaciones de copiar, pegar y cortar funcionan de la misma forma que en el sistema operativo Windows. Ventana modulo
del y
identificador
puerto
al
que
de está
conectado
M a p a d e l a m e m o r i a E E P R O M
4.4. OPERACIONES ARITMÉTICAS Y LÓGICAS EN PBASIC El lenguaje de programación PBASIC fue creado específicamente para programar los módulos BS2 de Parallax, aunque es un lenguaje muy parecido al BASIC es algo menos potente y tiene ciertas singularidades que habrá que tener en cuenta en la programación. PBASIC efectúa las operaciones matemáticas en el orden que se escriben de izquierda a derecha, sin seguir la prioridad adoptada universalmente en matemáticas. En este sentido, la suma y la resta no suponen problema alguno, pero cuando utilizamos la multiplicación y la división podemos encontrarnos resultados no deseados si consideramos las singularidades de este lenguaje de programación. Consideremos, como ejemplo, la expresión:
W 1 45 56 * 4 / 2 PBASIC resolvería la expresión de la siguiente forma:
45 56 101 101 * 4 404 404 / 2 202
DPTO. DE TECNOLOGÍA © J.Garrigós
I.E.S. ANDRÉS DE VANDELVIRA
Pag. 12
MICROCONTROLADORES Y SU APLICACIÓN EN ROBÓTICA A fin de resolver el inconveniente anterior se pueden utilizar paréntesis (un máximo de 8 por expresión) para que la operación se efectúe correctamente:
W 1 45
56 * 4 / 2
En este caso, el resultado sería:
56 * 4 224 224 / 2 112 112 45 157 Otro condicionante importante que se ha de tener en cuenta, es que PASIC no admite números fraccionarios por lo que, a título de ejemplo, 3,1459 se debe expresar como 22/7 . En PBASIC todas las operaciones matemáticas se realizan con cantidades positivas y con números enteros de 0 a 65535 (2 16 dígitos binarios). Si se utilizan cantidades negativas, en ese caso, los valores máximos y mínimos estarían comprendidos entre +32767 y -32767 En la siguiente tabla se indican los símbolos utilizados para las diversas operaciones posibles en PBASIC SÍMBOLO OPERACIÓN Suma + Resta Multiplicación * Multiplicación de doble precisión (devuelve mas de 16 bits) ** División / División (devuelve el resto) / / Limita el valor más bajo MIN Limita el valor más alto MAX Retorna el dígito especificado de un número DIGIT Desplazamiento de bits a la izquierda << Desplazamiento de bits a la derecha >> Inverso de los bits del número especificado REV Operador lógico AND & Operador lógico OR | Operador lógico XOR ^
4.4.1. PROGRAMAS DE EJEMPLO CON OPERACIONES MATEMÁTICAS Antes de abordar los programas de ejemplo explicaremos la instrucción DEBUG: Sin t axis: DEBUG Dato1 {, Dato2…} Muestra los datos especificados sobre la pantalla del PC. El texto o números pueden estar en varios formatos (Binario, Decimal, Hexadecimal o ASCIL) y se usa como forma de depuración de programa. Los Datos pueden ser variable/constante/expresión que especifica la información a mostrar. Los datos pueden ser caracteres ASCIl (texto o
DPTO. DE TECNOLOGÍA © J.Garrigós
I.E.S. ANDRÉS DE VANDELVIRA
Pag. 13
MICROCONTROLADORES Y SU APLICACIÓN EN ROBÓTICA caracteres de control), números decimales (0-65535), hexadecimales ($0000-$FFFF) o números binarios %1111 111111111111). Ejemplo: W1 = 68 DEBUG W1 ‘Muestra la letra D, cuyo código ASCIL es 68 DEBUG ?W1 ‘Muestra el valor de la variable W1=68 DEBUG “Fin” ‘Muestra el mensaje Fin
números (hasta
E j e m p l o s c o n l a o p e r a c i ó n s u m a ( +) . Suma variables y constantes, devuelve un resultado de 16 bits, trabaja con cantidades enteras en un rango de 0 a 65535, si el resultado de la suma es mayor de 65535, se produce un desbordamiento y el resultado será la diferencia del desborde . W1= 34 W2= 12 W3= W1 + W2 DEBUG ?W3 El resultado mostrado será W3 = 46
W1= 65535 W2= 12 W3= W1 + W2 DEBUG ?W3 El resultado mostrado será W3 = 11 pues se ha desbordado el valor de 65535.
E j e m p l o s c o n l a o p e r a c i ó n r e s t a ( -) . Resta variables y constantes, devuelve el resultado de 16 bit, trabaja con cantidades enteras en un rango 0 -65535, si se desea considerar el signo se debe anteponer la expresión SDEC. W1= 199 W2= 100 W3= W1 + W2 W4= W2 –W1 DEBUG ?W3 DEBUG ?W4 El resultado mostrado será: W3 = 299 W4=65437
W1= 199 W2= 100 W3= W1 + W2 W4= W2 –W1 DEBUG SDEC ?W3 DEBUG SDEC ?W4 El resultado mostrado será: W3 = 299 W4= -99
DPTO. DE TECNOLOGÍA © J.Garrigós
I.E.S. ANDRÉS DE VANDELVIRA
Pag. 14
MICROCONTROLADORES Y SU APLICACIÓN EN ROBÓTICA E j e m p l o c o n l a o p e r ac i ó n d i v i s i ó n ( / ) y r e s t o ( / / ) Divide variables y constantes devolviendo la parte entera de la división con el resultado de 16 bits. Trabaja con cantidades enteras en un rango de 0 a 65535, debiendo ser las cantidades positivas. W1= 50 W2= 3 W3= W1 / W2 W4= W1 //W2 DEBUG ?W3 DEBUG ?W4 El resultado mostrado será: W3 = 16 W4=2
E j em p l o s c o n l a o p e r ac i ó n m u l t i p l i c a c i ó n ( *) Multiplica variables y constantes, devolviendo resultados de hasta 16 bits. Permite utilizar cantidades enteras en un rango de 0 a 65535, las cantidades pueden ser positivas y negativas. Si el resultado excede de 65535, el exceso se pierde, la multiplicación mantiene la regla de los signos. Si se trabaja con cantidades negativas los resultados máximos y mínimos tendrían un rango desde -32767 a +32767 W1= 175 W2= 2 W3= 400 W4= -5 W5= W1 * W2 W6= W1 * W3 W7= W3 * W4 DEBUG ?W5 DEBUG ?W6 DEBUG SDEC?W7 El resultado mostrado será: W5 = 350, W6=4464 (175*400=70000; 70000-65536=4464) y W7=-2000
E j e m p l o d e m u l t i p l i c a c i ó n d o b l e ( ** ) Como se ha indicado el valor de una multiplicación no puede exceder del valor 65535, como valor decimal máximo. La multiplicación doble nos permite solucionar este inconveniente pudiendo calcular valores de hasta 2 32 bits ( de 0 a 4.292.967.295). Para realizar esta operación hay que tener en cuenta, que la multiplicación doble realmente calcula los 16 bits superiores de los 32 bits posibles, los 16 bits inferiores se obtienen con la multiplicación normal. En otras palabras, la multiplicación doble nos dice cuantas veces se desbordaron los 16 bits superiores. W1= 2560 W2= 27 W3= W1 * W2 DEBUG DEC5 ?W3, CR W4= W1 ** W2 DEBUG DEC5 ?W4 El resultado mostrado será: W3 = 03584 W4=00001
DPTO. DE TECNOLOGÍA © J.Garrigós
I.E.S. ANDRÉS DE VANDELVIRA
Pag. 15
MICROCONTROLADORES Y SU APLICACIÓN EN ROBÓTICA E n e l p r o g r a m a a n t e r i o r D E C 5 i n d i c a q u e m u e s t r e e l r e s u l t a d o decimal en formato de 5 dígitos, en tanto que, CR implica un retorno de carro para que el resultado de W4 lo muestre en un renglón distinto que W3. Ejemplo de multiplicación de fracciones de 8 bits (de 0 a 256) (*/) Qué sucede si queremos multiplicar alguna fracción por un número entero, pues PBASIC sólo maneja cantidades enteras, aunque es posible manejar fracciones para obtener resultados enteros. Tomemos como ejemplo que deseamos multiplicar 100 *3,5 cuyo resultado es 350 y, por tanto, entero. Sabemos que 3,5 es el resultado de la división de dos enteros (7/2). ¿Qué resultado se obtiene con el siguiente programa? W1= 100 * (7/2) DEBUG DEC5 ?W1
El resultado obtenido sería 300 pues el resultado de dividir 7/2=3, que multiplicado por 100, da 00300 Para resolver el problema el programa debiera estar escrito del siguiente modo: PBASIC ejecuta: 100*7 = 700; 700/3=350, recuerde que se utiliza la regla de las operaciones aritméticas de izquierda a derecha W1= 100 * 7/2 DEBUG DEC5 ?W1 El resultado mostrado será: W1 = 00350
4.5. ORGANIZACIÓN DE LA MEMORIA RAM DE DATOS DEL BS2 La siguiente tabla muestra los nombres de los registros de entrada, salida y direccionamiento del puerto del BS2. El lenguaje PBASIC reserva las primeras posiciones de la memoria de datos del procesador. Las tres primeras palabras se reservan para pines de entrada INS, pines de salida O U T S y b i t s d e d i r e c c i o n am i e n t o d e l o s p i n e s D I R , q u e s i s e l e s c a r g a c o n 0 (cero) asignan el pin correspondiente como entrada y, si se cargan con 1, como salida. Las 13 siguientes palabras de (W0-W12) que pueden utilizarse en tamaño Byte (B0-B25) están disponibles para guardar variables y datos del usuario en los programas. El módulo BS2-IC tiene 16 pines de entrada y salida disponibles para el usuario en donde se pueden colocar los periféricos a controlar. Para configurar a los 16 pines como salida hay que escribir en el programa: DIRS=%1111111111111111
DPTO. DE TECNOLOGÍA © J.Garrigós
I.E.S. ANDRÉS DE VANDELVIRA
Pag. 16
MICROCONTROLADORES Y SU APLICACIÓN EN ROBÓTICA
4.6. INSTRUCCIONES PBASIC Se ofrece seguidamente un breve resumen de las instrucciones PBASIC para los lenguajes del interprete BS2-IC. Algunas de ellas se analizarán más en profundidad a medida que se monten las distintas prácticas. 4.6.1. INSTRUCCIONES DE ENTRADA/SALIDA DIGITALES
4.6.2. INSTRUCCIONES PARA BUCLES REPETITIVOS
DPTO. DE TECNOLOGÍA © J.Garrigós
I.E.S. ANDRÉS DE VANDELVIRA
Pag. 17
MICROCONTROLADORES Y SU APLICACIÓN EN ROBÓTICA 4.6.3. INSTRUCCIONES DE SALTO
4.6.4 .INSTRUCCIONES NUMÉRICAS
4.6.5. INSTRUCCIONES DE E/S SERIE ASÍNCRONA
4.6.6. INSTRUCCIONES DE E/S SERIE SÍNCRONA
4.6.7. INSTRUCCIONES DE E/S ANALÓGICA
4.6.8. INSTRUCCIONES DE CONTROL DE TIEMPO
4.6.9. INSTRUCCIONES DE CONTROL DE SONIDO
4 . 6 . 1 0 . I N S T R U C C I O N ES C O N T R O L D E E N E R G Í A
4.6.11. INSTRUCCIONES DE ACCESO A LA EEPROM
4.6.12. INSTRUCCIONES DE DEPURACIÓN DEL PROGRAMA
DPTO. DE TECNOLOGÍA © J.Garrigós
I.E.S. ANDRÉS DE VANDELVIRA
Pag. 18
MICROCONTROLADORES Y SU APLICACIÓN EN ROBÓTICA
5. PRACTICA 1: CONTROLANDO UN LED Y UN ZUMBADOR. En esta experiencia se trata de encender durante 2 segundos el diodo LED conectado en la patilla P0, mientras durante ese tiempo el zumbador está en silencio. Luego, durante 3 segundos, el zumbador produce un pitido mientras el LED permanece apagado. Además el programa debe visualizar en la pantalla del depurador el nombre del ejercicio “LUZ Y SONIDO”, así como el mensaje de “ILUMINA” mientras el LED está encendido y el mensaje “PITA” cuando suena el zumbador. El programa propuesto es:
DEBUG
“LUZ Y SONIDO”, CR
HIGH 0 LOW 15 PAUSE 2000 DEBUG “SUENA”, CR
‘Se muestra en la pantalla del PC el ‘texto LUZ y SONIDO ‘Se muestra en la pantalla del PC el ‘mensaje ILUMINA ‘Pone a uno lógico la patita 0 ‘Pone a cero lógico el pin 15 ‘Se produce una pausa de 2 seg. ‘Se muestra mensaje en el PC
LOW 0 HIGH 15 PAUSE 3000 GOTO INICIO
‘Pone a cero lógico el pin 0 ‘Pone a uno lógico el pin 1 ‘Se produce una pausa de 3 seg. ‘Salta a la etiqueta INICIO
INICIO: DEBUG “ILUMINA”, CR
Una vez editado el programa conecte el PC al módulo OEM BS2-IC que estará conexionado con los cables a la fuente y a los periféricos y conecte la energía al Universal Trainer. Ejecute el programa y si todo sale bien se enciende 2 segundos el LED y luego pita durante 3 segundos el zumbador. Además en la pantalla del depurador aparece el mensaje ILUMINA cuando está encendido el LED y el mensaje PITA cuando el zumbador suena. ESQUEMA ELÉCRICO Y DE CONEXIONADO
NOTA: Las resistencias del LED y ZUMBADOR están conectadas según se indica en el entrenador Universal Trainer
DPTO. DE TECNOLOGÍA © J.Garrigós
I.E.S. ANDRÉS DE VANDELVIRA
Pag. 19
MICROCONTROLADORES Y SU APLICACIÓN EN ROBÓTICA
6. VARIABLES EN PBASIC. 6.1. VARIABLES DE NOMBRES FIJOS EN PBASIC. Las variables son los nombres dados a los lugares donde se guardan los datos en forma temporal. Una variable es un símbolo que contiene un cierto valor. Ese valor puede ser cambiado bajo el control del programa y, por lo tanto, el valor de las variables puede cambiar, pero su nombre no. PBASIC puede utilizar nombres de variables predefinidas, como las que se exponen en la tabla de memoria de apartado 4.5, o variables con nombres definidos por el usuario. Las variables fijas tienen su orden de jerarquía (W0 es una variable tipo WORD de 16 BITS, que contiene a su vez a dos variables tipo BYTE de 8 Bits: B0 y B1). Por ejemplo suponga que la variable W0 contiene el valor binario (%0011101011101001), entonces B0 contiene la parte baja de 8 Bits y B1 la parte alta de los 8 Bits. W0 = %0011101011101001 B0 = %11101001 B1 = %00111010 Las variables predefinidas de fábrica no necesitan ser declaradas PBASIC las reconoce. Pero puede ser algo confuso sobre todo cuando se tiene un programa muy extenso. Afortunadamente PBASIC da la libertad de que usted defina sus propias variables con el nombre más apropiado a la acción a ejecutar. En otras palabras usted puede personalizar los nombres ejemplo: conteo_general = 56, en vez de B1 = 56, es mucho más fácil relacionar un nombre asignado que un nombre fijo como B 1. En PBASIC, los nombres de las variables pueden tener u n a l o n g i t u d de hasta 32 caracteres . La longitud del nombre no tiene ninguna influencia en la velocidad de ejecución del programa. Por ejemplo, la instrucción: x = 38, tendrá la misma velocidad de ejecución que: este_es_un_nombre_muy_largo = 38. De cualquier manera, en lugar de usar las variables predefinidas es recomendable utilizar un nombre especifico para cada variable de acuerdo a algo relacionado con la aplicación utilizada.
6.2. DECLARACIÓN DE VARIABLES DEL BS2 La declaración de variables consiste en fijarle un nombre de menos de 32 caracteres y un tamaño en Bits. Las declaraciones de variables hay que realizarlas al principio del programa o antes de utilizarlas. Para declarar variables se utiliza el comando VA R. La sintaxis es la siguiente: nombre_variable VA R tamaño Donde:
DPTO. DE TECNOLOGÍA © J.Garrigós
I.E.S. ANDRÉS DE VANDELVIRA
Pag. 20
MICROCONTROLADORES Y SU APLICACIÓN EN ROBÓTICA
Nombre_variable es el nombre que usted le asignara a la variable no debe ser mayor de 32 caracteres, puede contener una secuencia de letras combinadas con números también acepta el guión largo “_”. En PBASIC, los nombre_variable no son sensible a mayúsculas y minúsculas. Tamaño establece el número de Bits reservados. PBASIC da 4 tipos de tamaño: Valores Tipo Elementos decimales posibles 1 BIT 1 bit 2 2 (0-1) 4 NIB 4 bits 2 16 (0-15) 8 BYTE 8 bits 2 256 (0-255) 16 WORD 16 bits 2 65536 (0-65535)
El espacio para cada variable es automáticamente reservado en la memoria del BasicStamp. El tamaño de las variables a utilizar depende de la cantidad de variaciones que necesitemos, ejemplo de algunos casos utilizando nuestras propias definiciones con la sentencia VAR: hormiga VAR bit gato VAR nib perro VAR byte elefante VAR word
‘ Puede tomar 2 elementos 0 y 1 ‘ Puede tomar 16 elementos desde 0 a 15 ‘ Puede tomar 256 elementos desde 0 a 255 ‘Puede tomar 65,536 elementos desde 0 a 65.535
Si por ejemplo necesitamos leer una entrada del microcontrolador necesitamos una variable tipo b i t , pues la entrada sólo tiene dos valores posible 0 o 1 lógico. Si necesitamos realizar un conteo del 1 al 10 es suficiente con una de tipo n i b , pues esta puede contener 16 elementos. E n e s t e c a s o , s e p o d r í a u t i l i z a r u n a d e t i p o b y t e, p e r o l a e s t a r í a m o s infrautilizando. Si queremos almacenar un conteo de 10.000 necesitamos una tipo w o r d , que puede almacenar hasta 65.536 elementos, la tipo b y t e en este caso sería menos que insuficiente, pues sólo puede contener 256 elementos.
Si queremos almacenar un conteo de 10.000 necesitamos una tipo word, que puede almacenar hasta 65.536 elementos, la tipo byte en este caso sería menos que insuficiente, pues sólo puede contener 256 elementos
Practica de control Se propone al lector la siguiente práctica: Se pretende controlar dos LEDs conectados a los pins 0 y 1 y un zumbador conectado a la patilla 3 mediante un interruptor conectado al pin 5, de forma que se cumpla la siguiente secuencia: Si el pin 5 está a nivel bajo luce el diodo LED1 conectado en el pin 0 durante 100 ms estando los pins 1 y 3 a cero (LED2 y zumbador apagados).
DPTO. DE TECNOLOGÍA © J.Garrigós
I.E.S. ANDRÉS DE VANDELVIRA
Pag. 21
MICROCONTROLADORES Y SU APLICACIÓN EN ROBÓTICA Pasados los 100 ms se apaga el LED1 (pin 0) y se activan el zumbador y el LED 2 durante 75 ms. Tras los 75 ms se vuelve a repetir el ciclo ininterrumpidamente hasta que la entrada 5 se ponga a 1 lógico, en cuyo caso, se apagará todo. Al volver a cero el pin 5 se vuelve a repetir la secuencia indicada
6.3. DECLARACIÓN DECLARACIÓN DE ARRAYS DE DE VARIABLES VARIABL ES (Matr (Matric ices) es) Las matrices de variables se pueden crear de forma similar a como s e c r e a n l a s v a r i a b l es es s e n c i l l a s . VAR tamaño (n) nombre_variable Donde: • nombre_variable y tamaño es el mismo de las declaraciones de variables. El nuevo elemento es (n), y le dice PBASIC cuanto espacio reservar para la misma variable del tamaño especificado. Algunos ejemplos de creación de matrices son los siguientes: a u t o m o v i l V A R b y t e (1 ( 1 0) 0)
‘ Crea 10 variables tipo byte
La primera ubicación dentro de al matriz es el elemento cero. En la matriz automóvil anterior los elementos están numerados a u t o m o v i l ( 0 ) a a u t o m o v i l ( 9 ) conteniendo 10 elementos en total. Dada la forma en que las matrices están localizadas en memoria hay límites de tamaño para cada tipo.
Tamaño BIT NIB BYTE WORD
Nº máx. de elementos 208 52 26 13
Los arrays son muy convenientes para recolección de datos, en vista de que el número de elementos (n) puede ser sustituido por otra variable. Vea el siguiente ejemplo y la salida que genera:
FRUTAS VAR Byte(5) INDICE VAR Nib FRUTAS(1) = 42 FRUTAS(2) = 121 FRUTAS(3) = 214 FRUTAS(4) = 254 FOR INDICE = 0 TO 4 DEBUG ?FRUTAS(INDICE),CR NEXT STOP
DPTO. DE TECNOLOGÍA © J.Garrigós
I.E.S. ANDRÉS DE VANDELVIRA
Pag. 22
MICROCONTROLADORES Y SU APLICACIÓN EN ROBÓTICA
6.4. MODIFIC MODIFICADORES ADORES (ALIAS) DE LAS L AS VARIABL VA RIABLES. ES. VAR puede ser usado para crear un alias para otra variable. Esto es muy útil para acceder al interior de una variable. Dog Fido
VAR byte VAR Dog
‘Dog es una variable del tipo Byte ‘Fido es otro nombre de Dog
En este ejemplo, Fido es el alias de la variable Dog. Cualquier valor almacenado en dog puede ser mostrado por Fido y viceversa. Ambos nombres se refieren a lo mismo. Con los alias podemos acceder en cualquier momento al interior de una variable sin causar ninguna alteración a la variable original. En la siguiente tabla se puede ver la jerarquía de los modificadores o alias de las variables.
DPTO. DE TECNOLOGÍA © J.Garrigós
I.E.S. ANDRÉS DE VANDELVIRA
Pag. 23
MICROCONTROLADORES Y SU APLICACIÓN EN ROBÓTICA
' Ejemplo de definición de utilización de variables cuerpo_humano VAR Word cabeza VAR cuerpo_humano.HIGHBYTE cuerpo_humano.HIGHBYTE extremidades VAR cuerpo_humano.BYTE0 ojos VAR cabeza.BIT0 nariz VAR cabeza.BIT1 oido VAR cabeza.BIT2 boca VAR cabeza.BIT3 pie_izquierdo VAR cuerpo_humano.LOWNIB cuerpo_humano.LOWNIB pie_derecho VAR cuerpo_humano.HIGHNIB cuerpo_humano.HIGHNIB cabello VAR cuerpo_humano.LOWBIT cuerpo_humano.LOWBIT dedo VAR cuerpo_humano.HIGHBIT cuerpo_humano.HIGHBIT cuerpo_humano=%1101101010011000 DEBUG BIN16 DEBUG BIN16 DEBUG BIN16 DEBUG BIN16 DEBUG BIN16 DEBUG BIN16 DEBUG BIN16 DEBUG BIN16
?cuerpo_humano, ?cuerpo_humano, CR ?cabeza, CR ?extremidades, CR ?ojos, CR ?nariz, CR ?oido, CR ?boca, CR ?pie_izquierdo, CR
La salida que produce el programa anterior se puede apreciar en la figura
7. CONSTANTES CONSTANTES EN PBASIC PB ASIC 7.1 DECLARACIÓN DE CONSTANTES EN PBASIC Las llamadas constantes pueden ser creadas de manera similar a las variables. A veces, puede ser más conveniente utilizar un nombre de constante en lugar de un número.
DPTO. DE TECNOLOGÍA © J.Garrigós
I.E.S. ANDRÉS DE VANDELVIRA
Pag. 24
MICROCONTROLADORES Y SU APLICACIÓN EN ROBÓTICA Son creadas usando la palabra clave CON. Si el número necesita ser cambiado, únicamente habría que cambiarlo en un parte del programa donde se define la constante. No pueden guardarse datos variables dentro de una constante. La sintaxis es la siguiente: nombre_constante CON valor_numerico Donde:
nombre_constante es el nombre que usted le asignara a la variable
no debe ser mayor de 32 caracteres, puede contener una secuencia de letras combinadas con números también acepta el guión largo “_”. En PBASIC, los nombre_constante no son sensibles a mayúsculas y minúsculas. valor_numerico es un valor de (0-65535).
PBASIC permite definir constantes numéricas en tres bases: decimal, binaria y hexadecimal. Valores binarios son definidos usando el prefijo “%” y valores hexadecimales usando el prefijo “$”. Los valores decimales se toman por defecto y no requieren prefijo. Ejemplo: 100 ’valor decimal 100 %100 ‘ valor binario para el decimal 4 $100 ‘ valor hexadecimal para el decimal 256. “ A” ‘ ASCII equivalente a decimal (65). Algunos ejemplos son: bateri a CON 12 cont inentes CON 5 li bro CON $E7 e n c e n d i d o C O N % 1 1 01 d e t en e r CO N “ s ” Es posible calcular expresiones a través de constantes previamente definidas: temperatura con 37 g r a d o s _ c c o n ( t e m p e r at u r a * 5 )/ 9 grados_f c on (grados_c –32)
8. PRACTICA2: INTERMITENCIA DE UN DIODO LED. En esta práctica se persigue hacer parpadear un diodo LED en unos intervalos previamente definidos mediante la declaración de constantes. El pin donde se conecta el LED y el intervalo se definen previamente mediante la declaración de las constantes p i n L E D e I n t e r v a l o . Así mismo, y a fin de hacer una secuencia repetitiva, se introduce la etiqueta COMIENZO lo que provoca un salto incondicional desde la línea de salto GOTO
DPTO. DE TECNOLOGÍA © J.Garrigós
I.E.S. ANDRÉS DE VANDELVIRA
Pag. 25
MICROCONTROLADORES Y SU APLICACIÓN EN ROBÓTICA El programa propuesto es el siguiente:
‘INTERMITENCIA DE UN DIODO LED ‘Declaración de constantes pinLED CON 0 Intervalo CON 500
‘Establecemos a la variable pinLED la constante 0 ‘Retardo en milisegundos entre estados del LED
COMIENZO: HIGH pinLED PAUSE Intervalo LOW pinLED PAUSE Intervalo GOTO COMIENZO
‘Establecemos una etiqueta ‘Enciende el LED conectado al pin0 ‘Tiempo que el LED permanece encendido ‘Apaga el LED conectado al pin0 ‘Tiempo que el LED permanece apagado ‘Salto a la etiqueta COMIENZO
ESQUEMA ELÉCTRICO Y DE CONEXIONADO DE LA PRÁCTICA.
9. DIRECCIONAMIENTO DIGITAL DE ENTRADAS SALIDAS CONSIDERANDO EL MAPA DE MEMORIA. Si observamos el mapa de memoria del apartado 4.5. podemos apreciar que podemos trabajar con bits, nibbles, bytes y words. De este modo podemos configurar los pines como entradas o como salidas y después asignamos un 0 o un 1 lógico a las direcciones previamente configuradas: Ejemplo: DIR0=1 ‘El pin 0 – bit 0- se configura como salida DIR1=0 ‘La pin 1 – bit 1 - se configura como entrada DIRB=%0111 ‘En el nibble B se configuran los bits 4,5,6 como salidas y el ‘bit 7 como entrada OUT0= 1
‘El pin 0 –bit 0- se pone a 1 ‘EL pin 1 –bit 1- queda a cero al no indicarle que se active
OUT4 =1 OUT5 =0 OUT6 =1
‘El pin 4 –bit 4- se pone a 1 ‘El pin 4 –bit 4- se pone a 0 ‘El pin 4 –bit 4- se pone a 1
DPTO. DE TECNOLOGÍA © J.Garrigós
I.E.S. ANDRÉS DE VANDELVIRA
Pag. 26
MICROCONTROLADORES Y SU APLICACIÓN EN ROBÓTICA
10. PRACTICA 3: CONFIGURACIÓN DE ENTRADAS-SALIDAS Y SALTO CONDICIONAL. En esta práctica configuraremos diferentes pines del Basic Stamp como E/S y trabajaremos con etiquetas y saltos condicionales. La práctica dispone de 6 salidas y controla 5 diodos LED conectados a los pines 0,1,4,5 y 6, y un zumbador conectado al PIN 15. Como entrada se ha configurado el PIN 7. Para la configuración de las salidas de los pines 0 y 1 se ha utilizado el direccionamiento de bit mediante la instrucción DIR. Por otro lado se ha configurado el nibble B (véase mapa de memoria), donde el bit 7 será una entrada y los bits 4,5 y 6 serán salidas. 'El presente programa configura bits y nibbles como E/S que pone a nivel alto o bajo 'en función del estado del bit 7, haciendo uso de un salto condicional INICIO: DIR0=1 'Configuramos el pin 0 -bit 0 - como salida DIR1=1 'Configuramos el pin 1 -bit 1 - como salida OUT0=1 'Ponemos el pin 0 -bit 0- a nivel alto OUT1=0 ‘Ponemos el pin 1 –bit 1- a nivel bajo LOW 15 'El pin 15 se pone a cero DIRB=%0111 'Configuramos el nibble B -bits 4,5,6 como salidas y el bit 7 como entrada OUT4=1 'Ponemos el pin 4 -bit 4- a nivel alto OUT5=0 'Ponemos el pin 5 -bit 5- a nivel bajo OUT6=1 'Ponemos el pin 6 -bit 6- a nivel alto DEBUG ?IN7 'Mostramos en pantalla el estado del pin 7 IF IN7=1 THEN salida 'Salto condicional. en el caso que el bit 7 esté a 1 saltar a la etiqueta SALIDA GOTO inicio 'Salto incondicional. Saltar a la posición de la etiqueta INICIO salida: 'Etiqueta salida HIGH 15 'Se pone a 1 la salida 15 IF IN7=0 THEN inicio 'Si el pin 7 -bit 7- esta a cero saltar a la etiqueta inicio si no seguir en la sig linea OUT4=0 'Ponemos el pin 4 -bit 4- a nivel bajo OUT5=1 'Ponemos el pin 5 -bit 5- a nivel alto OUT6=0 'Ponemos el pin 6 -bit 6- a nivel bajo DEBUG ?IN7 'Mostramos en pantalla el estado del pin 7 GOTO salida 'Salto incondicional. Saltar a la posición de la etiqueta SALIDA
El funcionamiento del montaje es el siguiente: Si el bit7 está en 0 el circuito se encuentra en el estado: o P0=1 o P1=0 o P4=1 o P5=0 o P6=1 Si el bit 7 está a 1 el estadio del circuito será: o P0=1 o P1=0 o P4=0 o P5=1 o P6=0
DPTO. DE TECNOLOGÍA © J.Garrigós
ESQUEMA DE CONEXIONADO
INTERRUPTOR
I.E.S. ANDRÉS DE VANDELVIRA
P6
DIODOS LED P5 P4 P1
Pag. 27
D V N 5 G +
MICROCONTROLADORES Y SU APLICACIÓN EN ROBÓTICA
11. PRACTICA 4: PROGRAMACION DE ECUACIONES LÓGICAS CON OPERADORES BOLEANOS. Una máquina de refrescos tiene y tres pulsadores a, n, y l (a para el agua, n para la naranja y l para el limón), y tres depósitos con agua, naranja y limón. Cada uno de los depósitos está controlado por una electroválvula: Ea para el depósito del agua, En para el depósito de la naranja y El para el depósito del limón. Se desea diseñar el automatismo de control de la máquina de forma que se cumplan las siguientes condiciones: a. La máquina puede dar agua, agua con limón y agua con naranja, pero nunca naranja o limón solos o mezclados. b. La electroválvula de cada uno de los depósitos se activará por medio de su correspondiente pulsador y siempre que se cumplan las condiciones establecidas en el problema. c. La desconexión de las electroválvulas se producirá cuando el vaso de refresco se haya llenado, al actuar, debido a su peso, sobre un pulsador cuando el vaso este lleno.
SOLUCIÓN DEL PROBLEMA AGUA
NARANJA
Ea
LIMÓN
En
El
Botonera a
n
l
Vaso Pulsador NC
Fase inicial: Designación de las variables de entradas salidas. En este ejemplo, la cosa es bastante evidente, siendo las variables de entrada los pulsadores a, n y l, y las variables de las salidas las electroválvulas de cada uno de los depósitos. Si bien el pulsador NC es una variable de entrada, a efectos de resolver el circuito no lo consideraremos, pues bastará conectarlo en serie con la alimentación eléctrica para cortar la corriente al circuito cuando el peso del vaso lleno actúe sobre él, y de esta forma dejar el automatismo en estado de reposo.
DPTO. DE TECNOLOGÍA © J.Garrigós
I.E.S. ANDRÉS DE VANDELVIRA
Pag. 28
MICROCONTROLADORES Y SU APLICACIÓN EN ROBÓTICA 1ª Fase. Tabla de verdad del circuito
Variables de entrada
Variables de salida
a
n
l
Ea
En
El
0
0
0
0
0
0
0
0
1
0
0
0
0
1
0
0
0
0
0
1
1
0
0
0
1
0
0
1
0
0
1
0
1
1
0
1
1
1
0
1
1
0
1
1
1
0
0
0
2ª Fase. Obtención de ecuaciones. Obtendremos una ecuación por cada una de las variables de salida, en nuestro caso Ea, En y El. Ecuación de la electroválvula del agua:
Si observamos la tabla de verdad, la electroválvula del agua se activa en tres estados distintos, en los que las variables de entrada toman los siguientes valores:
a=1, n=0 y l=0, que se expresa como: a * n * l
a=1, n=0 y l=1, que se expresa como: a * n * l
a=1, n=1 y l=0, que se expresa como: a * n * l La ecuación de salida se obtiene como suma de cada uno de los términos obtenidos
para cada estado en que la variable de salida está activa, resultando finalmente:
Ea a * n * l
a * n * l a * n * l
Ecuación de la electroválvula de la naranja:
Como se aprecia en la tabla de la verdad, la electroválvula de la naranja sólo se activa en un estado que se corresponde con los siguientes valores de las variables de entrada:
a=1, n=1 y l=0 Por lo tanto, la ecuación de la electroválvula de la naranja vendrá dada por:
En a * n * l Ecuación de la electroválvula del limón:
De forma similar al caso anterior, tal y como se aprecia en la tabla de la verdad, la electroválvula del limón sólo se activa en un estado que se corresponde con los siguientes valores de las variables de entrada:
a=1, n=0 y l=1
DPTO. DE TECNOLOGÍA © J.Garrigós
I.E.S. ANDRÉS DE VANDELVIRA
Pag. 29
MICROCONTROLADORES Y SU APLICACIÓN EN ROBÓTICA Por lo tanto, la ecuación de la electroválvula del limón vendrá dada por:
En a * n * l 3ª Fase. Simplificación de ecuaciones. En este caso las ecuaciones de las electroválvulas de la naranja y limón no pueden simplificarse, puesto que sólo tienen un sumando.
Con respecto a la ecuación de la
electroválvula del agua, considerando la propiedad del álgebra de Boole que indica que A+A=A obtenemos:
Ea a * n * l
a * n * l a * n * l
Ea a * n * l
a * n * l a * n * l a * n * l
Sacando factor común del primer y segundo sumando y del tercero y cuarto respectivamente, y simplificando tenemos:
Ea a * n * ( l l ) a * l * ( n n ) Ea a * n a * l Ea a * ( n l ) Si nos hubiéramos decantado por la simplificación a través de los mapas de Karnaugh el proceso sería el siguiente: a) Dibujamos un mapa con las tres variables de entrada:
l
n a
b) Dibujamos un uno en cada uno de los cuadros que se corresponden con los tres sumandos
de
Ea a * n * l
la
ecuación
partida
de
la
electroválvula
del
agua:
a * n * l a * n * l
l
n a
de
l
n
l
l
l
c) Hacemos lazos y simplificamos:
a
Lazo A: a * l
l
l
l
Lazo B: a * n
Ea a * l
DPTO. DE TECNOLOGÍA © J.Garrigós
Lazo A
a * n
I.E.S. ANDRÉS DE VANDELVIRA
Lazo B
Pag. 30
MICROCONTROLADORES Y SU APLICACIÓN EN ROBÓTICA d) Simplificamos la ecuación sacando factor común de a:
Ea a * ( n l ) Sea cual sea el método utilizado, llegamos a la conclusión que las ecuaciones simplificadas de nuestro problema son:
Ea a * ( n l ) En a * n * l El a * n * l 4ª Fase. Representación del circuito eléctrico y de puertas lógicas: Será este el momento, que en este caso particular, elegiremos para colocar el pulsador del vaso. Circuito eléctrico: Pulsador del vaso a n
l
Ea
a
a
n
n
l
l
En
El
'**** AUTOMATISMO DE LA MÁQUINA DE REFRESCOS **** 'LO PRIMERO ES DIRECCIONAR LOS PINES A UTILIZAR DIR0=1 'Direccionamos el pin 0 como salida DIR1=1 'Direccionamos el pin 1 como salida DIR2=1 'Direccionamos el pin 2 como salida DIR5=0 'Direccionamos el pin 5 como entrada DIR6=0 'Direccionamos el pin 6 como entrada DIR7=0 'Direccionamos el pin 7 como entrada 'ASIGNAMOS LAS VARIABLES DE LOS PULSADORES DE ENTRADA A LOS PINES 5, 6 Y 7 P_agua VAR IN5 'asignamos a la variable pulsador del agua el valor de la entrada 5 -pin 5 P_naranja VAR IN6 'asignamos a la variable pulsador de la naranja el valor de la entrada 6 -pin 6 P_limon VAR IN7 'asignamos a la variable pulsador del limón el valor de la entrada 7 -pin 7 'DEFINIMOS LAS NEGADAS DE LOS PULSADORES P_agua_negada VAR Bit P_naranja_negada VAR Bit P_limon_negada VAR Bit 'ASIGNAMOS VARIABLES A LOS ESTADOS DE LAS PINES DE SALIDA salida_Ea VAR OUT0 'Asignamos el estado del pin 0 a la variable salida_Ea salida_En VAR OUT1 'Asignamos el estado del pin 1 a la variable salida_En salida_El VAR OUT2 'Asignamos el estado del pin 2 a la variable salida_El 'DEFINIMONS LAS VARIABLES DE LAS ECUACIONES DE LAS ELECTROVÁLVULAS DE SALIDA E_agua VAR Bit 'Definimos a la variable electroválvula del agua valor de bit E_naranja VAR Bit 'Definimos a la variable electroválvula de la naranja valor de bit E_limon VAR Bit 'Definimos a la variable electroválvula del limón valor de bit
DPTO. DE TECNOLOGÍA © J.Garrigós
I.E.S. ANDRÉS DE VANDELVIRA
Pag. 31
MICROCONTROLADORES Y SU APLICACIÓN EN ROBÓTICA INICIO: ' REALIZAMOS UNA OPERACIÓN XOR CON LAS VARIABLES DE LOS PULSADORES PARA OBTENER SUS NEGADAS P_agua_negada=P_agua^1 P_naranja_negada=P_naranja^1 P_limon_negada=P_limon^1 'DEFINIMOS LAS ECUACIONES DE CADA UNA DE LAS SALIDAS E_agua=P_agua & (p_naranja_negada |p_limon_negada) '& operador boleano AND y | operador boleano OR E_naranja=P_agua & P_naranja & P_limon_negada E_limon=P_agua & P_naranja_negada & P_limon ' ESTABLECEMOS LAS CONDICIONES LÓGICAS DE SALTO IF E_naranja=1 THEN naranja IF E_limon=1 THEN limon IF E_agua=1 THEN agua ' EN CASO DE NO CUMPLIRSE NINGUNA DE LAS ECUACIONES DEL AUTOMATISMOS PONEMOS A CERO TODAS LAS SALIDAS salida_Ea=0 salida_En=0 salida_El=0 GOTO INICIO 'Provocamos un salto incondicional a la etiqueta inicio para su ejecución recursiva agua: DEBUG "agua", CR salida_Ea=1 salida_En=0 salida_El=0 GOTO INICIO
'ETIQUETA DE LA ECUACION DE SALIDA DE LA ELECTROVÁLVULA DEL AGUA
naranja: 'ETIQUETA DE LA ECUACION DE SALIDA DE LA ELECTROVÁLVULA DE LA NARANJA DEBUG "naranja y agua", CR salida_Ea=1 salida_En=1 salida_El=0 GOTO INICIO limon: 'ETIQUETA DE LA ELECTROVÁLVULA DEL LIMON DEBUG "limon y agua ", CR salida_Ea=1 salida_En=0 salida_El=1 GOTO INICIO
ESQUEMA DE CONEXIONADO n ó m i L _ P
a j n a r a N _ P
a u g A _ P
DIODOS LED En El Ea P2
DPTO. DE TECNOLOGÍA © J.Garrigós
P1
P0
D V N 5 G +
I.E.S. ANDRÉS DE VANDELVIRA
Pag. 32
MICROCONTROLADORES Y SU APLICACIÓN EN ROBÓTICA
12. PRACTICA 5: CUENTA ATRÁS MEDIANTE DISPLAY DE 7 SEGMENTOS. A través de la presente práctica se pretende instruir al lector en el control de un display de 7 segmentos mediante una práctica de cuenta atrás. Se estudiarán también la instrucción de almacenamiento de datos (DATA) en la memoria EEPROM y la generación de ondas senoidales de frecuencia y duración deseadas (FREQOUT). El display de 7 segmentos son 7 diodos LED encapsulados en una disposición tal que permita la representación de números y letras. Existe un octavo LED que es el punto decimal (dp), útil para representar números fraccionarios. Todos los LED del display tienen un terminal común, que en el caso del Universal Trainer V2 del aula taller el instituto, es el ánodo, por lo que, se dice que es de ánodo común (AC). La línea de todos los ánodos se ha de conectar a + 5V. El Universal Trainer tiene 3 display de 7 segmentos cuyo esquema de conexión se reprensenta en la siguiente figura:
a
330
b
330
c
330
d
330
e
330
f
330
g
330
dp
330
P0 P1 P2 P3 P4 P5 P6 P7
AC
+5 V
Las resistencias conectadas en serie con los displays tienen la función de limitar la tensión y la corriente aplicada a los LED. Dado que el display es de ánodo común, habrá que introducir un cero lógico ( 0V ) en el cátodo del diodo LED que se desee iluminar. Bajo estás premisas, y puesto que en la presente práctica se pretende realizar una cuenta atrás, en la siguiente tabla se representan los valores de los bits que habrá que aplicar a los cátodos de los LED para representar cada uno de los números. En la práctica únicamente representamos los dígitos 0, 1, 2, 3, 4 y 5, que se activarán en orden decreciente simulando una cuenta atrás.
DPTO. DE TECNOLOGÍA © J.Garrigós
I.E.S. ANDRÉS DE VANDELVIRA
Pag. 33
MICROCONTROLADORES Y SU APLICACIÓN EN ROBÓTICA NÚMERO
P7
P6
P5
P4
P3
P2
P1
P0
VISUALIZADO
dp
g
f
e
d
c
b
a
5
1
0
0
1
0
0
1
0
4
1
0
0
1
1
0
0
1
3
1
0
1
1
0
0
0
0
2
1
0
1
0
0
1
0
0
1
1
1
1
1
1
0
0
1
0
1
1
0
0
0
0
0
0
Para programar esta práctica se emplearán tres nuevas instrucciones cuya descripción es la que se indica:
FREQOUT Pin, Duración, Frecuencia : Mediante esta instrucción se saca por el pin indicado una onda casi senoidal de la frecuencia indicada y con una duración dada en milisegundos por el parámetro Duración . Ejemplo: FREQOUT 12, 10, 2000 genera por el pin 12 una frecuencia sinusoidal de 2000 Hz durante 20 ms
DATA Valor : Guarda el parámetro Valor en una posición de la memoria de la EEPROM, que se puede identificar con una etiqueta. Ejempl o: MEN DATA %00000000 guarda en la posición de la EEPROM etiquetada como MEN el valor binario 00000000.
READ Dato, Destino: Lee el valor que contiene la posición de la memoria EEPROM definida por el parámetro Dato y lo deposita en la variable Destino. Ejemplo: READ MEM, Conta lee el calor contenido en la posición MEM de la EEPROM y lo deposita en la variable Conta.
Montaje práctico. La figura nos muestra la disposición de elementos de la práctica.
DPTO. DE TECNOLOGÍA © J.Garrigós
I.E.S. ANDRÉS DE VANDELVIRA
Pag. 34
MICROCONTROLADORES Y SU APLICACIÓN EN ROBÓTICA Programa 'PROGRAMA DE CUENTA ATRAS segundos VAR OUTL 'Asignamos la variable segundos al Byte bajo (bits 0 al 7) nums VAR Byte 'Asignamos a la variable numeros el valor de byte (hasta 256 estados) 'INTRODUCIMOS EN LA ETIQUETA "cuenta" DE LA MEMORIA EEPROM LOS VALORES REQUERIDOS 'PARA EL CONTROL DE LOS LEDS DEL DISPLAY cuenta DATA%10010010 'Patrón del bits para el numero 5 DATA%10011001 'Patrón del bits para el numero 4 DATA%10110000 'Patrón del bits para el numero 3 DATA%10100100 'Patrón del bits para el numero 2 DATA%11111001 'Patrón del bits para el numero 1 DATA%11000000 'Patrón del bits para el numero 0 DIRL=%11111111 'direccionamos el byte bajo como salidas OUTL=%11111111 'ponemos a 1 todas las salidas (todos LED apagados) activacion: 'etiqueta activación IF IN14=1 THEN atras ' Si el pin 14 está a 1 entonces saltar a etiqueta atras GOTO activacion 'salto incondicional a la eqiqueta acivación 'BUCLE PARA LA CUENTA ATRÁS atras: 'Etiqueta de incio de la cuenta atrás FOR nums=0 TO 5 'Cuenta de 0 a 5 READ(cuenta+nums),segundos 'lee de la EEPROM la etiqueta cuenta en la posición dada 'por el valor de la variable nums PAUSE 1000 'espera 1 sg FREQOUT 15,40,2000 'Genera un tono en la patilla 15 de 40 ms a 2000 Hz NEXT 'Fin del bucle FOR NEXT 'BUCLE PARA EL PITIDO FINAL SEÑALIZANDO FIN DE LA CUENTA ATRÁS aviso: FREQOUT 15,2500,1000 'Genera un pitido de 2,5 s a 1000 Hz GOTO activacion 'Salto incondicional a la etiqueta activación
Esquema de conexión El programa pretende la puesta en marcha de un contador decimal en cuenta atrás a partir de la puesta a 1 momentánea de la patilla 14 del microcontrolador. Se comienza por declarar las variables, seguidamente se almacenan los patrones
binarios
necesarios
para
la
representación de los números en 6 posiciones de la EEPROM que se disponen a partir de la etiqueta cuenta. Luego se repite un bucle 6 veces que asigna a la variable segundos cada uno de los patrones y los aplica al display. Con cada número se genera un pequeño pitido y al alcanzar el 0 pita durante 2,5 segundos.
DPTO. DE TECNOLOGÍA © J.Garrigós
I.E.S. ANDRÉS DE VANDELVIRA
Pag. 35
MICROCONTROLADORES Y SU APLICACIÓN EN ROBÓTICA
13. PRACTICA 6: MANEJO DE ARRAYS: JUEGO DE LUCES. El objetivo de la presente práctica es manejar arrays (matrices) de datos. Para ello, se utilizará un array de 8 bytes para guardar una secuencia de datos que al representarla sobre un conjunto de LEDS generará un juego de luces, cuya iluminación se desplazará desde un extremo al otro. En esta práctica se empleará también el operador binario de desplazamiento y el decodificador <>.
ARRAY Un array no es más que una agrupación de elementos (variables, datos,…) de forma
ordenada. Cada elemento que pertenece al array tiene asociado un índice, el cual permite hacer referencia al dato en cuestión. Un array se crea de forma similar a una variable: nombr e_variable VAR tamaño(n) . Donde: nombre_variable y tamaño tienen el mismo significado que la declaración de una variable cualquiera. El nuevo elemento (n), le indica al microcontrolador el espacio que tiene que reservar de la misma variable con el tamaño indicado. Ejemplo: Automóvil VAR
Byte(10) crea 10 variables de tipo byte que van desde Automóvil(0) a
Automóvil(9)
Dada la forma en que los arrays se disponen en la memoria hay límites de tamaño para cada tipo:
DCD Devuelve la potencia en base 2 de un rango de exponentes
Tamaño
Nº máximo de elementos
BIT
208
NIB
52
BYTE
26
WORD
13
entre el 0 y el 15. En otras palabras : B0 = DCD 4 ‘ Muestra el B0= como %0001 0000 Es decir, determina la posición del bit de la variable que se pondrá a 1 comenzando a contar desde 0, cuyo valor representado en decimal es 2 4=16 La nomenclatura es: Variable_destino =DCD nºbit En el siguiente ejemplo de programación se puede observar los distintos valores que va tomando una variable (W1 para el ejemplo) desde 0 a 15, que es representado en forma binaria y decimal.
DPTO. DE TECNOLOGÍA © J.Garrigós
I.E.S. ANDRÉS DE VANDELVIRA
Pag. 36
MICROCONTROLADORES Y SU APLICACIÓN EN ROBÓTICA
‘EJEMPLO DE LA INSTRUCCION DCD
DEBUG CLS W1 = 0 FOR B0 = 0 TO 15 W1 = DCD B0 DEBUG DEC2 B0,"-",BIN16 W1,"-",DEC5 W1, " equivale a:2^",DEC1 B0, CR PAUSE 10 NEXT
El ejemplo anterior genera la siguiente salida
<>
Los operadores <> desplazan hacia la izquierda (<<), o hacia la derecha (>>), los bits de la variable, el número de veces indicado a la derecha del operador. Los bits desplazados se dejan en 0. Nomenclatura: variable<< nbit s_a _desplazar Ejemplo: valor
CON
%100101101111
W1 = VALOR << 4 DEBUG BIN16 W1, CR ‘Muestra el result ado 1001011011110000 Corre la cifra 4 lugares hacia la izquierda y rellena hacia la derecha cuatro lugares con ceros.
DPTO. DE TECNOLOGÍA © J.Garrigós
I.E.S. ANDRÉS DE VANDELVIRA
Pag. 37
MICROCONTROLADORES Y SU APLICACIÓN EN ROBÓTICA PROGRAMA 'DECLARACIÓN DE CONSTANTES TIEMPO CON 100 'Cargamos la variable TIEMPO con el valor constante 100 (ms) 'DECLARACIÓN DE VARIABLES MI_ARRAY VAR Byte(8) 'Declaramos un array de 8 Bytes INDEX VAR Byte 'Declaración de una variable de tipo Byte DIRL=%11111111 'Direccionamos el byte bajo como salidas (Bits 0 a 7) 'CARGAMOS EL ARRAY EN LA POSICION 0 CON EL BIT O A 1 MI_ARRAY(0)=DCD 0 ' BUCLE DE CARGA DE VALORES DE LAS POSICIONES DEL ARRAY FOR INDEX=0 TO 7 MI_ARRAY(INDEX)= DCD INDEX 'Cargamos el array con MI_ARRAY(0)=0000 0001, MI_ARRAY(1)=0000 0010, .... NEXT 'BLUCLE DE DESPLAZAMIENTO DEL ENCENDIDO DE LED HACIA LA IZQUIERDA DESPLAZAMIENTO_A_IZQUIERDA: 'Etiqueta IF IN8=0 THEN DESPLAZAMIENTO_A_DERECHA 'Si la entrada 8 está a 0 ir a la etiqueta des_derecha FOR INDEX=0 TO 7 'Recorremos el array desde la posisicion 0 a la 8 OUTL=MI_ARRAY(INDEX) 'Ponemos las salidas (LED) al valor cargado en la posicion actual del array PAUSE TIEMPO ‘'Tiempo de espera entre el cambio de posiciones del array NEXT GOTO DESPLAZAMIENTO_A_IZQUIERDA 'Salto incondicional a etiqueta desplazamiento_a_izquierda 'BLUCLE DE DESPLAZAMIENTO DEL ENCENDIDO DE LED HACIA LA DERECHA 'Misma explicacion que en el bucle anterior, pero con distinta dirección de desplazamiento DESPLAZAMIENTO_A_DERECHA: FOR INDEX=0 TO 7 OUTL=MI_ARRAY(7-INDEX) PAUSE TIEMPO NEXT GOTO DESPLAZAMIENTO_A_IZQUIERDA
Tal y como está estructurado el programa, atendiendo a la conexión indicada, si el pin 8 está a 0, se produce un efecto luminoso que da la sensación de desplazamiento de la luz a la derecha. Al poner a 1 el pin 8, el efecto es de desplazamiento a la izquierda. Se propone al lector la modificación del programa para que de la sensación que el encendido del LED va de un lado a otro en un movimiento de vaivén de forma continuada. Imagen y esquema de conexión del
P7
P6
P5
P4
P3
P2
P1
P0
D V N 5 G +
montaje:
P8
DPTO. DE TECNOLOGÍA © J.Garrigós
I.E.S. ANDRÉS DE VANDELVIRA
Pag. 38
MICROCONTROLADORES Y SU APLICACIÓN EN ROBÓTICA
14. PRACTICA 7: CONTROL DE MOTORES DE CC POR PWM. La modulación por ancho de pulsos (o PWM, de pulse-width modulation en inglés) es una técnica en la que se modifica el ciclo de trabajo de una señal periódica (por ejemplo sinusoidal o cuadrada). ¿Qué sucede si queremos controlar la luminosidad del LED que estamos encendiendo o deseamos regular la velocidad del motor?. Pudiéramos pensar que si encendemos y apagamos la señal de alimentación de la carga (led o motor) lo suficientemente rápido como para que el parpadeo no se note, podríamos “simular” la variación de luminosidad de un LED o el cambio en la velocidad del motor:
Esto funciona siempre y cuando hagamos esta conmutación más allá de 30 veces por segundo. A partir de allí. El "parpadeo" del LED se empezará a notar y el ojo humano captará ese parpadeo. En el caso de un motor, éste se moverá en una forma pulsante. La idea general del PWM es esta, solo que soluciona este problema de tiempo. La forma de lograrlo es dejar el pulso fijo en el tiempo y variar su amplitud. Si se define un pin como salida, por medio de un controlador sólo se puede obtener un voltaje de 0 voltios o de 5 voltios, pero si se logra cambiar rápidamente la salida de una señal baja a una señal alta el resultado es un tren de pulsos de modo que estarían la mitad del tiempo fuera y la otra mitad dentro, cuando se define el Duty (anchura del pulso positivo) a la mitad, el voltaje medio sería entre 0 y 5V (2.5V) Supongamos que logramos ajustar el período T a su valor óptimo mínimo en el cual un LED no parpadee y un motor no gire de forma pulsante. Esto es aproximadamente a una frecuencia de 30 pulsos o ciclos por segundos para el caso de un LED. En el caso del motor habrá que determinarlo empíricamente ya que depende de sus características eléctricas y mecánicas. Volviendo al LED, quiere decir que trabajamos con un período de tiempo de:
f 30 Hz
T
1 f
1 30
0,0333 s
T 33,3 ms
El esquema anterior representa un pulso con un ciclo positivo de servicio igual al 50% es decir, la mitad del período está a 0 y la otra mitad está a Vcc.
DPTO. DE TECNOLOGÍA © J.Garrigós
I.E.S. ANDRÉS DE VANDELVIRA
Pag. 39
MICROCONTROLADORES Y SU APLICACIÓN EN ROBÓTICA Lo que se hace con PWM es variar dinámicamente el ciclo positivo de manera que el tiempo de alta disminuya o aumente y en proporción inversa, el de baja aumente o disminuya dependiendo de si queremos un LED más atenuado o más brillante, o un motor más lento o más rápido, respectivamente.
Led menos iluminado
Led más iluminado Recuerde
que
este
período
se
repite
constantemente
en
el
tiempo:
La finalidad de esta práctica es enseñar a controlar la velocidad y dirección de giro del eje de un motor de corriente continua a través del microcontrolador. La instrucción clave será PWM (Modulación de Anchura de Pulsos). Esta nueva instrucción genera un tren de pulsos por el pin especificado y con una anchura de semiciclo positivo (duty) determinada. El valor de duty se pasa como una variable que previamente se habrá cargado. El driver L293B El L293B es un circuito integrado que contiene cuatro drivers cuya misión es la de amplificar las señales que se aplican a los motores de corriente continua y paso a paso. Para controlar un motor de corriente continua se emplean únicamente dos de los drivers, uno para la señal de cada borne. Dichas señales en esta práctica procederán de los pines 14 y 15 del microcontrolador, tal y como se refleja en la figura siguiente:
DPTO. DE TECNOLOGÍA © J.Garrigós
I.E.S. ANDRÉS DE VANDELVIRA
Pag. 40
MICROCONTROLADORES Y SU APLICACIÓN EN ROBÓTICA
A= Pin 14
B=Pin 15
En la siguiente tabla podemos apreciar las características de este circuito integrado: DATOS por canal, VS=24 V, VSS=5 V, Tª amb =25 ºC
La instrucc ión PWM La instrucción PWM pin, duty, nºciclos: genera una onda modulada de anchura de pulsos por el pin indicado. La anchura de cada pulso viene determinada por “duty” (0-255) y el número de pulsos generados se ha de especificar en “nºciclos” en un valor correspondiente entre 0 y 255. Cada ciclo tiene una duración de 1 ms, pudiendo valer duty desde 0 a 255 ms. Los pines utilizados para el PWM se deben configurar como salidas durante la ejecución del programa, pasando a ser entrada al terminar la instrucción a fin de evitar daños en el microcontrolador.
DPTO. DE TECNOLOGÍA © J.Garrigós
I.E.S. ANDRÉS DE VANDELVIRA
Pag. 41
MICROCONTROLADORES Y SU APLICACIÓN EN ROBÓTICA Esquema eléctrico y de conexionado de la práctica.
Tal y como se puede apreciar se han montado dos LED para indicar el sentido de giro del motor, que vendrá determinado por el estado del pin 8. Programa ‘DECLARACION DE VARIABLES VELOCIDAD VAR Byte 'DECLARACIÓN DE CONSTANTES DIODO_I CON 12 DIODO_D CON 11 'CONFIGURACIÓN DE LAS ENTRADAS/SALIDAS DIRD=%1111 ' Ponemos el tercer NIBBLE como salidas. No es necesario 'configurar los pines de entrada porque cuando ‘Arranca 'BASIC STAMP tiene todos los pines como entradas por defectINICIO: 'COMENZAMOS CON UN CONDICIONAL QUE PERMITA ELEGIR EL SENTIDO DEGIRO INICIO: IF IN8=0 THEN GIRO_DERECHAS GIRO_IZQUIERDAS: HIGH DIODO_I LOW DIODO_D VELOCIDAD=INL
'Aunque no es una etiqueta necesaria da más claridad al programa 'Encendemos el LED que indica giro a Izquierdas 'Apagamos el LED que indica giro a Derechas 'Cargamos en la variable VELOCIDAD el valor en la entrada del BYTE bajo (bits 0 al 7)
PWM 14, VELOCIDAD, 50 'Damos en el pin 14, 50 pulsos de 1ms la consigna de velocidad leida en los interruptores DEBUG ?VELOCIDAD, CR 'Mostramos por pantalla el valor decimal de la variable velocidad GOTO INICIO 'PROGRAMACIÓN DEL GIRO A DERECHAS GIRO_DERECHAS: LOW DIODO_I ' Apagamos el LED de giro a Izquierdas HIGH DIODO_D ' Activamos el LED de giro a derechas OUT14=0 'Ponemos a 0 la patilla 14 VELOCIDAD=INL 'Cargamos en la variable VELOCIDAD el valor en la entrada del BYTE bajo (bits 0 al 7) PWM 15, VELOCIDAD, 50 'Damos por el pin 15, 50 pulsos de 1ms la consigna de velocidad leida en los interruptores DEBUG ?VELOCIDAD, CR 'Mostramos por pantalla el valor decimal de la variable velocidad GOTO INICIO
'Salto incondicional ara volver a realizar el ciclo
DPTO. DE TECNOLOGÍA © J.Garrigós
I.E.S. ANDRÉS DE VANDELVIRA
Pag. 42
MICROCONTROLADORES Y SU APLICACIÓN EN ROBÓTICA Imagen del conexionado del circuito de la práctica
15. INSTRUCCIONES DEBUG TERMINAL Y DO… LOOP El comando DEBUG ya lo hemos utilizado en distintas prácticas anteriores para la visualización de variables o mensajes en la pantalla del PC. Este comando es bastante poderoso, pues nos permite depurar los programas por la posibilidad de mostrar los estados de distintas variables y/o mensajes. La ventana Debug Terminal aparece automáticamente al introducir el comando DEBUG en el programa y ejecutarlo, pero también se puede visualizar mediante el icono pulsando después en Run
DPTO. DE TECNOLOGÍA © J.Garrigós
y seleccionado el puerto de comunicaciones.
I.E.S. ANDRÉS DE VANDELVIRA
Pag. 43
MICROCONTROLADORES Y SU APLICACIÓN EN ROBÓTICA La manera en que la información puede ser mostrada mediante el comando DEBUG puede ser ajustada mediante los modificadores de formato mostrados en la tabla siguiente:
Para ayudar a una mejor presentación de los datos en pantalla, la instrucción DEBUG admite el uso de caracteres de control indicados en la tabla siguiente:
El siguiente programa utiliza la instrucción DEBUG para la presentación del valor de la variable X. ' {$STAMP BS2} ' {$PBASIC 2.5} ' UTILIZACIÓN DE LA INSTRUCCION DEBUG X VAR Byte X =65 DEBUG ? X , "MUESTRA EL VALOR DECIMAL DE X EN PANTALLA" PAUSE 2000 'ESPERA 2 SEGUNDOS DEBUG CLS 'BORRA LA PANTALLA DEBUG ASC ? X, "MUESTRA EL CARACTER ASCIL DEL VALOR DECIMAL DE X " PAUSE 2000 'ESPERA 2 SEGUNDOS DEBUG CLS 'BORRA LA PANTALLA
DPTO. DE TECNOLOGÍA © J.Garrigós
I.E.S. ANDRÉS DE VANDELVIRA
Pag. 44
MICROCONTROLADORES Y SU APLICACIÓN EN ROBÓTICA
DEBUG DEC ? X, "MUESTRA EL VALOR DECIMAL DE X EN PANTALLA -de 1 a 5 dígitos-" PAUSE 2000 'ESPERA 2 SEGUNDOS DEBUG CLS 'BORRA LA PANTALLA DEBUG SDEC ? X, "MUESTRA EL VALOR DECIMAL DE X EN PANTALLA CON SIGNO- de 1 a 5 dígitos-" PAUSE 2000 'ESPERA 2 SEGUNDOS DEBUG CLS 'BORRA LA PANTALLA DEBUG SHEX ? X, "MUESTRA EL VALOR HEXADECIMAL DE X EN PANTALLA CON SIGNO -de 1 a 4 dígitos" PAUSE 2000 'ESPERA 2 SEGUNDOS DEBUG CLS 'BORRA LA PANTALLA DEBUG SBIN ? X, "MUESTRA EL VALOR BINARIO DE X EN PANTALLA CON SIGNO -de 1 a 16 dígitos-" PAUSE 2000 'ESPERA 2 SEGUNDOS DEBUG CLS 'BORRA LA PANTALLA
La instrucción DEBUG podemos utilizar el código ASCIL, en vez del SÍMBOLO. Por ejemplo:
DEBUG 0, 2, 40,12, “BS2 es Genial...”, 7,7,7 ‘Limpia la pantalla, (0) ‘Mueve el cursor a las coordenadas x=40, y=12, (2) ‘Imprime “BS2 es Genial... ‘Emite 3 sonidos acústicos, (7) La instrucción DO..LOOP permite generar un lazo iterativo que se repetirá cierta cantidad de veces. Si se combina con la opción WHILE, el lazo se ejecutará mientras se cumpla la condición; en caso de utilizar el UNTIL, se realizará hasta que la condición sea verdadera. Si no se establecen condiciones, se hará un lazo infinito. Pueden concatenarse hasta 16 lazos DO..LOOP. La siguiente practica permite mostrar en pantalla el estado de las entradas conectadas a los pines 7 y 8, lo utilizaremos para el control de los sensores de contacto de nuestro robot, es por ello, que vamos a explicar también el circuito eléctrico y sus características particulares para nuestra aplicación.
16. PRÁCTICA 8: CONTROL DE SENSORES DE CONTACTO. Como es sabido, los interruptores crean pequeños arcos en sus maniobras de cierre y apertura que pueden ser detectados como
varios ceros y unos lógicos en una misma
maniobra, si el nivel de tensión sobrepasa los niveles lógicos para V IH y VIL. Por ejemplo, el circuito integrado SN74LS04 es un inversor séxtuple y el fabricante nos garantiza que si la tensión de entrada V IL es menor de 0,8 V se considerará un nivel lógico LOW (cero) y para garantizar que el circuito integrado considera un nivel de entrada lógico alto V IH (uno) la tensión ha de ser 2
DPTO. DE TECNOLOGÍA © J.Garrigós
I.E.S. ANDRÉS DE VANDELVIRA
Pag. 45
MICROCONTROLADORES Y SU APLICACIÓN EN ROBÓTICA maniobra de cierre o apertura del interruptor
5V
se sobrepasen los valores de tensión por encima y por debajo de los niveles del
2V 0,8 V
circuito integrado. La siguiente figura intenta mostrar
esquemáticamente
el
efecto
descrito, donde la línea negra es la
0V
maniobra teórica y la roja es la que “realmente” puede ocurrir. Para evitar que estos transitorios puedan ser tomados como varios ceros o unos lógicos en una misma maniobra se utilizan unas puestas lógicas que llevan incorporadas el trigger Schmitt o disparador Schmitt . Este complemento permite que los rebotes en los interruptores
sean
despreciados,
en
definitiva
únicamente
considerará un nivel de entrada lógico definitivo si el nivel de tensión se mantiene sin variaciones un determinado tiempo. Para el caso de un buffer con disparador Schmitt el símbolo utilizado sería: En ocasiones, el efecto de atenuación de una sola puerta no es suficiente y es usual que se enserien varias. En nuestro caso particular, utilizaremos el circuito integrado HEF40106BP que es un inversor séxtuple con disparadores Schmitt. El esquema de conexión del circuito que emplearemos será el siguiente: Como es natural hay que alimentar el circuito integrado con + 5V (V DD) a la patilla 14 y GND (VSS) a la patilla 7 de dicho C.I.
+ 5V Sensor de contacto derecho
1
2
3
4
5
6
13
12
Pin 7
+ 5V Pin 8
Sensor de contacto izquierdo
DPTO. DE TECNOLOGÍA © J.Garrigós
I.E.S. ANDRÉS DE VANDELVIRA
Pag. 46
MICROCONTROLADORES Y SU APLICACIÓN EN ROBÓTICA La imagen nos muestra el montaje real
El programa de instrucciones para la detección de los estados de los sensores de contacto es: ' Visualizar las líneas de E/S conectadas a los SENSORES DE CONTACTO. ' {$STAMP BS2}. ' Directiva para indicar la version de Basic Stamp ' {$PBASIC 2.5}. 'directiva usada para indicar la versión de PBASIC DEBUG "ESTADO DE LOS SENSORES DE CONTACTO", CR,"Izda Dcha.", CR,"------ ------" DO
'bucle iterativo sin fin
DEBUG CRSRXY, 0, 3,"P7 = ", BIN1 IN7," P8 = ", BIN1 IN8 'Visualiza en columna 0, fila 3 los datos PAUSE 50 ' espera 50 ms LOOP
'Volver al inicio del bucle
La ventana Debug Terminal muestra el estado de los sensores (en la figura esta activado el del lado derecho).
DPTO. DE TECNOLOGÍA © J.Garrigós
I.E.S. ANDRÉS DE VANDELVIRA
Pag. 47
MICROCONTROLADORES Y SU APLICACIÓN EN ROBÓTICA Se propone al lector, que elabore un programa que permita contar el número de veces que se activan cada uno de los sensores de contacto y cuando alguno de ellos llegue a 10 muestre el mensaje “EL SENSOR DE CONTACTO DERECHO (IZQUIERDO) SE HA ACTIVADO 10 VECES” , a la vez que lo resetea y activa de nuevo el bucle.
17. INSTRUCCIÓN DTMFOUT Una de las aplicaciones más populares de un microcontroladores está en los sistemas de alarma, en este sentido, ya hemos estudiado como gobernar señales de entrada y salida digitales. Los sistemas de alarma modernos, además de activar sirenas, luces, etc.. son capaces de enviar SMS o hacer llamadas telefónicas de forma automática a números de teléfono previamente programados. El comando DTMFOUT
nos permite genera un tono doble de multifrecuencia
telefónica, más conocido como Dual Tone Multifrecuency (DTMF), a través de unos de los pines del microcontrolador que podemos utilizar para hacer una llamada a través de una línea telefónica convencional o a través de un teléfono móvil. La nomenclatura de este comando es la que se indica: DTMFOUT Pin, {OnTime, OffTime,} [Tone{Tone….}]
Pin.- Puede ser una variable, una constante o una expresión (0..15). Especifica el número de pin del microcontrolador por donde saldrá la señal generada
OnTime.- Es opcional y puede ser una variable, una constante o una expresión. Puede variar entre 0 y 65535, y especifica la duración del tono. Por defecto su valor es de 200 ms.
OffTime.- Es opcional y puede ser una variable, una constante o una expresión. Puede variar entre 0 y 65535 y su valor especifica la duración del silencio entre tonos. Por defecto el calor asignado es de 50 ms
Tone.- Puede ser una variable, una constante o una expresión. Su valor varía entre 0 y 15 y especifica los tonos a generar Valor del tono
Tecla del teléfono correspondiente
0–9
Dígitos del 0 al 9
10
Asterisco (*)
11
Almohadilla (#)
12-15
Cuarta columna de tonos de A a D
Ejemplo: Imaginemos que deseamos marcar el número 967 21 03 11 a través del pin 8 DTMFOUT 8, [9,6,7,2,1,0,3,1,1] Si se desea retardar el paso de marcar, para acomodar una línea telefónica ruidosa se podrían utilizar los valores opcionales OnTime y OffTime.
DPTO. DE TECNOLOGÍA © J.Garrigós
I.E.S. ANDRÉS DE VANDELVIRA
Pag. 48
MICROCONTROLADORES Y SU APLICACIÓN EN ROBÓTICA Para conectar el microcontrolador a una línea telefónica estándar RTB ( Radio Telefonía Básica) hay que montar el siguiente circuito: Vcc = + 12 V
LÍNEA TELEFONICA
IC 10 / 1W
1 A
1N4007 RB = 2200 IB VRB
ACTIVACIÓN DEL RELÉ DESDE EL PIC
2 A
10 / 1W
BD135 V B
E
600 600
1k / 1W r o d a m r o f s n a r T
100 nF / 100V ENTRADA DE PULSOS DESDE EL PIC
1 nF / 100V
Zener 3,9V 1N5228BCT-ND
El circuito anterior se puede apreciar físicamente en la siguiente figura.
Interface de marcación telefónica para marcación por pulsos con un 17.1. FUNCIONAMIENTO TÉCNICO DEL DTMFOUT El Microcontrolador BS2 es un dispositivo puramente digital. Los tonos de DTMF son formas de onda análogas, consistiendo en una mezcla de dos ondas del seno en diversas frecuencias de audio. ¿Entonces cómo un dispositivo digital genera una salida análoga?. El BS2 crea y mezcla las ondas senoidales matemáticamente, entonces utiliza la corriente que resulta de los números para controlar el ciclo en una rutina muy rápida de la modulación de pulsos o (PWM). Podemos decir que realmente lo que genera el BS2 es una corriente rápida de pulsos. El
propósito
de
los
arreglos de filtración del esquema eléctrico anterior es alisar la alta
DPTO. DE TECNOLOGÍA © J.Garrigós
I.E.S. ANDRÉS DE VANDELVIRA
Pag. 49
MICROCONTROLADORES Y SU APLICACIÓN EN ROBÓTICA frecuencia del PWM, dejando salir solamente el audio de una frecuencia más baja detrás. Eliminándoles algunos armónicos generados. Los circuitos demostrados aquí son solamente un punto de partida; se puede diseñar o utilizar un filtro paso bajo activo alrededor de los 2 Khz. Tabla de frecuenci a para generar lo DTMF 1029 Hz
1336 Hz
1477 Hz
1663 Hz
697 Hz
1
2
3
A
770 Hz
4
5
6
B
852 Hz
7
8
9
C
941 Hz
*
0
#
D
Cuando se pulsa un 1 en el teclado telefónico se produce una mezcla de frecuencia de 697 Hz y 1209 Hz. En cada tecla se combina la frecuencia de la fila con la frecuencia de la columna. Entonces cada tono audible es único. En caso de que
se
desee
interpretar
estas
señales, existe en el
mercado
una
gama de circuitos integrados que se llaman
DTMF
Decoder . Se puede ver un ejemplo en la s figura.
DPTO. DE TECNOLOGÍA © J.Garrigós
Tecla
Q1
Q2
Q3
Q4
1
0
0
0
1
2
0
0
1
0
3
0
0
1
1
4
0
1
0
0
5
0
1
0
1
6
0
1
1
0
7
0
1
1
1
8
1
0
0
0
9
1
0
0
1
0
1
0
1
0
*
1
0
1
1
#
1
1
0
0
A
1
1
0
1
B
1
1
1
0
C
1
1
1
1
D
0
0
0
0
I.E.S. ANDRÉS DE VANDELVIRA
Pag. 50
MICROCONTROLADORES Y SU APLICACIÓN EN ROBÓTICA
18. OPERADORADORES MATEMÁTICOS NCD Y DCD 18.1. OPERADOR MATEMÁTICO NCD De igual forma que el microcontrolador puede calcular el seno, el coseno o la raiz cuadrada de un número, también utiliza otros operadores matemáticos uno de los cuales es NCD . Este operador nos devuelve la posición en que se encuentra el bit más significativo de un valor entre 1 y 16. En caso de que no existiera ningún bit a 1 en el valor dado devuelve cero. El siguiente programa nos muestra la posición del bit más significativo de la variable VALOR. Los resultados de salida se pueden ver en la ventana Debug Terminal ' {$STAMP BS2} ' {$PBASIC 2.5} DEBUG CLS VALOR VAR Word VALOR = %00000100 DEBUG DEC2 NCD VALOR, CR ' MUESTRA LA POS. 3 VALOR = %00100100 DEBUG DEC2 NCD VALOR, CR ' MUESTRA LA POS. 6 VALOR = %01100100 DEBUG DEC2 NCD VALOR, CR ' MUESTRA LA POS. 7 VALOR = %00000000 DEBUG DEC2 NCD VALOR, CR ' MUESTRA LA POS. 0 VALOR = %100010001000 DEBUG DEC2 NCD VALOR, CR ' MUESTRA LA POS. 12
18.2. OPERADOR MATEMÁTICO DCD Este operador matemático ya estudiado en la pregunta 13 volvemos a repasarlo de nuevo a fin de entender el concepto de complemento a 1 de un valor binario. Como ya sabemos, el operador DCD devuelve la potencia en base 2 entre un rango de exponentes de (0 a 15). Si a la variable PEPE toma el valor DCD 4 , el valor de PEPE será: En binario PEPE =%0000 0000 0000 1000 Expresado en valor decimal con 5 dígitos DEC5 PEPE= 00008
DPTO. DE TECNOLOGÍA © J.Garrigós
I.E.S. ANDRÉS DE VANDELVIRA
Pag. 51
MICROCONTROLADORES Y SU APLICACIÓN EN ROBÓTICA El siguiente ejemplo muestra como funciona este operador. ' {$STAMP BS2} ' {$PBASIC 2.5} 'UTILIZACIÓN DEL OPERADOR MATEMÁTICO DCD SALIDA VAR Word 'Declaramos la variable SALIDA con formato word I VAR Word 'Declaramos la variable I con formato word DEBUG CLS SALIDA = 0 FOR I = 0 TO 15 SALIDA = DCD I
'Borra la pantalla 'Asigna a la variable SALIDA valor 0 'Se inicia un bucle que asigna a I los valores que van de 0 a 15 'Asigamos a la variable SALIDA el valor 2^I
DEBUG DEC2 I,"-",BIN16 SALIDA,"-",DEC5 SALIDA, CR 'Se muestra en pantalla el valor de I , el valor de 'la variable SALIDA en BINARIO y el valor de la 'variable SALIDA en DECIMAL con formato de 5 dígitos PAUSE 500 'Se hace una pausa de 0,5 seguntos antes de repetir el bucle NEXT STOP 'Fin de programa
La salida del programa anterior se muestra en la siguiente figura.
Se puede hacer una ligera variación del programa anterior para hacer un complemento a 1 del valor binario anteponiendo el símbolo ~ al operador DCD, con lo que la salida sería:
DPTO. DE TECNOLOGÍA © J.Garrigós
I.E.S. ANDRÉS DE VANDELVIRA
Pag. 52
MICROCONTROLADORES Y SU APLICACIÓN EN ROBÓTICA
19. PRÁCTICA 9: JUEGO DE LUCES DE GUSANO El siguiente programa realiza un juego de luces dando vueltas a través de un display de 7 segmentos simulando el movimiento de un gusano. ' {$STAMP BS2} ' {$PBASIC 2.5} ' JUEGO DE LUCES DE GUSANO AUX VAR Nib DIRL=%11111111 inicio: FOR AUX=0 TO 5 PAUSE 75 OUTL=~DCD AUX IF IN9=1 THEN fin NEXT GOTO INICIO
'Declaramos la variable AUX con valor nible 2^4 (0 a 15 ‘Declaramos el byte bajo –bits 0 al 7 – como salidas 'Se establece un contador de 6 bucles 0 a 5 'Pausa de 75 ms 'Asignamos al byte bajo (bit0 al bit7, ambos incluidos) el complemento a 1 de 2^AUX 'Establecemos una salida del bucle en caso de que la entrada 9 se ponga a 1
FIN: PAUSE 2000 STOP
El programa anterior deja un LED encendido cuando se direcciona a la etiqueta FIN. Se propone al lector que realice las modificaciones necesarias para que todo el display quede apagado o bien, si se desea, todo quede encendido.
DPTO. DE TECNOLOGÍA © J.Garrigós
I.E.S. ANDRÉS DE VANDELVIRA
Pag. 53
MICROCONTROLADORES Y SU APLICACIÓN EN ROBÓTICA a b c d e f g P9
D V N 5 G +
20. COMANDO BRANCH El comando BRANCH permite realizar saltos a la posición de una etiqueta durante la ejecución del programa en función del valor asignado a su indicador o índice. La nomenclatura es la siguiente: BRANCH Índice, [Etiqueta1, Etiqueta2, Etiqueta3, …….EtiquetaN] Índice es una variable/constante o expresión tipo Byte (0 a 255) que especifica la cantidad de etiquetas a la que se puede redireccionar la ejecución del programa. Etiqueta son las direcciones de referencia o bloque donde apuntará el programa La ejecución comienza en la etiqueta especificada. Por ejemplo, si (índice) vale 0, el programa salta a la primera etiqueta especificada en la lista, si (índice) es 1, salta a la segunda y así sucesivamente. Si (índice) es mayor ó igual al número de etiquetas, no se toma ninguna acción y la ejecución continúa con la declaración siguiente al BRANCH. Se pueden usar hasta 256 etiquetas en una instrucción BRANCH. El siguiente programa realiza saltos a las etiquetas Uva (si la variable índice=0), Pera (si la variable índice=1) y Manzana (si la variable índice=2)
DPTO. DE TECNOLOGÍA © J.Garrigós
I.E.S. ANDRÉS DE VANDELVIRA
Pag. 54
MICROCONTROLADORES Y SU APLICACIÓN EN ROBÓTICA
' {$STAMP BS2} ' {$PBASIC 2.5} ' UTILIZACIÓN DEL COMANDO BRANCH indice VAR Byte Principal: DEBUG CRSRXY,0, 3, "Seleccione una Fruta del [0 - 2]", CR 'Se sitúa el cursor a la coordenada 0,3 SERIN 16, 16468, [DEC1 indice] 'asigna a la variable índice el valor decimal introducido por teclado '16 (significa que utilizaremos el puerto de programación) y 16468 que se 'transmitirán 8 bits a 9600 baudios sin paridad BRANCH indice,[Uva, Pera, Manzana] DEBUG CLS DEBUG CRSRXY, 0, 3,"No ha seleccionado correctamente" PAUSE 1500 DEBUG CLS GOTO Principal Uva: DEBUG CRSRXY,2, 4,"Ha seleccionado Uva......" 'CRSRXY situa el cursor en la coordenada 2,4 GOTO Principal Pera: DEBUG CRSRXY,2, 4,"Ha seleccionado Pera....." GOTO Principal Manzana: DEBUG CRSRXY,2, 4,"Ha seleccionado Manzana.." GOTO Principal
21. PRÁCTICA 10: GOBERNANDO EL TELÉFONO Esta práctica consiste en marcar un determinado número de teléfono en función del estado de unas entradas. Para esta práctica se utilizarán distintos comandos y operadores estudiados anteriormente. a) b) c) d)
Hay que tener en cuenta ciertas consideraciones en esta práctica: Se debe utilizar el circuito de adaptación de impedancias indicado en el apartado 17 anterior. En estado de reposo la línea telefónica no debe estar conectada al transformador dado que si se descolgara otro teléfono de la vivienda se generaría ruido debido al acoplamiento en paralelo de impedancias. Antes de la secuencia de marcado se debe activar la base del transistor que excita el relé electromagnético, consiguiendo conectar la línea telefónica al transformador adaptador de impedancias. Tras activar el pulsador de colgar (bit 9) el relé se desactivará.
' {$STAMP BS2} ' {$PBASIC 2.5} ' PROGRAMA DE MARCADO DE NÚMEROS DE TELÉFONO EN FUNCIÓN DEL ESTADO DE LAS ‘ ENTRADAS AUX VAR Nib vueltas VAR Byte DIRL=%11111111 DIRC=%1101 DIRD=0
'Declara la variable AUX del tipo Nibble 'Declara la variable vueltas como byte 'Declara los 8 bit bajos bit0 a bit7 como salidas, de ahí que los ponemos a 1 'Declara en el Nibble C los bit 8, 10 y 11 como salidas y el 9 como 'entrada. LED indicación de tel descolgado en el bit8, pulsador de colgar bit9, 'salida de tonos Bit 10 y activación relé Bit 11 'Declara los bits 12, 13, 14 y 15 como entradas -los pone a cero-
DPTO. DE TECNOLOGÍA © J.Garrigós
I.E.S. ANDRÉS DE VANDELVIRA
Pag. 55
MICROCONTROLADORES Y SU APLICACIÓN EN ROBÓTICA
INICIO: OUT8=0 OUT11=0 OUTL=$FF
' Pone a cero el LED que indica teléfono descolgado ' Pone a cero el transistor de activación del relé ' Pone a cero el byte bajo de los LED del display
AUX=NCD IND
' La variable AUX toma un valor de 1 a 4 que se corresponde con el bit ' de mayor peso puesto a 1 en el nibble D -bit12, bit13, bit14 y bit 15
DEBUG ?AUX
' Nos muestra en pantalla el valor adoptado por la variable AUX
BRANCH AUX,[INICIO, UNO, DOS, TRES, CUATRO] ' Si AUX vale cero se va a la etiqueta INICIO. Si el bit 12 ' está a 1 y los bits 13, 14 y 15 están a cero salta a la ' etiqueta UNO. Si el bit de mayor peso puesto a 1 fuera el ' bit 13 saltaría a la etiqueta DOS y así sucesivamente. UNO: OUTL=%11111001 ' Muestra un 1 en el display de ánodo común GOSUB DESCOLGAR ' Salta a la subrutina DESCOLGAR DTMFOUT 10,[6,7,6,0,1,6,3,0,6] ' Marca por la patilla 10 el número de teléfono indicado GOTO CONVERSACION ' Direcciona la ejecución del programa a la etiqueta CONVERSACION DOS: OUTL=%10100100 GOSUB DESCOLGAR DTMFOUT 10,[9,6,7,2,1,5,3,5,4] GOTO CONVERSACION
'Muestra un 2 en el display de ánodo común
TRES: OUTL=%10110000 GOSUB DESCOLGAR DTMFOUT 10,[9,6,7,0,1,6,3,0,6] GOTO CONVERSACION
' Muestra un 3 en el display de ánodo común
CUATRO: OUTL=%10011001 GOSUB DESCOLGAR DTMFOUT 10,[8,7,8,0,1,5,3,8,0] GOTO CONVERSACION
' Muestra un 4 en el display de ánodo común
CONVERSACION: FOR vueltas=0 TO 5 PAUSE 150 OUTL=~DCD vueltas
' Etiqueta que nos indica que la línea telefónica está abierta tras el marcado del número ' Ejecuta un bucle FOR NEXT para juego de luces de gusano girando ' Espera 150 ms ' Asigna al byte bajo bit0 al bit 7 el complemento a 1 (~) de 2^vueltas. ' El complemento a 1 se hace por ser el display de ánodo común y necesitar ceros ' en las entradas a,b,c,d,e,f,g para su activación
IF IN9=1 THEN INICIO 'Si pulsador=1 cortamos la conversación y para la ejecución del bucle NEXT GOTO CONVERSACION DESCOLGAR: OUT8=1 OUT11=1 PAUSE 2000
' Pone a 1 el LED indicando teléfono descolgado ' Activa el transistor que activa el relé de cierre de la línea telefónica ' Espera 2 segundos
DTMFOUT 10,[0] PAUSE 1500 RETURN
' Marca un 0 por el pin 10 entendiendo que estamos en un lugar con centralita telefónica ' Espera 1,5 segundos a que la centralita nos de tono de marcado ' Retorna la ejecución del programa al punto de inicio de la subrutina
DPTO. DE TECNOLOGÍA © J.Garrigós
I.E.S. ANDRÉS DE VANDELVIRA
Pag. 56
MICROCONTROLADORES Y SU APLICACIÓN EN ROBÓTICA
ESQUEMA DE CONEXIÓN DE LA PRÁCTICA 10 Vcc = + 12 V I
LÍNEA TELEFONICA
C
10 / 1W
1 A
1N4007
ACTIVACIÓN DEL RELÉ DESDE EL PIC
P15
P14
P13
RB = 2200 IB VRB
600 600
2 A
10 / 1W
BD135
1k / 1W r o d a m r o f s n a r T
100 nF / 100V ENTRADA DE PULSOS DESDE EL PIC
1 nF / 100V
Zener 3,9V 1N5228BCT-ND
V B
E
D V N 5 G +
P12
P9 Colgar P8
FOTOGRAFÍA DEL MONTAJE DE LA PRÁCTICA 10
DPTO. DE TECNOLOGÍA © J.Garrigós
I.E.S. ANDRÉS DE VANDELVIRA
Pag. 57
MICROCONTROLADORES Y SU APLICACIÓN EN ROBÓTICA
22. SERVOMOTORES Los servomotores son motores de corriente continua que incorporan un circuito electrónico que permite controlar de forma sencilla y segura la dirección, la velocidad y la duración del giro de sus ejes mediante impulsos eléctricos. El eje de un servo puede ser posicionado con un ángulo determinado en función de una señal de control codificada. Mientras que la señal codificada esté presente en la entrada de control, el servo mantendrá la posición angular del engranaje. Cuando la señal de control cambie, la posición angular del eje del servo también cambiará. En la práctica, se usan servos para posicionar superficies de control como el movimiento de palancas, timones, sistemas de posicionamiento y control, radio control, y por supuesto, en robótica. En general los servos suelen girar determinados ángulos, siendo corriente ± 90º respecto a su posición de reposo. A fin de tener un mejor par motor el eje de utilización está acoplado al eje del motor mediante una reductora de engranajes. En la industria existen también servomotores de rotación continua que pueden girar en ambos sentidos a una velocidad controlada dependiente de la señal de control aplicada a los mismos. Estos son los más empleados
en
el
acoplamiento de las ruedas de los robots. En la imagen se muestra
un
rotación PARALLAX servomotor
servo
continua
de de
y
un
FUTABA
S3003 que permite un giro de ± 90º respecto a su posición de reposo.
Para controlar un servo tendremos que aplicar un pulso de duración y frecuencia específicos. Todos los servos disponen de tres cables dos para alimentación Vcc, GND y otro cable para aplicar el tren de pulsos de control que harán que el circuito de control diferencial interno ponga el servo en la posición indicada por la anchura del pulso. En la siguiente tabla están indicados los valores de control y disposición de cables de varias marcas que comercializan servos.
DPTO. DE TECNOLOGÍA © J.Garrigós
I.E.S. ANDRÉS DE VANDELVIRA
Pag. 58
MICROCONTROLADORES Y SU APLICACIÓN EN ROBÓTICA Duración pul so (ms) Fab ri cant e m in. neutral. máx.. Futaba 0.9 1.5 2.1 Hitech 0.9 1.5 2.1 Graupner/Jr 0.8 1.5 2.2 Multiplex 1.05 1.6 2.15 Robbe 0.65 1.3 1.95 Simprop 1.2 1.7 2.2
Hz 50 50 50 40 50 50
disposi ción de cables + batt -batt Control. rojo negro blanco rojo negro amarillo rojo marrón naranja rojo negro amarillo rojo negro blanco rojo azul negro
Los servos Futaba y Parallax que utilizaremos en este curso y tienen las siguientes características:
Tensión de alimentación máxima = 6 V dc
Velocidad de rotación con alimentación a 5 V dc y sin carga = 60 r.p.m.
Momento = 3,4 kg*cm
Peso = 45 gramos
Medidas (Longitud x Ancho x Alto ) = 40,5 x 20 x 38 mm La señal de control ha de ser una onda cuadrada de 50 Hz (periodo= 20 ms). Cada
periodo se dará un pulso alto con un ancho determinado dependiendo del ángulo en que se desea posicionar el eje. La siguiente figura muestra la anchura de los pulsos necesarios para los ángulos 0º, 90º y 180º. Bastará hacer una regla de tres para calcular el ancho de pulso para el posicionamiento de un determinado ángulo.
2,5 ms
0,5 ms
20 ms /50 Hz
20 ms /50 Hz
20 ms /50 Hz
180º
90º
0º
DPTO. DE TECNOLOGÍA © J.Garrigós
1,5 ms
I.E.S. ANDRÉS DE VANDELVIRA
Pag. 59
MICROCONTROLADORES Y SU APLICACIÓN EN ROBÓTICA No
obstante,
en
la
práctica los valores indicados pueden tener ciertas variaciones, es por ello que los motores disponen de potenciómetros de regulación para establecer la posición de reposo.
Para ello,
introduciremos a la entrada de control una onda cuadrada de periodo 20 ms, de forma que en cada periodo se produzca un pulso e 1,5 ms. En estas condiciones el eje debe estar parado, por lo cual regularemos mediante un destornillador de cabeza plana un potenciómetro hasta que se aprecie que el eje del motor no se mueve.
23. COMANDO PULSOUT El comando PULSOUT genera en un pin un pulso de una duración determinada siguiendo la siguiente nomenclatura: PULSOUT Pin, Pulso Pin.-Especifica el número de pin del microcontrolador por donde se generarán los pulsos (0-15) Pulso.- Puede ser una variable o una constante donde se especifica la duración del pulso que podrá variar desde 0 a 65.536 (2^16) considerando que cada pulso equivale a un tiempo de 2 s.
Es decir, un valor de pulso de 65536 equivale a un pulso a nivel alto que durará
65536*2*10 -6 s = 0,13107 s. Para entenderlo mejor pondremos un ejemplo. Si deseamos generar un pulso de 10ms en el pin 13, el comando sería: PULSOUT 13, 5000
5000 * 2 s *
1 ms 1000 s
10 ms
Para utilizar este comando se debe declarar previamente como salida el pin por donde se van a generar los pulsos. Por otro lado, la polaridad del pulso dependerá también del estado lógico anterior en que se encuentra el pin de salida. De este modo, si el pin se encuentra a nivel lógico bajo, el pulso será positivo, pero si se encuentra a nivel lógico alto el pulso será negativo. Esto último se puede apreciar en los siguientes ejemplos.
DPTO. DE TECNOLOGÍA © J.Garrigós
I.E.S. ANDRÉS DE VANDELVIRA
Pag. 60
MICROCONTROLADORES Y SU APLICACIÓN EN ROBÓTICA ' {$STAMP BS2} ' {$PBASIC 2.5} ' EJEMPLO DE UTILIZACIÓN DELCOMANDO PULSOOUT LOW 15 PULSOUT 15, 50000 STOP
' Declara el Pin 15 como salida a un nivel lógico bajo ' Genera un pulso de 100 ms por el Pin 15 ' Detiene el programa
Generación de un pulso positivo
Generación de pulsos negativos ' {$STAMP BS2} ' {$PBASIC 2.5} ' EJEMPLO DE UTILIZACIÓN DELCOMANDO PULSOOUT HIGH 15 PULSOUT 15, 50000 STOP
' Declara el Pin 15 como salida a un nivel lógico alto ' Genera un pulso de 100 ms por el Pin 15 ' Detiene el programa
24. PRÁCTICA 11: POSICIONAMIENTO DE UN SERVOMOTOR. En esta práctica se posiciona un servomotor FUTABA S3003 mediante la siguiente secuencia: 1. Supondremos que el estado de reposo corresponde a la posición de referencia del eje apuntando a 90º trigonométricos. 2. Se posiciona el eje en posición de reposo y permanece 1 segundo parado
DPTO. DE TECNOLOGÍA © J.Garrigós
I.E.S. ANDRÉS DE VANDELVIRA
Pag. 61
MICROCONTROLADORES Y SU APLICACIÓN EN ROBÓTICA 3. A partir de la posición de reposo giramos en sentido trigonométrico en intervalos de unos 10º sexagesimales hasta la posición de 90º. 4. Se para el eje 3 segundos y retorna a la posición de reposo 5.
Desde la posición de reposo gira en sentido antitrigonométrico en intervalos de 10º hasta posicionar el eje en 0º trigonométricos.
6. Repite el ciclo ininterrumpidamente. ' {$STAMP BS2} ' {$PBASIC 2.5} 'POSICIONAMIENTO A INTERVALOS DE UN SERVO FUTABA 3003 servo CON 13 ' Declaramos como constante la variable servo y la asignamos al pin 13 x VAR Word ' Declaramos una variable x como PALABRA p VAR Word ' Declaramos la variable p como PALABRA INICIO: P=50
' Asignamos a p valor de 0
'CENTRADO DEL EJE DEL SERVO EN POSICIÓN 90º FOR x=1 TO 20 PULSOUT servo,750 PAUSE 20 'generamos una pausa de 20 ms -duración del periodo NEXT PAUSE 1000 ' GIRO EN SENTIDO TRIGONOMÉTRICO FOR x=1 TO 9 PULSOUT servo,750+p PAUSE 20 DEBUG ? 700+p p=p+50 PAUSE 1000 NEXT
'Hacemos bucles sumando 50 unidades al valor 750 iniciales hasta llegar a los '1200 de limite máx que se corresponden con los 180º tras las pruebas 'La primera vez que recorre el bucle el pulso es 750+50=800 'Esperamos 20 milisegundos 'Muestra en pantalla el valor del pulso ' Incrementamos el valor de la variable P con cada pasada del bucle ' Paramos el eje 1 segundo
PAUSE 2000 'CENTRADO DEL EJE DEL SERVO EN POSICIÓN 90º FOR x=1 TO 20 PULSOUT servo,750 PAUSE 20 'Generamos una pausa de 20 ms -duración del periodo NEXT PAUSE 1000 ' GIRO DE 90º EN SENTIDO ANTITRIGONOMÉTRICO TRAS CENTRADO P=50 FOR x=1 TO 9 ' Hacemos bucles restando 50 unidades al valor 750 iniciales hasta llegar a los ' 300 de límite mínimo que se corresponden con los 0º tras las pruebas realizadas PULSOUT servo,750-p PAUSE 20 ' Esperamos 20 ms DEBUG ? 750-p ' Muestra en pantalla el valor del pulso P=P+50 PAUSE 1000 ' Hacemos una pausa de 1 s NEXT PAUSE 2000 GOTO inicio
DPTO. DE TECNOLOGÍA © J.Garrigós
I.E.S. ANDRÉS DE VANDELVIRA
Pag. 62
MICROCONTROLADORES Y SU APLICACIÓN EN ROBÓTICA En las siguientes figuras se puede apreciar la conexión de la práctica del servomotor
Futaba S3003 D V N 5 G +
GND +5V
25. PRÁCTICA 12: CONTROL DE UN SERVOMOTOR DE ROTACIÓN CONTINUA . En esta práctica aprenderemos a controlar los servomotores de rotación continua Parallax descritos anteriormente a través del PIC BasicStamp. Hemos de aclarar que el funcionamiento de los servomotores de rotación continua no es exactamente el mismo que los servomotores Futaba descritos en el apartado anterior. Comenzamos por describir el funcionamiento de un servomotor de rotación continua Parallax, el cual, responde a las siguientes reglas: 1. La alimentación eléctrica es la misma que los servo Futaba, es decir, Vcc =+5V (cable rojo) y GND conectado a 0 V (cable negro) 2. El cable de control (de color blanco) se le ha de enviar una señal cuadrada de 50 Hz (periodo de 20 ms). 3. La posición de reposo responde a un pulso alto de 1,5 ms para f=50Hz 4. Mirando el eje del servo y situado éste en la parte superior: a. Para giro antitrigonométrico (a derechas) a velocidad máxima, el pulso de control será de 1,3 ms a una frecuencia f= 50Hz b. Para giro trigonométrico (a izquierdas) a velocidad máxima, el pulso de control será de 1,7 ms a una frecuencia f =50 Hz
DPTO. DE TECNOLOGÍA © J.Garrigós
I.E.S. ANDRÉS DE VANDELVIRA
Pag. 63
MICROCONTROLADORES Y SU APLICACIÓN EN ROBÓTICA NOTA: A efectos prácticos y dado que la duración del pulso es pequeña en relación al periodo se suelen considerar, en cada ciclo, intervalos de 20 ms a nivel bajo a los que se suma el tiempo del pulso. Esto mismo es lo que se muestra en la siguiente figura:
Vdd = 5V
PARALLAX
PARALLAX
CONTINOUSROTATION www.parallax.com
CONTINOUSROTATION www.parallax.com
CONTROL
GND +5V
Vdd = 5V
Vss = 0 V
CONTROL
GND +5V
Vss = 0 V 20 ms
20 ms
1,3 ms
1,7 ms
GIRO ANTITRIGONOMÉTRICO A VELOCIDAD MÁXIMA
GIRO TRIGONOMÉTRICO A VE LOCIDAD MÁXIMA
Considerando las condiciones anteriores, si deseamos que el servomotor gire en sentido trigonométrico a velocidad máxima el programa sería:
' {$STAMP BS2} ' {$PBASIC 2.5} ‘ GIRO EN SENTIDO TRIGONOMÉTRICO DE UN SERVOMOTOR DE ROTACIÓN CONTINUA INICIO: IF IN5=0 THEN FIN PULSOUT 15, 650 PAUSE 20
' Etiqueta ' Si el Pin 5 esta a 1 fundiona el motor, si está a cero no funciona ' Genera un pulso de 1,3 ms (650 x 2 us x 10E-3 = 1,3 ms) ' Espera 20 ms
FIN: ' Etiqueta GOTO INICIO ' Salto incondicional a la etiqueta INICIO
En las pruebas realizadas, con alimentación a 5 V dc, se ha contabilizado una velocidad angular de 52 r.p.m. con el eje vertical y sin carga.
DPTO. DE TECNOLOGÍA © J.Garrigós
I.E.S. ANDRÉS DE VANDELVIRA
Pag. 64
MICROCONTROLADORES Y SU APLICACIÓN EN ROBÓTICA Se propone al lector la elaboración de un programa que provoque el giro de 5 vueltas completas a velocidad máxima considerando los tiempos de ejecución de instrucciones(4000 instrucciones por segundo) y los de los pulsos a nivel alto y bajo. Para calcular la velocidad de giro se debe calcular a través de una regla de tres, a fin de realizar una primera aproximación, aunque serán las condiciones particulares de cada montaje las que condicionarán la regulación deseada para cada caso. Si consideramos que cada pulso del comando PULSOUT equivale a 2 s podemos calcular los valores necesarios para motor parado, y giros a derecha e izquierda a velocidad máxima 1. Motor parado (pulso de 1,5 ms) : PULSOUT Pin, 750 2. Giro en sentido trigonométrico a velocidad máxima (1,3 ms): PULSOUT Pin, 650 3. Giro en sentido antitrigonométrico a velocidad máxima (1,7 ms): PULSOUT Pin, 850 El número de pulsos a indicar en el comando PULSOUT, en función del tiempo del tiempo necesario de pulso a nivel alto, puede calcularse mediante la expresión:
Tiempo a nivel alto en ms por ciclo 2 * 10 3 Ejemplo para un tiempo a nivel alto de 1,7 ms 1,7 N º Pulsos 850 2 * 10 3 N º Pulsos
Finalmente considerando
y
la práctica 8
(Control de sensores de contacto) y las instrucciones de
control
servomotores
de de
los
rotación
continua se propone al lector la
elaboración
de
un
programa que permita al robot
construido
en
las
prácticas (ver imagen) la navegación forma
que
autónoma al
de
detectar
obstáculo se pare, vuelva hacia
atrás
un
par
de
segundos y gire al lado contrario al sensor de contacto activado para salvar el obstáculo.
DPTO. DE TECNOLOGÍA © J.Garrigós
I.E.S. ANDRÉS DE VANDELVIRA
Pag. 65
MICROCONTROLADORES Y SU APLICACIÓN EN ROBÓTICA
26. EMISIÓN Y DETECCIÓN DE ONDAS ELECTROMAGNÉTICAS INFRAROJAS Las ondas electromagnéticas emitidas por los cuerpos de color rojo tienen una longitud de onda de 780 nm (nanómetros) y son visibles al ojo humano. Por encima de dicha longitud de onda las ondas se denominan "infrarrojas" ( IR ) y ya no son visibles. Existen ciertos modelos de diodos LED que emiten ondas infrarrojas y se llaman LED IR. También existen detectores (receptores) de IR. En nuestras aplicaciones usaremos pares de emisores/receptores que funcionan con una longitud de onda de 980 nm. Existen en el mercado emisores de infroarojos de muy diversas formas físicas, en nuestro caso utilizaremos emisores de infrarojos (IR) cuya aspecto exterior es idéntico al de un diodo LED. En las prácticas programadas en estos apuntes se utiliza un diodo emisor de infrarojos de 5 mm de diámetro cuyas características puede verse a través del datasheet TSAL5300. Entre otros parámetros, podemos destacar una corriente de polarización directa máxima de forma continuada de 100 mA ,con una tensión ánodo-cátodo en polarización directa de 1,36 V, una tensión inversa máxima de 5V , una longitud de onda máxima p= 940 nm con una variación máxima de = 40 nm, un ángulo de emisión de 22º etc… Como es sabido, el ojo humano no es capaz de ver todo el espectro electromagnético y la luz visible va desde el violeta con una longitud de onda 390 nm a los 780nm del color rojo, por encima de esa longitud de onda la radiación no es visible, entra en el infrarojo. En los mandos a distancia es habitual trabajar por encima de los 900 nm y es común un valor de longitud de onda de 980 nm. En cuanto al receptor de IR , también existen en el mercado diversidad de modelos y formas. En este texto nos centraremos en dos tipos fundamentales cuyas hojas de datos se pueden consultar en internet.
DPTO. DE TECNOLOGÍA © J.Garrigós
I.E.S. ANDRÉS DE VANDELVIRA
Pag. 66
MICROCONTROLADORES Y SU APLICACIÓN EN ROBÓTICA
DETECTOR IR TSOP312_ _
DETECTOR IR TSOP48_ _
Los receptores de IR que usaremos en las prácticas llevan incorporados unos filtros ópticos que permiten únicamente el paso de luz infraroja de longitudes de onda próximas a los 980 nm. Además, incorporan un filtro electrónico que impide el paso de señales cuya frecuencia no esté comprendida entre los 25 kHz y los 55 kHz aproximadamente (ver la gráfica anterior para un detector de IR de 38 kHz ). Se puede apreciar que el detector es más sensible a las frecuencias próximas a su valor nominal o asignado. De este modo, se consigue que el detector sea inmune a otras frecuencias de emisión como la luz diurna o la del alumbrado artificial. Todo lo anterior, a efectos prácticos, influye en la forma de enfocar el emisor al receptor (ángulo enfoque) y en la distancia de emisión-recepción. En el caso particular de los pequeños robot móviles, se suelen emplear estos dispositivos para detectar objetos, de modo que, el receptor capte la onda previamente emitida al ser rebotada por un objeto .
DPTO. DE TECNOLOGÍA © J.Garrigós
I.E.S. ANDRÉS DE VANDELVIRA
Pag. 67
MICROCONTROLADORES Y SU APLICACIÓN EN ROBÓTICA Los esquemas eléctricos de conexión de estos componentes son los que se muestran en los siguientes circuitos:
PATILLAJE Y CIRCUITO INTERNO DE UN RECEPTOR DE I.R. TIPO TSOP 312 - -
ESQUEMA DE CONEXIÓN DEL RECEPTOR DE IR TSOP 312_ _ GND
ESQUEMA DE CONEXIÓN DE UN DIODO EMISOR DE IR PIC
1000
A 1 2
3
220
K
PIC
+ 5V
27. COMANDO FREQOUT: NAVEGACIÓN POR IR El comando FREQOUT fue diseñado para generar y sintetizar tonos de sonido. Este comando genera uno o dos tonos senoidales
durante un periodo especificado. La
nomenclatura del comando es la que sigue: FREQOUT Pin, Periodo, Frec1, Frec2 Pin .- Puede ser una variable o una constante (0 -15) y especifica el pin de salida de los tonos generados. Periodo.- Puede ser variable o constante y especifica la duración de un ciclo entre 0 y 65535 (2^16). Su unidad es el milisegundo Frec1.- Puede ser una constante o variable y especifica la frecuencia en Hz del primer tono. Su valor puede variar entre 0 y 32767 Hz (2^15) Frec2.- Puede ser una constante o variable y especifica la frecuencia en Hz del segundo tono. Su valor puede variar entre 0 y 32767 Hz (2^15)
DPTO. DE TECNOLOGÍA © J.Garrigós
I.E.S. ANDRÉS DE VANDELVIRA
Pag. 68
MICROCONTROLADORES Y SU APLICACIÓN EN ROBÓTICA En caso de especificar los dos parámetros Freq1 y Freq2 se obtiene una onda resultante de la mezcla de ambas frecuencias con el periodo indicado. Si bien, en teoría, no se pueden generar ondas de frecuencias superiores a 32767 Hz, debido a los armónicos, este comando nos permite emitir con frecuencias superiores. Los siguientes ejemplos pueden aclarar mejor el funcionamiento de este comando:
La instrucción FREQOUT 7, 1000, 25000 generaría un tono de 25000 Hz durante 1 segundo (1000 ms) a través de la patilla 7
La instrucción FREQOUT 2, 5000, 2500, 4500 genera una mezcla de dos frecuencias: un tono de 2500 Hz y otro de 4500 Hz, durante un perioro de 5 segundos (5000 ms) por el pin 2
La instrucción FREQOUT 8, 1, 38500 genera por el pin 8 un tono de una frecuencia de 38500 Hz de 1 ms de perido. Considerando los esquemas eléctricos anteriores, seguidamente se muestra un
programa que nos permite probar los emisores y receptores de infrarojos tipo TSOP312_ _ montados en paralelo.
G N + D 5 V
+ 5 V
En el montaje y programa están de acuerdo a las siguientes condiciones: 1. Ánodo del Diodo emisor de IR del
G N D
2 1
2 1
3
3
lado izquierdo conectado a través de una resisencia de 1 k ½ W al Pin 15 2. Ánodo del Diodo emisor de IR del
K
K
A
A
lado derecho conectado a través de una resisencia de 1 k ½ W al Pin
0 3. Salida del receptor de IR del lado
0 0 0 1
0 2 2
0 2 2
0 0 0 1
D V N 5 G +
izquierdo conectado a través de una resistencia de 220 ½ W al Pin 14 4. Salida del receptor de IR del lado izquierdo conectado a través de una resistencia de 220 ½ W al Pin 1 El mismo montaje del esquema eléctrico anterior, incluyendo el patillaje, puede apreciarse en la siguiente imagen montado sobre un BOT con una tarjeta HomeWork.
DPTO. DE TECNOLOGÍA © J.Garrigós
I.E.S. ANDRÉS DE VANDELVIRA
Pag. 69
MICROCONTROLADORES Y SU APLICACIÓN EN ROBÓTICA Se ha de observar que en las condiciones del montaje anterior el microcontrolador da un uno lógico cuando no se detecta objeto, que cambia a cero lógico al detectarlo.
' {$STAMP BS2} ' {$PBASIC 2.5} ‘ PRUEBA DE FUNCIONAMIENTO DE LOS EMISORES Y DETECTORES DE IR DET_DER VAR Bit DET_IZQ VAR Bit DEBUG "Estado SENSORES DE INFRAROJOS", CR,"Izda Dcha.", CR,"------ ------" DO FREQOUT 0, 1, 30000 'EMISOR DERECHO: Emite pulsos de 1 ms por el pin 0 de 38500 Hz de frecuencia DET_DER=IN1 'ASIGNA LA VARIABLE DET_DER A LA INTRADA 1 FREQOUT 15, 1, 30000 'EMISOR IZQUIERDO: Emite pulsos de 1 ms por el pin 0 de 38500 Hz de frecuencia DET_IZQ =IN14 ' ASIGNA LA VARIABLE DET_DER A LA INTRADA 14 DEBUG CRSRXY, 0, 3,"DER =" , BIN1 DET_DER, " IZQ =", BIN1 DET_IZQ 'Muestra en coordenadas 0, 3 información PAUSE 100 LOOP
DPTO. DE TECNOLOGÍA © J.Garrigós
I.E.S. ANDRÉS DE VANDELVIRA
Pag. 70
MICROCONTROLADORES Y SU APLICACIÓN EN ROBÓTICA Se propone al lector la elaboración de un programa que permita al robot navegar esquivando obstáculos a través de la detección por infrarojos.
28. MICROBOT SEGUIDOR DE LÍNEA NEGRA. En este apartado haremos que nuestro microbot sea capaz de seguir una línea negra situada sobre una superficie clara, para ello utilizaremos el sensor óptico reflexivo CNY70 (datasheet http://www.micropik.com/pdf/cny70.pdf ) que tiene una construcción compacta donde el emisor de luz emite un haz de infrarojos con una longitud de onda de 950 nm que es detectado por el receptor (un fototransistor) al reflejarse sobre uno objeto. Dado que el transistor puede trabajar en la región activa con un conversor analógico digital (CAD) como el ADC0831 de 8 bits podríamos tener una resolución de hasta 256 valores que nos permitirían detectar todo un abanico de colores, en todo caso, salvo que se adjunte un anexo con posterioridad a estos apuntes, de momento únicamente trabajaremos con dos estados posible detección de negro o blanco (colores claros). El esquema y patillaje del CNY70 se puede apreciar en la siguiente figura:
Área marcada
Vista superior
Dado que el CNY70 es un dispositivo
Vcc=+5V
que trabaja en región activa del transistor se obtiene una salida analógica función de la cantidad de luz reflejada. Para obtener una señal digital (0 - 1 lógico) utilizaremos un Trigger Schmitt conectado según se muestra en la figura:
2 8
A
E Área marcada
En las distintas pruebas realizadas en el prototipo construido los resultados han sido adecuados cuando la distancia de la línea a la parte más prxima al CNY70 ha sido de unos 2,5 mm.
DPTO. DE TECNOLOGÍA © J.Garrigós
K
C
HEF 40106 PIC
VISTA SUPERIOR DEL CNY 70 k 0 1
I.E.S. ANDRÉS DE VANDELVIRA
Pag. 71
MICROCONTROLADORES Y SU APLICACIÓN EN ROBÓTICA Considerando el montaje realizado en el microbot de la imagen, comenzaremos por elaborar un pequeño programa que nos permita verificar el funcionamiento de los CNY70 considerando el esquema de conexión de la figura.
LADO IZQUIERDO DEL MICROBOT
LADO DERECHO DEL MICROBOT
LADO DERECHO DEL MICROBOT
Instalación de los sensores de IR CNY 70
Vcc=+5V
El funcionamiento del circuito es el siguiente:
Si el CNY 70 detecta superficie blanca (o
2 8
A
E
lo suficientemente clara), la luz se reflejará en ella y el transistor se pondrá en conducción poniendo la entrada a la puerta lógica inversora trigger Schmitt a
LADO IZQUIERDO DEL MICROBOT Área marcada
K
HEF 40106
C
PIN 5
VISTA SUPERIOR DEL CNY 70 k 0 1
cero lógico (tensión inferior a 2 V), lo que significa que a la salida de la puerta tendremos un 1 lógico.
Si por el contrario la superficie en la que esta reflejada la luz infrarroja es de color negro
(
oscuro)
el
2 8
A
E
Área marcada
transistor
entenderemos que esta en corte lo que significa que la entrada de la puesta estará a 5V, es decir, a 1 lógico. Dado
LADO DERECHO DEL MICROBOT
K
C
HEF 40106
PIN 4
VISTA SUPERIOR k DEL CNY 70 0 1
que la puerta lógica es un inversor, en este caso, a su salida tendremos un 0
DPTO. DE TECNOLOGÍA © J.Garrigós
Vcc=+5V
I.E.S. ANDRÉS DE VANDELVIRA
Pag. 72
MICROCONTROLADORES Y SU APLICACIÓN EN ROBÓTICA En definitiva, con el montaje de la figura podemos concluir que en los pines del microcontrolador tendremos:
Si la superficie sobre la que está situado el CNY 70 es clara tendremos un 1 lógico.
Si la superficie sobre la que esta situado el CNY 70 es oscura o negra tendremos un 0 lógico.
Para probar el correcto de funcionamiento de los sensores ópticos CNY 70 utilizaremos el siguiente programa: ' Visualizar las líneas de E/S conectadas a los SENSORES OPTICO-REFLEXIVOS CNY 70 . ' {$STAMP BS2}. ' Directiva para indicar la version de Basic Stamp ' {$PBASIC 2.5}. 'directiva usada para indicar la versión de PBASIC DEBUG "Estado SENSORES CNY70", CR,"Izda Dcha.", CR,"------ ------" DO 'bucle iterativo sin fin DEBUG CRSRXY, 0, 3,"P5 = ", BIN1 IN5," P4 = ", BIN1 IN4 'Visualiza estado BINARIO EN LA columna 0, fila 3 ‘los datos PAUSE 50 ' espera 50 ms LOOP ' Volver al inicio del bucle
Con el programa anterior la ventana DEBUG Terminal mostrará los siguientes resultados: Los dos sensores sobre la superficie negra
Sensor del lado derecho sobr e superfi cie blanca y el izquierdo sob re negra
DPTO. DE TECNOLOGÍA © J.Garrigós
I.E.S. ANDRÉS DE VANDELVIRA
Pag. 73