Die Anwendungsgebiete von digitalen Potis sind mannigfaltig. Deshalb habe ich beschlossen, mir ein solches auch einmal näher anzuschauen.

Die Wahl viel nach kurzer Suche auf das MCP41XXX von Microchip. Dieses Poti ist in drei verschiedenen Größen (10K, 50K und 100K) erhältlich. Es arbeitet bei 5V und wird über das SPI angesprochen. Das MCP41XXX hat noch einen großen Bruder, den MCP42XXX, welcher im Prinzip die selben Eigenschaften hat, allerdings  über zwei Kanäle verfügt, welche unabhängig voneinander angesprochen werden können.

Wie man sieht, ist der kleinere Baustein nur mit einem SI (Serial Input) Pin ausgestattet, was auch vollkommen ausreicht. Man möchte ja vom digitalen Poti nichts weiter erfahren, sondern ihm lediglich mitteilen, auf welchen Wert es sich einzustellen hat (unidirektional). Dass der größere Baustein einen SO (Serial Output) mitbringt, hat die Ursache, dass so mehrere Potis in einer Art Kette betrieben werden können (daisy chain). Auf diese Weise spart man /CS-Pins.

Der Widerstandswert kann in 256 Schritten variiert werden (8 Bit). Nach dem Einschalten befindet sich der Schleifer immer auf Mittelstellung (0x80), der Widerstand beträgt also R/2. Der Schleifer wird durch den Pin PW0 repräsentiert. Die beiden anderen Klemmen des Potis sind PA0 und PB0.

Wer sich bis jetzt noch nicht mit dem SPI beschäftigt hat, der sollte das jetzt nachholen. Danach ist die Anwendung eigentlich ein Klacks.

Beim MCP41XXX dienen die Pins /CS, SCK und SI der eigentlichen Kommunikation mit dem MC. Hierbei dient /CS der Auswahl des Bausteins, SCK ist die Taktleitung und SI die Datenleitung (unidirektional in Richtung Poti).
Es gilt zu beachten, dass der Schleifer einen Widerstand von 52Ω (bei 10K) bzw. 125Ω (bei 50K und 100K) mitbringt. Setzt man den Schleifer auf 0x00, so befindet er sich direkt an PB0.

Nun zur Kommunikation, welche sich dank des Hardware-SPI des ATMegas recht einfach gestaltet.

Um den Widerstandswert zu ändern, muss zunächst das Poti mittels /CS ausgewählt werden (L-Pegel). Nun erwartet es ein Befehlsbyte gefolgt von einem Datenbyte. Diese werden in ein internes 16Bit Schiebregister geladen.

Das Befehlsbyte hat die folgende Form:

 x    x    C1    C0    x    x    P1    P0  

Die ersten beiden zu verändernden Bits (C0 und C1) dienen der Auswahl der Aktion, die anderen beiden (P1 und P0) der Auswahl des Potentiometers. Da im kleineren Modul nur ein Poti vorhanden ist, muss P1 gleich Null und P0 gleich Eins sein.
Sind C1 und C0 beide Null oder beide Eins, wird keine Aktion ausgeführt. Ist C1 = 0 und C0 = 1, so wird der Wert des Datenbytes als neue Schleiferstellung interpretiert. Im umgekehrten Fall mach das Poti einen Shutdown, die nachfolgenden Datenbits werden nicht mehr beachtet. Aufwecken kann man das Poti, indem man einen neuen Schleiferwert festlegt.

Codeschnipsel erübrigen sich in diesem Abschnitt, da nur das SPI verwendet wird, welches bereits in einer separaten Rubrik ausführlich erklärt wird. Ein Codebeispiel ist natürlich wieder entweder hier oder in der Rubrik Programme verfügbar.