Teile: 4 × 4 RGB-Button-Pad-Controller SPI

Wir haben den neuen RGB-Button-Pad-Controller von Sparkfun vor einigen Wochen abgedeckt. Dies ist ein vollfarbiger Klon der Monom-Schnittstelle; ein 4 × 4-Gitter von Knöpfen mit dreifarbigen LEDs darunter. Jede LED hat 24Bit Farbsteuerung für mehr als 16 Millionen Farbkombinationen. Bis zu 10 Paneele können zusammengekettet werden, um wesentliche Schaltflächengitter wie Sparkfuns Tetris-Tabelle zu erstellen. Wir haben zuvor eine kleinere Version in unserem RGB-Kombinationsschloss verwendet.

Wir haben Sparkfun gebeten, uns die SPI-Version des Tastencontrollers zu testen. Dies ist ein neues Produkt in House in Sparkfun, mit Open Source-Hard- und Software. Lesen Sie über unsere Erfahrung, die dieses Board unten angrenzt.

4 × 4 RGB Button Pad Controller SPI (Sparkfun # WIG-09022, $ 39.95)

Der Button-Pad-Controller ist eine nackte PCB, wir haben auch eine Button-Pad-Abdeckung (Sparkfun # COM-07835, 9,95 $) und zwei von jeder Lünette (Sparkfun # com-08747, # com-08746, 3,95 $) erhalten. Die SPI-Version, mit denen wir arbeiten, können direkt von einem Mikrocontroller oder von einem USB-Master ‘angetrieben werden. Die USB-Controller-Version verfügt über einen zusätzlichen Mikrocontroller- und FTDI-USB-> seriellen Konverter für PC-Konnektivität.

Wenn das Button-Pad ankam, setzten wir uns sofort mit dem Datenblatt und versuchten, das Board mit unserer seriellen BUS-Pirat-Universal-Schnittstelle zu übergeben. Das in Version 1 des Datenblatts beschriebene Protokolls funktionierte überhaupt nicht.

Sparkfun Open eröffnet dieses Projekt, sodass wir das richtige Schnittstellenprotokoll aus dem Quellcode für die Schaltfläche PAD SPI (ZIP) und den Button-Pad-USB-Controller (ZIP) ermitteln. Wir haben das meiste Protokoll aus der Quelle herausgefunden, dabei nahm jedoch noch hilfreich von den Ingenieuren von Sparkfun, um einige der undokumentierten, feineren Punkte der Schnittstelle des Boards aufzudecken. Version 2 des Datenblattes (PDF) zeigt das Schnittstellenprotokoll genau.

Verbindungen

Bus-Pirat
Button-Pad

Miso.
Miso.

Mossi
Mossi

Uhr
SCK.

Cs.
Cs.

+ 5 volts.
Vcc

Gnd
Gnd

Die SPI-Signale des Button-Pads werden beschrieben, wie sie sich auf den Bord-Mikrocontroller beziehen, der der üblichen Notation entgegengesetzt ist. Das MOSI (Master Out, Slave In) -Signal ist eigentlich der Datenausgang des Boards, und Miso (Master in, Slave OUt) ist der Dateneingang.

Wir haben das Button-Pad mit dem Bus-Pirat getestet, gelten jedoch für jeden benutzerdefinierten Mikrocontroller-Code. Der Verwaltungsrat läuft bei 5 Vielen, so dass wir es von der Button-Netzteil des Bus-Pirates angetrieben haben. Die SPI-Schnittstelle arbeitet auf 5Volt-Logikstufen, sodass wir die Pull-Up-Widerstände des Bus-Pirat-Anziehungswiderstabs an die 5VOLT-Stromversorgung miteinander verbunden und ermöglichten sie in allen Signalleitungen.

Wir haben die Button-Karte mithilfe der Raw3wire-Bibliothek von Bus Pirat verbunden. Raw3Wire ist eine Software-SPI-Bibliothek mit Bit-Wise-Vorgängen. Die Hardware-SPI-Bibliothek ermöglicht nur vollständige Byte-Vorgänge, die nicht körnig genug sind, um den Vorstand anzumelden. Wir setzen den Bus-Pirat in den RAW3WIRE-Modus (Menüoption M) und wählte die Option HIZ-PIN, da die Pull-Up-Widerstände den Bus bei 5 VOLLTs halten.

Raw3Wire> l <-configure-Bitreihenfolge 1. MSB zuerst 2. LSB zuerst Modus> 2 <-last signifikant zuerst LSB-Set: am wenigsten sig Bit zuerst Raw3Wire> W <-Emable Stromversorgung Spannung liefert ein Raw3wire>

Das Button-Pad kommuniziert zuerst am wenigsten signifikat, sodass wir die Bibliothek auch konfiguriert, um LSB zuerst zu kommunizieren. Schließlich treffen wir Kapital ‘W’, um die Netzteile des Bus-Pirats zu ermöglichen. Die Button-Karte blinkt jede Farbe momentan als Teil seines Power-On-Selbsttests.

Single / Multiple Button Board Setup

Jede Platine muss für die Einzel- oder Multi-Board-Verwendung konfiguriert sein. Boards kommen für den Einstieg vorprogrammiert, aber es ist eine gute Idee, die Konfiguration sowieso zu setzen. Die Board-Konfiguration wird dauerhaft in EEPROM gespeichert, sodass es nur einmal durchgeführt werden muss.

Raw3Wire> [\ \ _ <-Take Alle Signale niedrig Cs fähig <-cs aktiviert ist 0VOLTS Uhr, 0. Datenausgabe, 0 Raw3wire>

Eine spezielle Sequenz stellt die Platine in den Konfigurationsmodus. Beginnen Sie mit allen Signalleitungen niedrig (] \ _).

Raw3Wire> – ^ 1 1 <-Set Single Board-Betrieb Datenausgabe, 1 <-Data hoch 0x01 uhr Ticks <-one uhr tick Schreiben: 0x01 <-config Option 1, Anzahl der Boards Write: 0x01 <-Set Die Anzahl der Boards Raw3Wire> W <-Small 'w', schalt ab Spannung liefert aus Raw3wire> W <-Kapital 'w', Power On Spannung liefert ein Raw3wire>

Um den Konfigurationsmodus einzugeben, nehmen Sie die Datenzeile hoch (-) und senden Sie einen Taktimpuls (^), lassen Sie den Chip jedoch niedrig. Die Platine ist jetzt bereit, Konfigurationseinstellungen zu akzeptieren.

Das erste Byte, das nach dem Eintritt mit dem Konfigurationsmodus gesendet wurde, weist den Vorstand an, die zum Ändern einstellen. Derzeit kann nur die Anzahl der Boards konfiguriert werden (0x01). Senden Sie als nächstes die Anzahl der angeschlossenen Boards zwischen 1 und 10. Wir haben 1 gesendet, weil wir ein einzelnes Vorstand anlegen. Setzen Sie die Karte zurück, und es wird eine LED anzünden, die der programmierten Anzahl von Karten entspricht.

Legen Sie die Farben und den Status der Schaltfläche ein

Jetzt sind wir bereit, Farbdaten an die Tafel zu senden und den Knopfstatus zu lesen. Beachten Sie zunächst, dass das CS-Signal CS (Chip Select) gegenüber normalen Konventionen ist. Normalerweise aktiviert CS einen Chip, wenn das Signal lO istw (0Volts) und itles, wenn das Signal hoch ist (5 volts); Dies wird normalerweise von / cs, #cs oder! CS bezeichnet. Stattdessen ist der Schaltflächencontroller aktiv, wenn CS hoch ist.

Eine 64-Byte-Transaktion stellt die LED-Farben ein und ruft den Knopfstatus ab. Das erste 16 Byte-Programm des roten Pegels für jede LED, gefolgt von 16 Byte von Grün und 16 Byte Blau. Beenden Sie das Lesen von 16 Byte von der Tafel, um den Status jeder Taste zu erhalten. Schaltflächen Daten werden als 0x00 gesendet, wenn Sie gedrückt werden, und 0xFF, wenn nicht gedrückt. Das Datenblatt empfiehlt eine 400US-Verzögerung zwischen dem Schreiben der Farbrahmen und dem Lesen der Schaltflächendaten, aber der Bus-Pirat ist langsam genug, dass wir uns keine Sorgen machen können.

Das Protokoll ist einfach genug, aber es gibt einen großen Fang. Die Taktlinie muss vor dem Anheben des CS hoch sein, oder der ByTream wird um 1 Bit ausgeschaltet. Aus diesem Grund funktionieren viele Hardware-SPI-Module nicht mit dem Vorstand. Dies ist kein Problem, wenn Ihr Mikrocontroller Sie von einem Hardwaremodul, der von einem Hardwaremodul gesteuert wird, von Ihrem Mikrocontroller twidle, aber die Micros, mit denen wir gearbeitet haben, nicht zulassen.

Raw3Wire> /] 255: 16 255: 16 255: 16 R: 16 [
Uhr, 1 <-Flock muss vor der Erhöhung der CS hoch sein CS deaktiviert <-cs an 5Volts, gegenüber der normalen Verwendung BULK WRITE 0XFF, 0x10-mal <-Red-LEDs Bulk schreiben 0xFF, 0x10 mal <-Green-LEDs Bulk Write 0xFF, 0x10 mal <-blue-LEDs Bulk Read 0x10 Bytes: <-Read-Button-Status 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF CS-fähig <-cs an 0Volts, gegenüber der normalen Verwendung Raw3wire>

Dieser Befehl legt jede Farbe jeder LED-LED auf, und liest die 16-Taste-Status-Bytes zurück.

Wir setzen zunächst die Uhr hoch (/), und nur dann können wir CS auf 5Volts (]) anheben und die Datentransaktion beginnen. 255: 16 ist ein wiederholter Befehl, der den Wert 255 sechzehn Mal sendet. Da jeder Farbkanal 8Bit der Intensitätssteuerung aufweist, beträgt 255 100%. Wir senden 255 insgesamt 48 Mal, einmal für jede Farbe jeder LED. Schließlich erheben wir einen 16-Byte-Rahmen von Buttondaten (R: 16) und untere CS, um die Transaktion ([) zu beenden. Die Tastenwerte sind alle 0xFF, was darauf hinweist, dass keine Tasten gedrückt werden.

Raw3wire> /] 0:16 0:16 128: 16 R: 16 [
Uhr, 1.
Cs deaktiviert
Bulk schreiben Sie 0x00, 0x10 mal
Bulk schreiben Sie 0x00, 0x10 mal
Bulk schreiben 0x80, 0x10 mal <-all blau auf 50% Bulk Read 0x10 Bytes: 0x00 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF Cs aktiviert Raw3wire>

Hier setzen wir den blauen Niveau jeder LED auf 50% (128) und schalten alle anderen Farben aus. Die Schaltfläche Ausgang zeigt jetzt, dass die Taste 0 gedrückt wird.

Raw3Wire> /] 0 0 0 0 255 255 255 255 0 0 0 0 0 0 0 0 0:16 0:16 R: 16 [
Uhr, 1.
Cs deaktiviert
Schreiben: 0x00 <- rote LED 0, aus ... <- Muhr von demselben Schreiben: 0x00 <- rote LED 3, aus Schreiben: 0xFF <- Rote LED 4, 100% auf Schreiben: 0xFF <- Rote LED 5, 100% auf Schreiben: 0xFF <- rote LED 6, 100% auf Schreiben: 0xFF <- Rote LED 7, 100% auf Schreiben: 0x00 <- rote LED 8, aus ... <- Muhr von demselben Schreiben: 0x00 <- rote LED 15, aus Bulk schreiben 0x00, 0x10 mal <- alle grünen LEDs aus Bulk schreiben 0x00, 0x10 mal <-all blaue LEDs aus Bulk Read 0x10 Bytes: <-Read-Taste Status 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF Cs aktiviert Raw3wire>

Dieses Beispiel zeigt, wie Sie einzelne LEDs ansprechen. Diesmal schreiben wir tatsächlich alle 16 Bytes des roten Farbrahmens aus. Tasten 0-3 und 8-15 haben einen roten Wert von 0 (rot aus), Tasten 4-7 sind auf 100% rot (255) eingestellt. Alle grünen und blauen LEDs sind ausgeschaltet (0, 0%).

Fazit

Es war wirklich frustrierend, dieses Board zu arbeiten, da die erste Version des Datenblatts so viele Fehler hatte. Sparkfuns Ingenieure und Support waren wirklich hilfreich und basierten innerhalb von Tagen ein korrigiertes Datenblatt. Solange Sie das aktualisierte Datenblatt haben, ist dies ein einfaches Board, mit dem Sie arbeiten können.

Wir möchten ein Firmware-Update sehen, das die Notwendigkeit beseitigt, das Taktsignal vor dem Anheben des CS aufzuhalten. Mit diesem Quirk können Sie den Vorstand mit vielen Hardware-SPI-Modulen inkompatibel, um langsame Bit-Bang-Routinen als einzige Schnittstellenoption zu hinterlassen. Glücklicherweise ist der Quellcode offen und für alle verfügbar, die diese Änderung vornehmen möchten.

Der Button-Pad-Controller ist ein wirklich ordentlicher Brett, und wir freuen uns darauf, es in einem zukünftigen Projekt zu benutzen.

Hack pro Tag Überblick Offenlegung: Wir haben nach einem kostenlosen Board gefragt und Sparkfun es an uns gesendet. Wir hatten eine schreckliche Zeit, um es zu bekommen, um mit den Anweisungen in der ersten Version des Datenblatts zu arbeiten, dokumentierten wir diese Erfahrung hier.

Leave a Reply

Your email address will not be published.