BCM-Baustein

IMG_20140520_121058BCM, eine Variante von PWM, ist eine  sparsame Methode um viele LEDs gleichzeitig zu dimmen.

Um in Zukunft neue Projekte schnell mit BCM-Funktionalität auszurüsten, ohne den verwendeten Mikrocontroller damit belasten zu müssen (Pins, mindestens ein Timer, Programmspeicher, hinreichend hohe Frequenz), gibt es nun einen fertigen BCM-Baustein.
Dabei handelt es sich einfach um einen ATmega8 mit einem passenden Programm (das prinzipiell auch auf jedem anderen ATmega lauffähig ist), welches alle zur Verfügung stehenden Ausgänge ständig spezifisch gedimmt hält und seine Anweisungen via TWI empfängt. Die Auflösung beträgt 8 Bit (0..255). Die Software enthält bereits zwei Korrekturfunktionen (zuerst Gammakorrektur mit γ=1,90, danach Flimmerkorrektur, da manche Ausgabewerte wie 16/32/64/128 bei BCM bei langsamem Fading zu einem sichtbar sprunghaften Übergang führen).

Normalerweise sind 20 Pins als Ausgang nutzbar, 18, wenn XTAL1/2 für einen Quarz verwendet werden sollen. (Der ATmega8 läuft normalerweise mit seinen eigenen 8 MHz. Falls die LEDs für bestimmte Anwendungen zu deutlich flimmern, kann natürlich auch ein schnellerer Quarz angeschlossen werden.)
Falls tatsächlich so viele LEDs angeschlossen werden, dass die zu erwartende maximale Stromaufnahme den Grenzwert des ATmega8 übersteigt, können die LEDs natürlich auch alle über je einen Transistor in Emitterschaltung angesteuert werden, da die Ausgänge bei BCM genau wie bei PWM rein digital sind.

Jeder Chip wird in der Programmierphase mit einer fest im EEPROM codierten TWI-Adresse versehen (generall call ist auch aktiv) und wartet dann auf Steuerbefehle. Diese beginnen alle mit einem Slash und einem Unterscheidungszeichen (Slash, Doppelpunkt oder At), alle anderen Nachrichten werden ignoriert.

  • // 0 1A 33 4D 66 80 99 B2 CC E5 FF
    Diese Nachricht setzt die Ausgänge #0 bis #10 grob auf die Werte 0% bis 100%. Die restlichen Ausgänge, #11 bis #19, sind nicht angegeben und werden daher nicht verändert.
  • /:\x00\x1a\x33\x4d\x66\x80\x99\xb2\xcc\xe5\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00
    Diese Nachricht setzt die Ausgänge #0 bis #10 ebenfalls auf 0% bis 100%, die restlichen Ausgänge müssen bei dieser Nachrichtenform mit angegeben werden und werden hier auf 0% gesetzt. In dieser kompakteren Form werden die 8-Bit-Werte direkt als Einzelbytes in die Nachricht geschrieben.
  • /@ 7F
    Diese Nachricht setzt alle Ausgänge auf 50%.

BCM-ATmega8-Pins
(Pin-Layout)