Está en la página 1de 75

2010

MICROCONTROLADORES Y SU APLICACIÓN EN ROBÓTICA

TECNOLOGÍA INDUSTRIAL
MICROCONTROLADORES Y SUS
APLICACIONES EN ROBÓTICA
LADO IZQUIERDO
DEL MICROBOT

LADO DERECHO
DEL MICROBOT

PARALLAX
CONTINOUS ROT ATION
www.parallax.com

GND
+5V
CONTROL
Vdd = 5V

Vss = 0 V
20 ms
1,7 ms

GIRO TRIGONOMÉTRICO
A VELOCIDAD MÁXIMA

©J.Garrigós
DPTO. DE TECNOLOGÍA I.E.S. ANDRÉS DE VANDELVIRA Pag. 0
© J.Garrigós
MICROCONTROLADORES Y SU APLICACIÓN EN ROBÓTICA

ÍNDICE.
ÍNDICE. _____________________________________________________________ 0
ÍNDICE. _____________________________________________________________ 1
1. INTRODUCCIÓN A LA NOCIÓN DE MICROCONTROLADOR.____________ 3
2. ARQUITECTURA INTERNA DE LOS MICROCONTROLADORES PIC. ____ 4
3. PRINCIPALES CARACTERÍSITICAS DEL MÓDULO OEM BS2_IC Y EL
PIC16C57____________________________________________________________ 6
4. INTRODUCCIÓN AL LENGUAJE PBASIC._____________________________ 8
4.1 LOS LENGUAJES UTILIZADOS POR LOS MICROCONTROLADORES _____ 8
4.2. LOS MODULOS BASIC STAMP DE PARALLAX __________________________ 9
4.3. EDITOR PBASIC _____________________________________________________ 11
4.4. OPERACIONES ARITMÉTICAS Y LÓGICAS EN PBASIC ________________ 12
4.4.1. PROGRAMAS DE EJEMPLO CON OPERACIONES MATEMÁTICAS _____________13
4.5. ORGANIZACIÓN DE LA MEMORIA RAM DE DATOS DEL BS2___________ 16
4.6. INSTRUCCIONES PBASIC ____________________________________________ 17
4.6.1. INSTRUCCIONES DE ENTRADA/SALIDA DIGITALES ________________________17
4.6.2. INSTRUCCIONES PARA BUCLES REPETITIVOS _____________________________17
4.6.3. INSTRUCCIONES DE SALTO ______________________________________________18
4.6.4 .INSTRUCCIONES NUMÉRICAS ____________________________________________18
4.6.5. INSTRUCCIONES DE E/S SERIE ASÍNCRONA________________________________18
4.6.6. INSTRUCCIONES DE E/S SERIE SÍNCRONA_________________________________18
4.6.7. INSTRUCCIONES DE E/S ANALÓGICA _____________________________________18
4.6.8. INSTRUCCIONES DE CONTROL DE TIEMPO ________________________________18
4.6.11. INSTRUCCIONES DE ACCESO A LA EEPROM ______________________________18
4.6.12. INSTRUCCIONES DE DEPURACIÓN DEL PROGRAMA _______________________18
5. PRACTICA 1: CONTROLANDO UN LED Y UN ZUMBADOR. ____________ 19
6. VARIABLES EN PBASIC. ___________________________________________ 20
6.1. VARIABLES DE NOMBRES FIJOS EN PBASIC. _________________________ 20
6.2. DECLARACIÓN DE VARIABLES DEL BS2 _____________________________ 20
6.3. DECLARACIÓN DE ARRAYS DE VARIABLES (Matrices)_________________ 22
6.4. MODIFICADORES (ALIAS) DE LAS VARIABLES. _______________________ 23
7. CONSTANTES EN PBASIC _________________________________________ 24
7.1 DECLARACIÓN DE CONSTANTES EN PBASIC__________________________ 24
8. PRACTICA2: INTERMITENCIA DE UN DIODO LED. __________________ 25
9. DIRECCIONAMIENTO DIGITAL DE ENTRADAS SALIDAS CONSIDERANDO
EL MAPA DE MEMORIA._____________________________________________ 26
10. PRACTICA 3: CONFIGURACIÓN DE ENTRADAS-SALIDAS Y SALTO
CONDICIONAL. _____________________________________________________ 27
11. PRACTICA 4: PROGRAMACION DE ECUACIONES LÓGICAS CON
OPERADORES BOLEANOS. __________________________________________ 28
12. PRACTICA 5: CUENTA ATRÁS MEDIANTE DISPLAY DE 7 SEGMENTOS. 33

DPTO. DE TECNOLOGÍA I.E.S. ANDRÉS DE VANDELVIRA Pag. 1


© J.Garrigós
MICROCONTROLADORES Y SU APLICACIÓN EN ROBÓTICA

13. PRACTICA 6: MANEJO DE ARRAYS: JUEGO DE LUCES. _____________ 36


14. PRACTICA 7: CONTROL DE MOTORES DE CC POR PWM. ____________ 39
15. INSTRUCCIONES DEBUG TERMINAL Y DO… LOOP _________________ 43
16. PRÁCTICA 8: CONTROL DE SENSORES DE CONTACTO. _____________ 45
17. INSTRUCCIÓN DTMFOUT ________________________________________ 48
17.1. FUNCIONAMIENTO TÉCNICO DEL DTMFOUT _______________________ 49
18. OPERADORADORES MATEMÁTICOS NCD Y DCD ___________________ 51
18.1. OPERADOR MATEMÁTICO NCD ____________________________________ 51
18.2. OPERADOR MATEMÁTICO DCD ____________________________________ 51
19. PRÁCTICA 9: JUEGO DE LUCES DE GUSANO _______________________ 53
20. COMANDO BRANCH _____________________________________________ 54
21. PRÁCTICA 10: GOBERNANDO EL TELÉFONO ______________________ 55
22. SERVOMOTORES ________________________________________________ 58
23. COMANDO PULSOUT ____________________________________________ 60
24. PRÁCTICA 11: POSICIONAMIENTO DE UN SERVOMOTOR. __________ 61
25. PRÁCTICA 12: CONTROL DE UN SERVOMOTOR DE ROTACIÓN
CONTINUA _________________________________________________________ 63
26. EMISIÓN Y DETECCIÓN DE ONDAS ELECTROMAGNÉTICAS
INFRAROJAS _______________________________________________________ 66
27. COMANDO FREQOUT: NAVEGACIÓN POR IR_______________________ 68
28. MICROBOT SEGUIDOR DE LÍNEA NEGRA. _________________________ 71

DPTO. DE TECNOLOGÍA I.E.S. ANDRÉS DE VANDELVIRA Pag. 2


© J.Garrigós
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. Entradas/Salidas (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
Buses

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 I.E.S. ANDRÉS DE VANDELVIRA Pag. 3


© J.Garrigós
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 microcontroladores 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 instrucciones 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 de un PIC se estructura en 4 bloques
fundamentales:

 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 I.E.S. ANDRÉS DE VANDELVIRA Pag. 4


© J.Garrigós
MICROCONTROLADORES Y SU APLICACIÓN EN ROBÓTICA

MEMORIA MEMORIA
DE PROCESADOR DE
PROGRAMA 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 I.E.S. ANDRÉS DE VANDELVIRA Pag. 5


© J.Garrigós
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 ............................................... PIC16C57


 Velocidad de ejecución del programa .................... 4000 instrucciones/segundo
 Velocidad del procesador .................................... 20 MHz
 Capacidad de la memoria de programa EEPROM ...... 2KB
 Longitud máxima del programa ............................ 500 líneas PBASIC
 Capacidad de la memoria RAM de datos ................. 32Bytes (6 para E/S y 26 para
variables
 Nº de patitas de E/S ........................................... 16 (P0 a P15)
 Consumo de corriente ......................................... 8 mA en modo ejecución
100 A en modo sleep
 Corriente por E/S suministrada/absorbida .............. 20 mA/25 mA
 Nº de instrucciones PBASIC ................................ 36
 Interfaz con PC ................................................. Puerto serie (9600 baudios)
 Programa editor ................................................. STAMP2.EXE (DOS)
STAMPW.EXE (WINDOWS)

http://www.msebilbao.com/notas/software/Editor BASIC Stamp V2_2 multilenguaje.exe

Esquema simplificado
del módulo OEM BS2

DPTO. DE TECNOLOGÍA I.E.S. ANDRÉS DE VANDELVIRA Pag. 6


© J.Garrigós
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 Intérprete 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 I.E.S. ANDRÉS DE VANDELVIRA Pag. 7


© J.Garrigós
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
que el procesador sea capaz de interpretarlas y ejecutarlas.
Desarrollar programas en lenguaje Ensamblador exige un
conocimiento profundo de la arquitectura interna del procesador lo que

DPTO. DE TECNOLOGÍA I.E.S. ANDRÉS DE VANDELVIRA Pag. 8


© J.Garrigós
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
compiladores. 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 intérpretes 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 INPUT R ‘Nos pide el valor del radio
20 LET S=3.14*R*R ‘Calcula el área
30 PRINT S ‘Nos muestra el valor del área calculada
40 END ‘Fin del programa

4.2. LOS MODULOS BASIC STAMP DE PARALLAX


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 I.E.S. ANDRÉS DE VANDELVIRA Pag. 9


© J.Garrigós
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 I.E.S. ANDRÉS DE VANDELVIRA Pag. 10


© J.Garrigós
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 OEM-
BS2_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
 Ciclos de escritura/lectura: 1 milló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 I.E.S. ANDRÉS DE VANDELVIRA Pag. 11


© J.Garrigós
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 del identificador de
modulo y puerto al que está
conectado

Mapa de la memoria EEPROM

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 I.E.S. ANDRÉS DE VANDELVIRA Pag. 12


© J.Garrigós
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 (216 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)
MIN Limita el valor más bajo
MAX Limita el valor más alto
DIGIT Retorna el dígito especificado de un número
<< Desplazamiento de bits a la izquierda
>> Desplazamiento de bits a la derecha
REV Inverso de los bits del número especificado
& 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:
Sintaxis: 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 I.E.S. ANDRÉS DE VANDELVIRA Pag. 13


© J.Garrigós
MICROCONTROLADORES Y SU APLICACIÓN EN ROBÓTICA

caracteres de control), números decimales (0-65535), números


hexadecimales ($0000-$FFFF) o números binarios (hasta
%1111111111111111).
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

Ejemplos con la operación suma (+).


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.

Ejemplos con la operación resta (-).


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 I.E.S. ANDRÉS DE VANDELVIRA Pag. 14


© J.Garrigós
MICROCONTROLADORES Y SU APLICACIÓN EN ROBÓTICA

Ejemplo con la operación división (/) y resto (//)


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

Ejemplos con la operación multiplicació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

Ejemplo de multiplicación doble (**)


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 232 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 I.E.S. ANDRÉS DE VANDELVIRA Pag. 15


© J.Garrigós
MICROCONTROLADORES Y SU APLICACIÓN EN ROBÓTICA

En el programa anterior DEC5 indica que muestre el resultado


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
OUTS y bits de direccionamiento de los pines DIR, que si se les carga con
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 I.E.S. ANDRÉS DE VANDELVIRA Pag. 16


© J.Garrigós
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 I.E.S. ANDRÉS DE VANDELVIRA Pag. 17


© J.Garrigós
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.10. INSTRUCCIONES CONTROL DE ENERGÍA

4.6.11. INSTRUCCIONES DE ACCESO A LA EEPROM

4.6.12. INSTRUCCIONES DE DEPURACIÓN DEL PROGRAMA

DPTO. DE TECNOLOGÍA I.E.S. ANDRÉS DE VANDELVIRA Pag. 18


© J.Garrigós
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 ‘Se muestra en la pantalla del PC el


‘texto LUZ y SONIDO
INICIO: DEBUG “ILUMINA”, CR ‘Se muestra en la pantalla del PC el
‘mensaje ILUMINA
HIGH 0 ‘Pone a uno lógico la patita 0
LOW 15 ‘Pone a cero lógico el pin 15
PAUSE 2000 ‘Se produce una pausa de 2 seg.
DEBUG “SUENA”, CR ‘Se muestra mensaje en el PC

LOW 0 ‘Pone a cero lógico el pin 0


HIGH 15 ‘Pone a uno lógico el pin 1
PAUSE 3000 ‘Se produce una pausa de 3 seg.
GOTO INICIO ‘Salta a la etiqueta INICIO

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 I.E.S. ANDRÉS DE VANDELVIRA Pag. 19


© J.Garrigós
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 B1.

En PBASIC, los nombres de las variables pueden tener una


longitud 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 VAR. La sintaxis es la siguiente:
nombre_variable VAR tamaño
Donde:

DPTO. DE TECNOLOGÍA I.E.S. ANDRÉS DE VANDELVIRA Pag. 20


© J.Garrigós
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
BIT 1 bit 21 2 (0-1)
NIB 4 bits 24 16 (0-15)
BYTE 8 bits 28 256 (0-255)
WORD 16 bits 216 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 ‘ Puede tomar 2 elementos 0 y 1


gato VAR nib ‘ Puede tomar 16 elementos desde 0 a 15
perro VAR byte ‘ Puede tomar 256 elementos desde 0 a 255
elefante VAR word ‘Puede tomar 65,536 elementos desde 0 a 65.535

Si por ejemplo necesitamos leer una entrada del microcontrolador


necesitamos una variable tipo bit, 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 nib, pues esta puede contener 16 elementos.
En este caso, se podría utilizar una de tipo byte, pero la estaríamos
infrautilizando.

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.
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 I.E.S. ANDRÉS DE VANDELVIRA Pag. 21


© J.Garrigós
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 DE ARRAYS DE VARIABLES (Matrices)


Las matrices de variables se pueden crear de forma similar a como
se crean las variables sencillas.
nombre_variable VAR tamaño (n)

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:

automovil VAR byte(10) ‘ 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 automovil(0) a
automovil(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 Nº máx. de elementos
BIT 208
NIB 52
BYTE 26
WORD 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 I.E.S. ANDRÉS DE VANDELVIRA Pag. 22


© J.Garrigós
MICROCONTROLADORES Y SU APLICACIÓN EN ROBÓTICA

6.4. MODIFICADORES (ALIAS) DE LAS VARIABLES.


VAR puede ser usado para crear un alias para otra variable. Esto
es muy útil para acceder al interior de una variable.

Dog VAR byte ‘Dog es una variable del tipo Byte


Fido VAR Dog ‘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 I.E.S. ANDRÉS DE VANDELVIRA Pag. 23


© J.Garrigós
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
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
pie_derecho VAR cuerpo_humano.HIGHNIB
cabello VAR cuerpo_humano.LOWBIT
dedo VAR cuerpo_humano.HIGHBIT

cuerpo_humano=%1101101010011000

DEBUG BIN16 ?cuerpo_humano, CR


DEBUG BIN16 ?cabeza, CR
DEBUG BIN16 ?extremidades, CR
DEBUG BIN16 ?ojos, CR
DEBUG BIN16 ?nariz, CR
DEBUG BIN16 ?oido, CR
DEBUG BIN16 ?boca, CR
DEBUG BIN16 ?pie_izquierdo, CR

La salida que produce el programa anterior se puede apreciar en la


figura

7. CONSTANTES EN PBASIC
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 I.E.S. ANDRÉS DE VANDELVIRA Pag. 24


© J.Garrigós
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:


bateria CON 12
continentes CON 5
libro CON $E7
encendido CON %1101
detener CON “s”

Es posible calcular expresiones a través de constantes previamente


definidas:
temperatura con 37
grados_c con (temperatura*5)/9
grados_f con (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 pinLED e Intervalo. 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 I.E.S. ANDRÉS DE VANDELVIRA Pag. 25


© J.Garrigós
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 ‘Establecemos a la variable pinLED la constante 0
Intervalo CON 500 ‘Retardo en milisegundos entre estados del LED

COMIENZO: ‘Establecemos una etiqueta


HIGH pinLED ‘Enciende el LED conectado al pin0
PAUSE Intervalo ‘Tiempo que el LED permanece encendido
LOW pinLED ‘Apaga el LED conectado al pin0
PAUSE Intervalo ‘Tiempo que el LED permanece apagado
GOTO COMIENZO ‘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 ‘El pin 4 –bit 4- se pone a 1


OUT5 =0 ‘El pin 4 –bit 4- se pone a 0
OUT6 =1 ‘El pin 4 –bit 4- se pone a 1

DPTO. DE TECNOLOGÍA I.E.S. ANDRÉS DE VANDELVIRA Pag. 26


© J.Garrigós
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 ESQUEMA DE CONEXIONADO


siguiente:
 Si el bit7 está en 0 el circuito se
encuentra en el estado: INTERRUPTOR
+5V

DIODOS LED
GND

o P0=1
P6 P5 P4 P1
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 I.E.S. ANDRÉS DE VANDELVIRA Pag. 27


© J.Garrigós
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 LIMÓN

Ea 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 I.E.S. ANDRÉS DE VANDELVIRA Pag. 28


© J.Garrigós
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 I.E.S. ANDRÉS DE VANDELVIRA Pag. 29


© J.Garrigós
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:

n l

b) Dibujamos un uno en cada uno de los cuadros que se corresponden con los tres
sumandos de la ecuación de partida de la electroválvula del agua:

Ea  a * n * l  a * n * l  a * n * l

n l

a l n l
l l

c) Hacemos lazos y simplificamos:

Lazo A: a * l a l l l
Lazo B: a * n

Ea  a * l  a * n Lazo A Lazo B

DPTO. DE TECNOLOGÍA I.E.S. ANDRÉS DE VANDELVIRA Pag. 30


© J.Garrigós
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 a a

n l n n

l l
Ea 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 I.E.S. ANDRÉS DE VANDELVIRA Pag. 31


© J.Garrigós
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: 'ETIQUETA DE LA ECUACION DE SALIDA DE LA ELECTROVÁLVULA DEL AGUA


DEBUG "agua", CR
salida_Ea=1
salida_En=0
salida_El=0
GOTO INICIO

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
P_Naranja
P_Limón

P_Agua

DIODOS LED
El En Ea
+5V
GND

P2 P1 P0

DPTO. DE TECNOLOGÍA I.E.S. ANDRÉS DE VANDELVIRA Pag. 32


© J.Garrigós
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 a 330 
segmentos mediante una práctica de cuenta atrás. Se P0
estudiarán también la instrucción de almacenamiento de b 330 
P1
datos (DATA) en la memoria EEPROM y la generación de
c 330 
ondas senoidales de frecuencia y duración deseadas P2
(FREQOUT). d 330 
P3
El display de 7 segmentos son 7 diodos LED e 330 
P4
encapsulados en una disposición tal que permita la 330 
f
representación de números y letras. Existe un octavo LED P5
que es el punto decimal (dp), útil para representar números g 330 
P6
fraccionarios. Todos los LED del display tienen un terminal
330 
común, que en el caso del Universal Trainer V2 del aula dp
P7
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. AC
+5 V
El Universal Trainer tiene 3 display de 7 segmentos
cuyo esquema de conexión se reprensenta en la siguiente figura:

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 I.E.S. ANDRÉS DE VANDELVIRA Pag. 33


© J.Garrigós
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.
Ejemplo: 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 I.E.S. ANDRÉS DE VANDELVIRA Pag. 34


© J.Garrigós
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 I.E.S. ANDRÉS DE VANDELVIRA Pag. 35


© J.Garrigós
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 <<DCD>>.

 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: nombre_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)
Tamaño Nº máximo
Dada la forma en que los arrays se disponen en la memoria
de elementos
hay límites de tamaño para cada tipo:
BIT 208
NIB 52
BYTE 26
 DCD
WORD 13
Devuelve la potencia en base 2 de un rango de exponentes
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 24=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 I.E.S. ANDRÉS DE VANDELVIRA Pag. 36


© J.Garrigós
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

 <<y>>
Los operadores <<y>> 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<< nbits_a _desplazar
Ejemplo:
valor CON %100101101111
W1 = VALOR << 4
DEBUG BIN16 W1, CR ‘Muestra el resultado 1001011011110000
Corre la cifra 4 lugares hacia la izquierda y rellena hacia la derecha cuatro lugares con ceros.

DPTO. DE TECNOLOGÍA I.E.S. ANDRÉS DE VANDELVIRA Pag. 37


© J.Garrigós
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.
+5V
GND

P7 P6 P5 P4 P3 P2 P1 P0
Imagen y esquema de conexión del
montaje:

P8

DPTO. DE TECNOLOGÍA I.E.S. ANDRÉS DE VANDELVIRA Pag. 38


© J.Garrigós
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:

1 1
f  30 Hz T    0,0333 s  T  33,3 ms
f 30
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 I.E.S. ANDRÉS DE VANDELVIRA Pag. 39


© J.Garrigós
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 I.E.S. ANDRÉS DE VANDELVIRA Pag. 40


© J.Garrigós
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 instrucció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 I.E.S. ANDRÉS DE VANDELVIRA Pag. 41


© J.Garrigós
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: 'Aunque no es una etiqueta necesaria da más claridad al programa

HIGH DIODO_I 'Encendemos el LED que indica giro a Izquierdas


LOW DIODO_D 'Apagamos el LED que indica giro a Derechas
VELOCIDAD=INL '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 para volver a realizar el ciclo

DPTO. DE TECNOLOGÍA I.E.S. ANDRÉS DE VANDELVIRA Pag. 42


© J.Garrigós
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 y seleccionado el puerto de comunicaciones.

DPTO. DE TECNOLOGÍA I.E.S. ANDRÉS DE VANDELVIRA Pag. 43


© J.Garrigós
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 I.E.S. ANDRÉS DE VANDELVIRA Pag. 44


© J.Garrigós
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 VIH 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 VIL 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 VIH (uno) la
tensión ha de ser 2<VIH<5 . ¿Y qué pasa entre 0,8 y 2?, pues que el circuito integrado lo puede
tomar como cero o como uno, pero además eso no es todo, es normal que en una misma

DPTO. DE TECNOLOGÍA I.E.S. ANDRÉS DE VANDELVIRA Pag. 45


© J.Garrigós
MICROCONTROLADORES Y SU APLICACIÓN EN ROBÓTICA

maniobra de cierre o apertura del interruptor


se sobrepasen los valores de tensión por 5V
encima y por debajo de los niveles del
circuito integrado. La siguiente figura intenta 2V
mostrar esquemáticamente el efecto 0,8 V
0V
descrito, donde la línea negra es la
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 (VDD) a la patilla 14 y
GND (VSS) a la patilla 7 de dicho C.I.

+ 5V
Sensor de
contacto 1 2 3 4
Pin 7
derecho

+ 5V

5 6 13 12
Pin 8

Sensor de
contacto
izquierdo

DPTO. DE TECNOLOGÍA I.E.S. ANDRÉS DE VANDELVIRA Pag. 46


© J.Garrigós
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 I.E.S. ANDRÉS DE VANDELVIRA Pag. 47


© J.Garrigós
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 I.E.S. ANDRÉS DE VANDELVIRA Pag. 48


© J.Garrigós
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:

LÍNEA
Vcc = + 12 V TELEFONICA

IC
1k / 1W
600
10 / 1W 600  100 nF / 100V

A1
ENTRADA DE PULSOS
DESDE EL PIC

Transformador
1N4007

A2
1 nF / 100V

10 / 1W
ACTIVACIÓN DEL RELÉ RB = 2200
DESDE EL PIC BD135
VRB IB V BE 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 I.E.S. ANDRÉS DE VANDELVIRA Pag. 49


© J.Garrigós
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 frecuencia 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.

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

DPTO. DE TECNOLOGÍA I.E.S. ANDRÉS DE VANDELVIRA Pag. 50


© J.Garrigós
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 I.E.S. ANDRÉS DE VANDELVIRA Pag. 51


© J.Garrigós
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 'Borra la pantalla


SALIDA = 0 'Asigna a la variable SALIDA valor 0
FOR I = 0 TO 15 'Se inicia un bucle que asigna a I los valores que van de 0 a 15
SALIDA = DCD I '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 I.E.S. ANDRÉS DE VANDELVIRA Pag. 52


© J.Garrigós
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 'Declaramos la variable AUX con valor nible 2^4 (0 a 15
DIRL=%11111111 ‘Declaramos el byte bajo –bits 0 al 7 – como salidas

inicio:
FOR AUX=0 TO 5 'Se establece un contador de 6 bucles 0 a 5
PAUSE 75 'Pausa de 75 ms
OUTL=~DCD AUX 'Asignamos al byte bajo (bit0 al bit7, ambos incluidos) el complemento a 1 de 2^AUX
IF IN9=1 THEN fin 'Establecemos una salida del bucle en caso de que la entrada 9 se ponga a 1
NEXT
GOTO INICIO

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 I.E.S. ANDRÉS DE VANDELVIRA Pag. 53


© J.Garrigós
MICROCONTROLADORES Y SU APLICACIÓN EN ROBÓTICA

a
b
c
d
e
f
g

+5V
GND
P9

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 I.E.S. ANDRÉS DE VANDELVIRA Pag. 54


© J.Garrigós
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.

Hay que tener en cuenta ciertas consideraciones en esta práctica:


a) Se debe utilizar el circuito de adaptación de impedancias indicado en el apartado
17 anterior.
b) 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.
c) 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.
d) 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 'Declara la variable AUX del tipo Nibble


vueltas VAR Byte 'Declara la variable vueltas como byte
DIRL=%11111111 'Declara los 8 bit bajos bit0 a bit7 como salidas, de ahí que los ponemos a 1
DIRC=%1101 '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
DIRD=0 'Declara los bits 12, 13, 14 y 15 como entradas -los pone a cero-

DPTO. DE TECNOLOGÍA I.E.S. ANDRÉS DE VANDELVIRA Pag. 55


© J.Garrigós
MICROCONTROLADORES Y SU APLICACIÓN EN ROBÓTICA

INICIO:
OUT8=0 ' Pone a cero el LED que indica teléfono descolgado
OUT11=0 ' Pone a cero el transistor de activación del relé
OUTL=$FF ' 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 'Muestra un 2 en el display de ánodo común


GOSUB DESCOLGAR
DTMFOUT 10,[9,6,7,2,1,5,3,5,4]
GOTO CONVERSACION

TRES: OUTL=%10110000 ' Muestra un 3 en el display de ánodo común


GOSUB DESCOLGAR
DTMFOUT 10,[9,6,7,0,1,6,3,0,6]
GOTO CONVERSACION

CUATRO: OUTL=%10011001 ' Muestra un 4 en el display de ánodo común


GOSUB DESCOLGAR
DTMFOUT 10,[8,7,8,0,1,5,3,8,0]
GOTO CONVERSACION

CONVERSACION: ' Etiqueta que nos indica que la línea telefónica está abierta tras el marcado del número
FOR vueltas=0 TO 5 ' Ejecuta un bucle FOR NEXT para juego de luces de gusano girando
PAUSE 150 ' Espera 150 ms
OUTL=~DCD vueltas ' 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 ' Pone a 1 el LED indicando teléfono descolgado
OUT11=1 ' Activa el transistor que activa el relé de cierre de la línea telefónica
PAUSE 2000 ' Espera 2 segundos

DTMFOUT 10,[0] ' Marca un 0 por el pin 10 entendiendo que estamos en un lugar con centralita telefónica
PAUSE 1500 ' Espera 1,5 segundos a que la centralita nos de tono de marcado
RETURN ' Retorna la ejecución del programa al punto de inicio de la subrutina

DPTO. DE TECNOLOGÍA I.E.S. ANDRÉS DE VANDELVIRA Pag. 56


© J.Garrigós
MICROCONTROLADORES Y SU APLICACIÓN EN ROBÓTICA

ESQUEMA DE CONEXIÓN DE LA PRÁCTICA 10

LÍNEA
Vcc = + 12 V TELEFONICA

I C

1k / 1W
600
10 / 1W 600  100 nF / 100V

A1
ENTRADA DE PULSOS
DESDE EL PIC

Transformador
1N4007

A2
1 nF / 100V

10 / 1W
ACTIVACIÓN DEL RELÉ RB = 2200
DESDE EL PIC BD135
VRB IB V BE Zener 3,9V
1N5228BCT-ND

+5V
GND
P15 P14 P13 P12

P9
Colgar

P8

FOTOGRAFÍA DEL MONTAJE DE LA PRÁCTICA 10

DPTO. DE TECNOLOGÍA I.E.S. ANDRÉS DE VANDELVIRA Pag. 57


© J.Garrigós
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 servo de
rotación continua de
PARALLAX y un
servomotor 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 I.E.S. ANDRÉS DE VANDELVIRA Pag. 58


© J.Garrigós
MICROCONTROLADORES Y SU APLICACIÓN EN ROBÓTICA

Duración pulso (ms) disposición de cables


Fabricante min. neutral. máx.. Hz + batt -batt Control.
Futaba 0.9 1.5 2.1 50 rojo negro blanco
Hitech 0.9 1.5 2.1 50 rojo negro amarillo
Graupner/Jr 0.8 1.5 2.2 50 rojo marrón naranja
Multiplex 1.05 1.6 2.15 40 rojo negro amarillo
Robbe 0.65 1.3 1.95 50 rojo negro blanco
Simprop 1.2 1.7 2.2 50 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 1,5 ms 0,5 ms

20 ms /50 Hz 20 ms /50 Hz 20 ms /50 Hz

180º 90º 0º

DPTO. DE TECNOLOGÍA I.E.S. ANDRÉS DE VANDELVIRA Pag. 59


© J.Garrigós
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

1 ms
5000 * 2 s *  10 ms
1000 s
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 I.E.S. ANDRÉS DE VANDELVIRA Pag. 60


© J.Garrigós
MICROCONTROLADORES Y SU APLICACIÓN EN ROBÓTICA

' {$STAMP BS2}


' {$PBASIC 2.5}
' EJEMPLO DE UTILIZACIÓN DELCOMANDO PULSOOUT

LOW 15 ' Declara el Pin 15 como salida a un nivel lógico bajo


PULSOUT 15, 50000 ' Genera un pulso de 100 ms por el Pin 15
STOP ' 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 ' Declara el Pin 15 como salida a un nivel lógico alto


PULSOUT 15, 50000 ' Genera un pulso de 100 ms por el Pin 15
STOP ' 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 I.E.S. ANDRÉS DE VANDELVIRA Pag. 61


© J.Garrigós
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 '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
PULSOUT servo,750+p 'La primera vez que recorre el bucle el pulso es 750+50=800
PAUSE 20 'Esperamos 20 milisegundos
DEBUG ? 700+p 'Muestra en pantalla el valor del pulso
p=p+50 ' Incrementamos el valor de la variable P con cada pasada del bucle
PAUSE 1000 ' Paramos el eje 1 segundo
NEXT

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 I.E.S. ANDRÉS DE VANDELVIRA Pag. 62


© J.Garrigós
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
+5V
GND

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 I.E.S. ANDRÉS DE VANDELVIRA Pag. 63


© J.Garrigós
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:

PARALLAX PARALLAX
CONTINOUS ROT ATION CONTINOUS ROT ATION
www.parallax.com www.parallax.com

GND GND
+5V +5V
CONTROL CONTROL
Vdd = 5V Vdd = 5V

Vss = 0 V Vss = 0 V
20 ms 20 ms
1,3 ms 1,7 ms

GIRO ANTITRIGONOMÉTRICO GIRO TRIGONOMÉTRICO


A VELOCIDAD MÁXIMA A VELOCIDAD 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: ' Etiqueta


IF IN5=0 THEN FIN ' Si el Pin 5 esta a 1 fundiona el motor, si está a cero no funciona
PULSOUT 15, 650 ' Genera un pulso de 1,3 ms (650 x 2 us x 10E-3 = 1,3 ms)
PAUSE 20 ' 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 I.E.S. ANDRÉS DE VANDELVIRA Pag. 64


© J.Garrigós
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


N º Pulsos 
2 * 10  3
Ejemplo para un tiempo a nivel alto de 1,7 ms
1,7
N º Pulsos   850
2 * 10  3

Finalmente y
considerando la práctica 8
(Control de sensores de
contacto) y las instrucciones
de control de los
servomotores de 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 autónoma de
forma que al 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 I.E.S. ANDRÉS DE VANDELVIRA Pag. 65


© J.Garrigós
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 I.E.S. ANDRÉS DE VANDELVIRA Pag. 66


© J.Garrigós
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 I.E.S. ANDRÉS DE VANDELVIRA Pag. 67


© J.Garrigós
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 ESQUEMA DE CONEXIÓN DE


RECEPTOR DE IR TSOP 312_ _ UN DIODO EMISOR DE IR
1000 
GND PIC
A K
1 3 220 
PIC
2

+ 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 I.E.S. ANDRÉS DE VANDELVIRA Pag. 68


© J.Garrigós
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.

GND

GND
+ 5V

En el montaje y programa están de acuerdo

+ 5V
a las siguientes condiciones:
1

1
1. Ánodo del Diodo emisor de IR del
2

lado izquierdo conectado a través 2


de una resisencia de 1 k ½ W al
Pin 15
3

2. Ánodo del Diodo emisor de IR del K A A K


lado derecho conectado a través de
una resisencia de 1 k ½ W al Pin
+5V
GND
1000 

1000 
220 

220 

0
3. Salida del receptor de IR del lado
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 I.E.S. ANDRÉS DE VANDELVIRA Pag. 69


© J.Garrigós
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 I.E.S. ANDRÉS DE VANDELVIRA Pag. 70


© J.Garrigós
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
82 

señal digital (0 - 1 lógico) utilizaremos un


Trigger Schmitt conectado según se muestra
en la figura: A E

Área marcada
En las distintas pruebas realizadas en
HEF 40106
el prototipo construido los resultados han sido K C
PIC
adecuados cuando la distancia de la línea a la
VISTA SUPERIOR
10 k

parte más prxima al CNY70 ha sido de unos DEL CNY 70

2,5 mm.

DPTO. DE TECNOLOGÍA I.E.S. ANDRÉS DE VANDELVIRA Pag. 71


© J.Garrigós
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

Vcc=+5V
Instalación de los sensores de IR CNY 70
82 

El funcionamiento del circuito es el siguiente: LADO IZQUIERDO


A E DEL MICROBOT
 Si el CNY 70 detecta superficie blanca (o
lo suficientemente clara), la luz se Área marcada
reflejará en ella y el transistor se pondrá HEF 40106
K C
en conducción poniendo la entrada a la PIN 5
VISTA SUPERIOR
10 k

puerta lógica inversora trigger Schmitt a DEL CNY 70

cero lógico (tensión inferior a 2 V), lo que


significa que a la salida de la puerta
82 

tendremos un 1 lógico.
 Si por el contrario la superficie en la que LADO DERECHO
A E DEL MICROBOT
esta reflejada la luz infrarroja es de color
negro ( oscuro) el transistor Área marcada

HEF 40106
entenderemos que esta en corte lo que K C
PIN 4
significa que la entrada de la puesta VISTA SUPERIOR
10 k

DEL CNY 70
estará a 5V, es decir, a 1 lógico. Dado
que la puerta lógica es un inversor, en
este caso, a su salida tendremos un 0 Vcc=+5V

DPTO. DE TECNOLOGÍA I.E.S. ANDRÉS DE VANDELVIRA Pag. 72


© J.Garrigós
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 sobre superficie blanca y el izquierdo sobre negra

DPTO. DE TECNOLOGÍA I.E.S. ANDRÉS DE VANDELVIRA Pag. 73


© J.Garrigós
MICROCONTROLADORES Y SU APLICACIÓN EN ROBÓTICA

Sensor del lado izquierdo sobre superficie blanca y el derecho sobre negra

Como ejercicio, se propone al lector que realice un programa que permita al microbot
seguir una línea negra y se pare si dicha línea se corta.

DPTO. DE TECNOLOGÍA I.E.S. ANDRÉS DE VANDELVIRA Pag. 74


© J.Garrigós

También podría gustarte