Buscar este blog

Mostrando entradas con la etiqueta Arduino. Mostrar todas las entradas
Mostrando entradas con la etiqueta Arduino. Mostrar todas las entradas

miércoles, 14 de octubre de 2015

Manejo de una memoria RAM 6116

3 comentarios
La memorias su principal función es la de mantener la informacion guardada ya sea por un momento o por un largo periodo de tiempo. En las ocaciones que solo se necesita guardar informacion por un corto periodo por ejemplo para guardar la informacion de variables que cambian durante la ejecucion de un programa es necesario tener donde guardar esa informacion por ese corto periodo.

Para esta aplicacion emplearemos una memoria RAM 6116 que mantendra nuestra informacion por un periodo y despues al  necesitar renovar de nuevo esa informacion la podremos "refrescar".

LA MEMORIA RAM 6116 El dispositivo 6116 es una memoria de acceso aleatorio, Random Acces Memory (RAM), cuenta con una capacidad de 2048 palabras de 8 bits cada una, es una memoria estática de alta velocidad, esta fabricada con la tecnología CMOS, opera con una fuente de alimentación de +5.0 Volts y esta dispuesta en una pastilla de 24 terminales.


CARACTERÍSTICAS DE LA MEMORIA RAM 6116
• Organización de la memoria: 2048 X 8
• Alta velocidad: tiempo de acceso 150 nseg.
• Baja potencia en estado inactivo: 10 uW
• Baja potencia en estado activo: 160 mW
• RAM completamente estática: No requiere reloj para su funcionamiento
• Temperatura de operación: 0.75 grados centígrados
• Temperatura de almacenamiento: De -55 a +125 grados centígrados.
• Potencia de disipación: 1 Watts
• Todas sus entradas y salidas son compatibles directamente con la tecnología TTL

DESCRIPCIÓN DE LAS TERMINALES
• A0-A10: Lineas de direcciones
• E/S0-E/S7: Entrada y Salida de datos
• CS Habilitador de la pastilla
• OE Habilitador de salidas
• WE Habilitador para la escritura
• Vcc Voltaje de alimentación +5.0 Volts
• GND Terminal de tierra 0.0 Volts

OPERACIÓN DE LECTURA

Un dato será leído del dispositivo de almacenamiento RAM 6116, mediante la aplicación de un nivel alto en la terminal (WE)', un nivel bajo en (CS)', y estando en nivel bajo la terminal (OE)', con estas conexiones se dispone que se pueda leer la memoria RAM 6116, si se coloca un nivel alto en la terminales (OE)'. y/o (CS)' las lineas de E/S y/o la pastilla 6116 se ponen en estado de alta impedancia, respectivamente.
(CS)' posee la función de controlar la activación de la pastilla, la cual puede ser usada por un sistema con microprocesadores para la selección del dispositivo.
La terminal (OE)' habilita las salidas, o las pone en estado de alta impedancia, la cual puede ser habilitada cada vez que el microprocesador requiera leer la memoria.

OPERACIÓN DE ESCRITURA

Un dato es escrito en el dispositivo RAM 6116 mediante la aplicación de un nivel bajo en la terminal (WE)', un nivel bajo en (CS)', y un nivel alto o bajo en la terminal (OE)'.
La terminal (WE)' al ser activa provoca que las terminales E/S de la memoria RAM 6116 se habiliten para aceptar la información, en estas condiciones la terminal (OE)' posee la opción de ser colocada en estado de alto bajo, para realizar así la operación de escritura.



                                                             

miércoles, 18 de junio de 2014

Como programar arduino parte 6

0 comentarios
En este parte profundizaremos un poco mas sobre la parte de programacion antes de pasar a nuestro siguiente proyecto.

Loops (bucles)

Los loops o bucles nos permiten repetir un grupo de comandos un numero determinado de veces o hasta que se cumpla una condicion. En el sketch anterior solo se deseaba que el led parpadera tres veces con S luego tres veces con O y por ultimo tres veces con S, por supuesto esto no implica una gran dificultad en el codigo. Sin embargo seria poco practico si esto lo quisieramos repetir unas 1000 veces. Por eso en C tenemos y podemos utilizar el comando for.

Por ejemplo si implementaramos lo anterior solo nos bastaria en poner.

for ( int i = 0; i < 1000 ; i ++)

    flash (200) //
}

El codigo anterior repetiria 1000 veces el destello del led para la letra S.

Otra forma de implementar un bluque en arduino es usando el comando "while".
El ejemplo anterior se podra llevar a cabo usando el comando "while" como se muestra.

int i= 0;
while (1 < 100)
{
      flash (200);
        i++;
}

El codigo descrito nos indica que miestras 1 sea menor que 100 se va a ejecutar el codigo que esta en el interior. Vemos que por cada vez que se ejecuta el codigo i se va incrementando en 1 en 1 indicado por  i++. Cuando  " i " se incrementa a 101  deja de ser cierta la condicion por lo que ya no se ejecuta el codigo en el interior.

Arrays (matrices)

Los arrays son una  forma de contener una lista de valores y se puede acceder a cualquiera de  esos valores por su posicion en la lista. Estas posiciones de indice comienza desde 0 en lugar de 1. Esto significa que el primer elemento es en realidad el elemento cero.

Ejemplo de como declarar un array.

int duracion [ ] = {200,200,200,500,500,500,200,200,200}

En el codigo anterior se coloca "[ ]" despues del nombre de la variable. Si se especifica el contenido de la matriz al mismo tiempo de declararla como en el ejemplo anterior, no es necesario especificar el tamaño de la matriz.  Si no se establece el contenido dentro de la matriz debera indicarse el tamaño de la matriz.

int duracion [10]; 

A continuacion se muestra un codigo donde se implementa un array.

void  loop( )
{

    for (int i = 0 ; i< 9 ; i++)
      {
             flash( duracion [i]);
       }
    delay(1000);


En el codigo anterior se ejecuta el codigo hasta que i sea menor que 9  y duracion[ i ] va accediendo a cada posicion de acuerdo como se vaya incrementando i .

En el siguiente post veremos algunos ejemplos practicos de lo que hemos visto en teoria.
<< Como programar arduino parte 5                  Como programar arduino parte 7 >>

Como programar arduino parte 5

0 comentarios
Como habiamos mencionado antes con el uso de funciones  nuestro codigo es mas corto y entendible. El siguiente sketch es igual en funcionamiento que el sketch anterior, solo que mas compacto y contiene la funcion llamada  " void flash (int duracion)".

//Proyecto  S.O.S  de codigo Morse con funcion

int led = 13;

void setup ( )
{
  pinMode (led, OUTPUT); 

}

void loop ( )
 {
      flash(200); flash(200); flash(200); // S
     delay(300); // Para que se note la separacion de los destellos
     flash(500); flash(500); flash(500); //O
     delay(300);
     flash(200); flash(200); flash(200); // S
 delay(1000); // esperar 1 segunda para que se repita el proceso
}  

void flash (int duracion)
{
    digitalWrite ( led, HIGH);
     delay ( duracion); // el valor que recibe de flash 
     digitalWrite (led, LOW);
     delay( duracion);
}

Como se ve el codigo es mucho mas compacto que el anterior y es igual en funcionamiento. Destacamos en este sketch el uso de la funcion "flash ()" que como vemos la mandamos a llamar flash(200); pasandole el valor 200 para la letra "S" y 500 como para la letra "O" para que la reciba "int duracion" y esta variable "duracion" guarde el valor que se le paso para ocuparla con la funcion delay (). Si tomamos a detalle "duracion" toma el valor que se le mande con "flash ( valor a mandar)". 

En la siguiente parte veremos mas detalles sobre programacion antes de pasar a desarrollar mas proyectos.


<< Como programar arduino parte 4


 Como programar arduino parte 6 >>

lunes, 30 de diciembre de 2013

Como programar arduino parte 4

0 comentarios

Que tal blogueros que nos siguen en este curso sobre programar nuestro arduino en capitulos anteriores solo dimos una pequeña introduccion que nos sera de gran ayuda para seguir en nuestro curso que todavia le hacen falta unos 20 capitulos mas para tener el mayor conocimiento posible sobre arduino.

Asi que sin mas seguiremos con nuestro curso.

En este capitulo desarrollaremos una alarma intermitente de auxilio S.O.S de codigo morse por lo que primero demos una pequeña introduccion de lo que trata.

El codigo morse es un metodo de comunicacion. Su codificacion se basa en una serie de puntos y rayas. Las letras S.O.S (Save Our Souls, salvar nuestras almas) siguen siendo reconocidas como una señal internacional de socorro. En nuestro siguiente sketch haremos que nuestro led parpadee la secuencia  S.O.S  una y otra vez.

De material solo necesitara: Arduino, un led de 5mm y una resistencia de 270 ohms.

int led = 13; 
 
void setup() {                

  pinMode(led, OUTPUT);     
}
 
void loop()
 
{
digitalWrite(led, HIGH);// S(...) primer punto
delay (200); 

digitalWrite(led, LOW); 
delay (200); 
digitalWrite(led, HIGH);// S(...) segundo punto
delay (200); 
digitalWrite(led, LOW); delay (200); 
digitalWrite(led, HIGH);// S(...) tercer punto
delay (200);   
 
digitalWrite(led, LOW); delay (500); 
 
digitalWrite(led, HIGH);// o (-) primer raya
delay (500);  

digitalWrite(led, LOW); delay (500);  
 
digitalWrite(led, HIGH);// o (-) segunda raya 
delay (500);  
 
digitalWrite(led, LOW); delay (500);  
 
digitalWrite(led, HIGH);// o (-) tercer raya 
delay (500);   
 
digitalWrite(led, HIGH);// S(...) primer punto
delay (200); 
 
digitalWrite(led, LOW); delay (200); 
 
digitalWrite(led, HIGH);// S(...) segundo punto 
delay (200); 
 
digitalWrite(led, LOW); delay (200); 
 
digitalWrite(led, HIGH);// S(...) tercer punto
delay (200); 
 
digitalWrite(led, LOW); delay (1000); // Esperar 1 segundo     
 
 
 


En el proximo capitulo mostraremos como reducir el codigo considerablemente, si bien el
sketch anterior es completamente funcional el codigo resultante no es practico por lo
que tendremos que utilizar funciones para reducir el codigo para que sea mas practico.



<< Como programar arduino parte 3              Como programar arduino parte 5 >>                             

domingo, 8 de diciembre de 2013

Como programar arduino parte 3

0 comentarios
Aritmetica en arduino


Es raro que sea necesario ocupar mucha aritmetica en nuestros sketches. En ocaciones puede que tenga
que escalar una entrada analogica para convertirla en una temperatura o con mas frecuencia, agregar 1 a
una variable de recuento. Cuando se esta realizando calculos necesitara poder asignar el resultado a dicho
calculo a una variable.

Ejemplo

Las siguientes dos lineas de codigo tiene como mision proporcionar a la variable y el valor de 50 y a la
variable x  el valor de y+100

y=50;


strings (cadenas)

Cuando los programadores hablan de strings, se estan refiriendo a una cadena de caracteres, como por
ejemplo el mensaje "Hola mundo". Cuando usamos arduino hay algunas situaciones en las que puede que
tenga que utilizar strings, por ejemplo al escribir un mensaje en una pantalla LCD 16X2 o cuando se devuelven datos de texto serie a traves de la conexion USB.

Las strings se crean usando la siguiente sintaxis:

char* message= "Hola mundo";

La palabra char* indica que la variable message es un puntero a un caracter.

Instrucciones condicionales

Las instrucciones condicionales son una forma de tomar decisiones en un sketch. Por ejemplo se puede
encender un led si el valor de una variable de temperatura cae por debajo de un determinado umbral.

El codigo para el ejemplo anterior seria:

 if (temperatura < 15 )
{
 digitalwrite(led, HIGH);
}

La linea de codigo dentro de las llaves solo se ejecutaran si fuera cierta la condicion tras la clave.

La condicion tiene que ir entre parentesis.

Entonces la siguiente linea devuelve "true" si el valor de la variable temperatura es inferior a 15.

if (temperatura < 15 ) 

Al igual que <, tenemos : >, <= y >=.

Para ver si dos numeros son iguales, se puede usar ==, y para probar que no son iguales, se usa !=.

Por tanto la siguiente expresion devolvera "true" si la variable de temperatura tuviera cualquier valor 
que no fuera 15.

Tambien se puede crear condiciones complejas mediante los denominados operados logicos. Los pricipales
operadores  son && (y), y ||  (o).

Por tanto un ejemplo que enciende el LED si la temperatura es inferior a 15  o superior a 20 podria ser el
siguiente:

if ( (temperatura < 15 ) ll (temperatura > 20) )
{
   digitalwrite (led, HIGH);


A menudo, cuando se utiliza una instruccion con el condicional if (si ...) se desea hacer una cosa si la condicion es verdadera y otra cosa si es falsa. Esto se puede hacer utilizando la palabra clave else como 
se muestra en el siguiente ejemplo:

if ( (temperatura < 15 ) ll (temperatura > 20) )
{
   digitalwrite (led, HIGH);


else

{
digitalwrite(led, LOW);
}

 Conclusiones

En lo que llevamos del curso hemos explorado solo un poco del lenguaje en C y de aspectos basicos de arduino, hay mucho todavia que tenemos que aprender si no se esta familiarizado con la programacion  y la 
electronica pero en capitulos futuro puliremos todos esos detalles y haremos proyecto cada vez mas serios para tener un conocimiento profundo sobre arduino.  


<< Como programar arduino parte 2                                          Como programar arduino parte 4 >>      

sábado, 9 de noviembre de 2013

Como programar arduino parte 2

0 comentarios

En esta parte hablare sobre el hardware de arduino y del microcontrolador  que tiene como corazon. La placa basicamente solo presta apoyo al microcontrolador extendiendo los pines de los conectores para que pueda conectar hardware en ellos y proporcionar un enlace USB para descargar los sketch.

Tambien hablare brevemente del lenguaje C para programar arduino, algo que se profundizara cuando se vaya poniendo proyectos mas complejos.


Microcontroladores

El corazon de arduino es un microcontrolador el resto de la placa se ocupa para facilitar la alimentacion y permitir que se comunique con la computadora . Lo que se nos da cuando compramos un arduino es un pequeño ordenador en un chip. Este tiene todo y mas de lo que contenia las primeras computadoras caseras. Dispone de un procesador, un Kilobyte de RAM para contener datos, unos cuantos kilobytes de memoria EPROM o de memoria Flash para contener nuestros programas y puertos de entrada/salida.

Las entradas pueden leer señales digitales y señales analogicas  estas nos permite conectar innumerables tipos de sensores de luz, temperatura, sonido, etc. Las salidas tambien pueden ser digitales o analogicas

¿Que hay en una placa arduino?

Fuente de alimentacion

Debajo del conector de USB se encuentra el regulador  de tension de 5v estabilizando cualquier voltaje en un rango de 7 a 12 volts

Conexiones electricas

Cada patilla esta identificada con su nombre impreso junto a cada uno de sus pines. El primero es el Reset (reiniciar), este hace que el programa del microcontrolador comience desde el principio. El pin Reset permite reiniciar el microcontrolador momentaneamente estableciendo este pin alto ( conectandolo a +5v ). Aunque no esta especificado concretamente en las especificaciones de arduino la corriente que puede proporcionar no deben de pasar  de 250 mA por seguridad para que la tarjeta no sufra algun daño.

Entradas analogicas

Especificado como ANALOG IN esta marcado con los numeros 0 a 5. Estos seis pines se pueden utilizar para medir el voltaje que se les a conectado de forma que el valor se pueda utilizar en los sketches. Si bien aparecen etiquetadas como entradas analogicas, estas conexiones pueden utilizarse tambien como entradas/salidas digitales.

Conexiones digitales

Cambiando al conector superior y comenzando por el lado derecho. Tenemos pines denominados Digital 0 a 13. Estos se pueden utilizar como entradas/salidas digitales, si se utilizan como salida proporcionan 5 volts cuando estan en "1" y 0 volts cuando estan en "0". La corriente maxima que pueden suministrar son 40 mA. Mas que suficiente para encender un led estandar, pero no para manejar directamente un motor electrico por pequeño que sea.

Cuando estan como entradas cuyo voltaje que se le debe proporcionar para indicar que esta recibiendo un bit es 5 volts.

Algunas de las conexiones digitales (3, 5, 6, 9, 10 y 11) estan rotuladas con PWM. Estas se pueden utilizar para proporcionar un voltaje de salida variable.

Otras conexiones son AREF.AREF utilizadas para escalar las lecturas de las entradas analogicas.

Microcontrolador

Volviendo a nuestra placa arduino, el chip microcontrolador es el dispositivo rectangular negro con 28 pines. Esta insertado en un zocalo DIL (Dual in-line) con lo que se puede reemplazar facilmente, este microcontrolador es el ATmega 328.En la siguiente figura podemos ver un diagrama a bloques que muestra las principales caracteristicas de este dispositivo.

                                                                    


El cerebro de este dispositivo es la CPU (Unidad de Procesamiento Central) controla todo lo que  ocurre dentro del dispositivo. Este obtiene instrucciones de la memoria flash  y las ejecuta , tambien tenemos la memoria EEPROM que se utiliza para almacenar  datos que no queremos perder en caso de un fallo en el suministro de energia, la uart utilizada para comunicarse de micro a micro, micro a pc o micro a cualquier dispositivo externo.

 ¿ LENGUAJE C en arduino ?

Arduino utiliza el lenguaje de programacion en C, aunque eliminandon parte de su complejidad.

Ahora vamos a ver en forma mas detallada nuestro primer programa  que hemos escrito para arduino en primer lugar las lineas

//    y    /*  */

Nos indican comentarios y no tienen efecto alguno en nuestro programa, la primera linea indica que todo lo escrito delante de esas dos  // no tendra efecto alguno en esa linea

Ejemplo

// Todo lo escrito en esta linea no tiene efecto en mi programa
Aqui el compilador de arduino lo tomaria como error

La segunda linea /*  */  dentro de esas lineas y asteriscos  lo que se escriba no tendra efecto en el codigo

Ejemplo

/*  Lo escrito dentro de estas lineas y asterisco no tendra efecto en mi codigo
     Aunque exista un salto de linea.
*/
Ahora si empezando a explicar el programa  
 int led = 13;
Esta linea de codigo da un nombre al pin digital de salida que vamos a conectar el led hay que aclarar que en nuestro sketch si definimos el nombre como :
int Led = 13;
Nos arrojaria un error ya que el compilador no acepta mayusculas en la primera letra . Bueno entendido esto la palabra led es lo que se denomina una variable. Cuando se quiera utilizar una variable por primera vez en nuestro sketch hay que indicarle al compilador que tipo de variable es . Puede ser de tipo "int"  como en este caso, puede ser "float", o cualquiera que describire mas adelante.

Un "int" es un entero, es decir un numero entero, ya que no existe un pin 12.5 verdad si no en nuestro caso el pin 13 .

La sintaxis parra declarar una variable es:

 tipo_de_dato  nombre_variable = valor;  

Asi es como, primero tenemos el tipo "int", luego un espacio , luego un nombre de variable despues un signo de "=" , despues un valor y por ultimo un punto y coma para indicar fin de linea, tenga en cuenta no olvidar el punto y coma ya que eso puede traer errores de compilacion que pueden ser confusos.

Las siguientes lineas de nuestro sketch son :

void setup() {                

  pinMode(led, OUTPUT);     
 
Lo anterior es una funcion, en este caso se llama setup(), todos los sketches 
deben de tener una funcion setup(), y las lineas que contenga se ejecutaran en 
el orden que este escrita. En este caso es pinMode(led, OUTPUT);, con lo anterior
estamos configurando el pin digital como salida, si quisieramos ocuparlo como
entrada solo tendriamos que cambiarlo por pinMode(led, INPUT);, lo anterior seria
mas conveniente llamarlo como para evitar pinMode(switch, INPUT); confusiones.
 
Tanto  OUTPUT como  INPUT son constantes reservadas.  
  
void loop()
{
    digitalWrite(led, HIGH);
 
     delay (1000);
 
    digitalWrite(led,LOW);
 
    delay(1000);
 }  
 
La funcion anterior loop() tambien debe estar contenida en todos los sketches de 
arduino  esta funcion loop()(bucle), se ejecuta dentro de arduino de forma continua
hasta que se apague el arduino, por lo que el codigo que esta en el interior de
dicha funcion se ejecutara de manera continua hasta que se apague arduino. 
La funcion digitalWrite( parametro1,parametro2 ); toma dos parametros, el pin de arduino en el 
que escribe y el valor a escribir, en el codigo pasamos los parametros led y HIGH
para activar el led y led y LOW para apagarlo de nuevo.

 Tipos de Datos y Variables.

   
 En las lineas anteriores hablamos de la variable led y la declaramos como tipo int (entero). La mayoria de
las variables utilizadas en nuestros sketches seran tambien del tipo int.

Un int contiene un numero entero entre -32 768 y +32  767  esto utiliza 2 bytes de datos para cada uno
de los 1024 bytes disponibles para almacenamiento en nuestro arduino. Si ese numero no fuera suficiente
 se puede utilizar un numero "long" (largo) que utiliza 4 bytes por cada numero y le proporciona un 
intervalo de numeros entre -2 147 483 648 y +2 147 483 647. En la siguiente tabla se muestra los diferentes tipos de datos que hay.











 << Como programar el arduino                                                      Como programar arduino parte 3 >>

Electronica facilita