Escolar Documentos
Profissional Documentos
Cultura Documentos
TALLER 4.
SEÑALES ANALÓGICAS
1.CONVERTIDOR ANALÓGICO/DIGITAL
El micro seleccionado para estos talleres tiene un convertidor analógico/digital. Esto quiere
decir que es capaz de procesar entradas analógicas. El puerto A/D permite convertir de señales
de entrada analógicas a un número digital de 10 bits.
En concreto, el PIC18F442 tiene 8 canales, esto es, 8 patillas que pueden ser utilizadas como
entradas analógicas (2,3,4,5,7,8,9,10) repartidas entre el puerto A y el puerto E. Para poder
usarlas como analógicas hay que configurar estos puertos con mucho cuidado.
Canales:
2. SENSORES ANALÓGICOS
SENSOR DE INFRARROJOS:
Hay una amplia gama de sensores desde infrarrojos, desde los que miden 5cm a los que miden
hasta 3m.
SENSOR DE ULTRASONIDOS:
Aunque no lo vamos a utilizar en los talleres merece una mención especial porque es uno de
los sensores preferidos por los aficionados a los minirobotos.
Su funcionamiento es similar al del infrarrojo, pero en este caso se emite una onda de
ultrasonidos que rebota en un objeto o superficie y cuyo eco es recogido por un receptor.
CÁMARA:
Es una opción muy interesante para robots que se enfrenten a situaciones visuales
cambiantes. Se pueden encontrar cámaras que mandan al micro información ya procesada,
como el centro de masas de un color y el número de píxeles de un color predeterminado.
Suelen ser caras, pero cada vez hay más modelos asequibles.
Requieren mucho más trabajo, pero aporta mucho más aprendizaje y la información que se
obtiene con ellas es mucho más completa. Hay que tener en cuenta que les afecta mucho la
luz ambiente y los umbrales de color hay que determinarlos en condiciones reales de
funcionamiento.
Su rango de detección es entre 10cm y 80cm, aunque se pueden encontrar otros sensores de
la misma familia que cubren otros rangos, como por ejemplo el GP2120, que tiene un rango
entre 4cm y 30cm. Los datos de fuera del rango no son fiables, esto lo podemos ver en la
siguiente gráfica, que muestra la relación entre distancia y voltaje (que es la señal que recibe el
micro).
Lleva toda la electrónica necesaria incorporada, y de él salen tres cables para alimentación y la
señal que va al micro (Vo).
NOTA: Consumen bastante, es recomendable poner una alimentación adicional para ellos,
pero acordándose de que se alimentan a 5 V. Las masas deben estar unidas a las del resto del
circuito aunque la alimentación sea distinta.
COMENTARIOS:
- Se incluye la librería adc.h para usar las funciones relacionadas con el convertidor A/D.
- En este ejemplo, se han utilizado tres sensores analógicos, conectados en los cales 4, 5 y 7,
correspondientes con las patillas RA5, RE0, RE2.
- Para habilitar el convertidor analógico utilizamos la función OpenADC( ), con los argumentos
que la siguen. Después de eso añadimos un delay para asegurarnos que se ha abierto.
5. USART
Para la transmisión de datos con el ordenador se usan los pines Rx (RC7) y Tx (RC6), aunque
para este ejemplo, como solo vamos a enviar nos basta con Tx. Para poder comunicarnos con
el ordenador, necesitamos adaptar los niveles de tensión y esto los podemos hacer con un
MAX232 o con un DS275. El primero de los dos integrados es más barato y puede convertir las
señales Rx y Tx de 2 canales mientras que el segundo consume menos potencia y no necesita
de condensadores externos:
En cualquiera de los dos casos, lo conectaríamos al puerto de serie del PC (es muy importante
conectar también todas las tierras). De esta manera, con cualquier programa que escuche del
puerto de serie, como el HiperTerminal que viene con Windows, podremos ver la lectura del
sensor. Para esto tendremos que configurar dicho programa para una velocidad de 19200 bits
por segundo, 8 bits de datos, paridad ninguna, 1 bit de parada y sin control de flujo para que
coincida con la configuración que le pondremos al microcontrolador. (Podemos poner otra
velocidad, pero siempre la misma en el PC que en el microcontrolador). También se puede
utilizar el tinybootloader.
Código
/********PROGRAMA CONVERIDOR A/D Y USART********/
#include <p18F442.h>
#include <delays.h> // para usar retardos
#include <adc.h> // para las funciones del convertidor
#include <usart.h> // para la comunicacion serie
#include <stdlib.h> // para la funcion toa()
#define CR 0x0D // para enviar caracteres concretos
#define NL 0x0A
#define NULL 0x00
#define TAB 0x09
int conversion(unsigned char canal)
{
SetChanADC(ADC_CH0);
Delay10TCYx(2); // retardo de 20TCY (tiempo de adquisicion
Para poder enviar una cadena de texto con el valor que ha leído el convertidor (es un int)
tenemos que convertirlo primero en una cadena. Esto se hace mediante la función:
a la que hay que pasarle como argumento el entero a convertir y un char* en el que quepa la
representación ASCII del numero, incluido el signo y el carácter nulo del final). Para poder usar
ésta función tenemos que incluir stdlib.h.