Borg16: Unterschied zwischen den Versionen

Aus LaborWiki
Wechseln zu: Navigation, Suche
Zeile 173: Zeile 173:
Über die Treibertransistoren gehen ca. U<sub>Treiber</sub> = 1,5-2V verloren. Die Spannung über den Vorwiderstand kann also mit <br />
Über die Treibertransistoren gehen ca. U<sub>Treiber</sub> = 1,5-2V verloren. Die Spannung über den Vorwiderstand kann also mit <br />
U<sub>R</sub> = U<sub>Betrieb</sub> - U<sub>Treiber</sub> - U<sub>LED</sub> berechnet werden.<br />
U<sub>R</sub> = U<sub>Betrieb</sub> - U<sub>Treiber</sub> - U<sub>LED</sub> berechnet werden.<br />
Beispiel: Wir gegen von einer Betriebsspannung von 5V aus. Rote LED hat einen Spannungsabfall von 2V, an den Treiberbausteinen fallen 2V ab.<br/>
Beispiel: Wir gehen von einer Betriebsspannung von 5V aus. Rote LED hat einen Spannungsabfall von 2V, an den Treiberbausteinen fallen 2V ab.<br/>
U<sub>R</sub> = 5V - 2V - 2V = 1V<br/>
U<sub>R</sub> = 5V - 2V - 2V = 1V<br/>
Der Vorwiderstand berechnet sich nun nach dem Ohm'schen Gesetz R=U/I. Für einen LED-Pulsstrom von 100mA:<br/>
Der Vorwiderstand berechnet sich nun nach dem Ohm'schen Gesetz R=U/I. Für einen LED-Pulsstrom von 100mA:<br/>

Version vom 9. Oktober 2014, 07:28 Uhr

         
Borg16

Release status: Stable [box doku]

Borg16Screen.jpg
Description Ein 256-LED Displaycontroller
Author(s)  Various, Tunix, (Suschman)
Last Version  2.0 ()
Platform  AVR (ATmega32)
Download  Software: Github
Hardware: SVN browse

„Stable“ befindet sich nicht in der Liste (experimental, beta, stable, obsolete, unknown) zulässiger Werte für das Attribut „Pr status“.




About

Der Borg16 ist eine auf Andres originalem 16x16 Borg basierende, professionell hergestellte Platine zur Ansteuerung von 256 Leds. Üblicherweise sind diese als eine Matrix von 16x16 Leds angeordnet, aber auch andere Formate sind möglich. Sie bietet eine serielle Schnitstelle und einen Anschluss für bis zu zwei Joysticks im 9-Pin Atari-Standard. Zusätzlich kann ein Canbus-Controller oder RMF12 Funkmodul zur Vernetzung bestückt werden.

Die LEDs werden durch die Borgware mit vier Helligkeitsstufen angesteuert. An Software existiert bereits eine breite Palette an Spielen, Demos und Testprogrammen. Zur Entwicklung neuer Software kann auch ohne Hardware der Simulator verwendet werden. Die Bauteile für den Borg16 gab es zusammen mit den Platinen auf dem Congress 2007 in Berlin als fertige Tüte.

Auf den Labortagen 2012 wurde ein Vortrag über den Borg16 gehalten.

Aufbau

Hardware

V1

Borg16Render.jpg Borg16Schematic.png
Borg16Bestueckung.png Borg16Board.jpg

V2

Borg16V2Schematic.png
Borg16 cover unten.jpg Borg16 cover1.jpg

Bauteile

Bestückungsliste:

Position     Bauteil/Wert

C1           330µF                
C2           100nF                
C3           100nF                
C4           100nF                (Wird nicht bestückt)
C5           100nF                
C6           18pF                 
C7           18pF                 
D1           1N4148               
D2           1N4004               
IC1          UDN2981AN            
IC2          UDN2981AN            
IC3          74HCT164N            
IC4          74HCT164N            
IC5          ATMEGA32             
LED1         LED 5mm Grün         
LED2         LED 5mm Rot          
R01-R16      *Siehe Text*         
R17          10K                  
R18          10k                  
R19          10k                  
R20          1k                   
R21          1k                   
R22          1k                   
R23          1k                   
R24          33k                  
T01-T16      IRLD024              
T17          BC547B               
T18          BC547B               
X1           16Mhz Quarz (HC49/U) 
RESET        Kurzhubtaster        
PWR          Hohlsteckerbuchse    
ISP          Stiftleiste. 2x5     
COL          Wannenbuchse 16Pol   
ROW          Wannenbuchse 16Pol   
JOY          Sub-D9 Male           
RS232        Sub-D9 Female         

IC6          MCP2510P             (Optional)
IC7          MCP2551P             (Optional)
CAN                               (Optional)
Borg16V2 Bestückungsliste:

Position    	Bauteil / Wert                
C1       	470µF          
C2       	100nF          
C3       	100nF          
C4              100nF                (Wird nicht bestückt)
C5       	100nF         
C6       	18pF         
C7       	18pF                     
D1       	1N4148        
D2       	1N4004           
IC1      	UDN2981AN       
IC2      	UDN2981AN         
IC3      	74ACT164N         
IC4      	74ACT164N       
IC5      	ATMEGA32                               
LED3     	LED 3mm Gelb         
R01-16	 	Passend für LEDs, siehe Text               
R18      	10k             
R19      	10k            
R20      	1k             
R21      	1k                                             
R26      	1k           
T17      	BC547B               
T18      	BC547B               
X1       	16Mhz Quarz (HC49/U) 
RESET    	Kurzhubtaster        
PWR      	Hohlsteckerbuchse    
ISP      	Stiftleiste. 2x5     
COL      	Wannenbuchse und Pfostenstecker 16Pol
ROW      	Wannenbuchse und Pfostenstecker 16Pol
16 adriges Flachbandkabel
JOY      	Sub-D9 Male           
RS232    	Sub-D9 Female               
T01-T16  	IRLD024

Can Option:
R17      	10K            
IC6      	MCP2510SO    
IC7      	MCP2551SN     
R24      	33k	    
LED1     	LED 5mm Grün    
LED2     	LED 5mm Rot   
R22      	1k           
R23      	1k	     
CAN                         

RFM12 Option:
IC8      	RFM12         
R25      	10k	     
ANT	 	ca 17,5cm Kabel

Die RFM12 und CAN Optionen schliessen sich leider gegenseitig aus,
es geht immer nur eines von beidem!

Bausatz

Diesen Bausatz kannst du im Labor kaufen.

Reicheltliste

Hier gibt es die Teileliste (inkl. Reichelt Warenkorb), CAN und RFM12 sind optional.

Bestückung

Kleine Ungereimtheiten noch korrigieren, die Bestückungsliste ist korrekt

Die Bestückung der Platine läuft, wenn du schonmal einen Bausatz zusammengelötet hast, nach dem bekannten Schema ab. Sollte dies dein erstes Bauprojekt sein, empfiehlt es sich das Tutorial von Microcontroller.net zu lesen.

Zunächst werden die Widerstände ab R17 der Reihe nach bestückt. R1 bis R16 sind die LED-Vorwiderstände. Diese sind von den von dir verwendeten LEDs abhängig und im Bausatz nicht enthalten. Danach kommen alle ICs an ihre Plätze, für den Microcontroller ist ein Sockel empfehlenswert. Nun folgen die Zeilentreiber in Form der MOSFETs T1 bis T16. Deren großer Doppelpin zeigt dabei in Richtung der Wannenstecker. Jetzt kommen der Reset-Taster, die Verpolschutzdiode 1N4001 (D2) und der Quarz an ihren Platz. Weiter geht es mit den Kondensatoren 18pF (C6, C7) und 100nF (C2, C3, C5). C4 wird nicht bestückt. Die Diode 1N4148 (D1) wird stehend festgelötet, dabei zeigt der schwarze Ring auf dem Bauteil in Richtung des Strichs auf dem Bestückungsdruck. Dann werden die Transistoren T17 und T18, die LEDs, die Wannenstecker, die ISP-Steckerleiste, die Hohlsteckerbuchse (PWR) und die Sub-D Buchsen verlötet. Die weibliche Buchse kommt dabei auf den RS232-Port.

LED Matrix

Die Zeilen haben jeweils eine gemeinsame Kathode, die Spalten jeweils eine gemeinsame Anode. Bei einer korrekt aufgebauten Matrix (Draufsicht von vorne) liegen die "Pin 1"-Leitungen der Spalten und Zeilen in der rechten oberen Ecke (von hinten drauf geschaut also links oben). Die Borgware kann einen spiegelverkehrten Aufbau mittels der Option Borg Hardware/Borg16 port setup/reverse cols in Software ausgleichen. Dies kostet allerdings Rechenzeit, was sich u.a. in langsameren Plasma-Animationen zeigt. Besser gar nicht erst falsch verdrahten.

Sofern ihr die Matrix direkt aus den Beinchen der LEDs aufbauen wollt, empfiehlt es sich, die Zeilen zuerst zu verlöten, da die Kathoden kürzer sind. Die Spalten mit den längeren Anoden lassen sich dann leichter über die Zeilen hinweg verlegen, ohne einen Kurzschluss zu verursachen.

Für den Bau des eigentlichen Displays eignen sich LEDs beliebiger Größe (zB. 3mm, 5mm, 10mm Durchmesser) und Farbe. Nur blaue und weiße LEDs haben eine zu hohe Dropout-Spannung, wer sie unbedingt verwenden will muss die Steuerung mit 6V betreiben. Wichtig ist es, nicht zu sparsam zu sein und LEDs mit 400mcd Helligkeit oder mehr zu verwenden, keine low-cost oder preiswerte Standardware. Diese verkraften die hohen Pulsströme nicht und leuchten sehr dunkel.

(Hier Beispielliste möglicher Led-Widerstand Kombinationen eintragen - WIP)

  • Osram 3mm Kingbright Amberfarben - 22 Ohm ??
  • Osram 5mm Kingbright Rot (Reichelt Bestellnummer "LED 5-4500 RT") - 12 Ohm
  • Osram 10mm Kingbright Rot (Reichelt Bestellnummer "LED 10-4500 RT") - 12 Ohm

LED Vorwiderstand berechnen

Über die Treibertransistoren gehen ca. UTreiber = 1,5-2V verloren. Die Spannung über den Vorwiderstand kann also mit
UR = UBetrieb - UTreiber - ULED berechnet werden.
Beispiel: Wir gehen von einer Betriebsspannung von 5V aus. Rote LED hat einen Spannungsabfall von 2V, an den Treiberbausteinen fallen 2V ab.
UR = 5V - 2V - 2V = 1V
Der Vorwiderstand berechnet sich nun nach dem Ohm'schen Gesetz R=U/I. Für einen LED-Pulsstrom von 100mA:
R = 1V / 0,1A = 10Ω
Da die LEDs mit 1/16 Einschaltdauer (6,25% Duty Cycle) bei ca. 134Hz angesteuert werden, kann man ihnen ruhig Überstrom geben. Das Datenblatt sagt genaueres dazu, wieviel erlaubt ist. Alle LEDs sollten mindestens 50mA vertragen können. Die Schaltung kann mit passendem Vorwiderstand Pulse von bis zu 200mA erzeugen. Dann muss das Netzteil aber auch 16*200mA = 3,2A liefern können.
Im Falle blauer oder weißer LEDs veträgt die Schaltung auch eine Betriebsspannung von 6V, damit die LEDs strotz der Spannungsabfälle über die Treiber noch ihre 3,5V bekommen. Noch höher sollte man die Versorgungsspannung aber nicht machen, weil sonst der Mikrokontrolller oder andere Teile leiden könnten.

Zum Berechnen des Widerstandes gibt es auch einen praktischen Vorwiderstandsrechner.

Aufbau

  • in Ikea Bilderrahmen RIBBA in der Größe 50x50x4.5 cm (Bauvorschlag)
  • auf Lochraster mit Milchtransparentem Plexiglas (Bauvorschlag)
  • Marcus hat eine detaillierte Bauanleitung für seinen RainbowBorg geschrieben

Es ist empfehlenswert, die Löcher für die LED-Beinchen um 45° versetzt zu bohren/lasern. Das hat den Vorteil, etwas mehr Platz zwischen Anoden- und Kathodendrähten zu bekommen.

Plexiglas gibt es beim stegplattenshop.com (kostenloser Zuschnitt!) in Castrop-Rauxel oder bei Ebay, Handelsbezeichnung "PLexiglas XT Opal Weis" in unterschiedlichen Graden an Lichtdurchlässigkeit. Etwas teurer ist der Plexiglas-Shop von Evonik, der allerdings auch ausgefallenere Materialien wie das schwarze 9H04-truLED-Plexiglas führt.

Günstige LEDs in verschiedenen Farben und Größen gibt es bei www.easyseller24.de. Es handelt sich dabei um B-Ware (siehe Marcus' Bauanleitung für Details), allerdings ist die Qualität der LEDs für einen Borg gemeinhin ausreichend.

Programmieren

Der Borg16 lässt sich ganz normal über die ISP-Schnittstelle mit STK200-Belegung programmieren, wie sie üblicherweise bei USBasp-Programmiergeräten zu finden ist. In der Draufsicht der Platine ist Pin 1 für den ISP rechts oben, sofern die Buchsen PW, JOY und RS232 in Richtung Süden zeigen.

Bei erstmaliger Inbetriebnahme eines ATMega muss der SLOW-Jumper (J3) des USBasp gesetzt sein. Dies hängt damit zusammen, dass ein ATMega im Auslieferungszustand zunächst mit einem internen Taktgeber von 1 MHz arbeitet und der USBasp die Daten sonst zu schnell über die ISP-Schnittstelle übertragen würde. Bei USBasp-Varianten ohne SLOW-Jumper hilft die zusätzliche Angabe der Option '-B 4' in avrdude. Sobald der externe Taktgeber über die Fuses (siehe unten) konfiguriert ist, sind der SLOW-Jumper oder die besagte Option nicht mehr notwendig.

Fuses

Ein fabrikneuer ATmega-Mikrocontroller bedarf vor der ersten Verwendung einer einmaligen Konfiguration, damit er mit der restlichen Hardware der Borg16-Platine harmoniert. Dies geschieht über sogenannte Fuses, als Bytes ausgelegte Werte, deren Bits bestimmte Eigenschaften des Controllers beeinflussen. Wir unterscheiden zwischen der lfuse, der hfuse und bei den ATMega*4-Controllern zusätzlich der efuse, die sich mit Hilfe eines Programmiergerätes ändern lassen. Die genaue Bedeutung der einzelnen Fuse-Werte lässt sich aus dem Datenblatt des jeweiligen Mikrocontrollers entnehmen. Konkret stellen wir bei den ATmegas folgendes ein:

  • Nutzung eines externes Quarzes mit 16 MHz
  • EEPROM-Inhalte bleiben beim Flashen erhalten
  • Bootloader nutzen (optional)
  • Bootloadergröße von 512 Words (1024 Bytes)
  • serielle Programmierung über ISP-Schnittstelle zulassen
  • Brown-out Detection bei ca. 4,3 Volt, damit der Controller bei Unterspannung den Betrieb einstellt, bevor er Quatsch macht

Die folgenden beiden Tabellen geben die richtigen Fuse-Werte für alle derzeit auf dem Borg16 unterstützten Mikrocontroller an. Welche Tabelle die richtige ist, hängt davon ab, ob zum Progammieren des Boards ausschließlich ein Programmiergerät oder die serielle Schnittstelle zum Einsatz kommen soll, wobei letztere einen seriellen Bootloader benötigt.

Ohne Bootloader

Controller lfuse hfuse efuse avrdude-Befehl für USBasp (Copy-Paste)
ATmega32 0x2f 0xc5 - avrdude -c usbasp -p m32 -U lfuse:w:0x2f:m -U hfuse:w:0xc5:m
ATmega644 0xe7 0xd7 0xfc avrdude -c usbasp -p m644 -U lfuse:w:0xe7:m -U hfuse:w:0xd7:m -U efuse:w:0xfc:m
ATmega644P 0xe7 0xd7 0xfc avrdude -c usbasp -p m644p -U lfuse:w:0xe7:m -U hfuse:w:0xd7:m -U efuse:w:0xfc:m
ATmega1284 0xe7 0xd7 0xfc avrdude -c usbasp -p m1284 -U lfuse:w:0xe7:m -U hfuse:w:0xd7:m -U efuse:w:0xfc:m
ATmega1284P 0xe7 0xd7 0xfc avrdude -c usbasp -p m1284p -U lfuse:w:0xe7:m -U hfuse:w:0xd7:m -U efuse:w:0xfc:m

Mit Bootloader

Controller lfuse hfuse efuse avrdude-Befehl für USBasp (Copy-Paste)
ATmega32 0x2f 0xc4 - avrdude -c usbasp -p m32 -U lfuse:w:0x2f:m -U hfuse:w:0xc4:m
ATmega644 0xe7 0xd6 0xfc avrdude -c usbasp -p m644 -U lfuse:w:0xe7:m -U hfuse:w:0xd6:m -U efuse:w:0xfc:m
ATmega644P 0xe7 0xd6 0xfc avrdude -c usbasp -p m644p -U lfuse:w:0xe7:m -U hfuse:w:0xd6:m -U efuse:w:0xfc:m
ATmega1284 0xe7 0xd6 0xfc avrdude -c usbasp -p m1284 -U lfuse:w:0xe7:m -U hfuse:w:0xd6:m -U efuse:w:0xfc:m
ATmega1284P 0xe7 0xd6 0xfc avrdude -c usbasp -p m1284p -U lfuse:w:0xe7:m -U hfuse:w:0xd6:m -U efuse:w:0xfc:m

Wer tiefer in die Materie einsteigen möchte: Der Fuse-Calculator von Engbedded kann die hexadezimalen Werte der Fuses in sprechende Namen übersetzen. Die dort verwendeten Bezeichnungen lassen sich dann bequem im Datenblatt des jeweiligen Controllers nachschlagen.

Vorgefertigte Firmware-Images

Wer sich nicht zutraut, die Borgware-2D selber zu kompilieren oder die neu gebaute Hardware einfach nur schnell mit einer fertigen Firmware testen möchte, kann sich das passende Image aus diesem ZIP-Archiv (Stand 20.01.2014) heraussuchen. Dort finden sich Images für den ATmega32, ATmega644 und den ATmega644P. Wir weisen an dieser Stelle darauf hin, dass diese Images nur mit Standardversionen des Borg16 funktionieren, die Matrix also wie oben beschrieben korrekt verdrahtet ist (Koordinate [0,0] rechts oben) und ein Quarz mit 16 MHz verwendet wird. Diese Images enthalten keinen CAN- oder RFM12-Support. Bevor es jemand versucht: Die Images sind nicht für den André-Borg und auch nicht für die Borg-Jacke geeignet.

Das Archiv enthält neben den normalen Borgware-2D-Images auch solche mit integriertem seriellen Bootloader, die wir manuell erstellt haben. Wird die Firmware ausschließlich mit einem Programmiergerät wie dem USBasp übertragen, genügen die normalen Images. Soll die Firmware hingegen zukünftig über die serielle Schnittstelle aktualisiert werden, muss mit einem Programmiergerät initial ein Image mit seriellem Bootloader auf den Chip programmiert werden. In den Fuses ist dieser gegebenenfalls einzuschalten. Danach ist das Programmiergerät nicht mehr nötig und es lassen sich normale Images ohne integrierten Bootloader (dieser kann sich ja nicht selbst überschreiben) über die serielle Schnittstelle übertragen. Dazu wartet der Controller nach einem Reset für zwei Sekunden auf eine serielle Verbindung (19200 Baud).

Siehe auch den Abschnitt über serielle Bootloader weiter unten.

Flashen der Firmware mit dem USBasp-Programmiergerät

Dieser Abschnitt geht davon aus, dass bereits ein Firmware-Image mit dem Namen image.hex im aktuellen Verzeichnis vorliegt. Ein solches Image lässt sich mit Hilfe eines eines USBasp-Programmiergerätes folgendermaßen flashen:

Controller avrdude-Befehl
ATmega32 avrdude -c usbasp -p m32 -U f:w:image.hex
ATmega644 avrdude -c usbasp -p m644 -U f:w:image.hex
ATmega644P avrdude -c usbasp -p m644p -U f:w:image.hex
ATmega1284 avrdude -c usbasp -p m1284 -U f:w:image.hex
ATmega1284P avrdude -c usbasp -p m1284p -U f:w:image.hex

Dies weißt avrdude an, als Programmiergerät "-c" einen USBasp zu verwenden, als Target "-p" einen ATmega32/644/644P/1284/1284P anzunehmen und eine Speicheroperation "-U" im Flash-ROM "f" durchzuführen, und zwar das Schreiben "w" des Inhalts von "image.hex".

Wird die Firmware direkt mit dem USBasp auf den ATmega übertragen, geht ein eventuell zuvor aufgespielter Bootloader verloren. Das liegt daran, dass das Flash-ROM beim Programmieren über die ISP-Schnittstelle komplett gelöscht wird und in einer frisch kompilierten Borgware 2D kein Bootloader enthalten ist. Dementsprechend ist der Bootloader-Support in den Fuses gegebenenfalls zu deaktivieren. Eine Ausnahme sind die weiter oben beschriebenen, von uns bereitgestellten Images. Dort gibt es Varianten, die wir manuell mit einem zusätzlichen Bootloader versehen haben, so das die Firmware auch nach Nutzung eines Programmiergerätes noch über die serielle Schnittstelle aktualisiert werden kann.

Serieller Bootloader

Der hintere Teil des Flash-ROMs kann per Fuse für einen Bootloader reserviert werden, der nach einem Reset direkt gestartet wird. Er kann dann bei Bedarf die eigentliche Firmware von anderen Quellen wie der seriellen Schnittstelle nachladen und im vorderen Teil des Flash-ROMs abspeichern, ansonsten springt er direkt in die eigentliche Firmware.

In der AVR109 Application Note beschreibt Atmel ein Protokoll zum Programmieren von AVR-Controllern über die serielle Schnittstelle. Dieses Protokoll wird von vielen AVR-zentrischen Werkzeugen (u.a. von avrdude) unterstützt. Unter Zuhilfenahme eines entsprechenden Bootloaders verhält sich der Borg16 dann selbst wie ein serielles Programmiergerät. Mit einem normalen Verlängerungskabel (1-zu-1) oder USB-RS232-Wandler lässt sich das Board dann neu programmieren.

In früher angebotenen Bausätzen haben wir den Foodloader auf dem Mikrocontroller vorinstalliert. Leider ist besagter serieller Bootloader nicht mehr mit neueren Versionen des GNU-C-Compilers kompatibel (Compiler-Fehler bzw. Build sprengt die Größe von 512 Words). Als Alternative empfehlen wir den AVRProg Boot 0.85 von Martin Thomas et al. Die Quellen gibt es hier. Zu dessen Konfiguration sei auf die mitgelieferte Dokumentation und auf den Borg16-Vortrag verwiesen. Durch Verwendung dieses Bootloaders steht der Firmware 1 Kilobyte weniger auf dem Flash-ROM zur Verfügung.

Ein leerer Controller (bzw. ein Controller ohne Bootloader) muss zunächst mittels eines Programmiergeräts über die ISP-Schnittstelle mit einem Bootloader-Image programmiert werden. Ebenfalls sind die Fuses entsprechend anzupassen.

Das Überspielen der Firmware über die serielle Schnittstelle mit 19200 Baud am Beispiel von avrdude:

Controller avrdude-Befehl
ATmega32 avrdude -c avr109 -b 19200 -P serialdev -p m32 -U f:w:image.hex
ATmega644 avrdude -c avr109 -b 19200 -P serialdev -p m644 -U f:w:image.hex
ATmega644P avrdude -c avr109 -b 19200 -P serialdev -p m644p -U f:w:image.hex
ATmega1284 avrdude -c avr109 -b 19200 -P serialdev -p m1284 -U f:w:image.hex
ATmega1284P avrdude -c avr109 -b 19200 -P serialdev -p m1284p -U f:w:image.hex

serialdev ist auf den Namen der verwendeten seriellen Schnittstelle zu setzen (z.B. /dev/ttyS0, /dev/ttyUSB0 oder COM1). Damit diese Befehle funktionieren, muss der Mikrocontroller den Bootloader ausführen. In den von uns bereitgestellten Images tut er das nach einem Reset für 2 Sekunden. Dies ist natürlich eine etwas knappe Zeitspanne, um einen avrdude-Befehl abzusetzen. Bequemer ist, mit der UART-Shell einen Reset-Befehl zu senden (siehe dort). Im Gegensatz zur Verwendung eines Programmiergerätes wird das Flash-ROM beim seriellen Update nicht komplett gelöscht und der Bootloader bleibt erhalten (warum sollte er sich auch selber löschen). Daher werden bei dieser Übertragungsart auch keine speziellen Images mit einem eigenen Bootloader benötigt.

Noch ein Hinweis: Fuses lassen sich nicht über den seriellen Bootloader einstellen, dafür ist nach wie vor ein Programmiergerät nötig.

Shell auf der seriellen Schnittstelle

Der Borg16 stellt über die serielle Schnittstelle eine kleine Shell bereit, sofern im Menuconfig die Option Borg-Hardware/Borg16-port-setup/UART-Support angewählt ist (in den Borgware-2D-Versionen ab September 2014). Die Schnittstellenparameter sind standardmäßig folgendermaßen eingestellt:

  • 19200 Baud
  • 8 Datenbits
  • keine Parität
  • 1 Stoppbit
  • keine Flusskontrolle

Sofern sich (unter Linux) der USB-Konverter unter /dev/ttyUSB0 befindet, kann der Nutzer die Shell folgendermaßen erreichen:

screen /dev/ttyUSB0 19200

Windows-Benutzer können PuTTY verwenden. Dort unter der Kategorie Session den Connection Type Serial anwählen. Anschließend in der Kategorie Serial die oben angegebenen Parameter eintragen.

In beiden Fällen öffnet sich eine Minimal-Shell, die so minimal ist, dass sie keine Cursor-Tasten und auch keine History unterstützt. Backspace ist möglich, Ctrl-L überträgt die aktuelle Eingabe erneut und Ctrl-U löscht die derzeitige Eingabe. Dies ist nützlich, falls die UART beim Einstöpseln des Kabels irgendwelche Zeichen erkennt und man sicher gehen möchte, dass nur die Zeichen den Borg erreichen, die man explizit eingetippt hat.

Folgende Befehle nimmt die Borgware-2D über die serielle Schnittstelle entgegen:

Befehl Bedeutung
erase Löscht das EEPROM und damit den Reset-Counter sowie alle Tetris-Hi-Scores.
help Gibt die akzeptierten Befehle aus.
mode n Wechselt in den Modus (gleich Animation) mit der Nummer n (von 0-255). Wird n weggelassen, zeigt die Konsole die aktuelle Modusnummer an.
msg text Gibt text als einen von rechts nach links scrollenden Text aus.
next Springt zur nächsten Animation.
prev Springt zur vorherigen Animation.
reset Startet den Borg neu; nützlich, um eine neue Firmware zu flashen.
scroll text Wie msg, nur das die Texte in der BorgTextAnim-Sprache geschrieben sein müssen.
test n Gibt das Testmuster mit der Nummer n aus. 0≤n≤3 schaltet alle Pixel in der Helligkeitsstufe n ein. n=4 zeichnet ein horizontales Streifenmuster, n=5 ein vertikales.

Ist der Borg16 mit einem seriellen Bootloader ausgestattet, läßt sich mit der UART-Shell bequem von der Eingabeaufforderung aus ein Reset auslösen und unmittelbar danach der serielle Flashvorgang starten (hier am Beispiel von Linux mit der seriellen Schnittstelle an /dev/ttyUSB0):

stty -F /dev/ttyUSB0 19200

echo -e "\x15reset" >/dev/USB0 && avrdude -c avr109 -P /dev/ttyUSB0 -b 19200 -p atmega32 -U f:w:image.hex

Das "\x15" im echo-Befehl (Option -e nicht vergessen) ist gleichbedeutend mit einem Ctrl-U, so das der Zeichenpuffer garantiert leer ist, bevor der "reset"-Befehl übertragen wird.

Modusnummern

Hier sind die Modusnummern und ihre Bedeutung für den mode-Befehl aufgelistet:

Nr. Modus
1 Lauftext
2 Spriale
3 diagonale Linien
4 Snake-Demo
5 Schachbrett
6 Kaminfeuer
7 CAN-Zeitanzeige (nur im Bochumer Labor mit CAN-Bus sinnvoll)
8 Matrix
9 Zufallsrauschen
10 Fallende Spielfiguren
11 Game Of Life
12 Fliegende Punkte
13 Breakout-Demo
14 Animationen von Martin Herweg
15 rotierendes Moiré-Muster
16 CAN-Zeitanzeige, 2. Slot (nur im Bochumer Labor mit CAN-Bus sinnvoll)
17 Langton's Ameise
18 Labor-Logo
19 hypnotisierende Kröte
20 Labortage MMXI "Operating Out Of Spec"-Logo
21 Fairydust-Rakete
22 Plasma
23 pulsierende Ringe
24 schwarzes Loch
25 schimmernde Rechtecke
26 DNA
31 Test: Helligkeitsstufe 1
32 Test: Helligkeitsstufe 2
33 Test: Helligkeitsstufe 3
35 Test: Farbpalette
36 wandernde Zeile
37 wandernde Spalte
38 wandernde Spalte (bidirektional)
39 wandernde Zeile (birektional)
253 Sprung zu Modus 1
254 Spielmenü (ACHTUNG: Solange das Menü läuft ist kein Moduswechsel möglich.)
255 Abschalten der Anzeige (ACHTUNG: Dieser Modus kann nur über die Kommandos mode, next und prev verlassen werden.)

Üblicherweise ist nicht jeder Modus in der Firmware konfiguriert. Wird beim mode-Befehl eine nicht vergebene bzw. nicht konfigurierte Modusnummer angegeben, springt die Borgware einfach zum nächsten verfügbaren Modus.

Während der Anzeige des Menüs bzw. während eines Spiels ist kein Moduswechsel möglich.

Joysticks

Fix zusammengebasteltes Selbstbau-Gamepad

Verwendung finden Joysticks nach dem 9-Pin Atari Standard der 80er, z.B vom C64, Amiga, Atari ST, Atari VCS 2600. Gut und extrem robust sind die "Competition Pro" Joysticks. Gibt es noch recht häufig auf dem Flohmarkt. Wurden aber auch noch mal neu produziert von Speedlink als Competition Pro Retro, zu bekommen unter anderem bei Vesalia (aber anscheinend derzeit nicht). Eine Alternative ist bspw. ein Gamepad.

Die Spielecontroller sind digital und ziehen den jeweiligen Pin auf GND (siehe hier für Belegung), insofern geht das auch sehr schnell auf einer kleinen Lochrasterplatine.

Ferner ist die Nutzung einer Funkfernbedienung als Joystick möglich (in Arbeit).

Software

Den Quellcode für die Software gibt es bei Github. Für genauere Informationen siehe den Borgware-2D-Artikel.

Module

Spiele

Tetris

Das altbekannte Tetris, mit Highscoreliste.

Bastet Tetris

Diese Version von Tetris, angelehnt an Bastet, gibt dir immer den gerade am schlechtesten passenden Stein. Eine Herrausforderung :).

First Person Tetris

Hier dreht sich nicht der Stein, sondern das Spielfeld. Also lass dich nicht verwirren...

Snake

Du spielst das bekannte Spiel "Snake" auf dem Borg.

LaborInvaders

Spaceinvaders Clone

Breakout

Ein Breakout Clone, ähnlich Arkanoid.

Animationen

AutoSnake

Hier spielt die Snake mit sich selber :).

AutoBreakout

Breakout als Animation.

GameOfLife

Das Spielfeld wird per Zufall befüllt, danach beginnt es sich nach den Regeln von Conways Spiel des Lebens zu verändern. Wenn eine Stagnation eintritt, wird ein "Glider" eingeworfen, die Simulation endet bei vollständiger Auflösung aller Zellen.

Langtons Ameise

Eine Simulation von [Langtons Ameise], einer Turingmaschine die komplexe Muster erzeugt.

Ein scrollendes Laborlogo :)

Hypnotoad

ALL GLORY TO THE HYPNOTOAD!

"Matrix Effekt"

Genieße die Matrix...

"Lagerfeuer"

Es wärmt in kalten Nächten :).

Zufallsgenerator

Nach etwas Getüftel tut es der Zufallsgenerator recht gut, dies kann man hier betrachten.

Laufschrift

Ein frei programmierbarer Scrolltext, nutzt BorgTextAnim.

Counter

Der Counter zählt die Neustarts der Platine hoch, ein zurücksetzen erfolgt beim überschreiben des eeprom, aber nicht bei einem normalen Upload der Firmware.

Testprogramme

  • Wechselndes Schachbrettmuster
  • Wandernde Linien mit Helligkeitswechsel
  • Spirale

MCUF-Schnittstelle

Peter hat ein MCUF-Modul geschrieben (zu finden im svn). Damit steht die Fülle der Blinkenlight-Apps für den Borg offen. Mit Hilfe von BlinkenOutput kann man über das serielle Interface MCUF-Pakete an den Borg schicken.

ich hab das ganze mit meinem 2m-Aufblas-Borg unter Mac OS X zum Laufen gebracht.

meine Kommandos dafür:

./BlinkenOutput  -d /dev/tty.usbserial -s 115200,N,8,1
./BlinkenSend  -i ../examples/static.bml -l 0 

wichtig: die MCUF-Pakete müssen als Graustufenwerte 8bit (0-255) festgelegt werden (header im .bml-file: <blm width="16" height="16" bits="8" channels="1"> )

Downloads

Bestellen

Es sind noch einige Borg16V2 Platinen vorhanden. Stückpreis liegt bei 14 Euro.
Bei interesse melde dich einfach auf der Mailingliste, oder komm vorbei :-).

Mailingliste

Links im Netz

Hier sind ein paar Links zu Webseiten die sich mit dem Borg16 beschäftigen, hier und da gibt es spannende Software für das Display zu entdecken...