miércoles, 18 de abril de 2012

Wiki Contributions - Week 11

Researching about clusters and administraton of clusters, I found a good application that will probably help a lot  with the cluster. ClusterSSH, which in short helps to create  a ssh connection with multiple hosts and run commands in all of them. This could be extremely useful, because the web interface could use this application instead of basic ssh to do some tasks in the hosts. Also I managed to mount some Ubuntu 10.10 (32 bit) virtual machines using VirtualBox, which I'll use to make tests:




Unfortunately, I still couldn't create a network in order for the nodes to connect, but that should be easy enough to do it in a couple hours, I'll look into that in the following days.


Class links:
- ClusterSSH




And for laboratory:
High Availability Clusters and Fault Tolerance


Extras for laboratory(Guessing game, both game's words are in the same post):
Extra Laboratory

High Availability Cluster and Fault Tolerance

Previously while looking at some information about clusters, I stumbled upon a certain kind of clusters, the High Availability Clusters. So I was a little curious, and I decided to look further into the those clusters, and I found out that they pretty much are involved with fault tolerance(which is the topic for this week), so then I had a motive to really research about that.

Fault Tolerance

Fault tolerance is the ability of a system to perform its function correctly even in the presence of internal faults. The purpose of fault tolerance is to increase the dependability of a system. A complementary but separate approach to increasing dependability is fault prevention. This consists of techniques, such as inspection, whose intent is to eliminate the circumstances by which faults arise.



Classifications

Based on duration, faults can be classified as transient or permanent. A transient fault will eventually disappear without any apparent intervention, whereas a permanent one will remain unless it is removed by some external agency. While it may seem that permanent faults are more severe, from an engineering perspective, they are much easier to diagnose and handle. A particularly problematic type of transient fault is the intermittent fault that recurs, often unpredictably.

A different way to classify faults is by their underlying causeDesign faults are the result of design failures, like the coding.While it may appear that in a carefully designed system all such faults should be eliminated through fault prevention, this is usually not realistic in practice. For this reason, many fault-tolerant systems are built with the assumption that design faults are inevitable, and theta mechanisms need to be put in place to protect the system against them. Operational faults, on the other hand, are faults that occur during the lifetime of the system and are invariably due to physical causes, such as processor failures or disk crashes.

Finally, based on how a failed component behaves once it has failed, faults can be classified into the following categories:
  • Crash faults -- the component either completely stops operating or never returns to a valid state;
  • Omission faults -- the component completely fails to perform its service;
  • Timing faults -- the component does not complete its service on time;
  • Byzantine faults -- these are faults of an arbitrary nature
Error Detection
The most common techniques for error detection are:
  • Replication checks -- In this case, multiple replicas of a component perform the same service simultaneously. The outputs of the replicas are compared, and any discrepancy is an indication of an error in one or more components. A particular form of this that is often used in hardware is called triple-modular redundancy (TMR), in which the output of three independent components is compared, and the output of the majority of the components is actually passed on 4 . In software, this can be achieved by providing multiple independently developed realizations of the same component. This is called N-version programming.
  • Timing checks -- This is used for detecting timing faults. Typically a timer is started, set to expire at a point at which a given service is expected to be complete. If the service terminates successfully before the timer expires, the timer is cancelled. However, if the timer times out, then a timing error has occurred. The problem with timers is in cases where there is variation in the execution of a function. In such cases, it is dangerous to set the timer too tightly, since it may indicate false positives. However, setting it too loosely would delay the detection of the error, allowing the effects to be propagated much more widely.
  • Run-time constraints checking -- This involves detecting that certain constraints, such as boundary values of variables not being exceeded, are checked at run time. The problem is that such checks introduce both code and performance overhead. A particular form is robust data structures, which have built-in redundancy (e.g., a checksum). Every time these data structures are modified, the redundancy checks are performed to detect any inconsistencies. Some programming languages also support an assertion mechanism.
  • Diagnostic checks -- These are typically background audits that determine whether a component is functioning correctly. In many cases, the diagnostic consists of driving a component with a known input for which the correct output is also known.

High Availability Clusters

High-availability clusters (also known as HA clusters or failover clusters) are groups of computers that support server applications that can be reliably utilized with a minimum of down-time. They operate by harnessing redundant computers in groups or clusters that provide continued service when system components fail. Without clustering, if a server running a particular application crashes, the application will be unavailable until the crashed server is fixed. HA clustering remedies this situation by detecting hardware/software faults, and immediately restarting the application on another system without requiring administrative intervention, a process known as failover. As part of this process, clustering software may configure the node before starting the application on it.


Some features of HA clusters:

  • HA clusters are often used for critical databases, file sharing on a network, business applications, and customer services such as electronic commerce websites.
  • HA cluster implementations attempt to build redundancy into a cluster to eliminate single points of failure, including multiple network connections and data storage which is redundantly connected viastorage area networks.
  • HA clusters usually use a heartbeat private network connection which is used to monitor the health and status of each node in the cluster.
Some known High Availability Clusters
References:

Proyecto PIC - Reloj Digital


Descripción:


Reloj digital, utilizando displays de 7 segmentos para mostrar la hora. Cuenta con la opción de editar la hora utilizando botones, y con segundero para mejor visualización.

Características:
  • Reloj de 12 horas.
  • Se entra al "modo de edición" al presionar dicho botón.
  • El segundero se reinicia al entrar al modo edición,
  • Se aumenta la hora al presionar el botón hora, y los minutos al presionar el botón minuto.
  • Para salir del modo edición, se presionan el botón de nuevo..
Materiales:

Diagrama de Conexiones



Nota: En el diagrama se omiten las conexiones a tierra y corriente del PIC y el decodificador por simplicidad, puedes ver el diagrama del PIC AQUÍ, y el decodificador AQUÍ, para ver en que pin conectarlos.

Funcionamiento

El microcontrolador PIC es el responsable de todas las funciones del circuito. El circuito proveerá las salidas en binario para poder mostrar los diferentes números en los displays mediante el puerto B.

Ejemplo: Si desearamos mostrar el número 7 en los display, daríamos el valor binario 0111, al puerto B, lo que el decodificador 74LS47 pasaría a las salidas para poder mostrar un 7 en los displays.

De esta forma podemos mostrar el número que deseemos en los displays, pero debido a que las conexiones de los displays están multiplexadas, normalmente se mostraría el mismo número en todos los displays(algo que no nos conviene ya que queremos un reloj). Esto lo arreglará el PIC, prendiendo y apagando los displays en cuestión de segundos para poder dar la apariencia al ojo humano de que no están parpadeando, y muestran diferentes números. Si deseas saber más sobre multiplexación, puedes leer este post que realice con un ejemplo más sencillo.

Obviamente nosotros no queremos mostrar cualquier número en los displays, queremos mostrar la hora, usando un timer. Esto significa que los displays cambiarán con el tiempo, cada uno dependiendo de los demás. Por ejemplo cuando las unidades del segundero lleguen a un número mayor a 10, estos se deben reiniciar a 0, y sumar uno a la decena del segundero. Entonces cuando el segundero llegue a 6 (que serían 60 segundos), se debe reiniciar también, y aumentar 1 a los minutos, y así sucesivamente.
El PIC se encargara de toda esta lógica.

Pero medir los segundos no es tarea fácil, agregando además que tenemos que dar retrasos entre el código para poder visualizar correctamente los displays multiplexados, por esto me fue difícil ajustar el reloj lo más posible a los segundos, ya que no pude determinar cuanto tiempo tarda en ejecutar código, para compensarlo y ajustar el segundero lo mejor posible. 

Ahora, el reloj sería inservible si solo se reiniciara al apagarlo y no nos diera la opción de editarlo. Por lo tanto se da la opción de editar las horas y minutos mediante dos push buttons. Al presionar el botán de editar, el reloj se detendrá y se pondrá a las 12:00, reiniciando los segundos a 0. Entonces presionando el botón hora, el PIC detectará el alto voltaje y aumentará en 1 las horas (que pasará a ser la 1, ya que es un reloj de 12 horas). Lo mismo con el botón de minutos.

Al desconectar el circuito, el reloj se reiniciará, y la próxima vez que se conecte estará en las 12 en punto.

Código


Pruebas

Las siguientes pruebas fueron hechas poniendo a funcionar el reloj, al mismo tiempo que el reloj de una computadora. Cabe destacar que estas pruebas no son perfectas, ya que existe el error humano de si en realidad empezaron los dos relojes al mismo tiempo(cosa que obviamente no sucedió). En la primera medición, hubo un total de 9 segundos de retraso en 1 hora, lo cual no es nada eficiente, y no sería aceptable en un reloj. En la segunda medición, después de algunas modificaciones a la programación del PIC, el retraso se redujo a poco menos de 1 segundo por hora, lo que sigue siendo ineficiente, pero fue lo más preciso a lo que pude llegar, sin utilizar un oscilador externo.

Medición 1 Medición 2
HoraRetrasoHoraRetraso
01:05Ninguno5:49Ninguno
01:111 Segundo6:07Ninguno
01:141 Segundo6:11Ninguno
01:162 Segundos6:15Ninguno
01:202 Segundos6:18Ninguno
01:253 Segundos6:23Ninguno
01:354 Segundos6:26Ninguno
01:446 Segundos6:31Ninguno
01:527 Segundos6:35Ninguno
2:059 Segundos6:42Casi un segundo


Fotos del Circuito:



Referencias:

lunes, 16 de abril de 2012

Wiki Contributions - Week 10

For week 9 I didn't get any good advance because I was kind of busy with some other stuff, I just managed to read some Ruby on Rails tutorials to some functions, but nothing big. So leaving that aside for a while, I decided to investigate a little more about the beowulf clusters, and more particularly into the master-head node, to see how the master node is supposed to work, and what should the master node do in the network. Then I found out that there is a way to create a virtual cluster, using VirtualBox which allows you to build and test the cluster without the need for the extra hardware.This could be useful to test some stuff first, before using the Cluster, but only for that, because the performance will be probably poor. Of course I still will be working with the web interface, with the help of Raúl I hope.

For the class, the wiki is crashed currently(April 15th) but again, I'll post the information here in my blog first, in order to upload it later to the wiki.


-- Edit -- 


Now the wiki is online again, so here it is the direct link to the wiki:


And for the laboratory, a small investigation about some MPI implementations:


domingo, 15 de abril de 2012

MPICH2 and Open MPI

I previously made posts about MPI, more exactly about mpi4py, which needed a MPI distribution in order to work properly. For that I used Open MPI, but MPICH2 was also an alternative, so in this post I'll explain each.

MPICH

MIPICH2 is a high performance and widely portable implementation of the Message Passing Interface (MPI), a standard for message-passing for distributed-memory applications used in parallel computing, it works for both (MPI and MPI-2)


The CH part of the name was derived from "Chameleon", which was a portable parallel programming library developed by William Gropp, one of the founders of MPICH.

The original implementation of MPICH (MPICH1) implements the MPI-1.1 standard. The latest implementation (MPICH2) implements the MPI-2.2 standard.

MPICH2 replaces MPICH1 and should be used instead of MPICH1 except for the case of clusters with heterogeneous data representations (e.g., different lengths for integers or different byte ordering). MPICH2 does not yet support those systems. MPICH2 is distributed as source (with an open-source, freely available license). It has been tested on several platforms, including Linux (on IA32 and x86-64), Mac OS/X (PowerPC and Intel), Solaris (32- and 64-bit), and Windows. 

MPICH2 is one of the most popular implementations of MPI. It is used as the foundation for the vast majority of MPI implementations including IBM MPI (for Blue Gene), Intel MPI, Cray MPI, Microsoft MPI, Myricom MPI, OSU MVAPICH/MVAPICH2, and many others.


The goals of MPICH2 are to provide an MPI implementation for important platforms, including clusters, SMPs, and massively parallel processors. It also provides a vehicle for MPI implementation research and for developing new and better parallel programming environments. 

Installing MPICH2:

If you wish to install MPICH/MPICH2 yourself, download the source code from here. Just unpack the software, move inside the directory and type:

configure 
make
make install

Compiling MPICH2 application programs:

To compile a certain c source fila, type:
mpicc -g -o binary_file_name source_file.c 

For example, for the program PrimePipe.c included in the example directory, make an executable prp this way:
mpicc -g -o prp PrimePipe.c
(If you wish to use C++, use mpicxx instead of mpicc.)

Running MPICH2 application programs:

Set up a hosts file, listing which machines you wish your MPI app to run on, e.g. hosts3:


pc28.cs.ucdavis.edu
pc29.cs.ucdavis.edu
pc30.cs.ucdavis.edu

Run, say for the above executable prp on the above hosts file, by typing


mpiexec -f hosts3 -n 3 prp 100 0

where 100 and 0 are the command-line arguments to prp.


Open MPI


The Open MPI Project is an open source MPI-2 implementation that is developed and maintained by a consortium of academic, research, and industry partners. Open MPI is therefore able to combine the expertise, technologies, and resources from all across the High Performance Computing community in order to build the best MPI library available. Open MPI offers advantages for system and software vendors, application developers and computer science researchers.


Open MPI represents the merger between three well-known MPI implementations:
  • FT-MPI from the University of Tennessee
  • LA-MPI from Los Alamos National Laboratory
  • LAM/MPI from Indiana University
with contributions from the PACX-MPI team at the University of Stuttgart. These four institutions comprise the founding members of the Open MPI development team.
These MPI implementations were selected because the Open MPI developers thought that they excelled in one or more areas. The stated driving motivation behind Open MPI is to bring the best ideas and technologies from the individual projects and create one world-class open source MPI implementation that excels in all areas. The Open MPI project names several top-level goals:
  • Create a free, open source software, peer-reviewed, production-quality complete MPI-2 implementation.
  • Provide extremely high, competitive performance (low latency or high bandwidth).
  • Directly involve the high-performance computing community with external development and feedback (vendors, 3rd party researchers, users, etc.).
  • Provide a stable platform for 3rd party research and commercial development.
  • Help prevent the "forking problem" common to other MPI projects.
  • Support a wide variety of high-performance computing platforms and environments.

References:

Domótica y Ambientes Inteligentes

Trabajando con sistemas integrados es común escuchar el término de domótica. En la clase y laboratorio hay un grupo de personas que actualmente están trabajando en realizar diferentes proyectos que están enfocados en esa área, como el control de aire acondicionado, regulación del flujo de agua y otros proyectos interesantes, por lo que decidí investigar un poco al respecto.

Domótica

Se entiende por domótica el conjunto de sistemas capaces de automatizar una vivienda, aportando servicios de gestión energética, seguridad, bienestar y comunicación, y que pueden estar integrados por medio de redes interiores y exteriores de comunicación, cableadas o inalámbricas, y cuyo control goza de cierta ubicuidad, desde dentro y fuera del hogar. Se podría definir como la integración de la tecnología en el diseño inteligente de un recinto cerrado.


La automatización de la casa puede incluir control centralizado de la luz, ventilación, calentamiento y el aire acondicionado, además de otros sistemas, para mejorar el confort, eficiencia de energía y la seguridad. También existe un tipo de domótica dedicado a las personas ancianas y discapacitadas que puede proveer una calidad de vida mejorada para las personas que de otra manera requieren de enfermeras u otro tipo de cuidado.

Un sistema como este requiere circuitos eléctricos integrados unos con otros dentro de una casa. Las técnicas empleadas incluyen no solo las mencionadas anteriormente, sino también el control de actividades domésticas como los sistemas de entretenimiento, regado de plantas, alimentación de mascotas, cambiar el ambiente para diferentes eventos, y el uso de robots domésticos. 



Los dispositivos pueden ser conectados mediante una red de computadoras para permitir el control mediante una computadora personal, y pueden ser usadas remotamente a través de internet. Mediante la integración de las tecnologías de información, estos sistemas pueden comunicarse de una manera integrada lo que resulta en beneficios en la seguridad y la eficiencia de la energía.

Ya que el número de dispositivos controlables en una casa aumenta, la interconexión y comunicación se convierte en una característica conveniente y deseada. Por ejemplo, una chimenea puede enviar un mensaje de alerta cuando necesita limpieza, o un refrigerador cuando necesita reparación. Los cuartos pueden ser inteligentes y enviar señales al controlador cuando alguien entra. Si se supone que nadie debería estar en la casa y la alarma es activada, el sistema llamaría al dueño, los vecinos o a un número de emergencia.

En instalaciones simples esto puede ser tan simple como prender los focos cuando una persona entra en un cuarto. Por otro lado, en sistemas avanzados los cuartos pueden sentir no solo cuando una persona esta dentro, sino saber quien es esa persona y quizás ajustar la luz, temperatura, niveles de música o canales de televisión, tomando en cuenta el día de la semana, la hora del día y otros factores.

Otras tareas automáticas incluyen activar el aire acondicionado para ajustarlo a un modo de ahorro de energía cuando no haya personas en la casa, y volviendo al modo normal cuando una persona esta por volver. Algunos sistemas más sofisticados pueden mantener un inventario de productos, grabando su uso mediante códigos de barra, o una etiqueta RFID, y preparar una lista de compras o hasta ordenar reemplazos automáticamente.

La domótica también provee una interfaz remota para los aparatos caseros o la automatización del sistema en sí mediante una línea de teléfono, transmisión inalámbrica o el internet, para permitir el control y monitoreo mediante un smartphone o un navegador web.



Un ejemplo de monitoreo remoto en la domótica puede referirse a un detector de incendios, que detecta cuando hay una posible alerta de incendio, haciendo que todas las luces de la casa parpadeen para informar de una posible alerta de incendio. Si el la casa esta equipada con un home theatre, un sistema con automatización en casa puede apagar todos los componentes de audio y video para evitar distracciones, o para hacer un anuncio de emergencia. El sistema puede también llamar al dueño de la casa a su número de celular para alertarlo, o llamar al departamento de bomberos.

En términos de automatización de luz en la casa, es posible ahorrar energía instalando varios productos. Con funciones simples como sensores y detectores de movimiento integrados en un simple sistema, se pueden ahorrar horas de energía desperdiciada en aplicaciones residenciales y comerciales.

Arquitectura

Desde el punto de vista de donde reside la inteligencia del sistema domótico, hay varias arquitecturas diferentes:
  • Arquitectura Centralizada: un controlador centralizado recibe información de múltiples sensores y, una vez procesada, genera las órdenes oportunas para los actuadores.
  • Arquitectura Distribuida: toda la inteligencia del sistema está distribuida por todos los módulos sean sensores o actuadores. Suele ser típico de los sistemas de cableado en bus, o redes inalámbricas.
  • Arquitectura mixta: sistemas con arquitectura descentralizada en cuanto a que disponen de varios pequeños dispositivos capaces de adquirir y procesar la información de múltiples sensores y transmitirlos al resto de dispositivos distribuidos por la vivienda, por ejemplo, aquellos sistemas basados en Zigbee y totalmente inalámbricos.

Aplicaciones


Podemos dividir las funciones o servicios que se ofrecen en cinco subgrupos:

1. Ahorro Energético

El ahorro energético es un concepto al que se puede llegar de muchas maneras. En muchos casos no es necesario sustituir los aparatos o sistemas del hogar por otros que consuman menos sino una gestión eficiente de los mismos.
  • Climatización: programación y zonificación.
  • Gestión eléctrica:
    • Racionalización de cargas eléctricas: desconexión de equipos de uso no prioritario en función del consumo eléctrico en un momento dado
    • Gestión de tarifas, derivando el funcionamiento de algunos aparatos a horas de tarifa reducida
  • Uso de energías renovables
2. Confort

El confort conlleva todas las actividades que se puedan llevar a cabo que mejoren el confort en una vivienda. 


  • Iluminación:
    • Apagado general de todas las luces de la vivienda
    • Automatización del apagado/ encendido en cada punto de luz.
    • Regulación de la iluminación según el nivel de luminosidad ambiente
  • Automatización de todos los distintos sistemas/ instalaciones / equipos dotándolos de control eficiente y de fácil manejo
  • Integración del portero al teléfono, o del videoportero al televisor
  • Control vía Internet
  • Gestión Multimedia y del ocio electrónicos
  • Generación de macros y programas de forma sencilla para el usuario.
3. Seguridad 

Consiste en una red de seguridad encargada de proteger tanto los bienes patrimoniales como la seguridad personal.



  • Alarmas de intrusión (Antiintrusión): Se utilizan para detectar o prevenir la presencia de personas extrañas en una vivienda o edificio.
    • Detección de un posible intruso
    • Cierre de persianas puntual y seguro
    • Simulación de presencia
  • Alarmas de detección de incendios, fugas de gas, escapes de agua, concentración de monóxido de carbono.
  • Alerta médica. 
  • Acceso a Cámaras IP.

4. Comunicaciones

Son los sistemas o infraestructuras de comunicaciones que posee el hogar.



  • Control remoto desde Internet, PC, mandos inalámbricos(smartphones, PDA con WiFi).
  • Asistencia remota
  • Mantenimiento remoto
  • Informes de consumo y costes
  • Transmisión de alarmas.
  • Intercomunicaciones.
5. 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.

Referencias

Simulación de Circuitos - Proteus

En el desarrollo de mi proyecto PIC (que esta casi terminado), estuve buscando software para simular mi circuito, para poder hacer las pruebas necesarias antes de armarlo físicamente. Al buscar me tope con programas como Oregano, Ktechlab y otros, pero ninguno realmente me funciono correctamente en Ubuntu, por lo que me incliné por buscar alguno para Windows, en lo que encontre Proteus.

Proteus

Proteus es una compilación de programas de diseño y simulación electrónica, desarrollado por Labcenter Electronics que consta de los dos programas principales: Ares e Isis, y los módulos VSM y Electra.



El Programa ISIS, Intelligent Schematic Input System (Sistema de Enrutado de Esquemas Inteligente) permite diseñar el plano eléctrico del circuito que se desea realizar con componentes muy variados, desde simples resistencias, hasta alguno que otro microprocesador o microcontrolador, incluyendo fuentes de alimentación, generadores de señales y muchos otros componentes con prestaciones diferentes. Los diseños realizados en Isis pueden ser simulados en tiempo real, mediante el módulo VSM, asociado directamente con ISIS.

Una de las prestaciones de Proteus, integrada con ISIS, es VSM, el Virtual System Modeling (Sistema Virtual de Modelado), una extensión integrada con ISIS, con la cual se puede simular, en tiempo real, con posibilidad de más rapidez; todas las características de varias familias de microcontroladores, introduciendo nosotros mismos el programa que controlará el microcontrolador y cada una de sus salidas, y a la vez, simulando las tareas que queramos que lleve a cabo con el programa. Se pueden simular circuitos con microcontroladores conectados a distintos dispositivos, como motores, lcd´s, teclados en matriz, etc. Incluye, entre otras, las familias de PIC's PIC10, PIC12, PIC16, PIC18, PIC24 y dsPIC33. ISIS es el corazón del entorno integrado PROTEUS. Combina un entorno de diseño de una potencia excepcional con una enorme capacidad de controlar la apariencia final de los dibujos.

Ejemplo 

La demostración de Proteus no permite guardar los diseños que se hagan, imprimirlos, o diseñar nuestros propios microcontroladores, pero lo que sí es posible es realizar nuestros propios diseños, y correr un determinado programa en ellos, para poder simular su funcionamiento antes de pasarlos a un circuito, ahorrándonos el tener que reprogramar el PIC miles de veces.

Para comenzar a hacer nuestro diseño abrimos el programa, y nos aparecera una ventana con una cuadricula en donde podemos crear nuestro diseño. Para agregar componentes, en la parte de la izquierda es posible buscar el dispositivo que necesitemos, dando click en la letra P:


Esto abrirá una ventana donde podemos buscar el componente que deseemos, por ejemplo escribimos PIC16F628A, y debe mostrar las opciones disponibles. 


Como se puede ver solo aparece uno, que es el que buscamos, ahora damos Ok, y lo colocamos en donde deseemos en la cuadricula de diseño. Al ver el componente podemos notar que no cuenta con los pines 5 y 14, que son los de tierra y corriente respectivamente, esto es porque el programa automáticamente los "conecta" a tierra y corriente, por lo cual no necesitamos.

De esta manera podemos colocar los componentes que deseemos, entonces si buscamos agregar un display, podemos buscarlo de la misma forma y colocarlo en el diseño, acomodándolo a nuestro placer. Lo siguiente es conectarlos, para hacer esto necesitamos tener seleccionado el cursor, entonces damos click a un pin de un componente, y movemos el cursor por donde deseemos que pase el cable, hasta conectarlo a donde deseemos. De esta forma podemos crear un diseño como el siguiente:

(Nota: No incluye resistencias para facilitar el diseño, pero es importante incluirlas al momento de armar el circuito)

Ahora esto se ve muy bien, pero de que nos sirve simplemente tener el diseño?. Con este diseño podemos implementar código que ya tengamos programado en él, para efectivamente simular el circuito antes de armarlo, con algunas limitaciones claro. En mi caso, escribí el programa en MikroBasic, como había mencionado en un post anterior, entonces ahí mismo compile el programa, lo que genera un archivo .asm, que puede ser usado por ISIS de Proteus para correr dicho código en nuestro diseño simulado. Para hacer esto, suponiendo que ya tenemos nuestro archivo .asm, damos click arriba donde dice Source, seleccionamos Add/Remove Source files... y buscamos el archivo .asm. Despúes, asumiendo que el código funcione correctamente con el circuito, podemos simularlo seleccionando el botón de play en la parte inferior izquierda:


Haciendo esto, debería funcionar correctamente la simulación. En mi caso, por el hecho de tener que hacer retardos cada milisegundo para la multiplexación, la simulación daba problemas con el CPU, por lo cual tuve que aumentar el retardo para poder mostrar el contenido de los displays. 

La simulación resulto exitosa, como se puede ver:


Obviamente, estos cambios son para poder visualizarlos en el programa, pero al ver que funciono correctamente, debo ajustar los valores de nuevo para el momento de programarlo en el circuito, donde correrá normalmente.


Referencias: