jueves, 24 de mayo de 2012

Proyecto Integrados - Carrito controlado arduino + android

Descripcion:
Es un pequeño carro de juguete armado por nosotros, que se mueve por medio de indicaciones del celular con Android que son recibidas por el arduino por medio de blutooth del android y un modulo de blutooth que se le puso al arduino uno.


Materiales:
  • Arduino UNO

  • Android

  • Modulo Bluetooth


  • Motores

  • Placa de carrito
  • Llantas


  • Esqueleto de carrito
  • Pilas



Herramientas:
  • Processing



  • IDE arduino


  • SDK android

Elaboracion:
Se programo el android por medio de Processing, el arduino con su IDE, se armo el carrito con piezas y materiales encontrados de cada integrante de juguetes cuando eramos pequeños, se fueron haciendo pruebas  con arduino y processing, y tambien con difierentes carritos armados, hasta que por fin el carro que les presentamos pudo dar sus primeros pasos.

Primer intento:


Segundo y final intento:





Codigo:



Funcionamiento:

El carro solo da en dos direcciones hacia adelante y hacia atra, cuando da de reversa el carro levanta las llantas traseras para poder asi girar sobre su propio eje y poder dar vuelta.


Video:

miércoles, 23 de mayo de 2012

Tecnicas de optimizacion


Tecnicas de Optimización:


Simpre que se implementa  cierto codigo ya sea para programacion para computo integrado o algun codigo esencial y de suma importancioa siempre se tiene que tener en cuenta variso factores:

1-. El tiempo de procesamiento de los datos
2-. Cantidad de memoria utilizada

En especial estas dos anteriores son muy importantes para lso diferentes circuitos integraods pos su baja memoria y su cpu.

y siempre es necesario estimar la entrada de datos del problema comunmente esto se le llama complejidad del problema.

La optimizacion o las tecnicas de la optimizacion son meramente diferentes tipos de herramientas  para resolver diferentes tipos de problemas complejos ya sea meramente de informatica o mejorar series de pasos o procesos para una mejor ejecución


Cuando es adecuado utilizar la optimización.

Varias de las veces el programador intenta realizar la optimizacion mientras esta codificando y esto esta meramente incorrecto ya que si es algo nuevo que realizarmo es realmente dificil que resulte algo bueno de la optimizacion sin antes conocer el problema o cierto algoritmo.

Lo primero que se tiene que realizar es crear el codigo o el algoritmo de tal manera que quede lo mas entendible para el programador y posteriormente realizar la optimización.

Existen diferentes tipos de herramientas que nos pueden ayudar a verificar la optimizacion  para realizar pruebas de combertura de codigo y de memoria que es lo mas importante para CPU integrados:

GNU Cov: http://www.sunsite.ualberta.ca/Documentation/Gnu/gcc-3.0.2/html_node/gcc_133.html#SEC133
GNU Prof:http://projects.gnome.org/memprof/
Memprof: http://projects.gnome.org/memprof/

Posteriormente de esto podemos utilizar varias tecnicas para optimizar:



1-. Eliminar codigo inecesario
2-. Evitar los bluces lo mayot posible
3-.  Optimizar el acceso a la memoria (importante para los TLC o CPU integrados)
4-.Identificar partes del codigo mas pesado y enfocarse en esas partes del codigo

Ventajas de la Optimización:



Una de las primeras ventajas es que mejora considerablemente el codigo y al hora de ejecutarlo.

En caso de los integrados:

1- Mejora el tiempo de oscilacion del reloj
2-. Es mas eficiente al entrar la memoria
3-. Ocurren menos fallas.


Aqui una imagen o una grafica de como se puede manejar la optimizacion dependiendo del problema:



Referencias:
http://www.tufuncion.com/optimizar-codigo
http://msdn.microsoft.com/es-es/library/xz7ttk5s(v=vs.80).aspx






domingo, 20 de mayo de 2012

Ambientes inteligentes

Un usuario llega a la oficina y de forma automática unos dispositivos electrónicos adaptan la luz y la temperatura de la sala. El ordenador se conecta y activa los programas más utilizados habitualmente. Todo el entorno físico está personalizado y se adapta a las necesidades de cada persona: son los ambientes inteligentes, una de las grandes apuestas tecnológicas para el futuro que modificará nuestro entorno más próximo a escala doméstica, social y laboral.


¿Que son los ambientes inteligentes?
Es una propuesta. A todas aquellas personas que piensen que la comodidad es algo importante, que les guste mantenerse a la vanguardia en la tecnología, las que con una pequeña inversión quieran hacer ganar plusvalía a una propiedad en muy corto tiempo, o las que piensen que la seguridad de su familia es algo primordial.

Propiedades

Ubicuidad, transparencia e inteligencia son las tres propiedades básicas de los ambientes inteligentes: ubicuidad para encontrarlos en el punto donde esté el usuario, transparencia para pasar desapercibidos en el medio físico e inteligencia para adaptarse a las preferencias de cada individuo. "La capacidad de alimentación autónoma -comenta López Villegas- es uno de los aspectos más significativos de los dispositivos. Por esto, tenemos que encontrar metodologías eficientes, es decir, materiales y sistemas que puedan aprovechar al máximo la energía y para reducir al mínimo el consumo de las unidades de emisión-recepción".

¿Qué es la domótica?

Domótica es el término "científico" que se utiliza para denominar la parte de la tecnología (electrónica e informática), que integra el control y supervisión de los elementos existentes en un edificio de oficinas o en uno de viviendas o simplemente en cualquier hogar. También, un término muy familiar para todos es el de "edificio inteligente" que aunque viene a referirse a la misma cosa, normalmente tendemos a aplicarlo más al ámbito de los grandes bloques de oficinas, bancos, universidades y edificios industriales.

¿QUÉ APORTA LA DOMÓTICA?

La domótica contribuye a mejorar la calidad de vida del usuario:
  • Facilitando el ahorro energético: gestiona inteligentemente la iluminación, climatización, agua caliente sanitaria, el riego, los electrodomésticos, etc., aprovechando mejor los recursos naturales, utilizando las tarifas horarias de menor coste, y reduce de esta manera la factura energética. Además, mediante la monitorización de consumos, se obtiene la información necesaria para modificar los hábitos y aumentar el ahorro y la eficiencia.
  • Fomentando la accesibilidad: facilita el manejo de los elementos del hogar a las personas con discapacidades de la forma que más se ajuste a sus necesidades, además de ofrecer servicios de teleasistencia para aquellos que lo necesiten.
  • Aportando seguridad de personas, animales y bienes: controles de intrusión y alarmas técnicas que permiten detectar incendios, fugas de gas o inundaciones de agua, etc.
  • Convirtiendo la vivienda en un hogar más confortable: gestión de electrodomésticos, climatización, ventilación, iluminación natural y artificial…
  • Garantizando las comunicaciones: recepción de avisos de anomalías e información del funcionamiento de equipos e instalaciones, gestión remota del hogar, etc.

Tipo de Arquitectura
La arquitectura de un sistema domótico, como la de cualquier sistema de control, especifica el modo en que los diferentes elementos de control del sistema se van a ubicar. Existen dos arquitecturas básicas: la arquitectura centralizada y la distribuida.

Arquitectura centralizada:
Es aquella en la que los elementos a controlar y supervisar (sensores, luces, válvulas, etc.) han de cablearse hasta el sistema de control de la vivienda (PC o similar). El sistema de control es el corazón de la vivienda, en cuya falta todo deja de funcionar, y su instalación no es compatible con la instalación eléctrica convencional en cuanto que en la fase de construcción hay que elegir esta topología de cableado.

Arquitectura distribuida:
Es aquella en la que el elemento de control se sitúa próximo al elemento a controlar. Hay sistemas que son de arquitectura distribuida en cuanto a la capacidad de proceso, pero no lo son en cuanto a la ubicación física de los diferentes elementos de control y viceversa, sistemas que son de arquitectura distribuida en cuanto a su capacidad para ubicar elementos de control físicamente distribuidos, pero no en cuanto a los procesos de control, que son ejecutados en uno o varios procesadores físicamente centralizados.

En los sistemas de arquitectura distribuida que utilizan como medio de transmisión el cable, existe un concepto a tener en cuenta que es la topología de la red de comunicaciones. La topología de la red se define como la distribución física de los elementos de control respecto al medio de comunicación (cable).

Cada elemento del sistema tiene su propia capacidad de proceso y puede ser ubicado en cualquier parte de la vivienda. Esta característica proporciona al instalador domótico una libertad de diseño que le posibilita adaptarse a las características físicas de cada vivienda en particular.

Aplicaciones.

Seguridad
Detección de intrusos, de humo, gas e incendio; control de válvulas de agua. Sistema completo de seguridad que también permite programar códigos de usuario para la seguridad y personalizarlos con eventos. Programa 8 números telefónicos para notificación en caso de emergencia.

 
Vigilancia: Vigile a sus seres queridos, bríndeles tele asistencia, proteja sus bienes patrimoniales y su seguridad personal. Por medio de sistema de vigilancia con cámaras análogas o IP (para verlas desde internet), grabe los acontecimientos, las cámaras le notifican si sucede algo o responda su video portero desde donde esté.



Control de Acceso:Por teclados, etiquetas, tarjetas de proximidad o simplemente con la huella de su dedo, puede controlar el acceso a ciertas áreas de la residencia o armar escenas completas.









Control de Iluminación: Control de iluminación por horarios, detección de movimientos, apertura de puertas etc. Crea eventos como relax, lectura, luces on y off, romántico y demás escenas que le proporcionan comodidad en el hogar. Puede operar dispositivos de diferentes marcas y tener una completa integración.



Confort.
Termostatos: Los termostatos le permiten controlar. La temperatura del hogar, programarlos por horarios o eventos como (en casa dormido, ausente, etc.). Control total de la temperatura en, lugares como los áticos, sótanos, patios, cavas, etc. Y teniendo un control inteligente de estos, reducimos el consumo de energía innecesaria




Distribución de Audio y Video: Disfrute de la música en cualquiera de las zonas de la casa u oficina, y seleccione en cualquier momento la fuente que desee. Controle los horarios y programación del entretenimiento por TV y audio para los más pequeños, disfrute de una buena película, una fiesta y de la tranquilidad que solo la música le puede dar.





Accesibilidad: En la accesibilidad se incluyen las aplicaciones o instalaciones de control remoto del entorno que favorecen la autonomía personal de personas con limitaciones funcionales, o discapacidad.
La domótica aplicada a favorecer la accesibilidad es un reto ético y creativo pero sobre todo es la aplicación de la tecnología en el campo más necesario, para suplir limitaciones funcionales de las personas. El objetivo de estas tecnologías es favorecer la autonomía personal. Los destinatarios de estas tecnologías son todas las personas, ya que por enfermedad o envejecimiento, todos somos o seremos discapacitados, más pronto o más tarde.

Bibliografias: 
http://noticias.universia.es/ciencia-nn-tt/noticia/2005/01/25/609407/ambientes-inteligentes.html 
http://www.monografias.com/trabajos35/domotica/domotica.shtml 
http://ambientes-inteligentes.com/gpage.html

Dispositivos Perifericos

Las Computadoras son una herramienta esencial, prácticamente en casi todos los campos de nuestras vidas; es útil, ayuda a la mejora y excelencia del trabajo; lo que lo hace mucho mas fácil y práctico

El papel que juegan los dispositivos periféricos de la computadora es esencial, ya que sin tales dispositivos la computadora no sería útil a los usuarios.

Los dispositivos periféricos nos ayudan a introducir a la computadora los datos para que esta nos ayude a la resolución de problemas y por consiguiente obtener el resultado de dichas operaciones, es decir; estos dispositivos nos ayudan a comunicarnos con la computadora, para que esta a su vez nos ayude a resolver los problemas que tengamos y realice las operaciones que nosotros no podamos realizar manualmente. 




Dispositivos perifericos de entreada
Un dispositivo periférico que genera entradas para la computadora, tal como un teclado, explorador, etc.

Los dispositivos de entrada más comunes son:

  • Teclado (Keyboard)
  • Ratón (Mouse)
  • Bola de guía (Trackball)
  • Lápiz óptico (Optical reader)
  • Explorador (Scanner)
  • Palanca de juegos (JoyStick)
  • Cámara digital (Digital camera)
  • Micrófono (Microphone).
Dispisitivos perifericos de salida
Cualquier dispositivo periférico que recibe la salida de la computadora, tal como una pantalla de vídeo, impresora, perforadora de tarjetas o unidad de comunicaciones. A pesar de que los discos y cintas reciben la salida de la computadora, son considerados dispositivos de almacenamiento.

Los dispositivos de salida más comunes son:

  • Monitor (Monitor)
  • Impresora (Printer)
  • Graficadores (Plotter)
  • Bocinas.
Dispositivos de almacenamiento
Es todo aparato que se utilice para grabar los datos de la computadora de forma permanente o temporal. Una unidad de disco, junto con los discos que graba, es un dispositivo de almacenamiento. A veces se dice que una computadora tiene dispositivos de almacenamiento primarios (o principales) y secundarios (o auxiliares). Cuando se hace esta distinción, el dispositivo de almacenamiento primario es la memoria de acceso aleatorio (RAM) de la computadora, un dispositivo de almacenamiento permanente pero cuyo contenido es temporal. El almacenamiento secundario incluye los dispositivos de almacenamiento más permanentes, como unidades de disco y de cinta.


  • Discos flexibles
  • Discos duros.
  • Cintas magnéticas
  • CD-ROMs 

Dispositivos de entrada y salida
Son aquellos dispositivos que pueden enviar datos y que a su vez pueden recibir datos. Entre ellos se encuentran.
  • El Módem 
  • El Fax/Módem 
  • Tarjetas de red.


¿Cómo se instalan?

Dependiendo del tipo de dispositivo elegido, como un teclado, ratón,grabadora de formato DVD o Blu-ray, tarjeta de sonido y disco duro, se lleva a cabo un proceso de instalación muy distinto a los demás. En base hay dos grandes grupos. Por un lado, los dispositivos y accesorios que se instalan en el equipo informático mediante el uso de una conexión USB o inalámbrica.

  
En este caso los propios dispositivos envían una señal al ordenador desde la conexión USB para transmitirles todos los datos de instalación. Con este tipo de accesorios sólo hay que esperar unos minutos, ya que el ordenador se encargará absolutamente de todo el proceso. Algunos dispositivos de instalación por USB son la cámara Logitech HD Webcam C510 por 40 euros enPCComponentes.com y el Kensington ValuKeyboard por 9,20 euros enAcuista.com.

Por otro lado están los dispositivos que requieren una instalación directamente en la torre del ordenador, siendo un requisito imprescindible abrirla y buscar el lugar adecuado para cada componente. Esta instalación es un poco más complicada, y se recomienda apagar el equipo al completo para no sufrir ninguna avería. Una vez se han colocado las piezas se vuelve a montar el equipo tal y como estaba la primera vez. Un buen ejemplo es el WE Caviar Green por 68,90 euros en Alternate.es, constatado el 30 de julio de 2011.

En resumen, los dispositivos periféricos son accesorios imprescindibles, en su justa medida, como el teclado y el ratón, y se instalan en base a dos procesos: con conexión automática USB o realizando un añadido de componentes dentro del ordenador.


Caracteristicas de los dispositivos perifericos
Duración
Es la permanencia sin alteración de los datos a lo largo del tiempo. Algunos soportes van perdiendo la señal escrita a lo largo del tiempo y acaban perdiendo los datos por obsolencia física del soporte.

Tipo de acceso
Característica vinculada al dispositivo lector/grabador. Un dispositivo es de acceso secuencial si para acceder a un dato determinado debemos acceder primero a todos los que le preceden físicamente (Ejemplo: las cintas magnéticas). Se dice, en cambio, que un dispositivo permite el acceso directo si podemos acceder a un dato sin necesidad de pasar por los datos que le preceden (Ejemplo: disco magnético).

Transportabilidad
Un soporte de información es transportable, si es susceptible de ser trasladado de una unidad periférica a otra. Ejemplo: el disquete puede ser utilizado en distintas disqueteras de su mismo formato. Por el contrario hay soportes de información fijos, que no pueden extraerse de la unidad correspondiente. (Ejemplo disco duro).

Bibliografia:
http://disperifericos.galeon.com/
http://es.over-blog.com/Que_son_los_dispositivos_perifericos_y_como_se_instalan-1228321779-art318123.html

jueves, 17 de mayo de 2012

Poyecto PIC

Auto Increible. 
Lo que se realizo fue un programa que prende y apaga 8 led´s secuencialmente de ida y de regreso. Simulando las luces del auto increible XD.


Componenetes
Pic16f628a 

8led´s

8 resistencias de 330 ohms

Cable 

Protoboard

IDE PCW

Proteus



Diagrama en proteus:


Programador: Micro PRO

Codigo:

Problemas:

 
Cuando se programaba el pic, cada vez que se elejia un .hex a cargar los fuses que estaban preseleccionados se quitaban entonces se tenian que volver a poner, por lo tanto no prendian los led´s despues de muchos intentos y cambiar eso este fue el resultado.

martes, 15 de mayo de 2012

Programando para arduino

En esta ocacion les hablare un poco sobre los diferentes puertos que tiene el arduino en especial los puertos seriales que es el tx (pin 1) y rx (pin 0).


El "TX" que básicamente significa transmisión de datos, como su nombre nos indica nos sirve para resivir datos de dispositivos Seriales como las usb o desde un modulo de bluetooth que explicare mas adelante.

El otro puerto  rx es para enviar información desde el arduino asía algún puerto serial.

Es necesario configurar las velocidades de transmisión de datos de los bytes.

Para configurar el modulo de bluetooth desde linux es necesario instalar el "man bluetooth", ya que el que tiene como default no funciona mucho para este tipo de cosas, este paquete se puede instalar desde el synaptic o desde el centro de software de ubuntu. Ya instalado, es necesario que el modulo de bluetooth este en funcionamiento,esto lo podemos realizar con ayuda de nuestro arduino. conectamos el VCC del modulo con el pin de voltaje de 3.3 y con algun pin de tierra para su funcionamiento, ya realizando esto el man bluetooth lo detectara y podremos configurarlo sin ningun problema como serial y modificar los diferentes tiempos de transferencia.





Transferencia actualmente ocnfigurada: 115200

Ahora el programa de ejemplo en android :


En este ejemplo tenemos dos variables, una variable booleana que no guarda el String resivido por parte del serial, y una variable estado que controlara el funcionamiento de un led.

dentro del metodo inicial "setup" agregamos la linea sobre la tasa de trnasferencia de la informacion que tiene que ser la misma que el serial  y declarar el pin que se utilizara para salidas.

dentro de nuestro ciclo repetitivo tenemos  la instruccion "if (Serial.available() > 0) " esto quiere decir que si detencta que los puertos estan en funcionamiento o resiven algun dato lo dara como verdadero en caso que no sera 0 y no entrara en el cliclo.

la instruccion " incomingByte = Serial.read();" le los datos resividos por el puerto "RX" y posteriormente sigue una serie de condiciones para apagar o prender un led.


Algo de programación con Processing para bluetooth
Para poder conectarnos con los diferentes dispositivos de bluetooth en este caso con algun modulo de bluetooth, es necesario la creacion de diferentes sockets para la entrada de datos y salida de datos.


Para poder activar el dispositivo de bluetooth es necesario las siguientes lineas :


void onStart()
{
  super.onStart();
  println("onStart");
  adaptador = BluetoothAdapter.getDefaultAdapter();
  if (adaptador != null)
  {
    if (!adaptador.isEnabled())
    {
        Intent enableBtIntent = new Intent(BluetoothAdapter.ACTION_REQUEST_ENABLE);
        startActivityForResult(enableBtIntent, REQUEST_ENABLE_BT);
    }
    else
    {
    }
  }
}






En el celular nos mostrara o preguntara que si queremos activar el dispositivo de bluetooth. posteriormente si se activa el dispositivo de bluetooth se pueden hacer muchas cosas como conectarse con el dispositivo automáticamente o mostrar los dispositivos.

A Continuaciin unas variables importantes:


BluetoothAdapter adaptador; 
BluetoothDevice dispositivo;  // guardar el dispositivo a usar
BluetoothSocket socket;  // para enviar y resivir informacion
InputStream ins;  // para resivir informacion
OutputStream ons; // enviar informacion


Para poder conectarse al dispositivo es necesario realizar las conexiones con los sockets.

    dispositivo = (BluetoothDevice) dispositivos.get(elegido); //  aqui se conecta con el dispositivo elegido de una lista o manera automatica.

    socket = dispositivo.createRfcommSocketToServiceRecord(UUID.fromString("00001101-0000-1000-8000-00805F9B34FB"));


   

    socket.connect();     
    ins = socket.getInputStream();     
    ons = socket.getOutputStream();  
Y ya para enviar datos solo se ase lo siguiente:


        ons.write(0);  // en algun metodo ya sea dentro de algun escuchador de algun boton




Referencia y tutoriales con android, process y arduino
http://webdelcire.com/wordpress/archives/1045
http://wiki.processing.org/w/Android
http://arduino.cc/en/Reference/serial

domingo, 13 de mayo de 2012

Sistemas operativos especificos


Sistema embebido




Es un sistema de computación diseñado para realizar pocas o algunas operaciones diseñadas específicamente o dedicadas a un sistema de computo en tiempo real.
Estos sistemas se diseñan y se implementa para tareas especifico, la mayoría de estos sistemas los podemos encontrar el la placa madre de una computadora, como en las tarjetas de vídeo, de red, audio y entre otras cosas mas.

En lo general un sistema embebido consiste en un sistema con un microprocesador cuyo hardware y software están específicamente diseñados y optimizados para resolver un problema concreto eficientemente, Común mente  ineractuan con el contorno para vigilar o controlar algún proceso mediante una serie de sensores.

Componentes de un sistema embebido:

1-. el microprocesador que aporta la capacidad de computo del sistema
2-. Comunicación del sistema puede incluir RS-232RS-485SPII²CCANUSBIPWi-FiGSMGPRS entre otros.
3-. Actuadores que son los elementos electronicos a controlar
4-. Entradas y salidas analogias y digitales
5-. Modulo del reloj es el oscilador del sistema que se encarga de enviar las señales en cierto tiempo.
6-. Modulo de energia se encarga de modular la energia para todo el sistema embebido.


Aplicaciones de los Sistemas embebido:

Fabricas
Maquinarias
Puntos de ventas
Decodificadores
Sistemas de radar de aviones
Cajeros

Entre otras mas


Windows Embedded NavReady


Otro de los sistemas operativos especificos es uno de navegacion que saco Microsoft ase tiempo llamado Windows Embedded NavReady


Ahora este sistema operativo esta basado en la version 5.0 de windows CE otro sistemas operativo especifico, y funciona con procesadores ARM con arquitectura de 32 bits. Este sistema ofrece gran soporte para trabajar con diferentes dispositivos, comunicacion, ofrese un soporte de trabajar en tiempo real y los diferentes servicios que ofrece Microsoft.


 Pocket PC OS



 Este sistema se desarroll mas que nada para el movil de Palm OS en los PDA.  Este sistema operativo o estos dispositivos esta mas orientado para las empresas ya que son especificos para diferentes redes de trabajo, y no es especificamente hecho para los consumidores. Este dispositivo ofrece una seguridad mayor a comparacion de otros dispositivos por cuestiones de trabajo, a la vez de poder controlar ciertos dispositivos o terminales mediante una red empresarial.


TinyOS



Este sistema especifico fue uno de los primeros sistemas creados para sensores inalambricas de redes.Este sistema trabaja en un lenguaje llamado nesc un lenguaje muy parecido al lenguaje c como un conjunto de procesos y tareas que trabajan entre si.Ademas este sistema operativo ofrece configuraciones especificas, interfaces,y un estilo modelo de trabajo  multithreading.
 modulos que permiten a los programadores trabajar mas a gusto.




ligas:
http://www.benito.org.mx/blog/software/microsoft-presenta-sistema-operativo-especifico-para-
dispositivos-de-navegacion.html
http://www.os.catacamas.net/Sistemas%20integrados/sistemas%20operativos%20integrados.html

Lenguaje C en Pic

Algunas de esas características son:
  • Al compilar genera un código máquina muy compacto y eficiente.
  • Se integra perfectamente con MPLAB y otros simuladores/emuladores como PROTEUS para el proceso de depuración.
  • Incluye una biblioteca muy completa de funciones precompiladas para el acceso al hardware de los dispositivos (entrada/salida, temporizaciones, conversor A/D, transmisión RS-232,bus I2C….,etc.
  • Incorpora drivers para dispositivos externos, tales como pantallas LCD, teclados numéricos, memorias EEPROM, conversores A/D, relojes en tiempo real, etc.(los drivers son pequeños programas que sirven de interfaz entre los dispositivos hardware y nuestro programa).
  • Permite insertar partes de código directamente en Ensamblador, manteniendo otras partes del programa en C.



Características del lenguaje C para este compilador

El lenguaje C estándar es independiente de cualquier plataforma. Sin embargo, para la programación de microcontroladores es necesario disponer de determinados comandos que se refieran a partes específicas de su hardware, como el acceso a memoria, temporizadores, etc. Por este motivo, además de los comandos, funciones y datos del lenguaje ANSI C, el compilador PCW incluye bibliotecas que incorporan determinados comandos que no son estándar, sino específicos para la familia de microcontroladores PIC. Éstos son básicamente de dos tipos: directivas del preprocesador y funciones precompiladas


Directivas del preprocesador.
El compilador PCW dispone de 7 tipos básicos de directivas:
Directivas derivadas del estándar de C, que permiten, entre otras funciones, un control básico del código y del flujo en el proceso de compilación:
  • #DEFINE
  • #ELIF
  • #ELSE
  • #ENDIF
  • #ERROR
  • #IF
  • #IFDEF: Esta directiva actúa como el #IF sólo que aquí el pre-procesador simplemente comprueba que reconoce el id especificado (creado con un #DEFINE). Nótese que veerifica si se definió un id.
  • #IFDEF: Comprueba que no está definido el id.      
  • #IFNDEF
  • #INCLUDE
  • #LIST: Guarda el código fuente en el archivo .LST
  • #NOLIST
  • #PRAGMA
  • #UNDEF: El identificador ID no tendrá ya significando para el pre-procesador.  

Directivas asociadas a las bibliotecas precompiladas, que proporcionan al compilador información relacionada con estas bibliotecas:
  • #USE DELAY
  • #USE FAST_IO: Esta directiva afecta al código que el compilador generará para las instrucciones de entrada y salida.
  • #USE FIXED_IO
  • #USE I2C
  • #USE RS232: Esta directiva le dice al compilador la velocidad en baudios y los pines utilizados para la I/O serie. Esta directiva tiene efecto hasta que se encuentra otra directiva RS232.
  • #USE STANDARD_IO

Directivas relacionadas con la especificación del dispositivo, por un lado, para definir los mapas de memoria y el juego de instrucciones, y por otro, incluir información necesaria para la programación del dispositivo en los ficheros de salida de la compilación:
  • #DEVICE
  • #ID
  • #FUSES: Esta directiva define qué fusibles deben activarse en el dispositivo cuando se programe.
  • #TYPE

Directivas de cualificación de funciones, para identificar características especiales de una función:
  • #INLINE
  • #INT_DEFAULT: La función que sigue a la directiva será llamada si el PIC activa una interrupción y ninguno de los flags de interrupción está activo.     
  • #INT_GLOBAL
  • #INT_xxxxx
  • #SEPARATE

Directivas de control del compilador, para definir opciones referidas a la compilación del código del programa:
  • #CASE: Hace que el compilador diferencie entre mayúsculas y minúsculas. Por defecto el compilador hace esta distinción.
  • #OPT
  • #ORG
  • #PRIORITY: Esta directiva se usa para establecer la prioridad de las interrupciones. Los elementos de mayor prioridad van primero.   

Directivas de control de la memoria del microcontrolador, para gestionar y reservar el uso de determinadas zonas de memoria para variables:
  • #ASM
  • #BIT
  • #BYTE
  • #ENDASM
  • #LOCATE
  • #RESERVE: Permite reservar posiciones de la RAM para uso del compilador
  • #ROM
  • #ZERO_RAM: Directiva que pone a cero todos los registros internos que pueden usarse para mantener variables, antes de que comienze la ejecución del programa.

Identificadores predefinidos. Todas las directivas citadas hasta ahora, son comandos destinados a ser interpretados por el compilador, no por el microcontrolador. Dentro del término genérico de directiva se incluyen, además de estos comandos, unas variables que contienen información sobre el proceso de compilación. Estas variables son lo que se denominan identificadores predefinidos del compilador:
  • __DATE__
  • __DEVICE__
  • __PCB__
  • __PCH__
  • __PCM__

En un programa, las directivas se reconocen fácilmente porque comienzan por el símbolo #, mientras que los identificadores empiezan y acaban por doble subrayado (__).

esta es la IDE de PCW compiler

Funciones precompiladas.
Se puede facilitar considerablemente la tarea de programación si no es necesario construir por nosotros mismos aquellas funciones que son de utilización más frecuente, como leer la entrada de un teclado o imprimir un determinado mensaje en una pantalla LCD conectada como salida.

Existen funciones en C incluidas en el compilador PCW para manejar los diferentes recursos del microcontrolador, desde el bus I2C hasta el conversor A/D.

Utilidades adicionales
El entorno PCW incluye, además del IDE y del compilador, una serie de utilidades adicionales con las que se amplían las posibilidades de éste, y que se encuentran en los menús View y Tools de la barra de menús, veamos algunas de ellas:

Monitor del puerto serie: Consiste en un terminal que monitoriza la entrada y la salida del puerto serie del computador.

Selección de dispositivos (Device Selection Tool):
Esta utilidad consta de una base de datos con los dispositivos que puede programar el compilador, incluyendo todas sus características hardware, de manera que se puede emplear para buscar aquellos dispositivos que cumplan una serie de propiedades comunes.

Editor de dispositivos (Device Editor):
Este programa también emplea la base de datos de dispositivos, y permite editar los componentes para modificar sus características hardware, así como añadir nuevos dispositivos o eliminar algunos de ellos.

Conversor numérico:
Esta utilidad realiza conversiones entre los tipos de datos unsigned, signed, hex y float.

Extracción de datos de calibrado:
Esta opción permite leer los datos de calibración existentes en la memoria de programa de un determinado dispositivo. Estos datos contienen información particular de cada microcontrolador a su salida de fábrica, y se refieren a posibles problemas especiales que pudieran haber tenido lugar durante el desarrollo y fabricación. Mediante esta opción es posible leer estos datos y grabarlos en un fichero .H o .C que incorporará una directiva #ROM para dicho dispositivo, con lo que cada vez que se programe el microcontrolador se incluirán estos datos de calibrado.

Desensamblador:
Esta opción lee un fichero en Código máquina y lo traduce a su equivalente en Ensamblador, con lo que se podría insertar este código en un programa en C, mediante las directivas #ASM y #ENDASM.

Si quieren saber algo mas de las directivas y sus funciones ya que no defini completamente todas aqui les dejo el link de un manual. Manual.

Para descargar este compilador aqui esta el link:
http://www.ccsinfo.com/downloads.php
yo descargue el demo y me a ido muy bien con el solo tienes que llenar una encuesta y lo tendras :D

Ahora si quieren comprobar sus programas creados en este compilador les dejo un pequeño tutorial de como integrar CCS a proteus ya que si no lo haces el simulador no correra el programa.
https://www.box.com/shared/110xv0btch


Ejemplo:
Ahora realizare un pequeño programa en donde un display muestre numeros del 0 al 9 infinitamente.


Para correr el programa en el simulador proteus despues de haberle integrado el CCS, le damos doble click en la imagen de pic y escogemos nuestro .HEX que a sido arrojado por el PCW compiler, despues le damos click en la parte inferior donde viene el boton de play y ocurrira esto


Aqui solo puse pocas imagenes pero el simulador si me muestra todos los numeros del 0 al 9 XD.


Bibliografias:
http://www.ccsinfo.com/
http://www.aquihayapuntes.com/compilador-pcw-ccs.html

Interrupciones en microcontroladores.

Es una de las caracterasticas de los microcontroladores, de las mas importantes que constituye la capacidad de sincronizar la ejecucion de programas con acontecimientos externos; es decir, cuando se produce una interrupcion, el micro automaticamente deja lo que esto haciendo, va a la direccion 04h de programa y ejecuta lo que encuentre a partir de alli hasta encontrarse con la instruccion RETFIE que le hara abandonar la interrupcion y volver al lugar donde se encontraba antes de producirse dicha interrupcion. Hemos de diferenciar entre dos tipos de interrupciones posibles en un PIC:


1. - Mediante una accion interna. El desbordamiento de la Pila (Stack) por una operacion indebida, por ejemplo:
  • Al completarse la escritura de datos en una EEPROM.
  • Por desbordamiento del registro TMR0 al rebasar el valor 255 (FFh) a 0.

2. - Mediante una accion externa, la mas util. Al producirse un cambio del nivel en uno de sus pines por una accion externa.
  • Estando en el modo de reposo (SLEEP), un cambio de nivel en el pin RB0/INT .
  • Un cambio de nivel en uno de los pines RB4 a RB7 estando configurados como entrada.

Una interrupción es un evento que hace que el microcontrolador deje de ejecutar la tarea que está realizando para atender dicho acontecimiento y luego regrese y continue la tarea que estaba realizando antes de que se presentara la interrupción. El pic 16F628 (y el 16F628A) tiene 10 fuentes de interrupción, si las interrupciones están habilitadas cada vez que una de estos acontecimientos se presente el pic dejará de ejecutar el programa para ir a atender la interrupción y al termino de la misma continuará ejecutando el programa donde lo había dejado. Las fuentes de interrupción son:

o Interrupción externa RB0/INT
o Interrupción por cambio lógico en el puerto B (pines RB7 a RB4)
o Interrupción por desborde del timer 0 (TMR0)
o Interrupción por desborde del timer 1 (TMR1)
o Interrupción por comparación exitosa exitosa en TMR2
o Interrupción del comparador
o Interrupción del transmisor del USART
o Interrupción del receptor del USART
o Interrupción del módulo CCP
o Interrupción del EEPROM

Cuando ocurre un evento de los descritos anteriormente, se produce una peticion de interrupcion, guardando el valor actual del PC (contador de programa) en la Pila, sea cual sea la fuente de la interrupcion, se pone a cero el bit7 GIE (Global Interrupt Enable), con lo cual inhibe cualquier otra peticion de interrupcion, el registro PC se carga con el valor 0004h que, es la posicion del vector de interrupcion. Aqui, empieza la ejecucion del programa de atencion a la interrupcion ISR (Rutina deServicio de Interrupcion). El tiempo de procesamiento de la ISR debe ser lo mas breve posible, para que se ejecuten las otras interrupciones ya que, pueden habilitarse mas de una de ellas. Ademas, cualquier tipo de interrupcion tambien puede sacar al micro del modo de reposo (SLEEP).

Una interrupcion puede ser inhibida solo si existe otra interrupcion en curso. Esto se debe a que, una interrupcion esta controlada por dos bits que indican la fuente de la interrupcion, un bit actua como bandera (flag) indicando si se ha producido una interrupcion y el otro bit, actua como bit de inhibicion o prohibicion de la interrupcion en su, debido a que existe otra interrupcion en ejecucion y todo esto se realiza de forma automatica por parte del micro.

Es decir, el bit GIE es el responsable del permiso de interrupcion que se borra automaticamente cuando se acepta una interrupcion evitando asi que se produzca ninguna otra interrupcion mientras se atiende a la primera. Estos bits de control se encuentran en el registro INTCON (0Bh y 8Bh). Estos bits corresponden al registro INTCON que cambia de nivel 0 a 1 cuando se produce la interrupcion, excepto el ultimo bit (bandera) que se encuentra en el registro EECON1.

Los registros asociados con las interrupciones son el registro de control de interrupcion INTCON, el registro habilitacion de interrupciones de perifericos PIE1 y el registro de interrupciones de perifericos PIR1. En el registro INTCON se encuentra el bit de habilitacion global de interrupcionesGIE, el bit de habilitacion de interrupcion por perifericos PEIE y los bits de habilitacion de algunas interrupciones como la interrupcion externa del pin RB0 (INTE), la interrupcion por cambio de estado en los pines RB4 a RB7 (RBIE) y la interrupcion por desborde del timer 0 (T0IE), asi como las banderas correspondientes a cada interrupcion (INTF, RBIF y T0IF). En el registro PIE1 se encuentran los bits de habilitacion de las demas interrupciones y en el registro PIR1 se encuentran las banderas asociadas con cada interrupcion.

Para habilitar las interrupciones se deben seguir los siguientes pasos:
  • Habilitar el bit correspondiente a cada interrupcion.
  • Limpiar la bandera correspondiente a la interrupcion habilitada para evitar falsas interrupciones.
  • En caso de ser necesario habilitar el bit PEIE del registro INTCON (necesario para todas las interrupciones con excepcion de INTE y RBIE).
  • Habilitar el bit de habilitacion global de interrupciones GIE del registro INTCON.
Aunque el pic cuenta con 10 fuentes distintas de interrupción solamente tiene un vector de interrupción por lo que si se habilitan varias interrupciones al momento de presentarse cualquiera de ellas el programa saltara a la misma rutina de interrupcion y es responsabilidad del programador crear una rutina que identifique la fuente de la interrupcion.

Aqui un ejemplo de interrupciones en C




 Ahora crearemos en el simulador de proteus nuestro ejemplo para combrobar que funcione.



Al terminar nuestro diagrama en el proteus le damos doble click al pic y le damos click en la carpeta para asi escoger el .HEX que nos creo el compilador que estemos usando en este caso el PCW compiler.

Despues le damos click en play en la parte de abajo de proteus donde se encuentra nuestra simulacion.


 Aqui vemos que si esta en funcionamiento nuestro pequeño codigo con interrupciones el led prende y apaga de manera intermitente

Bibliografias:

http://micropic.wordpress.com/2007/06/08/manejo-de-interrupciones/

http://www.hispavila.com/3ds/chipspic/interrupciones.html

sábado, 12 de mayo de 2012

Memoria en pics

El microcontrolador está diseñado para que en su memoria deprograma se almacenen todas lasinstrucciones del programa de control. Como éste siempre es el mismo, debe estar grabado de forma permanente.



Memoria

En los microcontroladores la memoria no es abundante, aquí no encontrará Gigabytes de memoria como en las computadoras personales. Típicamente la memoria de programas no excederá de 16 K-localizaciones de memoria no volátil (flash o eprom) para contener los programas.

La memoria RAM está destinada al almacenamiento de información temporal que será utilizada por el procesador para realizar cálculos u otro tipo de operaciones lógicas. En el espacio de direcciones de memoria RAM se ubican además los registros de trabajo del procesador y los de configuración y trabajo de los distintos periféricos del microcontrolador. Es por ello que en la mayoría de los casos, aunque se tenga un espacio de direcciones de un tamaño determinado, la cantidad de memoria RAM de que dispone el programador para almacenar sus datos es menor que la que puede direccionar el procesador.

El tipo de memoria utilizada en las memorias RAM de los microcontroladores es SRAM, lo que evita tener que implementar sistemas de refrescamiento como en el caso de las computadoras personales, que utilizan gran cantidad de memoria, típicamente alguna tecnología DRAM. A pesar de que la memoria SRAM es más costosa que la DRAM, es el tipo adecuado para los microcontroladores porque éstos poseen pequeñas cantidades de memoria RAM.


                                                                                     
En el caso de la memoria de programas se utilizan diferentes tecnologías, y el uso de una u otra depende de las características de la aplicación a desarrollar, a continuación se describen las cinco tecnologías existentes, que mayor utilización tienen o han tenido:

Máscara ROM. En este caso no se “graba” el programa en memoria sino que el microcontrolador se fabrica con el programa, es un proceso similar al de producción de los CD comerciales mediante masterización. El costo inicial de producir un circuito de este tipo es alto, porque el diseño y producción de la máscara es un proceso costoso, sin embargo, cuando se necesitan varios miles o incluso cientos de miles de microcontroladores para una aplicación determinada, como por ejemplo, algún electrodoméstico, el costo inicial de producción de la máscara y el de fabricación del circuito se distribuye entre todos los circuitos de la serie y, el costo final de ésta, es bastante menor que el de sus semejantes con otro tipo de memoria.

Memoria PROM (Programmable Read-Only Memory) también conocida como OTP (One Time Programmable). Este tipo de memoria, también es conocida como PROM o simplemente ROM.Los microcontroladores con memoria OTP se pueden programar una sola vez, con algún tipo de programador. Se utilizan en sistemas donde el programa no requiera futuras actualizaciones y para series relativamente pequeñas, donde la variante de máscara sea muy costosa, también para sistemas que requieren serialización de datos, almacenados como constantes en la memoria de programas.

Memoria EPROM
(Erasable Programmable Read Only Memory). Los microcontroladores con este tipo de memoria son muy fáciles de identificar porque su encapsulado es de cerámica y llevan encima una ventanita de vidrio desde la cual puede verse la oblea de silicio del microcontrolador.Se fabrican así porque la memoria EPROM es reprogramable, pero antes debe borrase, y para ello hay que exponerla a una fuente de luz ultravioleta, el proceso de grabación es similar al empleado para las memorias OTP.Al aparecer tecnologías menos costosas y más flexibles, como las memorias EEPROM y FLASH, este tipo de memoria han caído en desuso, se utilizaban en sistemas que requieren actualizaciones del programa y para los procesos de desarrollo y puesta a punto.

EEPROM (Electrical Erasable Programmable Read Only Memory). Fueron el sustituto natural de las memorias EPROM, la diferencia fundamental es que pueden ser borradas eléctricamente, por lo que la ventanilla de cristal de cuarzo y los encapsulados cerámicos no son necesarios.Al disminuir los costos de los encapsulados, los microcontroladores con este tipo de memoria se hicieron más baratos y cómodos para trabajar que sus equivalentes con memoria EPROM.Otra característica destacable de este tipo de microcontrolador es que fue en ellos donde comenzaron a utilizarse los sistemas de programación en el sistema que evitan tener que sacar el microcontrolador de la tarjeta que lo aloja para hacer actualizaciones al programa.

Memoria flash.
En el campo de las memorias reprogramables para microcontroladores, son el último avance tecnológico en uso a gran escala, y han sustituido a los microcontroladores con memoria EEPROM.A las ventajas de las memorias flash se le adicionan su gran densidad respecto a sus predecesoras lo que permite incrementar la cantidad de memoria de programas a un costo muy bajo. Pueden además ser programadas con las mismas tensiones de alimentación del microcontrolador, el acceso en lectura y la velocidad de programación es superior, disminución de los costos de producción, entre otras.



Son recomendables aplicaciones en las que es necesario modificar el programa a lo largo de la vida del producto. Por sus mejores prestaciones, está sustituyendo a la memoria EEPROM para contenerinstrucciones.

De esta forma Microchip comercializa dos microcontroladoresprácticamente iguales que sólo se diferencian en que la memoria deprograma de uno de ellos es tipo EEPROM y la del otro tipo Flash. Se trata del PIC16C84 y el PIC16F84, respectivamente.
Memoria de datos

Los datos que manejas los programas varían continuamente, y esto exige que la memoria que los contiene debe ser de lectura y escritura, por lo que la memoria RAM estática (SRAM) es la más adecuada, aunque sea volátil.

Hay microcontroladores que disponen como memoria de datos una de lectura y escritura no volátil, del tipo EEPROM. De esta forma, un corte en el suministro de la alimentación no ocasiona la pérdida de la información, que está disponible al reiniciarse el programa. ElPIC16F84 dispone de 64 bytes de memoria EEPROM para contener datos.

Bibliografias:
http://www.unicrom.com/Tut_PICs2.asp
http://www.monografias.com/trabajos12/microco/microco.shtml