Charlieplexing (también conocido como multiplexación triestado , multiplexación de LED de recuento de pines reducido , control de LED complementario y crossplexing ) es una técnica para acceder a una gran cantidad de LED , interruptores , microcondensadores u otras entidades de E/S , utilizando relativamente pocos cables lógicos triestado de un microcontrolador . Estas entidades de E/S se pueden cablear como componentes discretos, [1] [2] matrices x/y, [3] [4] o tejer en un patrón de intersección diagonal para formar matrices diagonales. [5]
La forma más sencilla de direccionar un solo píxel (o botón de entrada) es pasar un cable hasta él y otro cable hasta tierra, pero esto requiere mucho cableado. Una pequeña mejora es que todo vuelva a una tierra común, pero esto aún requiere un cable (y un pin en el microcontrolador) para cada píxel o botón. Para una matriz X por Y, se requieren pines X*Y.
Con pines lógicos de tres estados (alto, bajo, desconectado), el cableado de la matriz solo necesita pines y cables X+Y. Cada X y cada Y se turnan para estar encendidos o desconectados; la desventaja es que cada luz solo se alimenta como máximo 1/(X*Y) del tiempo. Si hay suficiente Fan-out , los pines Y se pueden dejar siempre encendidos y todos se pueden verificar en paralelo. La actualización puede ocurrir entonces cada 1/X del tiempo, pero cada cable X necesita pasar suficiente corriente para encender las luces Y a la vez.
Charlieplexing es una mejora adicional en el cableado de matriz. En lugar de que los cables horizontales X se encuentren con los cables verticales Y, cada cable se encuentra con todos los demás cables. Suponiendo que se utilizan diodos para las conexiones (para distinguir entre el cable 3 que se encuentra con el cable 5 y el cable 5 que se encuentra con el cable 3), Charlieplexing necesita solo la mitad de pines que una disposición de matriz convencional, a costa de un mapeo más complicado. Alternativamente, la misma cantidad de pines admitirá una pantalla casi cuatro veces más grande (duplicando en ambas direcciones).
Esto permite que estas entidades de E/S (LED, interruptores, etc.) se conecten entre dos E/S de microcontrolador cualesquiera; por ejemplo, con 4 E/S, cada E/S puede emparejarse con otras 3 E/S, lo que da como resultado 6 emparejamientos únicos (1/2, 1/3, 1/4, 2/3, 2/4, 3/4). Solo son posibles 4 emparejamientos con multiplexación x/y estándar (1/3, 1/4, 2/3, 2/4). Además, debido a la capacidad del microcontrolador de invertir la polaridad de los 6 pares de E/S, la cantidad de LED (o diodos) que son direccionables de forma única se puede duplicar a 12, agregando los LED 2/1, 3/1, 4/1, 3/2, 4/2 y 4/3.
Si bien es más eficiente en su uso de E/S, se requiere una pequeña cantidad de manipulación de direcciones cuando se intenta adaptar Charlieplexing a una matriz x/y estándar.
Otros problemas que afectan a la multiplexación estándar pero que se ven agravados por la Charlieplexing son:
La técnica Charlieplexing fue introducida [6] por Maxim Integrated en 2001 [7] como un esquema de multiplexación de LED con un número reducido de pines en su controlador de pantalla LED MAX6951. [7] [6] Sin embargo, el nombre "Charlieplexing" apareció por primera vez en una nota de aplicación de 2003. [6] Recibe el nombre de Charles "Charlie" M. Allen, un ingeniero de aplicaciones famoso por el MAX232 , [8] [9] [10] que había propuesto este método internamente. [ ¿cuándo? ]
También en 2001, Don Lancaster ilustró el método como parte de sus reflexiones sobre el problema de la " N-conectividad ", [11] refiriéndose a Microchip Technology , [11] que ya lo había discutido como "técnica de control de LED complementaria" en una nota de aplicación de 1998 [12] y más tarde lo incluiría en un folleto de consejos y trucos. [13]
Aunque Microchip no mencionó el origen de la idea, es posible que la hayan recogido en PICLIST, una lista de correo sobre microcontroladores PIC de Microchip , donde, también en 1998, Graham Daniel [14] [15] la propuso a la comunidad como un método para controlar filas y columnas de LED bidireccionales . Daniel en ese momento había creado circuitos simples con chips PIC 12C508 que controlaban 12 LED desde 5 pines con un mini conjunto de comandos para poner en movimiento varias pantallas de iluminación. [14] [15]
Sin embargo, el método era conocido y utilizado por varias partes mucho antes, en la década de 1980, y ha sido descrito en detalle ya en 1979 en una patente de Christopher W. Malinowski, Heinz Rinderle y Martin Siegle del Departamento de Investigación y Desarrollo, AEG-Telefunken , Heilbronn, Alemania para lo que llamaron un "sistema de señalización de tres estados". [16]
Según se informa, ya en 1972 se utilizaban técnicas similares para aplicaciones de señalización de vías en el modelismo ferroviario . [17] [ cita requerida ]
La multiplexación de pantallas es muy diferente de la multiplexación utilizada en la transmisión de datos, aunque tiene los mismos principios básicos. En la multiplexación de pantallas, las líneas de datos de las pantallas se conectan en paralelo a un bus de datos común en el microcontrolador. Luego, las pantallas se encienden y se direccionan individualmente. Esto permite el uso de menos pines de E/S de los que normalmente se necesitarían para controlar la misma cantidad de pantallas directamente. Aquí, cada "pantalla" podría ser, por ejemplo, un dígito de la calculadora, no la matriz completa de dígitos.
Con la multiplexación tradicional, los pines de E/S pueden controlar un máximo de LED o escuchar esa cantidad de interruptores de entrada. La tecnología Charlieplexing puede controlar LED o escuchar botones incluso si la direccionalidad no está impuesta por un diodo.
La configuración Charlieplexing puede verse como un gráfico dirigido , donde los pines de accionamiento son vértices y los LED son aristas dirigidas; hay una arista que apunta hacia afuera conectada desde cada vértice a cada uno de los otros vértices, por lo tanto, con n pines de accionamiento hay ( n )( n -1) aristas en total. Esto equivale a que n pines pueden accionar n 2 − n segmentos o LED.
Si se conoce el número de LED ( L ), entonces el número de pines ( n ) se puede encontrar a partir de la ecuación: , redondeándose el resultado al número entero más cercano.
Ejemplo: si L = 57, entonces √L = 7,549 y 1 + √L = 8,549; el número entero más cercano a esto es 9, por lo que se necesitan 9 pines para controlar 57 LED (9 pines podrían controlar hasta 72 LED, pero 8 pines podrían controlar solo 56 LED como máximo).
A diferencia de una matriz multiplexada x/y tradicional, donde un subconjunto de elementos conductores cruza un subconjunto diferente de elementos conductores, en una matriz multiplexada "completamente Charlieplex", cada elemento conductor cruza todos los demás elementos conductores.
Seis ( n ) elementos conductores en una matriz multiplexada x/y estándar forman un máximo de nueve (( n / 2) 2 ) intersecciones únicas (ver la figura en el extremo izquierdo).
Los otros diagramas también muestran seis ( n ) elementos conductores, pero aquí los seis elementos se cruzan entre sí, formando una matriz multiplexada de 36 ( n 2 ) intersecciones. Los LED se muestran colocados en cada intersección. Sin embargo, cada conductor también se cruza a sí mismo en la diagonal. El conductor horizontal 1 cruza al conductor vertical 1, el conductor horizontal 2 cruza al conductor vertical 2, etc. Esto significa que seis de estos LED están en cortocircuito (por ejemplo, D1 y D5 están en cortocircuito). Por lo tanto, los seis ( n ) LED diagonales nunca se encenderán, porque nunca puede desarrollarse voltaje a través de ellos, por lo que ( n ) debe restarse del total. No tiene sentido instalar estos LED (simplemente se incluyen aquí con fines ilustrativos).
Esto deja 30 LED ( n 2 − n ) que pueden direccionarse de forma única y encenderse de forma independiente.
El conductor "a" que cruza el conductor "b" se distingue del conductor "b" que cruza el conductor "a" porque la polaridad del LED está invertida. Por ejemplo, cuando el conductor 3 es positivo y el conductor 2 es negativo, fluye corriente a través de él y se enciende el LED D8, pero cuando el conductor 3 es negativo y el conductor 2 es positivo, fluye corriente a través de él y se enciende el LED D9.
Estos pares de LED con polaridad inversa se denominan pares complementarios. Este diagrama tiene 15 pares complementarios, lo que permite que se enciendan 30 LED de forma independiente.
Los 6 LED diagonales inutilizables se pueden reemplazar cómodamente por accesos directos bidireccionales reales (de modo que ya no es necesario configurar las líneas de interconexión agrupadas a la izquierda y a la parte inferior de los diagramas para accionar la entrada inferior de los conectores verticales desde la entrada izquierda correspondiente de los conectores horizontales).
Ajustando diagonalmente la forma de los conectores horizontales y verticales a lo largo de la diagonal principal cortocircuitada de la matriz original, ésta se puede transformar fácilmente en una matriz de 5 × 6 o 6 × 5 LED dispuestos en una cuadrícula regular.
Se podría usar un patrón similar para una matriz de 10 × 11 que se podría usar para controlar hasta 110 teclas (incluidos algunos LED indicadores) en un teclado de PC moderno , donde cada interruptor de tecla incluye un pequeño diodo o LED en serie, de modo que solo se necesitarían 11 pines para controlarlos individualmente a todos (estos diodos o LED individuales dentro de cada interruptor de tecla también evitarían todos los efectos de "efecto fantasma" comunes e indeseables, que son difíciles de eliminar por completo cuando se presiona una cantidad arbitraria de teclas en cualquier posición al mismo tiempo).
Charlieplexing también se puede utilizar para reducir significativamente el número de pines de control para matrices mucho más grandes, como las pantallas digitales modernas con alta resolución. Por ejemplo, para una pantalla RGB 4K a 3840 × 2160, esto requiere más de 8 millones de píxeles direccionables individualmente, cada uno con al menos 3 LED de color o celdas LCD, para un total de casi 25 millones de LED o celdas LCD. Usando una multiplexación x/y convencional se requerirían al menos (3840 + 2160 × 3) = 10320 pines de control y muchos chips de selección para controlar filas y columnas alrededor del panel de LED o celdas LCD. Pero con Charlieplexing, esto se puede reducir a solo 63 pines de control para la compuerta de selección de columnas de pantalla, más 46 × 3 pines de control para la selección y activación de energía de filas de pantalla RGB, por un solo transistor para cada fila o columna (posiblemente con una tierra de protección común adicional para limitar su acoplamiento mutuo); Estos pines de control pueden ajustarse fácilmente alrededor de los pines de salida de uno o dos chips controladores, incluso si agregamos los pocos pines adicionales necesarios en el controlador para energía, tierra, relojes y buses de E/S, montados en superficie con alta densidad y bajo costo en una PCB de una sola capa , y sin necesidad de enrutamiento complejo y orificios de interconexión entre capas; solo se necesita una capa dual para la matriz Charlieplexing básica montada en los bordes del panel mismo.
Las posiciones en la matriz Charlieplexed no se reducen a ser solo LED o diodos, también se pueden llenar con dos pines de un transistor (incluido su pin de compuerta) de modo que su tercer pin se usa como salida para controlar otros dispositivos, como las líneas de selección horizontales y verticales de un panel de visualización plano grande (en ese caso, las dos matrices Charlieplexed de transistores que controlan y activan las filas o columnas del panel estarán dispuestas de manera inteligente a lo largo de un borde de ese panel).
La Charlieplexing en su forma más simple funciona mediante el uso de una matriz de diodos de pares complementarios de LED. La matriz Charlieplexing más simple posible se vería así:
Al aplicar un voltaje positivo al pin X1 y conectar a tierra el pin X2, se encenderá el LED 1. Como la corriente no puede fluir a través de los LED en dirección inversa a este voltaje bajo, el LED 2 permanecerá apagado. Si se invierten los voltajes en los pines X1 y X2, el LED 2 se encenderá y el LED 1 se apagará.
En realidad, la técnica Charlieplexing no permite una matriz más grande cuando se utilizan solo dos pines, ya que se pueden controlar dos LED mediante dos pines sin ninguna conexión a la matriz y sin siquiera utilizar el modo triestado. En este ejemplo de dos LED, Charlieplexing ahorraría un cable de tierra, que sería necesario en una situación común de controlador de dos pines.
Sin embargo, el circuito de 2 pines sirve como un ejemplo simple para mostrar los conceptos básicos antes de pasar a circuitos más grandes donde Charlieplexing realmente muestra una ventaja.
Si el circuito anterior se ampliara para acomodar tres pines y seis LED, se vería así:
Sin embargo, esto presenta un problema: para que este circuito actúe como el anterior, uno de los pines debe desconectarse antes de aplicar carga a los dos restantes. Si, por ejemplo, se pretendía que el LED 5 estuviera encendido, X1 debe cargarse y X3 debe conectarse a tierra. Sin embargo, si X2 también está cargado, el LED 3 también se iluminaría. Si X2 estuviera conectado a tierra, el LED1 se iluminaría, lo que significa que el LED 5 no puede encenderse por sí solo. Esto se puede resolver utilizando las propiedades de lógica triestado de los pines del microcontrolador. Los pines del microcontrolador generalmente tienen tres estados: "alto" (5 V), "bajo" (0 V) y "entrada". El modo de entrada pone el pin en un estado de alta impedancia , lo que, eléctricamente hablando, "desconecta" ese pin del circuito, lo que significa que fluirá poca o ninguna corriente a través de él. Esto permite que el circuito vea cualquier número de pines conectados en cualquier momento, simplemente cambiando el estado del pin. Para accionar la matriz de seis LED anterior, los dos pines correspondientes al LED que se va a encender se conectan a 5 V (pin de E/S "alto" = número binario 1) y 0 V (pin de E/S "bajo" = binario 0), mientras que el tercer pin se establece en su estado de entrada.
De esta manera, se evita la fuga de corriente del tercer pin, lo que garantiza que el LED que se desea encender sea el único que esté encendido. Como el LED deseado reduce la tensión disponible después de la resistencia, la corriente no fluirá por caminos alternativos (por ejemplo, existe una ruta alternativa de 2 LED para cada par de pines en el diagrama de 3 pines), siempre que la caída de tensión en la ruta del LED deseado sea menor que la caída de tensión total en cada cadena de LED alternativos. Sin embargo, en la variante con resistencias individuales, este efecto de regulación de tensión no afecta a los caminos alternativos, por lo que no será necesario encender todos los LED utilizados con la mitad de la tensión de alimentación aplicada, ya que esta variante no se beneficia del efecto de regulación de tensión del LED de la ruta deseada.
Al utilizar la lógica triestado, la matriz se puede ampliar teóricamente a cualquier tamaño, siempre que haya pines disponibles. Para n pines, n ( n − 1) LED pueden estar en la matriz. Cualquier LED se puede encender aplicando 5 V y 0 V a sus pines correspondientes y configurando todos los demás pines conectados a la matriz en modo de entrada. Con las mismas restricciones que se analizaron anteriormente , se pueden encender en paralelo hasta n − 1 LED que comparten una ruta positiva o negativa común.
El circuito de 3 cables se puede reorganizar en esta matriz casi equivalente (se han reubicado las resistencias).
Esto resalta las similitudes entre la red multiplex ordinaria y Charlieplex, y demuestra el patrón que conduce a la regla de " n al cuadrado menos n ".
En el uso típico de una placa de circuito, las resistencias se ubicarían físicamente en la parte superior de las columnas y se conectarían al pin de entrada. Las filas se conectarían entonces directamente al pin de entrada sin pasar por la resistencia.
La primera configuración de la imagen de la izquierda es adecuada solo cuando se utilizan LED idénticos, ya que se utiliza una sola resistencia para limitar la corriente a través de más de un LED (aunque no al mismo tiempo, sino que una resistencia limita la corriente a través de un solo LED en una columna determinada a la vez). Esto contrasta con la segunda configuración con resistencias individuales para cada LED, como se muestra en la imagen de la derecha. En esta segunda configuración, cada LED tiene una resistencia única emparejada con él. Esto hace posible mezclar diferentes tipos de LED al proporcionar a cada uno su valor de resistencia adecuado.
En ambas configuraciones, como se muestra en la imagen izquierda y derecha, las resistencias reubicadas permiten encender varios LED al mismo tiempo fila por fila, en lugar de requerir que se enciendan individualmente. La capacidad de corriente de fila se puede aumentar mediante un transistor BJT seguidor de emisor NPN en lugar de impulsar la corriente directamente solo con el pin de E/S, que normalmente es mucho más débil.
La frecuencia de actualización no es un problema si se utiliza el direccionamiento de matriz activa Charlieplexed con una matriz de LED Charlieplexed. [18]
Sin embargo, al igual que con la multiplexación x/y, pueden surgir problemas de frecuencia de actualización si se utiliza direccionamiento de matriz pasiva .
Debido a que solo un único conjunto de LED, todos con un ánodo o cátodo común, se puede encender simultáneamente sin encender LED no deseados, Charlieplexing requiere cambios de salida frecuentes, a través de un método conocido como multiplexación . Cuando se realiza la multiplexación, no todos los LED se encienden de manera bastante simultánea, sino que un conjunto de LED se enciende brevemente, luego otro conjunto y, finalmente, el ciclo se repite. Si se hace lo suficientemente rápido, parecerán todos encendidos, todo el tiempo, para el ojo humano debido a la persistencia de la visión . Para que una pantalla no tenga ningún parpadeo perceptible, la frecuencia de actualización de cada LED debe ser mayor que el umbral de fusión de parpadeo ; 50 Hz se utiliza a menudo como una aproximación.
Como ejemplo, se utilizan 8 pines triestado para controlar 56 LED mediante Charlieplexing, lo que es suficiente para 8 pantallas de 7 segmentos (sin puntos decimales). Normalmente, las pantallas de 7 segmentos se fabrican para tener un cátodo común, a veces un ánodo común, pero sin pérdida de generalidad se supone un cátodo común en lo siguiente: Todos los LED en las 8 pantallas de 7 segmentos no se pueden encender simultáneamente en cualquier combinación deseada utilizando Charlieplexing. Es imposible obtener 56 bits de información directamente de 8 trits (el término para un carácter de base 3, ya que los pines son de 3 estados) de información, ya que 8 trits comprenden fundamentalmente 8 log 2 3, o aproximadamente 12,7 bits de información, lo que está muy por debajo de los 56 bits necesarios para encender o apagar los 56 LED en cualquier combinación arbitraria. En cambio, el ojo humano debe ser engañado mediante el uso de multiplexación.
Solo una pantalla de 7 segmentos, un conjunto de 7 LED, puede estar activa en cualquier momento. La forma en que esto se haría es que los 8 cátodos comunes de las 8 pantallas se asignen a cada uno su propio pin único entre los 8 puertos de E/S. En cualquier momento, uno y solo uno de los 8 pines de E/S de control estará activo bajo y, por lo tanto, solo la pantalla de 7 segmentos con su cátodo común conectado a ese pin activo bajo puede tener cualquiera de sus LED encendidos. Esa es la pantalla de 7 segmentos activa. Los ánodos de los 7 segmentos de LED dentro de la pantalla activa de 7 segmentos se pueden encender en cualquier combinación al tener los otros 7 puertos de E/S en modo alto o de alta impedancia, en cualquier combinación. Están conectados a los 7 pines restantes, pero a través de resistencias (la conexión del cátodo común está conectada al pin en sí, no a través de una resistencia, porque de lo contrario la corriente a través de cada segmento individual dependería de la cantidad total de segmentos encendidos, ya que todos tendrían que compartir una sola resistencia). Pero para mostrar un número deseado usando los 8 dígitos, solo se puede mostrar una pantalla de 7 segmentos a la vez, por lo que los 8 deben recorrerse por separado y en una quincuagésima de segundo durante todo el período de 8. Por lo tanto, la pantalla debe actualizarse a 400 Hz para el ciclo del período 8 a través de los 8 segmentos para hacer que los LED parpadeen no más lento que 50 veces por segundo. Esto requiere una interrupción constante de cualquier procesamiento adicional que realice el controlador, 400 veces por segundo.
Debido a la reducción del ciclo de trabajo , el requerimiento de corriente de una pantalla Charlieplex aumenta mucho más rápido que con una pantalla multiplexada tradicional. A medida que la pantalla se hace más grande, la corriente promedio que fluye a través del LED debe ser (aproximadamente) constante para que mantenga un brillo constante, por lo que requiere que la corriente pico aumente proporcionalmente. Esto causa una serie de problemas que limitan el tamaño práctico de una pantalla Charlieplex.
Todas las salidas utilizadas para controlar una pantalla Charlieplexed deben ser triestado. Si la corriente es lo suficientemente baja como para controlar las pantallas directamente mediante los pines de E/S del microcontrolador, esto no es un problema, pero si se deben utilizar triestado externos, entonces cada triestado generalmente requerirá dos líneas de salida para controlar, eliminando la mayor parte de las ventajas de una pantalla Charlieplexed. Dado que la corriente de los pines del microcontrolador normalmente está limitada a unos 20 mA, esto restringe severamente el tamaño práctico de una pantalla Charlieplexed. Sin embargo, se puede hacer habilitando un segmento a la vez. [19]
Las matrices Charlieplex "cableadas" en diagonal son muy fáciles de diseñar y escanear.
Si se utiliza como pantalla táctil capacitiva proyectada multitáctil (consulte la figura de la izquierda), la primera E/S se puede configurar como salida y todas las E/S restantes como entradas. Todas estas entradas se pueden detectar simultáneamente, si los recursos del procesador lo permiten: el equivalente de entrada de Chipiplexing . Cuando la salida 1 ha sido "leída" por todas estas entradas, la segunda E/S se puede configurar como salida y las E/S 1, 3, 4, 5, etc. se pueden configurar como entradas.
Esta secuencia se repite hasta que se ha escaneado toda la pantalla. Este proceso se repite hasta el infinito en los escaneos posteriores. [20]
Se puede utilizar un diseño diagonal muy simple para crear una matriz de diodos Charlieplexed regular y escalable, donde n líneas de E/S controlan ( n - 1) 2 diodos, todos los cuales miran en la misma dirección (ver diagrama a la derecha). [20]
Este diagrama muestra n ( n - 1) diodos, pero los diodos en la última columna miran en direcciones alternas.
Las matrices Charlieplexadas X/y son normalmente mucho más complicadas, tanto en el diseño requerido de la PCB como en la programación del microcontrolador, que las matrices multiplexadas X/Y estándar prefabricadas. Esto aumentó el tiempo de diseño. La soldadura de componentes también podría llevar más tiempo. Se sugirió que se podría lograr un equilibrio entre la complejidad y el uso de pines mediante la Charlieplexación de varias matrices de LED multiplexadas prefabricadas juntas. [21]
Al utilizar LED con diferentes voltajes directos , como cuando se utilizan LED de diferentes colores, algunos LED pueden encenderse cuando no se desea.
En el diagrama anterior se puede ver que si el LED 6 tiene un voltaje directo de 4 V y los LED 1 y 3 tienen voltajes directos de 2 V o menos, se encenderán cuando el LED 6 esté destinado a hacerlo, ya que su recorrido de corriente es más corto. Este problema se puede evitar fácilmente comparando los voltajes directos de los LED utilizados en la matriz y verificando si hay problemas de compatibilidad. O, más simplemente, utilizando LED que tengan todos el mismo voltaje directo. [11] [6]
Este también es un problema cuando los LED utilizan resistencias individuales en lugar de resistencias compartidas; si hay una ruta a través de dos LED que tiene una caída de LED menor que el voltaje de suministro, estos LED también pueden iluminarse en momentos no deseados.
Si un solo LED falla, ya sea por circuito abierto, cortocircuito o fuga (desarrollando una resistencia paralela parásita, que permite el paso de corriente en ambas direcciones), el impacto será catastrófico para la pantalla en su conjunto. Además, el LED problemático real puede ser muy difícil de identificar, porque potencialmente un gran conjunto de LED que no deberían estar encendidos pueden encenderse todos juntos y, sin un conocimiento detallado del circuito, no se puede establecer fácilmente la relación entre qué LED está defectuoso y qué conjunto de LED se encienden todos juntos.
En una matriz x/y estándar, un LED (D1) que entra en circuito abierto provoca que ese LED deje de funcionar, sin otras consecuencias.
Sin embargo, en una matriz parcialmente "Charlieplexada", si el LED averiado (D1) se convierte en circuito abierto, el voltaje entre los dos electrodos del LED puede acumularse hasta encontrar un camino a través de al menos otros tres LED. Si el voltaje es lo suficientemente alto, esto puede hacer que estos otros LED (como D2, D3 y D4) se enciendan inesperadamente.
Sin embargo, no se observa ningún efecto perjudicial cuando se invierte la polaridad, ya que D1 no habría conducido en esas circunstancias de todos modos, debido a que está polarizado de forma inversa. La corriente pasa a través del diodo complementario de D1 (D5) de forma normal.
Si el LED averiado se convierte en un circuito abierto en una matriz completamente "Charlieplexed", el voltaje entre los dos electrodos del LED puede acumularse hasta encontrar un camino a través de otros dos LED. Hay tantos caminos de este tipo como pines utilizados para controlar la matriz menos 2; si el LED con ánodo en el nodo m y cátodo en el nodo n falla de esta manera, puede ser que cada par de LED en el que el ánodo de uno es el nodo m , el cátodo es p para cualquier valor de p (con las excepciones de que p no puede ser m o n , por lo que hay tantas opciones posibles para p como el número de pines que controlan la matriz menos 2), junto con el LED cuyo ánodo es p y el cátodo es n , se enciendan.
Si hay 8 pines de E/S que controlan la matriz, esto significa que habrá 6 rutas parásitas a través de pares de 2 LED, y 12 LED pueden encenderse involuntariamente, pero afortunadamente esto solo sucederá cuando se supone que se encienda el LED defectuoso, lo que puede ser una pequeña fracción del tiempo y no exhibirá síntomas nocivos cuando se supone que el LED problemático no esté encendido. Si el problema es un cortocircuito entre los nodos x e y , entonces cada vez que se supone que se encienda cualquier LED U con x o y como su ánodo o cátodo y algún nodo z como su otro electrodo (sin pérdida de generalidad, aquí el cátodo de U está conectado a x ), el LED V con cátodo y y ánodo z también se encenderá, por lo que cada vez que el nodo x o y se active como ánodo O cátodo, se encenderán dos LED en lugar de uno. En este caso, enciende solo un LED adicional involuntariamente, pero lo hace con mucha más frecuencia; no sólo cuando se supone que debe encenderse el LED averiado, sino cuando se supone que debe encenderse cualquier LED que tenga un pin en común con el LED averiado.
Los elementos problemáticos se vuelven especialmente difíciles de identificar si hay dos o más LED defectuosos. Esto significa que, a diferencia de la mayoría de los métodos en los que la pérdida de un solo LED simplemente provoca la quema de un segmento, cuando se utiliza Charlieplexing, uno o dos LED quemados, cualquiera sea el modo de falla, casi con certeza causarán una cascada catastrófica de encendidos involuntarios de los LED que aún funcionan, lo que muy probablemente dejará todo el dispositivo completamente e inmediatamente inutilizable. Esto debe tenerse en cuenta al considerar la vida útil requerida y las características de falla del dispositivo que se está diseñando.
Fallo de LED en una matriz diagonal:
Debido al hecho de que el diseño de una matriz Charlieplexed vertical/horizontal estándar es bastante complicado, las consecuencias de una falla del LED se describen más fácilmente utilizando una matriz Charlieplexed diagonal simple.
El diagrama muestra una matriz Charlieplexed de 6 entradas donde un LED (L1) se convierte en circuito abierto.
Si un LED se abre y el voltaje es lo suficientemente alto, la corriente que debería haber pasado por ese LED podría encontrar una ruta alternativa a través de otros LED. Por ejemplo, si el LED 1 (L1) se abre, la corriente podría seguir fluyendo desde el terminal 3 al terminal 2 a través de L2 en serie con L3. Otras rutas son a través de L4/L5, L6/L7 y L8/L9. Esto podría hacer que estos LED parpadeen.
Si el LED 1 se cortocircuita, sus dos terminales siempre estarán al mismo potencial, al igual que los de su LED complementario invertido. Por lo tanto, ninguno de los dos LED se encenderá, aunque uno de ellos siga funcionando a pleno rendimiento.
Si el terminal 2 o el terminal 3 son negativos, entonces tanto la pista roja como la marrón serán negativas al mismo tiempo. Por lo tanto, algunos LED conectados a estas pistas podrían encenderse involuntariamente cuando los terminales 1, 4, 5 o 6 sean positivos.
De la misma manera, si el terminal 2 o el terminal 3 son positivos, entonces tanto la pista roja como la marrón serán positivas al mismo tiempo. Por lo tanto, algunos LED conectados a estas pistas podrían encenderse involuntariamente cuando los terminales 1, 4, 5 o 6 sean negativos.
Se ha demostrado que el fallo de un LED puede provocar otras consecuencias.
Si un par complementario de LED no funciona, lo más probable es que solo uno de ellos esté en cortocircuito, y se puede usar un medidor para comprobar cuál es. De lo contrario, si uno o más LED nunca se encienden, entonces probablemente todos estén defectuosos y se deben reemplazar. Con su reemplazo, es de esperar que desaparezcan los artefactos espurios. [20]
La técnica Charlieplexing también se puede utilizar para multiplexar señales de entrada digitales en un microcontrolador. Se utilizan los mismos circuitos de diodos, excepto que se coloca un interruptor en serie con cada diodo. Para leer si un interruptor está abierto o cerrado, el microcontrolador configura un pin como entrada con una resistencia pull-up interna. El otro pin se configura como salida y se establece en el nivel lógico bajo. Si el pin de entrada tiene una lectura baja, entonces el interruptor está cerrado, y si tiene una lectura alta, entonces el interruptor está abierto. [22]
Una posible aplicación de esto es leer un teclado numérico estándar (4 × 3) de 12 teclas usando solo 4 líneas de E/S. El método tradicional de escaneo de filas y columnas requiere 4 + 3 = 7 líneas de E/S. Por lo tanto, Charlieplexing ahorra 3 líneas de E/S; sin embargo, agrega el gasto de 12 diodos (ya que los diodos solo están libres cuando se usan LED). Es posible una variación del circuito con solo 4 diodos, [22] sin embargo, esto reduce el rollover del teclado. El microcontrolador siempre puede detectar cuando los datos están corruptos, pero no hay garantía de que pueda detectar las pulsaciones de teclas originales, a menos que solo se presione un botón a la vez. (Sin embargo, probablemente sea posible organizar el circuito de modo que si se presionan como máximo dos botones adyacentes, no se produzca ninguna pérdida de datos). [ vago ] La entrada solo es sin pérdida en el circuito de 4 diodos si solo se presiona un botón a la vez, o si se evitan ciertas pulsaciones de teclas múltiples problemáticas. En el circuito de 12 diodos, esto no es un problema y siempre hay una correspondencia uno a uno entre las pulsaciones de los botones y los datos de entrada. Sin embargo, se necesitan tantos diodos para utilizar el método (especialmente para matrices más grandes) que, por lo general, no hay ahorros de costos en comparación con el método tradicional de escaneo de filas y columnas, a menos que el costo de un diodo sea solo una fracción del costo de un pin de E/S, donde esa fracción es uno sobre el número de líneas de E/S.
Pantallas táctiles y teclados de capacitancia proyectada.
Estos no utilizan diodos, sino que se basan en el cambio de capacitancia entre pistas conductoras cruzadas para detectar la proximidad de uno o más dedos a través de materiales no conductores, como capas de plástico, madera, vidrio, etc., incluso doble acristalamiento.
Estas pistas pueden estar hechas de una amplia gama de materiales, como placas de circuitos impresos, óxido de indio y estaño transparente, alambre fino recubierto de aislamiento, etc.
La tecnología puede variar en tamaño desde muy pequeña, como en el caso de los "detectores de huellas dactilares", [23] hasta muy grande, como en el caso de las "paredes de video interactivas táctiles". Por lo general, se impone un límite al ancho máximo de una pantalla táctil con cableado x/y, porque la resistencia de la pista horizontal es demasiado grande para que el producto funcione correctamente. Sin embargo, una pantalla táctil con cableado diagonal (como se describe más adelante en esta sección) no tiene este problema.
La tecnología Charlieplexing es ideal para teclados y pantallas táctiles con capacitancia proyectada conectados en diagonal . Casi duplica la cantidad de puntos de cruce en comparación con la multiplexación x/y estándar, y todas las pistas de E/S provienen de un solo borde. [20]
La imagen de la izquierda (arriba) muestra la disposición del cableado diagonal de una pantalla táctil capacitiva proyectada de 32 E/S, fabricada con un cable de 10 micrones de diámetro. El video muestra la misma pantalla táctil en acción.
No hay LED ni diodos y, en cualquier momento, solo una línea de E/S se configura como salida, mientras que las líneas de E/S restantes se configuran como entradas de alta impedancia o "conectadas a tierra". Esto significa que los requisitos de energía son muy bajos.
En 2008, Dhananjay V. Gadre ideó Gugaplexing , que es como Charlieplexing con múltiples voltajes de accionamiento. [24] [25]
En 2008, el llamado Chipiplexing de Guillermo Jaquenod agrega seguidores de emisores para aumentar la fuerza del controlador de fila, lo que permite que filas más anchas que un solo puerto de microcontrolador puedan ser iluminadas simultáneamente. [26] [27]
En 2010, el fabricante de chips austriaco austriamicrosystems AG (llamado ams AG [nb 1] desde 2012 y ams-OSRAM AG desde 2020) presentó el IC controlador de LED multiplexado AS1119, [28] [29] seguido por el AS1130 en 2011. [30] [31]
Además, la división de señal analógica y mixta (AMS) [nb 1] (llamada Lumissil Microsystems desde 2020) de Integrated Silicon Solution Inc. (ISSI) presentó el IS31FL3731 en 2012 [32] [33] y el IS31FL3732 en 2015. [34] [35] [36] Todos utilizan una técnica que llaman cross-plexing , una variante de Charlieplexing con detección automática de conexiones abiertas o en cortocircuito y medidas anti-efecto fantasma. [37]
En 2015, Ron Binstead de Binstead Designs Ltd. inventó una matriz Charlieplex diagonal mientras buscaba un diseño simplificado de pantalla táctil con capacitancia proyectada . [38] [39] [40] Esto simplificó enormemente el diseño de grandes matrices Charlieplex que, hasta entonces, utilizaban algunos arreglos muy complejos. [41] [42] [43]
Matriz triangular: se puede formar una matriz triangular Charlieplexed de ( n 2 − n ) LED simplemente doblando un grupo de n conductores paralelos en ángulos rectos sobre sí mismos y colocando un par complementario de LED en cada una de las intersecciones únicas resultantes (consulte el diagrama de la izquierda). Las conexiones de E/S se pueden realizar en los extremos de los conductores o en las posiciones de plegado, formando conductores divididos.
Matriz rectangular: se puede formar una matriz diagonal cuadrada o rectangular doblando dos veces los conductores paralelos (consulte el diagrama de la derecha). Los conductores de E/S no divididos ingresan desde el extremo de la matriz.
Matriz cilíndrica: los conductores diagonales divididos y no divididos también se pueden formar en una matriz cilíndrica sin costura.
El diagrama de la derecha muestra un diseño de pantalla cilíndrica Charlieplexed dividida de 6 E/S, con 30 intersecciones, cada una con un LED direccionable de forma única. Todas las E/S se conectan en el borde inferior del cilindro (las matrices cilíndricas x/y estándar requerirían que las E/S horizontales ingresen desde el costado o se "envíen" por una costura en un costado).
En la imagen superior, la rama orientada al noroeste de un conductor de E/S dividido se utiliza a veces como fuente de corriente (lógica 1). En otras ocasiones, la rama orientada al noreste del mismo conductor se utiliza como sumidero de corriente (lógica 0). Cuando no se utiliza para alimentar ningún LED, la E/S se "apaga" (triestado). Esto evita que otros LED se enciendan de forma involuntaria.
Los LED rojo y azul están conectados a los mismos dos conductores, pero con polaridad invertida, formando un par complementario. Esto significa que no es posible encender ambos LED exactamente al mismo tiempo.
El LED rojo en la pantalla se enciende: a) configurando todas las E/S en "apagado", b) configurando la E/S 2 en 0 lógico y c) configurando la E/S 4 en 1 lógico. El LED azul no se enciende porque, en estas condiciones, es un diodo que está polarizado inversamente.
El LED azul en la pantalla se enciende: a) configurando todas las E/S en "apagado", b) configurando la E/S 2 en lógico 1 y c) configurando la E/S 4 en lógico 0. El LED rojo no se enciende porque, en estas condiciones, está polarizado en sentido inverso.
Esto ilustra cómo Charlieplexing requiere que todas las E/S sean capaces de tener tres estados (tri-estado): "apagado", 0 lógico o 1 lógico.
Los elementos conductores se pueden formar en forma de bucle, como se muestra en la imagen superior. Esto permite que la corriente fluya hacia los LED a través de dos rutas, de manera similar a una red eléctrica doméstica.
Los LED podrían disponerse alternativamente como pares complementarios verticales u horizontales, en las intersecciones (los verticales se muestran en la imagen inferior).
Al utilizar pares de LED complementarios, puede ser necesario un número impar de E/S para obtener la capacidad completa de Charlieplexing. Por ejemplo: 6 E/S Charlieplexed pueden crear una matriz de 15 intersecciones únicas. Una de las dimensiones de la matriz será 6. Para obtener 15 intersecciones únicas, la otra dimensión tendría que ser 15/6 o 2,5, lo que podría ser problemático. Sin embargo, 7 E/S pueden crear 21 intersecciones únicas, 21/7 = 3. Por lo tanto, 7 E/S crean una matriz de 7 × 3, lo que no causa problemas.
Las matrices diagonales no Charlieplexed también se pueden formar en cilindros, pero 6 E/S solo crearían 9 intersecciones únicas.
Estos cilindros se pueden transformar físicamente en formas tridimensionales complejas mediante una variedad de métodos diferentes, como moldeo por soplado, conformado al vacío, etc.
Es posible un diseño similar para una pantalla táctil cilíndrica (ver Pantalla táctil#Diagonal_touchscreen_arrays ).
Matriz de ancho "infinito" - El diagrama de la derecha muestra el diseño de una pantalla táctil multitáctil, de capacitancia proyectada y de ancho potencialmente "infinito". Las longitudes diagonales de los conductores nunca superan 1,414 veces la altura de la pantalla táctil , lo que significa que la pantalla se puede ensanchar "indefinidamente" sin aumentar la resistencia del conductor. [44] Esto se reduce a 1,12 veces la altura de la pantalla táctil , si los elementos sensores se intersecan a 60 grados en lugar de 90 grados.
En 2019, Micah Elizabeth Scott desarrolló un método para utilizar 3 pines para ejecutar 4 LED y 4 interruptores llamado Tucoplexing . [45]
Charlieplexing incluso se puede utilizar con modulación de ancho de pulso para controlar el brillo de 12 LED con 4 pines. [46]
En el siguiente ejemplo de código de Arduino , el circuito [47] [48] utiliza un microcontrolador ATtiny de 8 pines que tiene 5 pines de E/S para crear una pantalla de 7 segmentos . Dado que una pantalla de 7 segmentos solo requiere el control de 7 LED individuales, usamos 4 de los pines de E/S de ATtiny como salidas Charlieplexed ( n ( n - 1)), es decir, los 4 pines podrían usarse para controlar hasta 12 LED individuales (aquí solo usamos 7 de ellos). Dejando el quinto pin de E/S para usarse como entrada digital o analógica u otra salida.
// Código ATtiny.// Lee la entrada analógica (o digital) del pin 4 y cada vez que la entrada cae por debajo de un umbral establecido.// Cuenta uno y muestra el aumento en el conteo activando uno de los cuatro LED (o transistores)// o uno de los doce LED Charlieplexed.// ESTABLECER ESTOS VALORES:int umbral = 500 ; int recuentomáximo = 7 ; ////////////////////sensor booleanoTriggered = falso ; int cuenta = 0 ; int sensorValue = 0 ; long lastDebounceTime = 0 ; // La última vez que se activó el pin de salida. long debounceDelay = 50 ; // El tiempo de rebote; aumenta si la salida parpadea. ////////////////////////////////////////////////// ///////////////////////////////configuración vacía () { // Utilice pull-down para los pines de salida deshabilitados en lugar de pull-up para reducir el consumo interno. para ( int pin = 0 ; pin < 4 ; pin ++ ) { pinMode ( pin , ENTRADA ), digitalWrite ( pin , BAJO ); } // Pull-up interno para el pin de entrada habilitado 4. pinMode ( 4 , ENTRADA ), digitalWrite ( 4 , ALTA ); }////////////////////////////////////////////////// ///////////////////////////////bucle vacío () { pruebaDígitos ();}vacío testDigits () { charlieBucle ();}////////////////////////////////////////////////// ///////////////////////////////vacío readSensor () { sensorValue = analogRead ( 2 ); // pin4! retraso ( 100 ); si ( sensorValue < umbral && sensorTriggered == falso ) { sensorTriggered = verdadero ; contar ++ ; si ( contar > maxCount ) contar = 0 ; charlieBucle (); } si ( sensorValue > umbral ) sensorTriggered = falso ; }////////////////////////////////////////////////// ///////////////////////////////vacío charlieLoop () { contar ++ ; para ( int i = 0 ; i < 1000 ; i ++ ) { para ( int c = 0 ; c < conteo ; c ++ ) { charliePlexPin ( c ); } } retraso ( 1000 ); si ( contar > maxCount ) contar = 0 ; }////////////////////////////////////////////////// ///////////////////////////////void charliePlexPin ( int miLed ){ //Asegúrese de no suministrar voltajes aleatorios a los LED. // Durante el breve tiempo que estamos cambiando los voltajes y modos de los pines. // Utilice pull-down para los pines de salida deshabilitados en lugar de pull-up para reducir el consumo interno. para ( int pin = 0 ; pin < 4 ; pin ++ ) { pinMode ( pin , ENTRADA ), digitalWrite ( pin , BAJO ); } // Con 4 pines podríamos encender hasta 12 LED, aquí usamos solo 7. // Asegúrese de configurar los voltajes de los pines (mediante pull-up o pull-down interno) // antes de cambiar los modos de pin a salida.#if 1 // Código reducido usando una tabla de búsqueda estática. estructura typedef { // Dos números PIN diferentes (entre 0 y 3; el orden es significativo), // de lo contrario no se encenderá ningún led. bajo , alto : int : 2 ; } Pines ; Pines estáticos pinsLookup [] = { { 2 , 0 }, { 2 , 3 }, { 1 , 3 } , { 0 , 1 } , { 1 , 0 } , { 0 , 2 } , { 1 , 2 }, // Otras combinaciones posibles para hasta 12 LED: // {0, 3}, {2, 1}, {3, 0}, {3, 1}, {3, 2}, // Otras combinaciones inutilizables que no encienden ningún LED con un voltaje y corriente significativos, // a menos que las resistencias pull-up o pull-down estén muy desequilibradas: // {0, 0}, {1, 1}, {2, 2}, {3, 3} }; si ( myLed >= 0 && myLed <= tamaño de ( pinsLookup ) / tamaño de ( Pins )) { registrar Pines & pines = pinsLookup [ myLed ]; // Tenga en cuenta que el primer dígito escrito en LOW está comentado. // como ya está configurado arriba para todos los pines de salida. /* digitalWrite ( pins.low, BAJO), */ pinMode ( pins.low , SALIDA ) ; digitalWrite ( pins.high , ALTO ) , pinMode ( pins.high , SALIDA ) ; }#else // Código equivalente usando un interruptor largo. interruptor ( myLed ) { caso 0 : /* digitalWrite(2, BAJO), */ pinMode ( 2 , SALIDA ); digitalWrite ( 0 , ALTO ), pinMode ( 0 , SALIDA ); romper ; caso 1 : /* digitalWrite(2, BAJO), */ pinMode ( 2 , SALIDA ); digitalWrite ( 3 , ALTO ), pinMode ( 3 , SALIDA ); romper ; caso 2 : /* digitalWrite(1, BAJO), */ pinMode ( 1 , SALIDA ); digitalWrite ( 3 , ALTO ), pinMode ( 3 , SALIDA ); romper ; caso 3 : /* digitalWrite(0, BAJO), */ pinMode ( 0 , SALIDA ); digitalWrite ( 1 , ALTO ), pinMode ( 1 , SALIDA ); romper ; caso 4 : /* digitalWrite(1, BAJO), */ pinMode ( 1 , SALIDA ); digitalWrite ( 0 , ALTO ), pinMode ( 0 , SALIDA ); romper ; caso 5 : /* digitalWrite(0, BAJO), */ pinMode ( 0 , SALIDA ); digitalWrite ( 2 , ALTO ), pinMode ( 2 , SALIDA ); romper ; caso 6 : /* digitalWrite(1, BAJO), */ pinMode ( 1 , SALIDA ); digitalWrite ( 2 , ALTO ), pinMode ( 2 , SALIDA ); romper ; }#finsi}////////////////////////////////////////////////// ///////////////////////////////void spwm ( int frecuencia , int pin , int sp ) { // Llama a Charlieplexing para configurar los pines correctos: // en: digitalWrite ( pin , ALTO ); delayMicrosegundos ( sp * freq ); // apagado: digitalWrite ( pin , BAJO ); delayMicrosegundos ( sp * ( 255 - freq )); }
[…] Esta inusual técnica de multiplexación es utilizada por los controladores de pantalla LED MAX6950, MAX6951, MAX6954, MAX6955, MAX6958 y MAX6959. […] Originalmente, Charlie Allen promovió esta técnica internamente en Maxim, por lo que el nombre abreviado "Charlieplexing" comenzó a usarse para distinguir la multiplexación con recuento de pines reducido del método tradicional. El primer producto Maxim que utilizó Charlieplexing fue el controlador LED MAX6951 de Maxim, que controla 8 dígitos numéricos con solo 9 pines […][1] (4 páginas)
[…] El éxito del
MAX232
fue tanto un tributo a la visión de su creador, Charlie Allen, como al ingenio de su diseñador,
Dave Bingham
. […]
[…] El lanzamiento de la familia
MAX232
es particularmente revelador. Charlie Allen, un brillante ingeniero de aplicaciones centrado en el cliente, notó que nuestros clientes estaban usando un producto llamado ICL7660, que
Dave
[Bingham] también diseñó, para proporcionar la fuente de alimentación negativa para los controladores y receptores de línea
RS-232
. Entonces, Charlie se acercó a Dave y le preguntó si podía diseñar un CI que integrara la funcionalidad del ICL7660 con un controlador y receptor de línea RS-232. […]
{{cite magazine}}
: La cita utiliza un título genérico ( ayuda )[…] Solo se requieren 18 líneas para controlar los 144 LED. Esto se logra con la técnica de multiplexación de austriamicrosystems llamada cross-plexing. Esto permite reducir el recuento de líneas en la PCB, así como menos pines en los conectores, lo que ahorra espacio y costos. […] Otras características incluyen […] detección de errores de LED abiertos y en cortocircuito […](NB. Anuncio de la AMS AS1119.)
[…] Solo se requieren 12 líneas para controlar los 132 LED. Esto se logra con la técnica de multiplexación de austriamicrosystems llamada cross-plexing. Reduce el recuento de líneas en la PCB, así como los pines en los conectores, lo que ahorra espacio y costos. Otras características incluyen […] detección de errores de LED abiertos y en cortocircuito […](NB. Anuncio del AMS AS1130.)
[…] Los múltiples efectos fantasma y los problemas con los LED a menudo han provocado la interrupción de la topología Charlieplexing en la configuración severa. Eine »Crossplexing« genera Verbesserung des Verfahrens verspricht nun, die Nachteile des bisherigen Verfahrens zu eliminieren […] Die Kurzschluss- und Defekterkennung des ICs beruht […] auf der Vorwärtsspannung der in der Matrix verwendeten LED. Das Bauelement bestimmt eine óptima Spannungsschwelle für Defektsituationen und konfiguriert sie automatisch. Die Kenntnis der Position eines Kurzschlusses oder Defekts eliminan naturalmente noch nicht die Ghosting-Effekte. Wird jedoch eine Unterbrechung festgestellt, kann das System die Koordinaten des Defekts abspeichern. […] Jedes Mal, wenn der Treiber angewiesen wird, diese LED anzusteuern, willd are diese Instruktion ignoriert. Esta masa debe estar protegida de las increibles luces LED que se encuentran en el resto de las pantallas de matriz puntiaguda. […]