viernes, 8 de noviembre de 2013

Raspberry PI desde XP


Como grabar Raspberry Pi desde XP.

Normalmente trabajo con Ubuntu, pero en alguna ocasión me han preguntado como hacerlo desde XP.
La distribucion que utlizo es Rapbian
logo
Se puede descargar de la pagina oficial: http://www.raspberrypi.org/downloads
No pongo el enlace a la  descarga directa, porque se actualiza periódicamente y daría error.
Se descaga el fichero y se descomprime.
Para grabar la imagen utilizo el programa: Win32DiskImager.

Grabamos la imagen en la tarjeta SD.


Ya tendríamos grabada la imagen en la tarjeta SD.
 

Consideraciones de la tarjeta SD.

En la mayoria de la paginas we que he visto, dicen que con una de 4GB de capacidad, es suficiente.
Pero con el precio que tienen actualmente. Recomiendo una de 16GB. Puede ser util, tener ese espacio para posibles ampliaciones.
La unico que si recomiendo, es que sean del tipo "8". Las de caractericticas inferiores, se suelen corromper cuando se apaga accidentalmente.



jueves, 3 de octubre de 2013

TEA5767. Receptor FM para el Arduino.

Este chip es una radio de FM estéreo.

Características del chip:
  • Tamaño:  7x7x1.4 mm, SOT358 
  • Consumo: 13mA  el voltaje de funcionamiento va de 2,5 a 3,5V
  • Comunicación: Bus I2C. Dirección 0x60
  • Banda de recepción: 87.5 a 108 MHz
  • Control automático de ganancia.
  • Salida de audio estéreo. Pero a muy bajo nivel, es necesario usar un amplificador para poder oirlo.
  • La antena necesaria es de 75cm, que 1/4 de longitud de onda a 100MHz.
  • La frecuencia se controla con una palabra de 14 bits


Para mas información sobre el chip, se puede ver la nota de aplicación de Philips
El chip

El chip suelto, no nos serviría para nada. Pero en Ebay se puede encontrar montado en una placa con todos sus elementos accesorios. El tamaño del modulo es 11.2x11mm
Como se ve, solo tiene 10 patillas, el esquema seria:

En un próximo articulo, haré una pequeña radio o un radio despertador con los siguientes elementos:
  • Modulo TEA5767
  • Arduino NANO
  • Amplificador 2W.
  • LCD 16x2.
  •  

jueves, 29 de agosto de 2013

Arduino Nano

Nueva adquisición.
Este arduino de principio lo voy a utilizar para que controle un manipulador morse.

Problemas al intentar subir el programa.
  • Cuando lo encendía, el ordenador detectaba que esta conectado. 
  • Pero cuando le cargaba el programa, daba un error el cargador. 
  • El Led "L" esta intermitente.

BasicUploader.java:126

La solución.
Desconecta la impresora USB del ordenador y esperar unos 20 segundos después de pulsar el botón de reset. Mano de santo.

Leyendo en internet, encontré que algunos imitaciones del arduino nano, no cargan el programa cuando hay otro dispositivo USB conectado al ordenador.
Pero después de la primera subida de un programa, desaparece este fallo.

Para Windows es necesario el driver para el dispositivo FT232R, que se crea cuando conectamos la placa.
Los drivers y las instrucciones se encuentran en la pagina de ftdichip
  • Instrucciones: http://www.ftdichip.com/Support/Documents/InstallGuides.htm
  • Drives: http://www.ftdichip.com/Drivers/VCP.htm
Saludos
 

martes, 27 de agosto de 2013

LCD Keypad Shield


Existe en el mercado la placa LCD Keypad Shield.

Es bastante cómoda de programar con pocas lineas tenemos
  • LCD 16x2
  • 7 pulsadores. Uno de ellos Reset.
Utiliza las lineas:
  • D4, D5, D6, D7, D8, D9
  • RST
  • VCC y GND.
Problemas.
De las dos placas que he probado,
  • Una de ella tenia mal el potenciómetro de contraste.
  • A las dos le faltabas la resistencia R1 de 1K y el led PWR.
  • Las resistencias para los pulsadores no son de muy buena calidad y he tenido que medir la tensión que entregaban para poder determinar el valor que debía de medir el conversor.
En código siguiente muestra el tiempo que lleva funcionando el arduino y la tecla que pulsamos.

#include <LiquidCrystal.h>
#include <Wire.h>
/*******************************************************

Este programa se utiliza para controlar el LCD Shield

********************************************************/

// seleccionar los pines usados por el lcd
LiquidCrystal lcd(8, 9, 4, 5, 6, 7);

// define los valores utilizados por el panel y los botones.
int lcd_key     = 0;
int adc_key_in  = 0;
#define btnRIGHT  0
#define btnUP     1
#define btnDOWN   2
#define btnLEFT   3
#define btnSELECT 4
#define btnNONE   5

// leer los botones
int read_LCD_buttons()
{
 adc_key_in = analogRead(0);      // leer el valor leido en el puerto A0

 if (adc_key_in > 1000) return btnNONE; //valor cuando no esta pulsado ningun boton
 // For V1.1 us this threshold
 if (adc_key_in < 50)   return btnRIGHT;
 if (adc_key_in < 250)  return btnUP;
 if (adc_key_in < 450)  return btnDOWN;
 if (adc_key_in < 600)  return btnLEFT;
 if (adc_key_in < 850)  return btnSELECT;




 return btnNONE;  // cuando falla, ira a ninguno.
}

void setup()
{
  Serial.begin(9600);
 lcd.begin(16, 2);              // Definir el lcd
 lcd.setCursor(0,0);
 lcd.print("Pulsa un boton");
}
 
void loop()
{
 lcd.setCursor(9,1);            // posiciona el cursor para indicar el tiempo
 lcd.print(millis()/1000);      // Muestra los segundos desde el comienzo


 lcd.setCursor(0,1);            // posiciona el cursor en la segunda linea.
 lcd_key = read_LCD_buttons();  // lee los botones

 switch (lcd_key)               // dependiendo del boton pulsado hara una accion
 {
   case btnRIGHT:
     {
     lcd.print("RIGHT ");
     Serial.println("RIGHT");
     delay(300);
     break;
     }
   case btnLEFT:
     {
     lcd.print("LEFT   ");
     Serial.println("LEFT   ");
     delay(300);
     break;
     }
   case btnUP:
     {
     lcd.print("UP    ");
     Serial.println("UP    ");
     delay(300);
     break;
     }
   case btnDOWN:
     {
     lcd.print("DOWN  ");
     Serial.println("DOWN  ");
     delay(300);
     break;
     }
   case btnSELECT:
     {
     lcd.print("SELECT");
     Serial.println("SELECT");
     delay(300);
     break;
     }
     case btnNONE:
     {
     lcd.print("NONE  ");
    delay(300);
     break;
     }
 }
}

sábado, 9 de marzo de 2013

Arduino: Error "WProgram.h: No existe el fichero o el directorio"

Este error aparece cuando trabajando con el compilador Arduino 1.01, utilizamos una librería de una versión anterior a la 1.01 y en ella hay una llamada a  "WProgram.h"

         #include "WProgram.h"

Aparece el error "WProgram.h: No existe el fichero o el directorio"

Dicho error es debido a que el compilador 1.01 no utiliza WProgram.h.

Hay que sustituir en los ficheros *.cpp y *.h de la librería

        #include "WProgram.h" 
por

       #include "Arduino.h"  

Desapareciendo dicho error.
Fácil, no?

jueves, 14 de febrero de 2013

Arduino: Modulo I2C LCD

El arduino están limitadas el numero de entradas y salidas.
Para aumentar dicho numero tiene implementado el Bus I2C. Con el podemos expandir el numero de periféricos utilizando solamente dos pines.

El modulo que se describe, es un interfase I2C para LCD.
  • Con solo dos lineas podemos gobernar un LCD compatible con el chip 44870.
  • Dirección del Bus 0x20 (no se puede modificar)
  • Transistor para la retro iluminación del LCD.
  • Potenciómetro de contraste.
  • Preparado para soldar directamente al LCD
Para utilizarlo es recomendable utilizar la librería LiquidCrystal_I2C.

Ejemplo para un dsiplay 16x4

/*******************************************
Prueba del funcionamiento del dispaly
Proyecto
LCD 16x4 I2c
  ** EA7TB **
www.ea7tb.com
*/
#include <Wire.h>
#include <LCD.h>
#include <LiquidCrystal_I2C.h> 

#define BACKLIGHT_PIN     7
#define  LED_OFF  0
#define  LED_ON  1


LiquidCrystal_I2C  lcd(0x20,4,5,6,0,1,2,3);

void setup()
{
  lcd.begin (16,4);  // inicializo el LCD 20x4
  // Switch on the backlight
  lcd.setBacklightPin(BACKLIGHT_PIN,NEGATIVE);
  lcd.setBacklight(LED_ON);

  lcd.home();
 
  lcd.setCursor(0, 0);

  for(int i=0;i<16;i++) lcd.print("*");
  lcd.setCursor(0, 1);

  lcd.print(" Hola mundo   ");
  lcd.setCursor(0,2);
  lcd.print("Display 16x4");
  lcd.setCursor(0, 3);
  for(int i=0;i<16;i++) lcd.print("*");
 
  delay(1000);
  lcd.clear();
}

void loop()
{
  lcd.setCursor(0,0);
  lcd.print("Proyecto");
  lcd.setCursor(0,1);
  lcd.print("LCD 16x4 I2C ");
  lcd.setCursor(0,2);
  lcd.print("  ** EA7TB **");
  lcd.setCursor(0,3);
  lcd.print("www.ea7tb.com");
  delay(5000);
 }


Una vez modificado el potenciómetro.






domingo, 10 de febrero de 2013

Arduino: Buscador de dispositivos I2C

Por regla general, sabemos la dirección I2C de un dispositivo o integrado.
Los programas para obtener la dirección del bus se denomina "sniffer".
El programa original lo podemos descargar de la siguiente dirección:
http://playground.arduino.cc/Main/I2cScanner