Inhaltsverzeichnis:

5x4 LED-Anzeigematrix mit einem Basic Stamp 2 (bs2) und Charlieplexing - Gunook
5x4 LED-Anzeigematrix mit einem Basic Stamp 2 (bs2) und Charlieplexing - Gunook

Video: 5x4 LED-Anzeigematrix mit einem Basic Stamp 2 (bs2) und Charlieplexing - Gunook

Video: 5x4 LED-Anzeigematrix mit einem Basic Stamp 2 (bs2) und Charlieplexing - Gunook
Video: Alarmanlage mit BASIC Stamp 1 2024, November
Anonim
5x4 LED-Anzeigematrix mit Basic Stamp 2 (bs2) und Charlieplexing
5x4 LED-Anzeigematrix mit Basic Stamp 2 (bs2) und Charlieplexing

Haben Sie einen Basic Stamp 2 und ein paar zusätzliche LEDs herumliegen? Spielen Sie mit dem Konzept des Charlieplexing herum und erstellen Sie eine Ausgabe mit nur 5 Pins.

Für dieses instructable werde ich das BS2e verwenden, aber jedes Mitglied der BS2-Familie sollte funktionieren.

Schritt 1: Charlieplexing: Was, Warum und Wie

Lassen Sie uns zuerst das Warum aus dem Weg räumen. Warum Charlieplexing mit einem Basic Stamp 2 verwenden? ---Proof of Concept: Erfahren Sie, wie Charlieplexing funktioniert und erfahren Sie etwas über die BS2. Dies kann mir später mit schnelleren 8-Pin-Chips nützlich sein (nur 5 davon werden I/O sein).---Nützlicher Grund: Im Grunde gibt es keinen. Der BS2 ist viel zu langsam, um ohne merkliches Flackern anzuzeigen. Was ist Charlieplexing?---Charlieplexing ist eine Methode zum Ansteuern einer großen Anzahl von LEDs mit einer kleinen Anzahl von Mikroprozessor-E/A-Pins. Ich habe von www.instructables.com über Charlieplexing gelernt und Sie können auch: Charlieplexing LEDs - Die TheorieWie man viele LEDs von ein paar Mikrocontroller-Pins antreibt. Auch bei Wikipedia: CharlieplexingWie kann ich 20 LEDs mit 5 I/O-Pins ansteuern?---Bitte lesen Sie die drei Links unter "Was ist Charlieplexing?". Das erklärt es besser als ich es je könnte. Charlieplexing unterscheidet sich vom herkömmlichen Multiplexing, bei dem für jede Zeile und jede Spalte ein E/A-Pin benötigt wird (das wären insgesamt 9 E/A-Pins für ein 5/4-Display).

Schritt 2: Hardware und Schaltplan

Hardware und Schaltplan
Hardware und Schaltplan

Materialliste:1x - Basic Stamp 220x - Leuchtdioden (LEDs) des gleichen Typs (Farbe und Spannungsabfall)5x - Widerstände (Widerstandswert siehe unten)Auxiliary/Optional:Verfahren zum Programmieren Ihres BS2Momentary-Taster als Reset-Schalter6v -9vStromversorgung abhängig von Ihrer Version des BS2 (lesen Sie Ihr Handbuch)Der Schaltplan: Dieser Schaltplan wurde unter Berücksichtigung des mechanischen Layouts zusammengestellt. Auf der linken Seite sehen Sie das Raster der LEDs, dies ist die Ausrichtung, für die der BS2-Code geschrieben wurde. Beachten Sie, dass bei jedem LED-Paar die Anode mit der Kathode des anderen verbunden ist. Sie werden dann mit einem der fünf I/O-Pins verbunden. Widerstandswerte: Sie sollten Ihre eigenen Widerstandswerte berechnen. Überprüfen Sie das Datenblatt für Ihre LEDs oder verwenden Sie die LED-Einstellung Ihres Digitalmultimeters, um den Spannungsabfall Ihrer LEDs zu ermitteln. Lassen Sie uns einige Berechnungen durchführen: Versorgungsspannung - Spannungsabfall / gewünschter Strom = Widerstandswert Der BS2 liefert 5 V geregelte Leistung und kann 20 mA liefern des Stroms. Meine LEDs haben einen Abfall von 1,6 V und arbeiten mit 20 mA, 5 V - 1,6 V / 0,02 Ampere = 155 Ohm Um Ihren BS2 zu schützen, sollten Sie den nächsthöheren Widerstandswert von dem, was Sie mit der Berechnung erhalten, verwenden. Ich habe 220 Ohm verwendet, weil mein Entwicklungsboard diesen Widerstandswert für jeden E / A-Pin eingebaut hat. HINWEIS: Ich glaube, dass, da an jedem Pin ein Widerstand vorhanden ist, der Widerstand an jeder LED effektiv verdoppelt wird, da ein Pin V + und der andere Gnd ist. In diesem Fall sollten Sie die Widerstandswerte um die Hälfte reduzieren. Der nachteilige Effekt eines zu hohen Widerstandswerts ist eine Dimmer-LED. Kann jemand dies überprüfen und mir eine PN oder einen Kommentar hinterlassen, damit ich diese Informationen aktualisieren kann? Programmierung: Ich habe ein Entwicklungsboard mit einem DB9-Anschluss verwendet, um den Chip direkt auf dem Board zu programmieren. Ich verwende diesen Chip auch auf meinem lötfreien Steckbrett und habe einen In Circuit Serial Programming (ICSP) -Header enthalten. Der Header ist 5 Pins, Pins 2 bis 5 sind mit Pins 2-5 eines seriellen DB9-Kabels verbunden (Pin 1 ist unbenutzt). Bitte beachten Sie, dass zur Verwendung dieses ICSP-Headers die Pins 6 und 7 des DB9-Kabels miteinander verbunden werden müssen. Zurücksetzen: Ein kurzzeitiger Druck-Reset-Knopf ist optional. Dies zieht nur den Stift 22 auf Masse, wenn er gedrückt wird.

Schritt 3: Breadboarding

Brotbacken
Brotbacken
Brotbacken
Brotbacken

Jetzt ist es an der Zeit, die Matrix auf einem Steckbrett zu bauen. Ich habe eine Klemmleiste verwendet, um ein Bein von jedem LED-Paar miteinander zu verbinden, und einen kleinen Überbrückungsdraht, um die anderen Beine zu verbinden. Dies ist auf dem Nahaufnahmefoto detailliert und wird hier ausführlich erklärt:1. Richten Sie Ihr Steckbrett so aus, dass es dem größeren Bild entspricht2. Platzieren Sie LED 1 mit der Anode (+) zu Ihnen und der Kathode (-) von Ihnen weg.3. Setzen Sie LED 2 in gleicher Ausrichtung mit der Anode (+) in die Anschlussklemmenleiste der LED 1-Kathode.4. Verwenden Sie ein kleines Überbrückungskabel, um die Anode von LED 1 mit der Kathode von LED 2.5 zu verbinden. Wiederholen Sie dies, bis jedes LED-Paar der Platine hinzugefügt wurde. Ich verwende normalerweise die Strombusstreifen der Brotplatine als Busstreifen für die BS2-I / O-Pins. Da es nur 4 Busleisten gibt, verwende ich eine Klemmleiste für P4 (der fünfte I/O-Anschluss). Dies ist auf dem größeren Bild unten zu sehen.6. Verbinden Sie die Klemmleiste für die LED 1 Kathode mit der P0 Busleiste. Wiederholen Sie dies für jede ungerade nummerierte LED und ersetzen Sie das richtige P * für jedes Paar (siehe Schema).7. Verbinden Sie die Klemmleiste für die Kathode der LED 2 mit der Busleiste P1. Wiederholen Sie dies für jede ungerade nummerierte LED und ersetzen Sie das richtige P * für jedes Paar (siehe Schema).8. Verbinden Sie jede Busleiste mit dem entsprechenden I/O-Pin des BS2 (P0-P4).9. Überprüfen Sie alle Verbindungen, um sicherzustellen, dass sie mit dem Schaltplan übereinstimmen.10. Celebrate. HINWEIS: In der Nahaufnahme werden Sie sehen, dass ich Schritt 7 nicht befolgt habe, da sich die Verbindung zum zweiten I / O-Pin an der Anode der ungeraden LEDs befindet. Denken Sie daran, dass die Kathode der geradzahligen LEDs mit der Anode der ungeradzahligen LEDs verbunden ist, sodass die Verbindung in beiden Fällen gleich ist. Wenn Sie dieser Hinweis verwirrt, ignorieren Sie ihn einfach.

Schritt 4: Programmiergrundlagen

Damit Charlieplexing funktioniert, schalten Sie jeweils nur eine LED ein. Damit dies mit unserem BS2 funktioniert, benötigen wir zwei grundlegende Schritte: 1. Stellen Sie die Ausgabemodi für die Pins mit dem Befehl OUTS ein.2. Teilen Sie der BS2 mit, welche Pins als Ausgänge verwendet werden sollen, indem Sie den DIRS-Befehl verwenden. Dies funktioniert, da der BS2 mitgeteilt werden kann, welche Pins hoch und niedrig gefahren werden sollen, und wartet damit, bis Sie angeben, welche Pins Ausgänge sind. Mal sehen, ob die Dinge richtig angeschlossen sind von nur versuchen, LED 1 zu blinken. Wenn Sie sich den Schaltplan ansehen, können Sie sehen, dass P0 an die Kathode (-) von LED 1 angeschlossen ist und P1 an die Anode derselben LED angeschlossen ist. Dies bedeutet, dass wir P0 niedrig und P1 hoch treiben möchten. Dies kann so gemacht werden: "OUTS = %11110", was P4-P1 hoch und P0 niedrig treibt)Der BS2 speichert diese Informationen, reagiert aber nicht darauf, bis wir deklarieren, welche Pins Ausgänge sind. Dieser Schritt ist wichtig, da nur zwei Pins gleichzeitig ausgegeben werden sollten. Der Rest sollten Eingänge sein, die diese Pins in den Modus mit hoher Impedanz setzen, damit sie keinen Strom aufnehmen. Wir müssen P0 und P1 ansteuern, damit wir diese auf Ausgänge setzen und den Rest auf Eingänge wie folgt: "DIRS = %00011".(% gibt an, dass eine Binärzahl folgen soll. Die niedrigste Binärziffer ist immer rechts. 0 =INPUT, 1=OUTPUT)Lass uns das zu einem nützlichen Code zusammenfügen:' {$STAMP BS2e}' {$PBASIC 2.5}DO OUTS = %11110 'Drive P0 low und P1-P4 high DIRS = %00011 'Set P0- P1 als Ausgänge und P2-P4 als Eingänge PAUSE 250 'Pause, damit LED an bleibt DIRS = 0 'Alle Pins auf Eingang setzen. Dadurch wird die LED PAUSE 250 'Pause for LED to stay offLOOP. ausgeschaltet

Schritt 5: Der Entwicklungszyklus

Jetzt haben wir gesehen, dass ein Stift arbeitet, um sicherzustellen, dass alle funktionieren.20led_Zig-Zag.bseDieser beigefügte Code sollte jede der 20 LEDs in einem Zick-Zack-Muster aufleuchten. Sie werden feststellen, dass ich nach dem Aufleuchten jedes Pins "DIRS = 0" verwende, um alle Pins wieder in Eingänge zu verwandeln. Wenn Sie die OUTS ändern, ohne die Ausgangspins auszuschalten, kann es zu "Geisterbildern" kommen, bei denen eine LED, die nicht leuchten sollte, zwischen den Zyklen blinken kann. Wenn Sie die W1-Variable am Anfang dieses Codes auf "W1 = 1" ändern zwischen jedem LED-Blinken nur eine Pause von 1 Millisekunde. Dies führt zu einem Persistence of Vision (POV)-Effekt, der es so aussehen lässt, als ob alle LEDs leuchten. Dies hat den Effekt, dass die LEDs dunkler werden, ist aber die Essenz dafür, wie wir Zeichen auf dieser Matrix anzeigen werden LEDs in ein brauchbares Muster. Diese Datei ist mein erster Versuch. Sie werden sehen, dass am Ende der Datei die Zeichen in vier Zeilen mit 5-stelliger Binärzahl gespeichert sind. Jede Zeile wird eingelesen, geparst, und jedes Mal, wenn eine LED aufleuchten muss, wird eine Subroutine aufgerufen. Dieser Code funktioniert und durchläuft die Ziffern 1-0. Wenn Sie versuchen, es auszuführen, bemerken Sie, dass es von einer sehr langsamen Aktualisierungsrate geplagt wird, wodurch die Zeichen fast zu langsam blinken, um erkannt zu werden. Dieser Code ist aus vielen Gründen schlecht. Zunächst einmal nehmen fünf Binärstellen genauso viel Platz im EEPROM ein wie 8 Binärstellen, da alle Informationen in Gruppen von vier Bits gespeichert sind. Zweitens erfordert das SELECT CASE, das verwendet wird, um zu entscheiden, welcher Pin beleuchtet werden muss, 20 Fälle. Die BS2 ist auf 16 Fälle pro SELECT-Operation beschränkt. Das bedeutet, dass ich diese Einschränkung mit einer IF-THEN-ELSE-Anweisung umgehen musste. Es muss einen besseren Weg geben. Nach ein paar Stunden Kopfkratzen habe ich es entdeckt.

Schritt 6: Ein besserer Dolmetscher

Jede Zeile unserer Matrix besteht aus 4 LEDs, die jeweils ein- oder ausgeschaltet sein können. Die BS2 speichert Informationen in ihrem EEPROM in Gruppen von vier Bits. Diese Korrelation sollte uns vieles erleichtern. Darüber hinaus entsprechen vier Bits den Dezimalzahlen 0-15, also insgesamt 16 Möglichkeiten. Dies macht oder SELECT CASE viel einfacher. Hier ist die Zahl 7, wie sie im EEPROM gespeichert ist:'7 %1111, %1001, %0010, %0100, %0100, Jede Zeile hat ein Dezimaläquivalent zu 0-15, also lesen wir a Zeile aus dem Speicher und speist sie direkt in die Funktion SELECT CASE ein. Dies bedeutet, dass die von Menschen lesbare Binärmatrix, die verwendet wird, um jedes Zeichen (1 = LED an, 0 = LED aus) zu machen, der Schlüssel für den Interpreter ist. Um für jede der 5 Zeilen den gleichen SELECT CASE zu verwenden, habe ich einen anderen Select Case verwendet DIRS und OUTS als Variablen zu setzen. Zuerst lese ich jede der fünf Zeilen des Zeichens in die Variablen ROW1-ROW5 ein. Das Hauptprogramm ruft dann das Unterprogramm auf, um das Zeichen anzuzeigen. Dieses Unterprogramm nimmt die erste Zeile und weist die vier möglichen OUTS-Kombinationen der Variablen outp1-outp4 und die beiden möglichen DIRS-Kombinationen direc1 & direc2 zu. LEDs blinken, der Zeilenzähler wird inkrementiert und der gleiche Vorgang wird für jede der anderen vier Zeilen ausgeführt. Dies ist viel schneller als das erste Interpreterprogramm. Trotzdem ist das Flimmern noch spürbar. Schauen Sie sich das Video an, die Kamera macht das Flimmern viel schlimmer, aber Sie bekommen die Idee. Die Portierung dieses Konzepts auf einen viel schnelleren Chip, wie einen picMicro- oder einen AVR-Chip, würde eine Anzeige dieser Zeichen ohne merkliches Flimmern ermöglichen.

Schritt 7: Wohin von hier aus gehen?

Ich habe keine CNC-Fräse oder Ätzzubehör, um Leiterplatten herzustellen, daher werde ich dieses Projekt nicht verdrahten. Wenn Sie eine Mühle haben und an einer Zusammenarbeit interessiert sind, um von hier aus voranzukommen, senden Sie mir eine Nachricht. Ich würde gerne für Material und Versand bezahlen, noch glücklicher, um etwas von einem fertigen Produkt für dieses Projekt zu zeigen.

Andere Möglichkeiten: 1. Portieren Sie dies auf einen anderen Chip. Dieses Matrixdesign kann mit jedem Chip verwendet werden, der über 5 verfügbare E/A-Pins verfügt, die Tri-State-fähig sind (Pins, die hoch, niedrig oder eingangsseitig (hohe Impedanz) sein können). 2. Mit einem schnelleren Chip (vielleicht AVR oder picMicro) können Sie die Skalierung erhöhen. Mit einem 20-Pin-Chip können Sie 14 Pins verwenden, um ein 8x22-Display zu charlieplexen und die restlichen Pins verwenden, um serielle Befehle von einem Computer oder einem anderen Controller zu empfangen. Verwenden Sie drei weitere 20-Pin-Chips und Sie können ein scrollendes Display von 8x88 für insgesamt 11 Zeichen gleichzeitig haben (natürlich abhängig von der Breite jedes Zeichens). Viel Glück und viel Spass!

Empfohlen: