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

SPI en Raspberry Pi con la librería WiringPi

En este tutorial vamos a usar el bus SPI con la Raspberry Pi. Para realizar este tutorial es necesario tener la librería WiringPi instalada, puedes consultar aquí. Si tienes dudas sobre el bus SPI aquí tienes mas información.


El primer paso es encender la Raspberry y conectarnos por ssh o directamente con el teclado. Este tutorial se realizara usando el editor de texto nano aunque se puede hacer perfectamente con codeblocks simplemente importando la librería.
Tecleamos el siguiente comando para cargar los drivers SPI en la Raspberry:  gpio load spi
Imagen
Si todo ha ido bien no tiene que salir ningún mensaje. A continuación tenemos la opción de definir el tamaño del buffer del spi. Por defecto viene a 4KB, valor mas que suficiente para la mayoría de las aplicaciones, aunque si queréis cambiarlo aquí tenéis la instrucción:
gpio load spi 100 , donde pone 100 podéis poner el numero que deseéis.
Imagen
Antes de empezar con el código vamos a explicar algunos detalles del SPI de la Raspberry. En primer lugar hay que decir que la Rspberry tiene dos puertos SPI el 0 y el 1. En realidad lo que tiene son dos Chips enable que en tienen el nombre de CE0 y CE1. La velocidad a la que puede comunicarse va desde 500 KHz y 32 MHz .Yo intentaría evitar velocidades mayores a 10 MHz ya que la señal se deforma bastante, una buena velocidad es 1 MHz que es la que se utilizara en este tutorial.
Básicamente hay dos únicas funciones en esta librería, una para configurar y otra para leer/escribir.
  • int wiringPiSPISetup (int channel, int speed) ;:Esta función sirve para configurar el spi. En channel ponemos 1 o 0 según el puerto que queramos usar y en speed ponemos la velocidad en Herzios de nuestra comunicación SPI. Si la función nos devuelve un -1 quiere decir que no se ha iniciado bien y que tenemos un error.
  • int wiringPiSPIDataRW (int channel, unsigned char *data, int len) ;: Por ultimo tenemos la función de escritura/lectura, esta tiene 3 parámetros  El canal , el buffer de datos y el tamaño de los datos a enviar. Dado que esta función lee y escribe al mismo tiempo, lo que pongamos en data sera sobrescrito por lo que se lea del bus.
Ahora vamos a crear el código para usar el SPI para ello crearemos un nuevo fichero con la instrucción nano spi.c . Ahora con el editor de texto abierto pondremos el siguiente código:
Imagen
Código SPI Escritura/Lectura.
spi.c
File Size: 0 kb
File Type: c
Descargar archivo


Ahora solo nos falta compilar el programa con cc -o spi spi.c -L/usr/local/lib -lwiringPi y ejecutarlo con sudo ./spi .Los pines de la Raspberry son los siguientes:
Imagen
Con este código realizamos la lectura y escritura de dos bytes. Si se quieren conservar los datos enviados se tendrían que guardar en otra variable ya que la lectura los sobrescribe.  El resultado por el osciloscopio son los siguientes.
Imagen
Lectura del bus SPI con el ejemplo spi.c
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