Max Hernandez

Laberinto - Ejemplo de Canvas en HTML5

jueves, 24 de mayo de 2012

Multiplexador y Demultiplexador.

Cuando intentaba programar el cubo de leds, me dí cuenta que algunos leds comparten conexiones con otros por eso me dí a la tarea de investigar diferentes formas para enviar información por un canal.

Multiplexación

La multiplexacion es utilizada para combinar varios canales de información en un solo medio, se logra combinando o sincronizando señales por diferentes métodos. El dispositivo que transmite los mensajes es llamado multiplexor.

Tipos de multiplexación

La multiplexación por división de tiempo:
Es un medio de transmitir dos o mas camañes de información en el mismo circuito utilizando una técnica de tiempo compartido, es muy útil para señales binarias puesto que solo requieren una unidad de tiempo.

Multiplexión por división de frecuencia

En este tipo de multiplexion se utiliza para transmitir varios canales, el espectro de frecuencias, donde cada canal ocupa continuamente una pequeña fracción del espectro de frecuencias transmitido.

Multiplexado estadístico o asíncrono
Este es un caso particular de la division por tiempo y consiste en que los tiempos de espera entre una señal y otra dependen del tráfico existente por cada canal en cada momento así que se podría decir que es adaptativo.

Ejemplos de aplicacion del método:
  • Telegrafia
  • Telefonia
  • Procesamiento digital
  • transmisiones digitales
  • Transmisiones analogas


Código ejemplo - Contador hexagesimal con dos displays

Como ejemplo para esta publicación construí un código de un contador hexagesimal con dos display que comparten el mismo canal para encender las lineas que forman los números.

Materiales:

  •     2 display de cátodo
  •     7 resistencias de 220 Ohms
  •     PIC16F628A
  •     7805-CT Regulador Tension 5V
Diagrama de conexiones:

Código:

#include "pic16f628a.h"
#define __16f628a

unsigned int __at 0x2007 __CONFIG = _INTOSC_OSC_CLKOUT &
  _WDT_OFF&                                                                                                                                           
  _LVP_OFF&                                                                                                                                 
  _DATA_CP_OFF&                                                                                                                              
  _PWRTE_ON;


unsigned short int i, j, z; //Declara 3 variables contadores
unsigned short int contador[2] = {0,0};//Un contador para cada display


int main(void){

  TRISB = 0x00;// Define los puertos del registro TRISB como salidas
  TRISA = 0x00;// Hace lo mismo para el registro TRISA
  PORTA = 0b00000000;
  PORTB = 0x00;

  while(1){
    for(i = 0; i < 20; i++){// Aquí es donde se lleva a cabo el multiplexado
      for( z = 0; z < 2; z++){
          if( z == 0){
              PORTA = 0b00000001;//Aquí manda los datos por el primer canal
          }else{
              PORTA = 0b00000010;//Aquí manda los datos por el segundo canal
          }
          if(contador[z] == 0) PORTB =  0b01111110;// Todos estos if mapean un número con los elementos con los elementos que deben encenderen el display.
          if(contador[z] == 1) PORTB =  0b01001000;
          if(contador[z] == 2) PORTB =  0b00111101;
          if(contador[z] == 3) PORTB =  0b01101101;
          if(contador[z] == 4) PORTB =  0b01001011;
          if(contador[z] == 5) PORTB =  0b01100111;
          if(contador[z] == 6) PORTB =  0b01110111;
          if(contador[z] == 7) PORTB =  0b01001100;
          if(contador[z] == 8) PORTB =  0b01111111;
          if(contador[z] == 9) PORTB =  0b01001111;
          if(contador[z] == 10) PORTB = 0b01011111;
          if(contador[z] == 11) PORTB = 0b01110011;
          if(contador[z] == 12) PORTB = 0b00110110;
          if(contador[z] == 13) PORTB = 0b01111001;
          if(contador[z] == 14) PORTB = 0b00110111;
          if(contador[z] == 15) PORTB = 0b00010111;

          for( j = 0; j < 1000; j++);//Este es el tiempo de espera para que tenga tiempo de encenderse el display
      }
    }

      if( contador[0] == 15){// Estas instrucciones sirven como contador
        contador[0] = 0;
        contador[1] = 0;
      }else{
        if(contador[1] == 15){
            contador[0]++;
            contador[1] = 0;
        }else{
            contador[1]++;
        }
      }


  }

  return 0;

}

Video:



Como puede observarse hay cierto parpadeo mientras se muestra el número debido a que se turnan las señales entre canal, pero aun así los números en los display son legibles así que por esas razones fue que elegí esta técnica para mapear el juego de la vida en la matriz de leds para el proyecto PIC.

Referencias:
http://www.slideshare.net/ggordillo/que-es-la-multiplexacin-presentation
http://www.mitecnologico.com/Main/TecnicasDeTransmisionMultiplexacionYConmutacion

1 comentario: