Showing posts with label A10. Show all posts
Showing posts with label A10. Show all posts

Wednesday, March 27, 2013

Cubieboard + arduino (thermometer I²C DS1621)

Exercise 2
Temperature sensor.

Now let me introduce to the integrated circuit DS1621, which is a thermometer with a communication system based on a I²C (Integrated-integrated communication)

Our cubieboard also has I²C connection, but I'm still working on a system to send the information from the senses (arduino) to the brain (cubieboard)

This is the video about the construction of all circuit.
I began, doing the circuit to work with the arduino, and checked.
I send the information to the serial, and show it on the screen

After that I connected the serial cable between the arduino y and cubieboard (the cable is an old cd-cable from my old computer)

Here is the video




and here is the result at the cubieboard


There are a lot of information about how to program the arduinos and I²C


I've changed the library "Protocol", cause it's not really necessary a port, cause in the case of I2C its possible to add few of integrated circuirt at the same ports, which will use the same channel of communications


a little bit of code
[CODE TO READ THE DS1621]

#include <Wire.h>
#include <protocol.h>

#define DEV_ID 0x90 >> 1


Protocol protocolTemperature("Temperature");

void setup()
{
  Serial.begin(9600);//I'm using 9600 bps to comunicate the arduino and the cubieboard
  Wire.begin();
  Wire.beginTransmission(DEV_ID); //connect to DS1621
  Wire.write(0xAC); //Access config
  Wire.write(0x02);
  Wire.beginTransmission(DEV_ID); //restart the DS1621
  Wire.write(0xEE); // start conversion
//read the documentation its a very interesting temperature sensor
}

void loop()
{
 protocolTemperature.send(readTemperature());
}
// This will go to another library
//I love the libraries :)
float readTemperature()
{
int8_t firstByte;
int8_t secondByte;
float temp = 0;
 delay(1000); // give time for measurement
 Wire.beginTransmission(DEV_ID);
Wire.write(0xAA); // read temperature command
Wire.endTransmission();
Wire.requestFrom(DEV_ID, 2);    // request two bytes from DS1621 (0.5 deg. resolution)

firstByte = Wire.read();    // get first byte
secondByte = Wire.read();    // get second byte

temp = firstByte;

if (secondByte)    // if there is a 0.5 deg difference
temp += 0.5;
return (temp);
}


[PROTOCOL.cpp]

void Protocol::send(float value)
{
    char buffer[16];
//NOTE: HOW TO CONVERT A FLOAT TO STRING IN ARDUINO
    dtostrf(value,5,2,buffer);
    Serial.println(_id+":"+buffer);
}

[PROTOCOL.h]
//This class will be growing
class Protocol
{
    public:
        Protocol (String id);
        String getId();
        void send(String msg);
        void send(float value);

    private:
        String _id;
};

The circuit to use I²C is quite simple









Sunday, March 24, 2013

Cubieboard + arduino + protocol

Light Sensor

This is another step in the communication between an arduino and a cubieboard.
By te moment I'm only using ttyS0 at the cubieboard, but for more complicated develops should be necessary to use the GPIO

The exercises consist in to detect a value and send it to the cubieboard, sound simple,itsn't ?

Well the circuit is quite simple, its an LDR (light dependent resistor ) connected to an analog connection at the arduino.

With the value of it we change the delay of blink, and with less light the led blink faster.


This is the basic circuit which is a modification from the project 14 (Light sensor from http://math.hws.edu/vaughn/cpsc/226/docs/askmanual.pdf)



Light sensor + serial connection
Well the circuit is just to see how to send the information from the arduino to our cubieboard, and how to interpret the data.

Now it's possible to receive the data and manipulate

There are a little bit of programming at the cubieboard to open the serial connection (ttyS0) ill try to summarize and it could be a bit tedious and

//I searched the code from google, there are a lot of information
//But is there any error or doubt don't hesitate to comment

[CODE FROM CUBIEBOARD]
//Open the serial port TTYS0 = /dev/ttyS0


    fd = open (TTYS0, O_RDWR | O_NOCTTY);
    if (fd < 0) { perror(TTYS0); return (1);}
    tcgetattr(fd,&oldtio);
    memset(&newtio,0, sizeof(struct termios));

//It was really necessary to change the parameters 
//to accommodate the serial from arduino to the serial of cubieboard
// More information here http://www.easysw.com/~mike/serial/serial.html

    newtio.c_cflag = BAUDRATE | CS8 | CLOCAL | CREAD;
    newtio.c_iflag = IGNPAR | IGNBRK | IMAXBEL ;
    newtio.c_cc[VTIME]=8;
    tcflush (fd,TCIFLUSH);
    tcsetattr(fd,TCSANOW,&newtio);

//READ
    while (STOP == FALSE)
    {
        res =read (fd,buf,255);
//Eliminate the "intro" of the data
        buf[res-1]=0;
        printf("%s\n",buf);
        if (buf[0]=='z') STOP =TRUE;
    }
    tcsetattr(fd,TCSANOW,&oldtio);
    close(fd);
===================================

For the arduino code I'm making a library, so it will be easy to improve, correct, and share.

[CODE FROM ARDUINO]
//LIBRARY
Protocol::Protocol(int pin)
{
    _pin=pin;
}


void Protocol::send(String msg)
{
    Serial.print(_id +":");
    Serial.println(msg);
}

void Protocol::setId(String id)
{
    _id = id;
}  
//CODE
 #include <protocol.h>

Protocol protocolLight(ledPin);

void setup()
{
  Serial.begin(9600);
  pinMode(ledPin,OUTPUT);
  protocolLight.setId("light");

}

void loop()
{
  lightVal = 1023 - analogRead(ldrPin);
  protocolLight.send(String(lightVal));
  digitalWrite(ledPin,HIGH);



Saturday, January 5, 2013

Primeras pruebas

Probando, probando 1,2,3.....¿Cuántos Kflops?

Bueno, ya tenemos todo instalado ahora vamos a probar que tenemos entre manos.


¿Qué equipo tengo ?

Vamos probando un lscpu
 
pi@raspberrypi ~ $ lscpu
Architecture:            armv7l
Byte Order:               Little Endian
CPU(s):                        1
On-line CPU(s) list:  0
Thread(s) per core: 1
Core(s) per socket:   1
Socket(s):                    1

¿Y de memoria? ¿Cómo ando?

pi@raspberrypi ~ $ cat /proc/meminfo
MemTotal:         834892 kB
MemFree:          381636 kB
Buffers:           85808 kB
Cached:           285972 kB

¿Y si nos marcamos un benchmark ?

Vamos a hacernos unas cuantas operaciones algo rapidito, que hay cosas que hacer.

Con la aplicación de HardInfo de linux :) saldremos del paso, y así podremos comparar con ordenadores conocidos.


CPU Blowfish

 Cubieboard    1000 MHz     46,346
I3    1197 MHz        4,009
Intel(R) Celeron(R) M processor 1.50GHz (null)  26.1876862
PowerPC 740/750 (280.00MHz)     (null)  172.816713
 (medido en segundos, mejor cuanto más bajos)

CPU Fibonacci

Cubieboard    1000 MHz     14,525
I3    1197 MHz        2,796
Intel(R) Celeron(R) M processor 1.50GHz (null)  8.1375674
PowerPC 740/750 (280.00MHz)     (null)  58.07682
 (medido en segundos, mejor cuanto más bajos)

Bueno si lo comparamos con un celeron no está tan mal
Aunque parezca poca cosa, estamos hablando de un buen procesamiento, seguro que podremos sacarle mucho jugo y como plataforma de estudio está muy bien.

Instalando un Linux parte 1/2

Introducción.

La placa ya viene de serie con un Android (4.0.4) que ya nos permitiría que una televisión normal se convierta en un smart TV, se le puede añadir wifi sin problemas, teclado y ratón inalámbricos y a disfrutar.

Pero, ¿ si queremos más ? ¿Y sí necesitamos programar ?, si queremos algo más que un simple Android. Pues nada a instalar Linux :)

Para gestionar el arranque de nuestro sistema Linux dentro de la cubieboard, se hace necesario la instalación de un sistema que nos permita seleccionar desde donde arrancamos, y como instalamos la distribución de Linux que nos interese, esa herramienta, es el berryboot

Requisitos

  1. La cubieboard
  2. Tarjeta uSD al menos 4 GB (yo use para la prueba una de 8GB clase 4, la cambiaré por una de 16 o 32 GB clase 10)
  3. Conexión a internet
  4. Leer bien la información, yo saqué la información de esta página, es muy buena.http://www.cnx-software.com/2012/12/09/cubieboard-unboxing-and-quick-start-guide

Instalando Berryboot (gestor de arranque e instalación)

El paso inicial será utilizar el berryboot que nos permitirá gestionar la instalación. (en el link está toda la información sobre berryboot)
Podemos usar nuestro Android preinstalado o nuestro ordenador, y una vez instalado el berryboot, nos hará como un gestor de arranque mejorado, donde podremos elegir con que sistema operativo queremos arrancar o instalar alguno nuevo.

Android

  Pasos para instalar el berryboot desde android.

  1. Arrancar nuestra cubieboard y esperar a que cargue Android
  2. Meter nuestra uSD formateada
  3. Instalar berryboot.apk
    1. Poner este enlace en el navegador de android "http://get.berryboot.com/"
  4. Nos descargamos la aplicación berryboot.apk
  5. Ejecutamos
  6. Y seguimos las instrucciones, esto nos formateará la tarjeta e instalara el berryboot como gestor de arranque





PC (Linux, Mac, Windows)

Nota: toda la instalación está hecha con Linux (Linux 3.2.0-23-generic) en 64 bits, pero lo pondré en genérico para que hagamos los pasos independientemente de nuestro sistema operativo.
  1. Insertamos nuestra tarjeta uSD 4GB o mayor.
  2. Descargamos la imagen del berryboot. Berryboot-cubieboard-beta1.zip” desde http://www.berryterminal.com/doku.php/berryboot_a10
  3. Quemamos la imagen en la microSD
    1. Windows
      1. Utilizar Win32DiskImager.exe para pasar la imagen a la tarjeta (este paso no lo he probado, me quedé en windows 98 segunda edición :) )
    2. Linux
      1. Utilizamos un terminal para pasar la imagen a la tarjeta
      2. sudo dd if=Berryboot-cubieboard-beta1.ddimg of=/dev/sdX (X es la unidad de nuestra uSD)

  4. Ya tendremos quemado nuestro gestor de arranque berryboot en la tarjeta y ahora es cuando vamos a instalar nuestro Linux.

Arrancando

Cuando llegó la cubieboard, surgió la duda

¿Ahora como la conecto?

Bueno como todo equipo electrónica necesita una fuente de alimentación, sencillo, ¿ no ?
¿qué fuente de alimentación uso ? ¿qué consumo va a tener lo que le conecte?
Según las especificaciones son 5v 2A (aunque se me hace escaso trabajando dos USB y un HD, pero tengo que probarlo, aún me queda comprar un HD)

  • USB (host) (500 mA cada uno)
    • Teclado y ratón
    • wifi
  • USB (OTG)
    • conexión al ordenador para debug
  • HD
    • 5v, 1A, disco de 2.5'' debería funcionar (tengo que comprobarlo)
  • uSD
    • Utilizaré para las primeras pruebas una tarjeta de 8GB clase 4 (pasaré en breve a una de mayor capacidad y clase 10)

Como mínimo necesitaremos los 2 A para que la placa funcione correctamente a ver que tal va cuando le ponga el HD (aunque probé con 1A y también funciona)

¿Teclado y ratón en un solo USB?

Solo tenemos 2 USB, aunque se puede utilizar un hub de USB(alimentado aparte), pero tenía por casa un teclado con ratón inalámbrico y funcionó sin problemas.

¿ Wifi ?

Lejos de mi ordenador está el router, mi primera idea era usar el ethernet, pero por probar dije vamos a probar un Wifi-USB que tenía, y bingo
Este es mi pincho wifi :Belkin Components F7D2102 802.11n N300 Micro Wireless Adapter v3000 [Realtek RTL8192CU]

Primeros pantallazos

Con la versión que me llegó la 2012-09-09 me venía preinstalado un android ICS (4.0.4) con lo que ya tenía una smart TV, además que detectó sin problemas la wifi, el teclado y el ratón inalámbricos
¿ Tablet de 21'' ?

¿Smart TV?
Cubieboard




¿Qué es una cubieboard?

Cubieboard


Cubieboard es una placa para el desarrollo y el estudio de aplicaciones electrónicas e informáticas.
A grandes rasgos es un ordenador con una arquitectura de ARM (como los de muchos móviles "iteligentes")

En pagina oficial cubieboard podemos encontrar todas sus características detalladas.

Por ahora vamos a quedarnos con lo básico
Dimensiones 10cm x 6 cm
Soc : A10 características (Cortex A8 , 1GHz)
DRAM : 512MB / 1GB
NAND : 4GB
Vídeo : HDMI
Almacenamiento : µSD, SATA (+5v incluido en la placa)
USB (host/OTG) : 2 / 1
Otros: Infrarrojos, i2c, rgb, vga, etc.

¿Dónde puse el ordenador?
Eres grande, pequeño.

 Este es el pequeño caos que tengo no solo encima de la mesa.









En realidad la placa tiene todo lo que necesita para sacarle provecho a la imaginación, al desarrollo, al estudio, y además es divertido.