Aquí hay un ejemplo de charlieplexing que he construido.
Es un simulador de haz de faro y utiliza una serie de 12 LEDs cargados a 4 GPIO para barrer un haz de luz alrededor de un disco. Hay un video de esto aquí .
El proyecto está basado en PIC, utilizo un PIC12f683 que también es un uP de 8 pines y podría considerarse comparable a los AVR de 8 pines.
La intensidad del LED es impulsada por una interrupción que proporciona un PWM de 32 pasos a unos 60Hz. Solo se permite encender dos LED a la vez, lo que proporciona un 50% de trabajo para cada LED, ya que eso era todo lo que necesitaba. También ofrece una buena compensación de la frecuencia de actualización PWM contra la resolución.
La codificación para usar charlieplexing es realmente bastante simple si se adhiere al método "clásico" de encender solo un LED en un momento dado a una velocidad de actualización muy rápida. Calculo el PORT y el TRIS (registros específicos de imágenes) requeridos primero en papel y luego almaceno los resultados en una matriz estática. Para encender el LED x, el PIC solo tiene que buscar el valor en el índice de la matriz [x] y escribirlos directamente en el PUERTO (con un poco de enmascaramiento para preservar el estado de los otros pines no utilizados en el charliplex)
Mi proyecto solo tiene 12 LED, no 15 o el máximo 20 que permitirán los 5 GPIO, ya que quería tener un GPIO de repuesto para el desarrollo futuro.
De todos modos ... Pensé que podría ser útil tener un ejemplo de trabajo similar a su solicitud.
El código fuente completo y los esquemas están disponibles en mi blog.