Display OSRAM PD4437

miércoles, 8 de febrero de 2012 0 Comentarios, Dejar un Comentario
Estos displays son bastante buenos para el precio que tienen ya que no son una simple matriz de LEDS donde tenemos que crear nuestra propia fuente y agregar otros circuitos para el corrimiento de un letrero o el brillo de los LEDS, todo eso y más ya lo tiene integrado este pequeño display con un Datasheet muy completo y sencillo de entender.


La comunicación con estos display consiste en 8 bits para el ASCII y 3 bits para la dirección de entre los cuatro segmentos de cada display además de 2 habilitadores por display para el caso de conectar varios de estos sobre el mismo bus, se puede realizar tanto como escritura en el display y lo mejor de todo funcionan a muy poco voltaje con una buena intensidad en los segmentos.

Para hacer aun más sencilla la utilización de estos display se pueden controlar con un arduino con instrucciones tan simples como digitalWrite(); y unos cuantos delay(); .
Aquí les dejo una idea de como se inicializa y se escribe en este display.



void initDisplays(){
  digitalWrite(AD0,LOW);
  digitalWrite(AD1,LOW);
  digitalWrite(AD2,LOW);
  digitalWrite(CE1,LOW);     // Enable both displays
  digitalWrite(CE2,LOW);
   
  digitalWrite(D7,HIGH);       // Clear Display
  digitalWrite(WR,LOW);      // Send write command
  delay(1);
  digitalWrite(WR,HIGH);
  
  digitalWrite(D7,LOW);        // Set full brightness
  digitalWrite(D6,LOW);
  digitalWrite(D5,LOW);
  digitalWrite(D4,LOW);
  digitalWrite(D3,LOW);
  digitalWrite(D2,LOW);
  digitalWrite(D1,HIGH);
  digitalWrite(D0,HIGH);
  digitalWrite(WR,LOW);       // Send write command
  delay(1);
  digitalWrite(WR,HIGH);
  
  digitalWrite(CE1,HIGH);     // Disable both displays
  digitalWrite(CE2,HIGH);
}

y para escribir una letra en el primer segmento:

void writeASCII(){

  digitalWrite(AD0,LOW);
  digitalWrite(AD1,LOW);
  digitalWrite(AD2,HIGH);
  
  digitalWrite(CE1,LOW);      // Enable display
  digitalWrite(CE2,HIGH);

  digitalWrite(D7,LOW);        // Write ASCII to port
  digitalWrite(D6,HIGH);
  digitalWrite(D5,LOW);
  digitalWrite(D4,HIGH);
  digitalWrite(D3,LOW);
  digitalWrite(D2,LOW);
  digitalWrite(D1,HIGH);
  digitalWrite(D0,HIGH);
  
  digitalWrite(WR,LOW);       // Send write command
  delay(1);
  digitalWrite(WR,HIGH);
  
  digitalWrite(CE1,HIGH);        // Disable both displays
  digitalWrite(CE2,HIGH);

}

Material del FREE DAY

sábado, 21 de enero de 2012 8 Comentarios, Dejar un Comentario
Ya tengo en mis manos el material que he pedido a SparkFun que me he ganado en el FREE DAY de esta año, es la primera vez que participo en este evento y me toco suerte ya que fui unos de los ganadores.

Un concurso un tanto difícil de ganar ya que el ganador era elegido por un contador Geiger y llenar correctamente un Captcha compitiendo con otras miles de personas por ser uno de los ganadores.


Después de unas tres horas de llenar Captchas apunto de darme por vencido me cambia de pagina y me dice que soy unos de los ganadores y pensar que estaba a unos minutos de cerrar la pagina.


Entonces si después de ese mensaje a descansar y quitarse del estrés del momento ya que ya podía gastar mis bien ganados 100 usd en material de la tienda, salió un poco caro el envío y el pago a la aduana pero valió la pena por lo que pedí.

- Jumper Cables, Hobby Knife, Resistor Kit, FTDI Cable 5v y un Arduino MEGA PRO 5v.


Ojala las tiendas de electronica en México hicieran lo mismo, quizás no en la magnitud que lo hace SparkFun cada año pero si algo parecido. Ahora a esperar el FREE DAY 2013.

Placa Controladora de Robots Shur

sábado, 10 de diciembre de 2011 2 Comentarios, Dejar un Comentario
Hola, he hecho un placa que esta basada en la antigua placa Wiring Sparfun 1.1 que integra un microcontrolador ATmega2561, de esa forma mi placa también utiliza el mismo microcontrolador que tiene muy buenas prestaciones dejando a esta placa en un nivel medio de capacidades.

El objetivo de diseñar esta placa es que se tuviera lo suficiente para controlar un Robot Humanoide con motores Dynamixel, que como ya saben son especialmente diseñados para robotica, dada la comunicación que se lleva con estos Servos he agregado un IC que pudiese controlar el flujo de datos entre el microcontrolador y el Servo que es un Buffer con habilitadores independientes, este circuito convierte el Full Duplex USART que integra el microcontrolador y lo transforma en un Half Duplex USART, he conservado las demás comunicaciones con opción de funcionar como pines digitales comunes, las comunicaciones disponibles en un puerto SPI y un I2C, de los dos USART disponibles en el microcontrolador se puede decidir si se usaran como tales o cambiar uno a comunicación USB o para el otro USART convertirlo en el Half Duplex USART ya mencionado.


También ademas del poder que conlleva esta placa es de un tamaño reducido por lo que no estorbaría con las partes mecánicas que pudiese tener nuestro robot, como podrán apreciar la placa a sido diseñada con EAGLE por lo que cualquiera tendrá en la posibilidad de modificar conexiones de los elementos sin demasiadas complicaciones ya que el EAGLE es de los más conocidos en este ámbito.


También como podrán en ver en la imagen anterior cuenta con 8 LEDs para ver las comunicaciones activas como los dos USARTs y el SPI ademas de un LED Auxiliar para desplegar o indicar estados los cuales podremos programar a decisión y un LED que nos indicara si la placa esta energizada.

Cuenta con un lector de Tarjetas MicrosSD por lo que de cierta forma ya no es tan alarmante el espacio en EEPROM y flash, ya que podremos utilizar este como un DataLogger de las acciones y registro de sensores.

Se a incorporado un switch para decidir si la placa esta siendo energizada por USB o por una Bateria, un botón para programarle acciones al ser programado nuestro robot ademas del tradicional botón de Reset.

Cabe resaltar que se utiliza el mismo lenguaje de programación que un arduino o las mismas tarjetas wiring por lo que se puede encontrar mucha información de como se programa en este tipo de tarjetas.


A continuación una descripción mas técnica de esta placa:

Comunicación:                        Puertos:                                   Capacidad:
    - 2 Full Duplex USART            - 36 pines digitales I/O             - 256KB de FLASH
    - 1 Half Duplex USART           - 8 pines ADC                            - 4KB de EEPROM
    - 1 I2C                                   - 6 pines PWM                           - 8KB de RAM
    - 1 SPI                                                            
    - 1 USB

Bueno ahora el por que Shur, Shur son las siglas de Savage Humanoid Robot, en pocas palabras una placa controlador de robots humanoides de Savage Electronics, Bueno espero les guste y aquí les dejo todo lo necesario para esta placa.
Recuerden descargar el IDE de wiring y añadir los archivos que podrán descargar a continuación:



Configurando Radios XBee

domingo, 18 de septiembre de 2011 4 Comentarios, Dejar un Comentario

Los Radios XBee pueden ser configurados de varias maneras mediante varias formas, pueden ser configurados con un Arduino, con un conversor USB-RS232, XBee Explorer, etc.Y pueden ser configurados para trabajar de muchas  formas con o sin ayuda de un controlador.


1.- Accesar al sistema de los XBee: Para entrar al sistema de un XBee se requiere de una comunicación Serial (USART) la cual el arduino usa para programara su microcontrolador es por eso que se puede usar un XBee shield para su configuración, si no tienes un XBee Shield solo alimenta tu XBee (Recuerda que la alimentación es de 3v3 ya que con un voltaje más alto lo quemaras) y conecta DOUT y DIN al RX y TX de tu arduino o puerto COM.( Recuerda que también las señales de comunicación deben de estar reguladas a 3v3, puedes utilizar un divisor de voltaje o CI 74HC4050, si estas usando un XBee Regulated este ya regula todos los voltajes a 3v3 por lo que lo único que cuidaras es no enviarle voltajes mayores a 6v ).

Los XBees tienen un Baud Rate de fabrica de 9600 por lo que la comunicación USART deberá ser de 9600, 1 bit de Stop, Sin paridad; Abre la terminal que más te guste, yo utilizo la misma que viene con el arduino ya que es sencilla y no nos mete en complicaciones.

El primer paso será teclear tres signos de más  +++  con No line ending que se encuentra a un lado del Baud Rate y dar click en Send, si esto se hizo correctamente el XBee responderá con un OK.
2.- Comenzando a configurar: En este paso todo depende de como queramos que trabaje nuestro XBee, por lo que describiré con un pequeño ejemplo algunas de las posibles configuraciones de los XBee, apartar de ahora todo lo que le mandemos al XBee deberemos cambiar el No line ending por Carriage return.

Configuraciones Básicas: Todos los comandos deberán tener como prefijo AT, los comandos pueden ser enviados en una solo cadena o comando por cadena, si se envía por cadena solo el primer comando deberá tener el prefijo y se separaran por una , (COMA).

  • ID   -   Network ID del XBee   -   ( 0 - 0xFFFF )
  • CH   -   Canal de Comunicación   -   ( 0x0B - 0x1A )   
  • MY  -   Dirección del XBee   -   ( 0 - 0xFFFF )
  • DH y DL   -   Dirección de destino   -  ( 0 - 0xFFFF )
  • BD   -   La velocidad de Transmisión   -  ( 0 (1200 bps) , 1 (2400 bps), 2 (4800 bps), 3 (9600 bps), 4 (19200 bps), 5 (38400 bps), 6 (57600 bps), 7 (115200 bps) )
  • RE   -   Resetea a los valores de fabrica  -   ( Sin parámetros )
  • WR  -  Guardar los cambios   -   ( Sin parámetros )
  • CN   -  Cerrar sesión   -   ( Sin parámetros )    
Entonces para configurar dos módulos será de la siguiente forma:

ATID1234,DH0,DL1,MY0,BD3,WR,CN
ATID1234,DH0,DL0,MY1,BD3,WR,CN

De esta forma se han configurado los XBee para que se comuniquen entre ellos a 9600 bps, el XBee responderá con un OK por cada comando.


3.- Configuraciones especiales: Los XBee cuentan con I/O y ADC que facilitan todo el trabajo ya que si no es muy especifica o especial la información que queremos transmitir lo podremos hacer sin un µcontrolador directamente de sus puertos tras haberlos configurado. 

El modulo XBee cuenta con 9 I/O, 7 ADC. del DIO0 al DIO6 pueden ser configurados como digitales o conversares analógicos digital. debemos tomar en cuenta que solo contamos con dos puertos PWM así que tendremos esos dos puertos como salidas ADC en el otro Modulo XBee, DIO7 solo es digital y DI8 solo podrá ser entrada digital.

Para seleccionar el modo de DIO existen 4 opciones: 0 Ninguno, 1 Función Especial, 2 ADC, 3 Salida Digital LOW, 4 Salida Digital HIGH y se configuran de la siguiente manera:



ATD33             // Configura el DIO3 como entrada digital

ATWR            // Guardar cambios

de forma que en el otro modulo deberemos hacer del DIO3 salida digital.

ATD34             // Configura el DIO3 como salida digital HIGH
ATWR            // Guardar cambios

para el ADC sera:

ATD42            // Configura el DIO4 como ADC
ATIR14           // Sampleo de 20 mili-segundos
ATIT5             // Envia tras 5 sampleos
ATWR            // Guardar cambios

por lo que el otro modulo tendrá la salida de este ADC, los pines capaces de mostrar el ADC que fue transmitido por el otro modulo son el RSSI y el DIO11.

ATP02           // Activa el PWM en PWM0
ATIU1           // Habilita Salidas I/O UART
ATIA1           // Dirección de origen de datos ( MY del otro modulo)
ATWR          // Guardar cambios

4.- Enviar datos de XBee a XBee por medio USART: para esto necesitas dos µcontroladores ya que los datos serán seriales tanto en la entrada como en la salida a la velocidad como hayamos configurado con BD, en este caso 3(9600)bps, por lo que si usamos un Arduino para la transmisión y recepción de datos usaremos la instrucción Serial.  Ejemplo:

 Arduino XBee 1:

void setup(){
Serial.begin(9600);
}
void loop(){
Serial.print('E');
delay(1000);
Serial.print('A');
delay(1000);
}

Arduino XBee 2:

void setup(){
Serial.begin(9600);
pinMode(3,OUTPUT);
}
void loop(){
ifSerial.available() > 0 ){
  if( Serial.read() == 'E' )
     digitalWrite(3,HIGH);
  else
     digitalWrite(3,LOW);
}
}
Estos dos programas harán prender un LED conectado al pin D3 del Arduino por medio de los Radios. Para entender más estos comandos recomiendo leer el manual del XBee, Espero sus comentarios. :D