Electroensaimada DIY, Raspberry Pi, Arduino ...
  • Home
  • Raspberry Pi
    • Básico >
      • Primeros pasos
      • IP estática
      • Montar Pendrive
      • Escritorio remoto
      • Conexión Wifi
      • no-ip
    • Intermedio >
      • Openelec Xbmc
      • OwnCloud
      • Torrent
      • Parpadeo led
      • Xbee
    • Avanzado >
      • SPI con WiringPi
      • ADC
      • Control temperatura
      • Alarma con aviso por mail
    • Raspberry Pi Expansion Board >
      • Control temperatura
      • Alarma con aviso por mail
  • Arduino
    • Motor paso a paso
    • Servomotor
    • PWM
    • Sensor Infrarrojo
    • SPI
    • I2C
    • Relé y LDR
    • Mando Radiocontrol
  • Blog
    • Contacto
  • CNC
    • Material
    • Codigo Maquina >
      • Leer el fichero
      • Decodificar fichero
      • Entorno de usuario
    • Movimiento >
      • Recta a trozos
      • Taladrar o cortar
    • Estructura
    • Estructura(2º Version)
    • Modelo CAD 3D
  • Software
    • Qt
    • Eagle >
      • Instalación y primeros pasos eagle
      • Librerías
  • Utilidades
  • Laboratorio
    • Fuente alimentación >
      • Material
      • Montaje

Tutorial Raspberry Pi: ADC MCP 3008

En este tutorial vamos a usar la Raspberry Pi Expansion Board que incorpora un ADC MCP 3008 que es controlable mediante SPI sino también puedes usar el conversor en una protoboard ya que viene en formato DIL. Este ADC tiene 8 canales de 10 bits cada uno y nos permite una frecuencia de muestro de unos 80 Ksps ya que lo alimentamos a 3.3V.
mcp3008.pdf
File Size: 763 kb
File Type: pdf
Descargar archivo

Imagen
Conexiones en la Placa de expansión.
En este ejemplo vamos a conectar un potenciómetro en el canal 0. Para las conexiones este es el diagrama:
Imagen
Antes de nada miremos el datasheet donde en la pagina 21 nos dice como conectarlo en caso de usarlo con un microcontrolador. Nosotros usaremos este porque con la Raspberry mediante el puerto SPI solo podemos mandar paquetes de 8 bits es decir un byte. Los otros modos envían primero 5 bits y luego leen, pero en nuestro caso eso no lo podemos hacer. Esta es la trama que hay que enviar:
Imagen
Trama SPI.
Donde en el primer byte mandaremos todo 0 excepto el start que es un 1. A continuación el segundo byte tiene dos partes. Los primeros 4 bits son los de configuración , si vamos al datasheet vemos la siguiente tabla donde según el valor de estos bits leemos un canal u otro.
Imagen
Ademas de seleccionar el canal el primer bit sirve para decidir si usaremos el ADC en modo single-ended o diferencial. La diferencia es que el single-ended mide la diferencia de tensión entre el canal y masa, a diferencia del diferencial que mide la tensión entre dos canales. Lo mas común es usar el modo single-ended que es el que usaremos nosotros.
Una vez conectado vamos a realizar el programa para leer del ADC. Este esta basado en el spi.c que usamos para controlar el bus SPI. Además en este código he añadido la instrucción gpio load spi de esta forma ya no hay que cargar los drivers del spi antes de iniciar el programa. Tecleamos nano adc.c y copiamos el siguiente código.
Imagen
Código adc.c
adc.c
File Size: 1 kb
File Type: c
Descargar archivo

Ahora podemos compilar el codigo y ejecutarlo.
cc -o adc adc.c -L/usr/local/lib -lwiringPi
sudo ./adc.c
Imagen
Dado que el ADC tiene como referencia 3.3V y es de 10 bits. El máximo valor es 1023 que corresponde a 3.3V. Ahora vamos a modificar el programa y crearemos una función como la del Arduino que se llame analogRead(int pin) donde le pasemos el pin a leer de 0 a 7 y nos devuelva el valor del ADC. Copiamos el código anterior de lectura y en los cuatro bits de configuración anteriores ya no ponemos una constante sino que dependan del parámetro de entrada.
Imagen
Código adc_2
adc_2.c
File Size: 1 kb
File Type: c
Descargar archivo

En este caso tenemos que cada 250 ms vamos leyendo del ADC 1, esto se puede hacer mas rápido, mas o menos cada 12.5 ms. Finalmente ejecutamos el programa y podemos ir variando el potenciometro para ver como se modifica el valor del ADC. 
Imagen
Con tecnología de Crea tu propio sitio web único con plantillas personalizables.
  • Home
  • Raspberry Pi
    • Básico >
      • Primeros pasos
      • IP estática
      • Montar Pendrive
      • Escritorio remoto
      • Conexión Wifi
      • no-ip
    • Intermedio >
      • Openelec Xbmc
      • OwnCloud
      • Torrent
      • Parpadeo led
      • Xbee
    • Avanzado >
      • SPI con WiringPi
      • ADC
      • Control temperatura
      • Alarma con aviso por mail
    • Raspberry Pi Expansion Board >
      • Control temperatura
      • Alarma con aviso por mail
  • Arduino
    • Motor paso a paso
    • Servomotor
    • PWM
    • Sensor Infrarrojo
    • SPI
    • I2C
    • Relé y LDR
    • Mando Radiocontrol
  • Blog
    • Contacto
  • CNC
    • Material
    • Codigo Maquina >
      • Leer el fichero
      • Decodificar fichero
      • Entorno de usuario
    • Movimiento >
      • Recta a trozos
      • Taladrar o cortar
    • Estructura
    • Estructura(2º Version)
    • Modelo CAD 3D
  • Software
    • Qt
    • Eagle >
      • Instalación y primeros pasos eagle
      • Librerías
  • Utilidades
  • Laboratorio
    • Fuente alimentación >
      • Material
      • Montaje