Borg16: Unterschied zwischen den Versionen

Aus LaborWiki
Wechseln zu: Navigation, Suche
K (tunix is my hero!)
Keine Bearbeitungszusammenfassung
 
(93 dazwischenliegende Versionen von 2 Benutzern werden nicht angezeigt)
Zeile 1: Zeile 1:
{{ProjektInfoBox
{{ProjektInfoBox
|name       = Borg16
|name=Borg16
|status     = Stable
|status=stable
|image       = Borg16Screen.jpg
|image=Borg16Screen.jpg
|description = Ein 256-LED Displaycontroller
|description=Ein 256-LED Displaycontroller
|author     = Various, Tunix,
|username=Suschman
|username    = Suschman
|author=Various, Tunix,
|version     = 2.0
|version=2.0
|update      =
|platform=AVR (ATmega32)
|platform   = AVR (ATmega32)
|download=Software: [https://github.com/das-labor/borgware-2d Github] <br>Hardware: [https://www.das-labor.org/svn/hardware/borg16 SVN] [https://www.das-labor.org/trac/browser/hardware/borg16 browse]
|license    =
|tags=Licht & Sound,
|download   = Software: [https://github.com/das-labor/borgware-2d Github] <br>Hardware: [https://www.das-labor.org/svn/hardware/borg16 SVN] [https://www.das-labor.org/trac/browser/hardware/borg16 browse]
}}
}}
=About=
=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 [[CAN|Canbus-Controller]] oder RMF12 [[Datenfunk_mit_dem_AVR|Funkmodul]] zur Vernetzung bestückt werden.
Der Borg16 basiert auf Andrés originalem 16×16-Borg und umfasst eine 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 verfügt über eine serielle Schnittelle und einen Anschluss für einen Joystick im 9-Pin Atari-Standard. Zusätzlich bietet die Platine Platz für einen [[CAN|CAN-Bus-Controller]] oder ein [[Datenfunk_mit_dem_AVR|RMF12-Funkmodul]] zur Vernetzung.


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 [[Blinken_Borgs#Simulatoren|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.
Die [[Borgware-2D|Borgware-2D]] kann die LEDs mit vier Helligkeitsstufen ansteuern. Es existiert bereits eine breite Palette an Spielen, Demos und Testprogrammen. Der [[Blinken_Borgs#Simulatoren|Simulator]] ermöglicht zudem die Entwicklung neuer Software auch ohne die Hardware. Die Leerplatine samt Bauteile für den Borg16 gibt es im Labor als [[Bausätze|Bausatz]] zu kaufen.


Auf den [http://www.das-labor.org/labortage Labortagen 2012] wurde ein Vortrag über den Borg16 gehalten.
[[Benutzer:Tunix|Tunix]] hat auf den Labortagen 2012 einen Vortrag über den Borg16 gehalten. Es gibt davon eine Videoaufzeichnung, allerdings sind einige Punkte mittlerweile veraltet, daher ist es sinnvoller, die aktualisierten Folien weiter unten zu Rate zu ziehen.
<youtube>ANGcMmAVEIw</youtube>
* [[Medium:Borg16_getting_started.pdf|Folien des Vortrages]] (fehlerbereinigt und aktualisiert auf den Stand von November 2014)
 
* [[Medium:Borg16_getting_started.pdf|Folien des Vortrages]]
* Video: [https://www.youtube.com/watch?v=ANGcMmAVEIw Borg16 - Getting started]
* [[Medium:Borg16_firmware.zip|vorgefertigte Firmware-Images]] mit und ohne seriellen Bootloadern (bitte die [[#Vorgefertigte_Firmware-Images|Hinweise]] beachten)
* [[Medium:Borg16_firmware.zip|vorgefertigte Firmware-Images]] mit und ohne seriellen Bootloadern (bitte die [[#Vorgefertigte_Firmware-Images|Hinweise]] beachten)
* Video: [https://www.youtube.com/watch?v=ANGcMmAVEIw Borg16 - Getting started] — Informationen mittlerweile veraltet, teilweise böse Fehler auf den Folien


=Aufbau=
=Aufbau=
==Hardware==
== Borg16v1 ==
=== V1 ===
Die ursprüngliche Borg16-Platine von 2006 mit optionaler CAN-Unterstützung und ausschließlich bedrahteten Bauteilen.
[[Bild:Borg16Render.jpg|320px]] [[Bild:Borg16Schematic.png|320px]]<br>
 
[[Bild:Borg16Bestueckung.png|320px]] [[Bild:Borg16Board.jpg|320px]]
'''Mittlerweile vergriffen! Aber es sind noch genug [[#Borg16v2|Borg16v2-Platinen]] vorhanden'''.
 
[[Bild:Borg16Render.jpg|128px]] [[Bild:Borg16Schematic.png|128px]] [[Bild:Borg16Bestueckung.png|128px]] [[Bild:Borg16Board.jpg|128px]]


=== V2 ===
=== Bestückungsliste===
[[Bild:Borg16V2Schematic.png|320px]]<br>
{| class="wikitable"
[[Bild:Borg16 cover unten.jpg|320px]] [[Bild:Borg16 cover1.jpg|320px]]
|-
! Position  !! Bauteil                            !! Wert/Typ                !! Bemerkung
|-
|C1        || Elektrolyt-Kondensator            || 330µF                  ||
|-
|C2        || Keramik-Kondensator                || 100nF                  ||
|-
|C3        || Keramik-Kondensator                || 100nF                  ||
|-
|C4        || Keramik-Kondensator                || 100nF                  || wird '''nicht''' bestückt
|-
|C5        || Keramik-Kondensator                || 100nF                  ||
|-
|C6        || Keramik-Kondensator                || 18pF                    ||
|-
|C7        || Keramik-Kondensator                || 18pF                    ||
|-
|CAN        || Stift- oder Sockelleiste          || 1×3                    ||
|-
|COL        || Wannenbuchse 16pol.               || 2×8                    ||
|-
|D1        || Kleinsignal-Diode                  || 1N4148                  || Glasgehäuse, Anschlüsse vorsichtig biegen
|-
|D2        || Gleichrichter-Diode                || 1N4004                  || alternativ 1N4007
|-
|IC1        || Treiber-IC                        || UDN2981A                || alternativ TD62783AP
|-
|IC2        || Treiber-IC                        || UDN2981A                || alternativ TD62783AP
|-
|IC3        || Schieberegister-IC                || 74HCT164N              ||
|-
|IC4        || Schieberegister-IC                || 74HCT164N              ||
|-
|IC5        || IC-Sockel                          || 40 polig: 2×20          || optional, aber sehr empfehlenswert
|-
|IC5        || Mikrocontroller                    || ATmega32(A)            || alternativ ATmega324/644/1284(A/P/PA)
|-
|IC6        || CAN-Controller-IC                  || MCP2515P                || alternativ MCP2510P
|-
|IC7        || CAN-Transceiver-IC                || MCP2551P                ||
|-
|ISP        || Stiftleiste                        || 2×5                    ||
|-
|JOY        || Sub-D9 Male                        ||                        ||
|-
|LED3      || LED                                || 3mm, gelb, diffus      ||
|-
|PWR        || Hohlsteckerbuchse                  || außen 6,3mm/innen 2,0mm || mit Lötfahnen
|-
|R01-R16    || Vorwiderstände                    ||                        || siehe Text
|-
|R17        || Kohleschichtwiderstand            || 10kΩ                    ||
|-
|R18        || Kohleschichtwiderstand            || 10kΩ                    ||
|-
|R19        || Kohleschichtwiderstand            || 10kΩ                    ||
|-
|R20        || Kohleschichtwiderstand            || 1kΩ                    ||
|-
|R21        || Kohleschichtwiderstand            || 1kΩ                    ||
|-
|R22        || Kohleschichtwiderstand            || 1kΩ                    ||
|-
|R23        || Kohleschichtwiderstand            || 1kΩ                    ||
|-
|R24        || Kohleschichtwiderstand            || 33kΩ                    ||
|-
|RESET      || Kurzhubtaster                      ||                        ||
|-
|ROW        || Wannenbuchse 16pol.               || 2×8                    ||
|-
|RS232      || Sub-D9 Female                      ||                        ||
|-
|T01-T16    || MOSFET                            || IRLD024                ||
|-
|T17        || NPN-Transistor                    || BC547B                  ||
|-
|T18        || NPN-Transistor                    || BC547B                  ||
|-
|X1        || Schwingquarz                      || HC49/U 16 MHz          ||
|}


===Bauteile===
== Borg16v2 ==
<pre>
Die aktuelle Borg16-Platine von 2009, die optional auch ein RFM12-Funkmodul aufnehmen kann. Aus Platzgründen bedürfen die (optionalen) CAN-Bauteile nun der SMD-Bauform. Die restlichen Komponenten sind wie gehabt bedrahtet. Noch in großer Stückzahl erhältlich.<br />
Bestückungsliste:


Position    Bauteil/Wert
'''Diesen Bausatz (Leerplatine mit oder ohne Bauteilen) gibt es auch im Labor zu [[Bausätze|kaufen]].'''


C1          330µF               
Wer die Bauteile selbst besorgen möchte, für den gibt es hier die entsprechenden [[Borg16 V2 Teile | Reichelt-Artikelnummern bzw. Warenkörbe]].
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)
[[Bild:Borg16V2Schematic.png|128px]] [[Bild:Borg16 cover unten.jpg|128px]] [[Bild:Borg16 cover1.jpg|128px]] [[Bild:Borg16v2 Platine.jpg|84px]] [[Bild:Borg16v2-2014-2.jpg|128px]] [[Bild:Borg16-Bestückung.png|x96px]]
IC7          MCP2551P             (Optional)
 
CAN                               (Optional)
=== Bestückungsliste===
</pre>
{| class="wikitable"
|-
! Position  !! Bauteil                            !! Wert/Typ                !! Bemerkung
|-
|C1        || Elektrolyt-Kondensator            || 470µF                  ||
|-
|C2        || Keramik-Kondensator                || 100nF                  ||
|-
|C3        || Keramik-Kondensator                || 100nF                  ||
|-
|C4        || Keramik-Kondensator                || 100nF                  || wird '''nicht''' bestückt
|-
|C5        || Keramik-Kondensator                || 100nF                  ||
|-
|C6        || Keramik-Kondensator                || 22pF                    ||
|-
|C7        || Keramik-Kondensator                || 22pF                    ||
|-
|D1        || Kleinsignal-Diode                  || 1N4148                  || Glasgehäuse, Anschlüsse vorsichtig biegen
|-
|D2        || Gleichrichter-Diode                || 1N4004                  || alternativ 1N4007
|-
|IC1        || Treiber-IC                        || UDN2981A                || alternativ TD62783AP
|-
|IC2        || Treiber-IC                        || UDN2981A                || alternativ TD62783AP
|-
|IC3        || Schieberegister-IC                || 74HCT164N              ||
|-
|IC4        || Schieberegister-IC                || 74HCT164N              ||
|-
|IC5        || IC-Sockel                          || 40 polig: 2×20         || optional, aber sehr empfehlenswert
|-
|IC5        || Mikrocontroller                    || ATmega32(A)             || alternativ ATmega324/644/1284(A/P/PA)
|-
|R01-R16    || Vorwiderstände                    ||                        || siehe Text
|-
|R18        || Kohleschichtwiderstand            || 10kΩ                    ||
|-
|R19        || Kohleschichtwiderstand            || 10kΩ                    ||
|-
|R20        || Kohleschichtwiderstand            || 1kΩ                    ||
|-
|R21        || Kohleschichtwiderstand            || 1kΩ                    ||
|-
|R26        || Kohleschichtwiderstand             || 1kΩ                    ||
|-
|T01-T16    || MOSFET                            || IRLD024                ||
|-
|T17        || NPN-Transistor                    || BC547B                  ||
|-
|T18        || NPN-Transistor                    || BC547B                  ||
|-
|X1        || Schwingquarz                      || HC49/U 16 MHz          ||
|-
|LED3      || LED                                || 3mm, gelb, diffus      ||
|-
|RESET      || Kurzhubtaster                      ||                        ||
|-
|ROW        || Wannenbuchse 16pol.                || 2×8                    ||
|-
|COL        || Wannenbuchse 16pol.                || 2×8                    ||
|-
|RS232      || Sub-D9 Female                      ||                        ||
|-
|ISP        || Stiftleiste                        || 2×5                    ||
|-
|JOY        || Sub-D9 Male                        ||                        ||
|-
|PWR        || Hohlsteckerbuchse                  || außen 6,3mm/innen 2,0mm || mit Lötfahnen
|}
 
===Optionale Borg16v2 CAN-Bestückungsliste:===
{| class="wikitable"
|-
! Position  !! Bauteil                      !! Wert              !! Bemerkung
|-
|CAN        || Stift- oder Sockelleiste      || 1×3              ||
|-
|IC6        || CAN-Controller-IC            || MCP 2515-I/SO    || SMD, Rückseite der Platine
|-
|IC7        || CAN-Transceiver-IC            || MCP 2551-I/SN    || SMD, Rückseite der Platine
|-
|LED1      || LED                          || 5mm, grün, diffus ||
|-
|LED2      || LED                          || 5mm, rot, diffus  ||
|-
|R17        || Kohleschichtwiderstand        || 10kΩ              ||
|-
|R22        || Kohleschichtwiderstand        || 1kΩ              ||
|-
|R23        || Kohleschichtwiderstand        || 1kΩ              ||
|-
|R24        || SMD-Widerstand                || 33kΩ              || SMD, Rückseite der Platine
|}


<pre>
===Optionale Borg16v2 RFM12-Bestückungsliste===
Borg16V2 Bestückungsliste:
{| class="wikitable"
|-
! Position  !! Bauteil                      !! Wert    !! Bemerkung
|-
|ANT        || ca 17,5cm Kabel              ||        ||
|-
|IC8        || Funk-IC                      || RFM12  ||
|-
|R25        || Kohleschichtwiderstand        || 10kΩ    ||               
|}


Position    Bauteil / Wert               
Die RFM12 und CAN Optionen schliessen sich leider gegenseitig aus, es geht immer nur eines von beidem!
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:
==Bestückung==
R17      10K           
Die Bestückung der Platine läuft, wenn du schon einmal einen Bausatz zusammengelötet hast, nach dem bekannten Schema ab. Sollte dies dein erstes Bauprojekt sein, empfiehlt es sich [http://www.mikrocontroller.net/articles/L%C3%B6ten_%28praktisch%29 das Tutorial von Microcontroller.net] zu lesen. Um die gröbsten Anfängerfehler zu vermeiden, sind hier nochmal die grundlegendsten Vorgehensweisen beim Löten zusammengefasst.
IC6      MCP2510SO   
IC7      MCP2551SN   
R24      33k    
LED1    LED 5mm Grün   
LED2    LED 5mm Rot 
R22      1k         
R23      1k    
CAN                       


RFM12 Option:
===Löthinweise für Anfänger===
IC8      RFM12       
Für Lötanfänger ist es sinnvoll, blei<u>haltiges</u> Lot zu verwenden, da es bei der Verarbeitung etwas tolerantere Temperatur- und Zeitfenster hat. Zudem lassen sich bei bleihaltigem Lot gelungene Lötverbindungen leicht an ihrem Glanz erkennen, während matte Lötverbindungen kalte Lötstellen anzeigen. Blei<u>freies</u> Lot erzeugt dagegen immer matte Lötstellen, was die optische Unterscheidung zwischen guten oder schlechten Lötverbindungen erschwert.
R25      10k    
ANT ca 17,5cm Kabel


Die RFM12 und CAN Optionen schliessen sich leider gegenseitig aus,
Dünner Lötdraht mit 0,5mm Dicke lässt sich einfacher dosieren als Drähte mit 0,75mm oder gar mehr. Steht eine temperaturgereregelte Lötstation zur Verfügung, so ist diese auf etwa 340°C einzustellen.
es geht immer nur eines von beidem!


</pre>
Die Bauteile werden von oben (also von der Seite mit dem Bestückungsdruck) durch die Platine gesteckt. Bei Bauteilen mit zwei Anschlüssen ist es für einen besseren Halt hilfreich, die Anschlussdrähte leicht nach außen zu biegen. Anschließend die Platine mit der nach unten zeigenden Oberseite auf den Tisch legen, so dass das Bauteil nicht herausfallen kann, und gegebenenfalls überstehende Drahtenden mit einem Seitenschneider auf etwa 1-2mm kürzen.


=== Bausatz ===
Nun mit der sauberen Lötspitze sowohl Lötauge als auch Anschlussdraht (bzw. Pin) gleichmäßig  für etwa ein bis zwei Sekunden erhitzen und dann den Lötdraht zuführen, und zwar dem Pin oder dem Lötauge, nicht direkt der Lötspitze, da sich die Flussmittelseele sonst zu schnell verflüchtigt. Sobald das Lötauge und der Pin vollständig vom Lot umflossen sind, Lötkolben und Draht von der Lötstelle nehmen und das Lot ein paar Sekunden aushärten lassen (keine Erschütterungen verursachen).
'''Diesen Bausatz kannst du im Labor [[Bausätze|kaufen]].'''


===Reicheltliste===
Niemals versuchen, auf der Lötspitze verbliebenes Lot auf einen Pin oder ein Lötauge abzustreifen, da dort bereits alles an Flussmittel verdampft ist, was ursprünglich im Lötdraht enthalten war. Solches Lot oxidiert sofort, wodurch es breiartig, matt und schlecht leitend wird, ein Garant für kalte Lötstellen. So etwas gehört auf den Abstreifschwamm, nicht auf die Platine. Gleiches gilt, wenn sich beim Löten plötzlich größere Kugeln oder Klumpen an der Lötspitze bilden, die nicht auf die Lötstelle abfließen wollen. Ursachen für solche Kugeln sind oft ein zu lange andauernder Lötvorgang oder ein zu heiß eingestellter Lötkolben, in manchen Fällen auch minderwertiger Lötdraht mit zu wenig Flussmittel.


Hier gibt es die [[Borg16 V2 Teile | Teileliste]] (inkl. Reichelt Warenkorb), CAN und RFM12 sind optional.
ICs werden in der Regel mit leicht nach außen angewinkelten Pins ausgeliefert, so dass sie sich nicht ohne weiteres in die Platine einsetzen lassen. Die Pins keinesfalls einzeln von Hand zurecht biegen, da die Gefahr besteht, sie dabei umzuknicken, abzubrechen und das Bauteil unbrauchbar zu machen. Stattdessen die Pin-Reihen in ihrer Gesamtheit von jeder Seite vorsichtig an der Tischkante nach innen drücken. Dies gegebenenfalls so oft wiederholen, bis der IC in die Platine passt. Wem das zu unhandlich ist: Im Fachhandel gibt es im einstelligen Eurobereich auch spezielle Pin-Ausrichter zu kaufen.


===Bestückung===
Um ICs, IC-Sockel oder Wannenstecker (beziehungsweise generell Bauteile mit vielen Pins) möglichst plan aufliegend auf der Platine zu befestigen, zunächst nur <u>einen einzigen Pin</u> in einer äußeren Ecke des Bauteils verlöten. Anschließend die Platine in die Hand nehmen und das Bauteil flächig gegen die Platine drücken und gedrückt halten. Von der anderen Seite mit dem Lötkolben die zuvor hergestellte Lötverbindung noch einmal verflüssigen. Typischerweise ergibt sich dann ein kurzes Einrastgeräusch und das Bauteil ist ausgerichtet. Es ist wichtig, dem Lot ein paar Sekunden zum Aushärten zu geben, bevor man den Druck vom Bauteil nimmt. Nun die restlichen Pins ganz normal verlöten, ausgehend vom schräg gegenüber liegenden Pin.
'''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 [http://www.mikrocontroller.net/articles/L%C3%B6ten_%28praktisch%29 das Tutorial von Microcontroller.net] zu lesen.
===Empfohlene Reihenfolge===
Generell fängt man mit den flachsten Bauteilen an und arbeitet sich nach und nach zu den nächstgrößeren Bauteilen vor. Folgende Reihenfolge hat sich bewährt:
* die Widerstände R01 bis R16, R18 bis R21 und R26
* sofern vorhanden, der Sockel für den Mikrocontroller (IC5)
* Treiber-ICs (IC1 und IC2) und Schieberegister-ICs (IC3 und IC4)
* falls kein Sockel zum Einsatz kommt, der Mikrocontoller (IC5)
* '''Achtung:''' die ICs entsprechend der im Bestückungsdruck markierten Einkerbung orientieren, einen falsch eingelöteten IC wieder zu entfernen ist aufwändig und belastet sowohl die Bauteile als auch die Platine
* die Zeilentreiber in Form der IRLD024-MOSFETs (T1 bis T16); deren großer Doppelpin zeigt dabei in Richtung der Wannenstecker
* Gleichrichterdiode 1N4007 (D2) für den Verpolungsschutz, der Ring muss in Richtung des Strichs auf dem Bestückungsdruck zeigen
* Schwingquarz mit 16 MHz (X1)
* die Kondensatoren 22pF (C6, C7) und 100nF (C2, C3, C5); C4 wird '''nicht''' bestückt
* gelbe 3mm LED (LED3), den abgeflachten Kragen entsprechend dem Bestückungsdruck orientieren
* die Diode 1N4148 (D1) wird stehend festgelötet, dabei zeigt der schwarze Ring auf dem Bauteil in Richtung des Strichs auf dem Bestückungsdruck; Vorsicht beim Biegen der Beinchen, da das Glasgehäuse dieser Diode schnell bricht
* die beiden BC547B-Transistoren (T17 und T18)
* Reset-Taster (RESET)
* die ISP-Steckerleiste (ISP)
* die beiden Wannenstecker an ROW und COL; Pin 1 dieser Stecker ist mit einem aufgeprägten Dreieck markiert, bitte entsprechend dem Bestückungsdruck orientieren
* Hohlsteckerbuchse (PWR)
* die Sub-D Anschlüsse (JOY und RS232), der Stecker (männlich) an JOY, die Buchse (weiblich) an RS232
* der Elektrolyt-Kondensator mit 470µF (C1); bitte auf die Polung achten und den am Kondensatorgehäuse mit einem Minus markierten Pin '''nicht''' in den Pluspol der Platine stecken (im Bestückungsdruck mit einem '''+''' markiert)


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 ==


=== LED Matrix ===
Die Zeilen bilden 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 <code>Borg Hardware/Borg16 port setup/reverse cols</code> in Software ausgleichen. Dies kostet allerdings Rechenzeit, was sich u.a. in langsameren Plasma-Animationen zeigt. Besser gar nicht erst falsch verdrahten.


Die Reihen haben jeweils eine gemeinsame Anode, die Spalten jeweils eine gemeinsame Kathode. 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.
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.
Zeile 167: Zeile 284:
* Osram 10mm Kingbright Rot (Reichelt Bestellnummer "LED 10-4500 RT") - 12 Ohm
* Osram 10mm Kingbright Rot (Reichelt Bestellnummer "LED 10-4500 RT") - 12 Ohm


==== LED Vorwiderstand berechnen ====
=== LED Vorwiderstand berechnen ===


Über die Treibertransistoren gehen ca. U_treiber = 1.5-2V verloren. Die Spannung über den Vorwiderstand kann also mit <br />
Über die Treibertransistoren gehen ca. 1,5 bis 2V (U<sub>Treiber</sub>) verloren. Die Spannung über den Vorwiderstand kann also mit <br />
U_r = U_betrieb - U_treiber - U_led berechnet werden.<br />
U<sub>R</sub> = U<sub>Betrieb</sub> - U<sub>Treiber</sub> - U<sub>LED</sub> berechnet werden.<br />
Beispiel: rote LED hat 2V Abfall, Treiber Abfall mit 2V angenommen, 5V Betriebsspannung: <br />
Beispiel: Wir gehen von einer Betriebsspannung von 5V aus. Rote LEDs haben einen Spannungsabfall von 2V, an den Treiberbausteinen fallen ebenfalls 2V ab.<br/>
U_r = 5V-2V-2V = 1V <br />
U<sub>R</sub> = 5V - 2V - 2V = 1V<br/>
Der Vorwiderstand wir nun nach R=U/I berechnet. 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/>
R = 1V/0.1A = 10 Ohm <br />
R = 1V / 0,1A = 10Ω<br/>
Da die LEDs mit 1/16 Einschaltdauer bei ca. 100Hz angesteuert werden, kann man ihnen ruhig Überstrom geben.
Da die LEDs mit 1/16 Einschaltdauer (6,25% Duty Cycle) bei ca. 120Hz angesteuert werden, kann man ihnen ruhig Überstrom geben.
Das Datenblatt sagt dazu genaueres, wieviel erlaubt ist. Alle LEDs sollten mindestens 50mA vertragen können.
Das Datenblatt sagt genaueres dazu, wieviel erlaubt ist. Alle LEDs sollten mindestens 50mA vertragen können.
Die Schaltung kann Pulse bis zu 200mA erzeugen mit passendem Vorwiderstand. Dann muss das Netzteil aber auch 16*200mA = 3.2A liefern können. <br />
Die Schaltung kann mit passendem Vorwiderstand Pulse von bis zu 120mA erzeugen. Dann muss das Netzteil aber auch knapp 2A (16×120mA) liefern können.<br/>
Für blaue oder weiße LEDs kann die Schaltung mit 6V Betreibsspannung versorgt werden, 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.
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 [http://www.solderware.org/pages/led_resistor_calculator.de.html Vorwiderstandsrechner].
Zum Berechnen des Widerstandes gibt es auch einen praktischen [http://www.solderware.org/pages/led_resistor_calculator.de.html Vorwiderstandsrechner].


==== Aufbau ====
=== Gehäuseideen ===
* in Ikea Bilderrahmen [http://www.ikea.com/de/de/catalog/products/20078050 RIBBA] in der Größe 50x50x4.5 cm (Bauvorschlag)
* Ikea Bilderrahmen [http://www.ikea.com/de/de/catalog/products/20078050 RIBBA] in der Größe 50x50x4.5 cm
* auf Lochraster mit Milchtransparentem Plexiglas (Bauvorschlag)
* LEDs auf Lochrasterplatinen verlöten und milchtransparentes Plexiglas mit Distanzhülsen befestigen (der [https://www.das-labor.org/w/images/1/1c/Borg-andre2.jpg André-Borg] ist so gebaut)
* Marcus hat eine [[Benutzer:Marcus/RainbowBorg|detaillierte Bauanleitung]] für seinen RainbowBorg geschrieben
* Marcus hat eine [[Benutzer:Marcus/RainbowBorg|detaillierte Bauanleitung]] für seinen RainbowBorg geschrieben
 
* Tunix hat eine [https://wiki.ctdo.de/projekte/borg16?&#aufbauanleitung detaillierte Bauanleitung] für den CTDO-Borg 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 [http://www.stegplattenshop.com 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 [http://www.plexiglas-shop.com/DE/de/ Plexiglas-Shop von Evonik], der allerdings auch ausgefallenere Materialien wie das schwarze [http://www.plexiglas-shop.com/DE/de/fuer-hinterleuchtung-fgs06f3a5ma/plexiglas-led-truled-black-white-9h04-sc-33cfo9caunz~p.html 9H04-truLED-Plexiglas] führt.
Plexiglas gibt es beim [http://www.stegplattenshop.com 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 [http://www.plexiglas-shop.com/DE/de/ Plexiglas-Shop von Evonik], der allerdings auch ausgefallenere Materialien wie das schwarze [http://www.plexiglas-shop.com/DE/de/fuer-hinterleuchtung-fgs06f3a5ma/plexiglas-led-truled-black-white-9h04-sc-33cfo9caunz~p.html 9H04-truLED-Plexiglas] führt.
Zeile 193: Zeile 309:
Günstige LEDs in verschiedenen Farben und Größen gibt es bei [http://www.easyseller24.de/index.php?cPath=119 www.easyseller24.de]. Es handelt sich dabei um B-Ware (siehe [[Benutzer:Marcus/RainbowBorg|Marcus' Bauanleitung]] für Details), allerdings ist die Qualität der LEDs für einen Borg gemeinhin ausreichend.
Günstige LEDs in verschiedenen Farben und Größen gibt es bei [http://www.easyseller24.de/index.php?cPath=119 www.easyseller24.de]. Es handelt sich dabei um B-Ware (siehe [[Benutzer:Marcus/RainbowBorg|Marcus' Bauanleitung]] für Details), allerdings ist die Qualität der LEDs für einen Borg gemeinhin ausreichend.


==Programmieren==
Wer für seine Gehäusekonstruktion eine Trägerplatte für die LEDs benötigt und diese nicht selber fräsen möchte, kann sich im Baumarkt nach gelochten Faserplatten (MDF oder HDF) umschauen. Selbst wenn der Lochdurchmesser für die jeweiligen LEDs nicht ausreicht, lassen sich solche Platten relativ einfach nachbohren, da das Anzeichnen entfällt und sich der Bohrer wegen der bestehenden Löcher einfacher ansetzen lässt. Auch kann sich ein Blick bei Händlern von Akustikplatten lohnen, die u.a. die Fertigung von gelochten Platten nach Maß anbieten, was sie sich dann aber auch entsprechend bezahlen lassen.
Der Borg16 lässt sich ganz normal über die ISP-Schnittstelle mit STK200-Belegung programmieren (das ist zum Beispiel die übliche 10-Pin-Belegung von USBasp-Programmiergeräten). 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.
 
=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 Anschlüsse PW, JOY und RS232 zu einem selbst 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|Fuses]] (siehe unten) konfiguriert ist, sind der SLOW-Jumper oder die besagte Option nicht mehr notwendig.
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|Fuses]] (siehe unten) konfiguriert ist, sind der SLOW-Jumper oder die besagte Option nicht mehr notwendig.


===Fuses===
==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'' und der ''hfuse'', die sich mittels 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:
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
* Nutzung eines externen Schwingquarzes mit 16 MHz
* EEPROM-Inhalte bleiben beim Flashen erhalten
* EEPROM-Inhalte bleiben beim Flashen erhalten
* Bootloader nutzen (optional)
* Bootloader nutzen (optional)
* Bootloadergröße von 512 Words (1024 Bytes)
* Bootloadergröße von 512 Words (1024 Bytes)
* serielle Programmierung über ISP zulassen
* 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 folgende Tabelle gibt die richtigen Fuse-Werte für alle derzeit auf dem Borg16 unterstützten Mikrocontroller an (jeweils mit und ohne Bootloader-Option):
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 [[#Serieller_Bootloader|seriellen Bootloader]] benötigt.


'''Ohne Bootloader''' (Firmware wird ausschließlich über ein Programmiergerät übertragen)
{| class="wikitable"
{| class="wikitable"
|-
|-
! Controller !! Bootloader !! lfuse !! hfuse !! avrdude-Befehl für USBasp
! Controller !! lfuse !! hfuse !! efuse !! avrdude-Befehl für USBasp (Copy-Paste)
|-
|-
| ATmega32 || ja || 0xef || 0xc4 || <code>avrdude -c usbasp -p m32 -U lfuse:w:0xef:m -U hfuse:w:0xc4:m</code>
| ATmega32 || 0x2f || 0xc5 || - || <code>avrdude -c usbasp -p m32 -U lfuse:w:0x2f:m -U hfuse:w:0xc5:m</code>
|-
|-
| ATmega32 || nein || 0xef || 0xc5 || <code>avrdude -c usbasp -p m32 -U lfuse:w:0xef:m -U hfuse:w:0xc4:m</code>
| ATmega644 || 0xe7 || 0xd7 || 0xfc || <code>avrdude -c usbasp -p m644 -U lfuse:w:0xe7:m -U hfuse:w:0xd7:m -U efuse:w:0xfc:m</code>
|-
|-
| ATmega644 || ja || 0xe7 || 0xd6 || <code>avrdude -c usbasp -p m644 -U lfuse:w:0xe7:m -U hfuse:w:0xd6:m</code>
| ATmega644P || 0xe7 || 0xd7 || 0xfc || <code>avrdude -c usbasp -p m644p -U lfuse:w:0xe7:m -U hfuse:w:0xd7:m -U efuse:w:0xfc:m</code>
|-
|-
| ATmega644 || nein || 0xe7 || 0xd7 || <code>avrdude -c usbasp -p m644 -U lfuse:w:0xe7:m -U hfuse:w:0xd7:m</code>
| ATmega1284 || 0xe7 || 0xd7 || 0xfc || <code>avrdude -c usbasp -p m1284 -U lfuse:w:0xe7:m -U hfuse:w:0xd7:m -U efuse:w:0xfc:m</code>
|-
| ATmega1284P || 0xe7 || 0xd7 || 0xfc || <code>avrdude -c usbasp -p m1284p -U lfuse:w:0xe7:m -U hfuse:w:0xd7:m -U efuse:w:0xfc:m</code>
|}
 
'''Mit Bootloader''' (Firmware wird auch über die serielle Schnittstelle übertragen)
{| class="wikitable"
|-
|-
| ATmega644P || ja || 0xe7 || 0xd6 || <code>avrdude -c usbasp -p m644p -U lfuse:w:0xe7:m -U hfuse:w:0xd6:m</code>
! Controller !! lfuse !! hfuse !! efuse !! avrdude-Befehl für USBasp (Copy-Paste)
|-
|-
| ATmega644P || nein || 0xe7 || 0xd7 || <code>avrdude -c usbasp -p m644p -U lfuse:w:0xe7:m -U hfuse:w:0xd7:m</code>
| ATmega32 || 0x2f || 0xc4 || - || <code>avrdude -c usbasp -p m32 -U lfuse:w:0x2f:m -U hfuse:w:0xc4:m</code>
|-
|-
| ATmega1284 || ja || 0xe7 || 0xd6 || <code>avrdude -c usbasp -p m1284 -U lfuse:w:0xe7:m -U hfuse:w:0xd6:m</code>
| ATmega644 || 0xe7 || 0xd6 || 0xfc || <code>avrdude -c usbasp -p m644 -U lfuse:w:0xe7:m -U hfuse:w:0xd6:m -U efuse:w:0xfc:m</code>
|-
|-
| ATmega1284 || nein || 0xe7 || 0xd7 || <code>avrdude -c usbasp -p m1284 -U lfuse:w:0xe7:m -U hfuse:w:0xd7:m</code>
| ATmega644P || 0xe7 || 0xd6 || 0xfc || <code>avrdude -c usbasp -p m644p -U lfuse:w:0xe7:m -U hfuse:w:0xd6:m -U efuse:w:0xfc:m</code>
|-
|-
| ATmega1284P || ja || 0xe7 || 0xd6 || <code>avrdude -c usbasp -p m1284p -U lfuse:w:0xe7:m -U hfuse:w:0xd6:m</code>
| ATmega1284 || 0xe7 || 0xd6 || 0xfc || <code>avrdude -c usbasp -p m1284 -U lfuse:w:0xe7:m -U hfuse:w:0xd6:m -U efuse:w:0xfc:m</code>
|-
|-
| ATmega1284P || nein || 0xe7 || 0xd7 || <code>avrdude -c usbasp -p m1284p -U lfuse:w:0xe7:m -U hfuse:w:0xd7:m</code>
| ATmega1284P || 0xe7 || 0xd6 || 0xfc || <code>avrdude -c usbasp -p m1284p -U lfuse:w:0xe7:m -U hfuse:w:0xd6:m -U efuse:w:0xfc:m</code>
|}
|}


Der [http://www.engbedded.com/fusecalc 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.
Wer tiefer in die Materie einsteigen möchte: Der [http://www.engbedded.com/fusecalc 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===
==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 [[Medium:Borg16_firmware.zip|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 [[Blinken_Borgs#Borg16|André-Borg]] und auch nicht für die Borg-Jacke geeignet.
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 [[Medium:Borg16_firmware.zip|ZIP-Archiv]] (Stand 12.10.2014) heraussuchen. Dort finden sich Images für den ATmega32, ATmega644(P) und den ATmega1284(P). 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 [[Blinken_Borgs#Borg16|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. Welches Image das richtige ist, hängt davon ab, wie die Firmware künftig auf den Mikrocontroller übertragen werden soll. Soll dies ausschließlich mit einem Programmiergerät wie dem USBasp geschehen, genügen die normalen Images. Soll die Firmware hingegen ü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|Fuses]] ist dieser gegebenenfalls einzuschalten. Danach ist das Programmiergerät 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).  
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|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 [[#Serieller_Bootloader|serielle Bootloader]] weiter unten.
Siehe auch den Abschnitt über [[#Serieller_Bootloader|serielle Bootloader]] weiter unten.


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


Zeile 260: Zeile 386:
|}
|}


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


Wird die Borgware 2D direkt über die ISP-Schnittstelle auf den ATmega übertragen, geht ein eventuell zuvor aufgespielter Bootloader verloren. Dementsprechend ist der Bootloader-Support gegebenenfalls in den Fuses zu deaktivieren. Eine Ausnahme sind die weiter oben beschriebenen, von uns bereitgestellten [[#Vorgefertigte_Firmware-Images|Images]]. Diese haben wir manuell mit einem zusätzlichen Bootloader versehen, da die Borgware 2D von sich aus keinen bereitstellt.
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 [[#Vorgefertigte_Firmware-Images|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===
==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.
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 [http://www.atmel.com/Images/doc1644.pdf AVR109 Application Note] beschreibt Atmel ein Protokoll zum Programmieren von AVR-Controllern über die serielle Schnittstelle. Dieses Protokoll wird von vielen AVR-zentrierten 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 der [http://www.atmel.com/Images/doc1644.pdf 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 [http://www.lochraster.org/foodloader/ 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 [http://siwawi.bauing.uni-kl.de/avr_projects/index.html#avrprog_boot AVRProg Boot 0.85] von Martin Thomas et al. Die Quellen gibt es [http://www.siwawi.arubi.uni-kl.de/avr_projects/avrprog_boot_v0_85_20081203.zip 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.
In früher angebotenen Bausätzen haben wir den [http://www.lochraster.org/foodloader/ 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 [http://siwawi.bauing.uni-kl.de/avr_projects/index.html#avrprog_boot AVRProg Boot 0.85] von Martin Thomas et al. Die Quellen gibt es [http://www.siwawi.arubi.uni-kl.de/avr_projects/avrprog_boot_v0_85_20081203.zip 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.
Zeile 289: Zeile 415:
|}
|}


<code>serialdev</code> ist auf den Namen der verwendeten seriellen Schnittstelle zu setzen (z.B. <code>/dev/ttyS0</code>, <code>/dev/ttyUSB0</code> oder <code>COM1</code>).
<code>serialdev</code> ist auf den Namen der verwendeten seriellen Schnittstelle zu setzen (z.B. <code>/dev/ttyS0</code>, <code>/dev/ttyUSB0</code> oder <code>COM1</code>). Damit diese Befehle funktionieren, muss der Mikrocontroller den Bootloader ausführen. In den von uns [[#Vorgefertigte_Firmware-Images|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 [[#Shell_auf_der_seriellen_Schnittstelle|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.


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


=Joysticks=
=Shell auf der seriellen Schnittstelle=
[[Datei:Gamepad_Borg16.JPG|thumb|right|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 [http://www.google.de/search?q=Competition+Pro+Retro Competition Pro Retro], zu bekommen unter anderem bei [http://www.vesalia.de/d_compproretro.htm Vesalia] (aber anscheinend derzeit nicht). Eine Alternative ist bspw. ein [http://www.vesalia.de/d_boomerangb101p.htm Gamepad].
Der Borg16 stellt über die serielle Schnittstelle eine kleine Shell bereit, sofern im Menuconfig die Option <code>Borg-Hardware/Borg16-port-setup/UART-Support</code> 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:


Die Spielecontroller sind digital und ziehen den jeweiligen Pin auf GND (siehe [http://www.epanorama.net/documents/joystick/ataristick.html hier] für Belegung), insofern geht das auch sehr schnell auf einer kleinen Lochrasterplatine.
<code>screen /dev/ttyUSB0 19200</code>


Ferner ist die Nutzung einer [[Funkfernbedienung]] als Joystick möglich (in Arbeit).
Windows-Benutzer können [http://www.chiark.greenend.org.uk/~sgtatham/putty/download.html PuTTY] verwenden. Dort unter der Kategorie '''''Session''''' den ''Connection Type'' <code>Serial</code> anwählen. Anschließend in der Kategorie '''''Serial''''' die oben angegebenen Parameter eintragen.


=Software=
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.
Den Quellcode für die Software gibt es bei [https://github.com/das-labor/borgware-2d Github]. Für genauere Informationen siehe den [[Borgware-2D]]-Artikel.


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


===Spiele===
{| class="wikitable"
|-
! Befehl      !! Bedeutung
|-
| <code>erase</code>          || Löscht das EEPROM und damit den Reset-Counter sowie alle Tetris-Hi-Scores.
|-
| <code>help</code>            || Gibt die akzeptierten Befehle aus.
|-
| <code>mode</code> ''n''      || Wechselt in den Modus (gleich Animation) mit der Nummer ''n'' (von 0-255). Wird ''n'' weggelassen, zeigt die Konsole die aktuelle Modusnummer an.
|-
| <code>msg</code> ''text''    || Gibt ''text'' als einen von rechts nach links scrollenden Text aus.
|-
| <code>next</code>            || Springt zur nächsten Animation.
|-
| <code>prev</code>            || Springt zur vorherigen Animation.
|-
| <code>reset</code>          || Startet den Borg neu; nützlich, um eine neue Firmware zu flashen.
|-
| <code>scroll</code> ''text'' || Wie ''msg'', nur das die Texte in der [https://www.das-labor.org/wiki/BorgTextAnim BorgTextAnim]-Sprache geschrieben sein müssen.
|-
| <code>test</code> ''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.
|}


====Tetris====
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 <code>/dev/ttyUSB0</code>):
Das altbekannte Tetris, mit Highscoreliste.


=====Bastet Tetris=====
<code>stty -F /dev/ttyUSB0 19200</code>
Diese Version von Tetris, angelehnt an [http://fph.altervista.org/prog/bastet.html Bastet], gibt dir immer den gerade am schlechtesten passenden Stein. Eine Herrausforderung :).


=====First Person Tetris=====
<code>echo -e "\x15reset" >/dev/USB0 && avrdude -c avr109 -P /dev/ttyUSB0 -b 19200 -p atmega32 -U f:w:image.hex</code>
Hier dreht sich nicht der Stein, sondern das Spielfeld. Also lass dich nicht verwirren...


====Snake====
Das "<code>\x15</code>" im <code>echo</code>-Befehl (Option <code>-e</code> nicht vergessen) ist gleichbedeutend mit einem Ctrl-U, so das der Zeichenpuffer garantiert leer ist, bevor der "reset"-Befehl übertragen wird.
Du spielst das bekannte Spiel "Snake" auf dem Borg.


====LaborInvaders====
==Modusnummern==
Spaceinvaders Clone


====Breakout====
Hier sind die Modusnummern und ihre Bedeutung für den <code>mode</code>-Befehl aufgelistet:
Ein [http://de.wikipedia.org/wiki/Breakout_(Computerspiel) Breakout] Clone, ähnlich Arkanoid.


===Animationen===
{| class="wikitable"
! 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 <code>mode</code>, <code>next</code> und <code>prev</code> verlassen werden.)
|}
 
Üblicherweise ist nicht jeder Modus in der Firmware konfiguriert. Wird beim <code>mode</code>-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.


====AutoSnake====
=Troubleshooting=
Hier spielt die Snake mit sich selber :).
==<code>avrdude</code> meldet zusammen mit dem USBasp immer "target doesn't answer"==
* Bei fabrikneuen ATmegas sicherstellen, dass beim erstmaligen Setzen der [[#Fuses|Fuses]] entweder der Slow-Jumper des USBasps eingeschaltet ist oder die avrdude-Befehlszeile zusätzlich die Option "-B 4" enthält.
* Sicherstellen, dass die Pfostenbuchse des Programmierkabels richtig herum in den ISP-Steckplatz der Platine gesteckt ist.
* Wird die Borg16-Platine ausreichend mit Spannung versorgt? ''Entweder'' ein passendes Netzteil an der Borg16-Platine anschließen ''oder'' Stromversorgung des USBasps per Jumper zuschalten (aber nicht beides gleichzeitig). Bei einem Netzteil sicher stellen, dass auch wirklich 5 Volt herauskommen.
* Sitzt der Mikrocontroller ordentlich in seinem Sockel? Der ATmega muss plan auf dem Sockel aufliegen, darf nicht wackeln und sich auch nicht an einer Seite abheben. Alle Pins müssen gerade im Sockel stecken (keine Knicke).
* Mikrocontroller falsch herum eingesetzt? Das kann im Eifer des Gefechts schneller passieren, als einem lieb ist. Falls die Kerbe des Chips nicht entsprechend dem Bestückungsdruck orientiert ist, Platine umgehend vom Strom trennen und den ATmega richtig herum einsetzen.
* Tritt der Fehler erst seit dem letzten Setzen der [[#Fuses|Fuses]] auf, wurde möglicherweise ein falscher Taktgebertyp eingestellt. Am einfachsten ist es, den Mikrocontroller in eine Entwicklungsplatine einzusetzen, die einen passenden Taktgeber bereit hält und dort die [[#Fuses|Fuses]] zu korrigieren. Falls der erwartete Typ des Taktgebers "External Clocksource" ist, lässt sich auch mit Hilfe eines zweiten Mikrocontrollers (z.B. Arduino) ein Taktsignal an einem Port-Pin erzeugen, der wiederum mit dem XTAL1-Pin des Borg16-ATmegas verbunden werden muss. Ist der Borg16-ATmega daraufhin ansprechbar, auch hier sofort die [[#Fuses|Fuses]] korrigieren.
* Mikrocontroller defekt? Falls der Controller auch in anderen Platinen versagt, ist Ersatz gefragt.
* Mikrocontroller funktioniert woanders aber nicht in der Borg16-Platine? Sofern nicht der Taktgeber die Ursache ist, nach kalten Lötstellen suchen.


====AutoBreakout====
==Programmierung mit dem USBasp ist sehr langsam==
Breakout als Animation.
* Slow-Jumper gesetzt? Dieser ist nach dem Einstellen der (korrekten!) Fuses nicht mehr notwendig.
* Taucht eine Option "-B 4" (oder auch eine andere Zahl als 4) im <code>avrdude</code>-Kommando auf? Auch diese Option ist nach dem setzen der Fuses unnötig.


====GameOfLife====
==Programmierung über die serielle Schnittstelle schlägt fehl==
Das Spielfeld wird per Zufall befüllt, danach beginnt es sich nach den Regeln von [http://de.wikipedia.org/wiki/Conways_Spiel_des_Lebens 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.
* Ist der Bootloader in den [[#Fuses|Fuses]] eingeschaltet? Stimmt die in den Fuses eingestellte Größe des Bootloaders (512 ''Words'' im Fall von <code>avrprogboot</code>)?
* Ist auf dem Mikrocontroller überhaupt ein serieller Bootloader aufgespielt? Bei unseren [[#Vorgefertigte Firmware-Images|vorgefertigten Firmware-Images]] gibt es auch Varianten, die einen seriellen Bootloader enthalten.
* Ist die Baudrate korrekt? Die in unseren Firmware-Images enthaltenen Bootloader sind auf 19200 Baud eingestellt (Voraussetzung ist ein Quarz mit 16 MHz).
* Ist eine andere Baudrate als 19200 im Bootloader eingestellt oder wird ein Quarz mit einer anderen Frequenz als 16 MHz verwendet? Dann sicherstellen, dass die Baudrate auch zur Taktfrequenz des Mikrocontrollers passt. ATmegas können Baudraten nur über ganzzahlige Teiler ihrer Taktfrequenz annähern. Weicht diese Näherung um mehr als 0,2% von der tatsächlich geforderten Baudrate ab, wird die serielle Übertragung unzuverlässig. Welche Baudraten zu welchen Taktfrequenzen passen, lässt sich [http://www.kreatives-chaos.com/artikel/baudraten-tabelle-fuer-avrs hier] entnehmen.
* Wird ein USB-zu-seriell-Konverter benutzt? Die Spannungen an der seriellen Schnittstelle des Borg16 bewegen sich am Rand der Norm, womit nicht jeder USB-Konverter zurecht kommt. Hier hilft es nur, ein anderes Modell zu nehmen. USB-Konverter mit dem Chip PL2303 von Prolific (unter anderem in einem USB-Konverter von ''Goobay'' verbaut, bei [http://www.reichelt.de/USB-Konverter/USB2-SERIELL/3/index.html?ACTION=3&GROUPID=6105&ARTICLE=58641&OFFSET=16& Reichelt] erhältlich) funktionieren mit dem Borg16. Auch echte serielle Schnittstellen (vornehmlich an älteren PCs zu finden) funktionieren tadellos.


====Langtons Ameise====
==Firmware startet unerwartet neu, bleibt stehen oder stürzt mit wildem Geflacker ab==
Eine Simulation von [[http://de.wikipedia.org/wiki/Ameise_(Turingmaschine) Langtons Ameise]], einer Turingmaschine die komplexe Muster erzeugt.
* Handelt es sich um selbst kompilierte/modifizierte Firmware? Wenn ja, einmal mit unserer [[#Vorgefertigte Firmware-Images|vorgefertigten Firmware]] prüfen, ob wirklich ein Hardware-Problem vorliegt.
* Ist das Netzteil richtig dimensioniert? Je nach verbauten LEDs muss das Netzteil Ströme von bis zu 2A (bei 120mA pro LED) liefern können, ohne das die Versorgungsspannung absinkt. Fällt die Spannung unter 4,3V (bzw. 4,0V bei ATmega32), hält die Brownout-Detection den Prozessor an und startet ihn neu, sobald die Spannung wieder hoch genug ist. Da dabei alle LEDs abgeschaltet werden, ist die Unterspannungssituation meist umgehend vorbei, was den Eindruck eines spontanen Neustarts erweckt.
* Ist die Firmware mit CAN- und/oder RFM12-Support kompiliert worden, obwohl keine dieser Optionen auf der jeweiligen Borg16-Platine verbaut ist? Dies führt meist direkt beim Start zu komischen Abstürzen mit wirrem Geflacker. In dem Fall entweder die Firmware ohne CAN- bzw. RFM12-Support kompilieren oder die [[#Vorgefertigte Firmware-Images|vorgefertigte Borg16-Firmware]] nehmen.
* Etwas im Menuconfig-Tool geändert und vor dem ersten Kompilieren <code>make clean</code> vergessen? Das Buildsystem erkennt nicht immer, welche Dateien neu kompiliert werden müssen, wenn Einstellungen im Menuconfig-Tool geändert werden. Ein <code>make clean</code> stellt sicher, dass alles noch mal neu kompiliert wird.
* Brownout-Detection in den Fuses nicht gesetzt? Dann kann es zu Memory-Corruption im EEPROM oder Flash kommen. Ursache dafür ist der beim Einschalten langsame Anstieg der Betriebsspannung auf den Nennwert beziehungsweise der langsame Spannungseinbruch beim Abschalten. Ohne die Brownout-Detection startet der ATmega bereits vor Erreichen der Nennspannung und arbeitet fehlerhaft. Das kann dazu führen, dass er wahllos irgendwelche Werte im EEPROM oder im Flash verändert, insbesondere bei Bootloadern, die über die entsprechende Speicherinstruktionen verfügen. Ob wirklich so ein Problem vorliegt, lasst sich am einfachsten mit einem Verify gegen das verwendete Image prüfen. Steht dies nicht zur Verfügung, hilft oft ein Blick ins EEPROM. Treten nach etwa 200 Bytes (mehr benutzt die Borgware-2D nicht) vereinzelt andere Werte als 0xFF auf, ist dies ein deutlicher Hinweis auf Memory-Corruption. Abhilfe: Die [[#Fuses|korrekten Fuses]] mit Brownout-Detection setzen und den Mikrocontroller neu programmieren.
* [[Datei:Borg16v2_Abblockkondensator.jpg|x100px|thumb|right]] Möglicherweise ist ein zusätzlicher Abblockkondensator am ATmega-Controller notwendig. Auf den meisten Platinen funktionieren die ATmega-Controller einwandfrei. Allerdings kommt es bei manchen Kombinationen von Controllern, Platinen, Netzteilen und LED-Matrizen vor, dass die Versorgungsspannung des Controllers so stark schwankt, dass kein dauerhafter stabiler Betrieb gewährleistet ist. Typischerweise stürzt die Firmware dann während der Spiral- oder Lagerfeueranimation ab. ATmega644P-Controller sind anfälliger für dieses Problem als andere ATmega-Typen. In so einem Fall hilft es, auf der Rückseite der Platine einen zusätzlichen Keramikkondensator mit 100nF zwischen [[media:Borg16v2_Abblockkondensator.jpg|Pin 10 und 11]] des ATmega-Controllers zu löten (siehe Abbildung). Die Beinchen des Keramikkondensators sollten dabei so kurz wie möglich sein, damit er seine volle Wirkung entfalten kann.


====Laborlogo====
=Joysticks=
Ein scrollendes Laborlogo :)
[[Datei:Gamepad_Borg16.JPG|thumb|right|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 als [http://www.google.de/search?q=Competition+Pro+Retro Competition Pro Retro], zu bekommen unter anderem bei [https://icomp.de/shop-icomp/de/produckt-details/product/competition-pro-retro.html Individual Computers]. Eine Alternative ist bspw. ein [http://www.vesalia.de/d_boomerangb101p.htm Gamepad].


====Hypnotoad====
Die Spielecontroller sind digital und ziehen den jeweiligen Pin auf GND (siehe [http://www.epanorama.net/documents/joystick/ataristick.html hier] für Belegung), insofern geht das auch sehr schnell auf einer kleinen Lochrasterplatine.
ALL GLORY TO THE [http://r33b.net HYPNOTOAD!]


===="Matrix Effekt"====
Ferner ist die Nutzung einer [[Funkfernbedienung]] als Joystick möglich (in Arbeit).
Genieße die Matrix...


===="Lagerfeuer"====
=Software=
Es wärmt in kalten Nächten :).
Den Quellcode für die Software gibt es bei [https://github.com/das-labor/borgware-2d Github]. Für genauere Informationen siehe den [[Borgware-2D]]-Artikel.


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


====Laufschrift====
===Spiele===
Ein frei programmierbarer Scrolltext, nutzt [[BorgTextAnim]].
* Tetris — das altbekannte Tetris, mit Highscore-Liste
* Bastet Tetris — gibt dir immer den gerade unpassendsten Stein (angelehnt an [http://fph.altervista.org/prog/bastet.html Bastet])
* First Person Tetris — nicht der Stein dreht sich, sondern das Spielfeld
* Snake — Du spielst das bekannte Spiel "Snake" auf dem Borg.
* LaborInvaders — ein Spaceinvaders Clone
* Breakout — ein [http://de.wikipedia.org/wiki/Breakout_(Computerspiel) Breakout]-Clone, ähnlich Arkanoid


====Counter====
===Animationen===
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.
* AutoSnake — hier spielt die Snake mit sich selber
* AutoBreakout — Breakout als Animation
* GameOfLife — [http://de.wikipedia.org/wiki/Conways_Spiel_des_Lebens Conways Spiel des Lebens]
* Langtons Ameise - eine Simulation von [http://de.wikipedia.org/wiki/Ameise_(Turingmaschine) Langtons Ameise]
* Laborlogo — ein scrollendes Laborlogo
* Hypnotoad — ALL GLORY TO THE [http://r33b.net HYPNOTOAD!]
* Matrix — Follow the white rabbit…
* Kaminfeuer — 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
* Testprogramme
** Wechselndes Schachbrettmuster
** Wandernde Linien mit Helligkeitswechsel
** Spirale


====Testprogramme====
==MCUF-Schnittstelle==
* Wechselndes Schachbrettmuster
* Wandernde Linien mit Helligkeitswechsel
* Spirale


=MCUF-Schnittstelle=
'''ACHTUNG: Das MCUF-Modul bezieht sich auf eine [http://www.das-labor.org/trac/browser/microcontroller/src-atmel/borg/borg-16?rev=4856 ältere Version] der Borg16-Firmware, die es vor der [[Borgware-2D]] gab. Derzeit ist das MCUF-Modul noch nicht auf die Borgware-2D portiert.'''


Peter hat ein MCUF-Modul geschrieben (zu finden im svn). Damit steht die Fülle der Blinkenlight-Apps für den Borg offen.
Peter hat ein MCUF-Modul geschrieben (zu finden im svn). Damit steht die Fülle der Blinkenlight-Apps für den Borg offen.
Zeile 382: Zeile 641:


=Downloads=
=Downloads=
*[http://www.das-labor.org/w/images/1/11/Borg16Schematic.png Schaltplan]
*[https://github.com/das-labor/legacy/tree/master/hardware/borg16 Hardware on Github]
*[https://github.com/das-labor/borgware-2d Borgware-2D on Github]
*[[Medium:Borg16_firmware.zip|vorgefertigte Firmware-Images]] mit und ohne seriellen Bootloadern (bitte die [[#Vorgefertigte_Firmware-Images|Hinweise]] beachten)
*[[Medium:Borg16_firmware.zip|vorgefertigte Firmware-Images]] mit und ohne seriellen Bootloadern (bitte die [[#Vorgefertigte_Firmware-Images|Hinweise]] beachten)


Zeile 403: Zeile 663:
*http://www.werkzeugh.at/?p=283
*http://www.werkzeugh.at/?p=283
*http://www.mikrocontroller.net/topic/147689
*http://www.mikrocontroller.net/topic/147689
*http://s23.org/wiki/Borg16
*http://wiki.ctdo.de/projekte/borg16
 
*http://www.wischcenter.de/pic01.html – Web Cam in einem Hamburger Schaufenster: Ein Borg16 ist in der Spiegelung zu sehen.
= Artikel Todo =
* V2 Bilder hochladen! done
* Aufbauanleitung überprüfen
* Aufbau der Matrix beschreiben/schaltplan!! (true)
* Reicheltlisten fixen/anlegen/einstellen
* Led-widerstandsvorschläge einfügen/bearbeiten
* Für Software Zipfiles erstellen??
* Farbcodes der Widerstände hinzufügen
* Neue V2 Hardware einpflegen!
* Allgemeine Verbesserungen
* Aufbau in RIBBA bilder von Smartin und Hansi einarbeiten
* Aufbau Lochraster nach AndreBorg einarbeiten??
* fuses?
* ...
* Way more Nakka!
=== New Stuff ===
* Portierung von Spielen des [[http://www.mignongamekit.com Mignon Game Kits]] ??
* Portierung von Spielen des [[http://nicotak.com/avr/ledgame.html "LED Game for AVR"]] ??


[[Kategorie:BlinkenBorg]]
[[Kategorie:BlinkenBorg]]
[[Kategorie:Microcontroller]]
[[Kategorie:Microcontroller]]

Aktuelle Version vom 8. April 2017, 00:02 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



About[Bearbeiten | Quelltext bearbeiten]

Der Borg16 basiert auf Andrés originalem 16×16-Borg und umfasst eine 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 verfügt über eine serielle Schnittelle und einen Anschluss für einen Joystick im 9-Pin Atari-Standard. Zusätzlich bietet die Platine Platz für einen CAN-Bus-Controller oder ein RMF12-Funkmodul zur Vernetzung.

Die Borgware-2D kann die LEDs mit vier Helligkeitsstufen ansteuern. Es existiert bereits eine breite Palette an Spielen, Demos und Testprogrammen. Der Simulator ermöglicht zudem die Entwicklung neuer Software auch ohne die Hardware. Die Leerplatine samt Bauteile für den Borg16 gibt es im Labor als Bausatz zu kaufen.

Tunix hat auf den Labortagen 2012 einen Vortrag über den Borg16 gehalten. Es gibt davon eine Videoaufzeichnung, allerdings sind einige Punkte mittlerweile veraltet, daher ist es sinnvoller, die aktualisierten Folien weiter unten zu Rate zu ziehen.

Aufbau[Bearbeiten | Quelltext bearbeiten]

Borg16v1[Bearbeiten | Quelltext bearbeiten]

Die ursprüngliche Borg16-Platine von 2006 mit optionaler CAN-Unterstützung und ausschließlich bedrahteten Bauteilen.

Mittlerweile vergriffen! Aber es sind noch genug Borg16v2-Platinen vorhanden.

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

Bestückungsliste[Bearbeiten | Quelltext bearbeiten]

Position Bauteil Wert/Typ Bemerkung
C1 Elektrolyt-Kondensator 330µF
C2 Keramik-Kondensator 100nF
C3 Keramik-Kondensator 100nF
C4 Keramik-Kondensator 100nF wird nicht bestückt
C5 Keramik-Kondensator 100nF
C6 Keramik-Kondensator 18pF
C7 Keramik-Kondensator 18pF
CAN Stift- oder Sockelleiste 1×3
COL Wannenbuchse 16pol. 2×8
D1 Kleinsignal-Diode 1N4148 Glasgehäuse, Anschlüsse vorsichtig biegen
D2 Gleichrichter-Diode 1N4004 alternativ 1N4007
IC1 Treiber-IC UDN2981A alternativ TD62783AP
IC2 Treiber-IC UDN2981A alternativ TD62783AP
IC3 Schieberegister-IC 74HCT164N
IC4 Schieberegister-IC 74HCT164N
IC5 IC-Sockel 40 polig: 2×20 optional, aber sehr empfehlenswert
IC5 Mikrocontroller ATmega32(A) alternativ ATmega324/644/1284(A/P/PA)
IC6 CAN-Controller-IC MCP2515P alternativ MCP2510P
IC7 CAN-Transceiver-IC MCP2551P
ISP Stiftleiste 2×5
JOY Sub-D9 Male
LED3 LED 3mm, gelb, diffus
PWR Hohlsteckerbuchse außen 6,3mm/innen 2,0mm mit Lötfahnen
R01-R16 Vorwiderstände siehe Text
R17 Kohleschichtwiderstand 10kΩ
R18 Kohleschichtwiderstand 10kΩ
R19 Kohleschichtwiderstand 10kΩ
R20 Kohleschichtwiderstand 1kΩ
R21 Kohleschichtwiderstand 1kΩ
R22 Kohleschichtwiderstand 1kΩ
R23 Kohleschichtwiderstand 1kΩ
R24 Kohleschichtwiderstand 33kΩ
RESET Kurzhubtaster
ROW Wannenbuchse 16pol. 2×8
RS232 Sub-D9 Female
T01-T16 MOSFET IRLD024
T17 NPN-Transistor BC547B
T18 NPN-Transistor BC547B
X1 Schwingquarz HC49/U 16 MHz

Borg16v2[Bearbeiten | Quelltext bearbeiten]

Die aktuelle Borg16-Platine von 2009, die optional auch ein RFM12-Funkmodul aufnehmen kann. Aus Platzgründen bedürfen die (optionalen) CAN-Bauteile nun der SMD-Bauform. Die restlichen Komponenten sind wie gehabt bedrahtet. Noch in großer Stückzahl erhältlich.

Diesen Bausatz (Leerplatine mit oder ohne Bauteilen) gibt es auch im Labor zu kaufen.

Wer die Bauteile selbst besorgen möchte, für den gibt es hier die entsprechenden Reichelt-Artikelnummern bzw. Warenkörbe.

Borg16V2Schematic.png Borg16 cover unten.jpg Borg16 cover1.jpg Borg16v2 Platine.jpg Borg16v2-2014-2.jpg Borg16-Bestückung.png

Bestückungsliste[Bearbeiten | Quelltext bearbeiten]

Position Bauteil Wert/Typ Bemerkung
C1 Elektrolyt-Kondensator 470µF
C2 Keramik-Kondensator 100nF
C3 Keramik-Kondensator 100nF
C4 Keramik-Kondensator 100nF wird nicht bestückt
C5 Keramik-Kondensator 100nF
C6 Keramik-Kondensator 22pF
C7 Keramik-Kondensator 22pF
D1 Kleinsignal-Diode 1N4148 Glasgehäuse, Anschlüsse vorsichtig biegen
D2 Gleichrichter-Diode 1N4004 alternativ 1N4007
IC1 Treiber-IC UDN2981A alternativ TD62783AP
IC2 Treiber-IC UDN2981A alternativ TD62783AP
IC3 Schieberegister-IC 74HCT164N
IC4 Schieberegister-IC 74HCT164N
IC5 IC-Sockel 40 polig: 2×20 optional, aber sehr empfehlenswert
IC5 Mikrocontroller ATmega32(A) alternativ ATmega324/644/1284(A/P/PA)
R01-R16 Vorwiderstände siehe Text
R18 Kohleschichtwiderstand 10kΩ
R19 Kohleschichtwiderstand 10kΩ
R20 Kohleschichtwiderstand 1kΩ
R21 Kohleschichtwiderstand 1kΩ
R26 Kohleschichtwiderstand 1kΩ
T01-T16 MOSFET IRLD024
T17 NPN-Transistor BC547B
T18 NPN-Transistor BC547B
X1 Schwingquarz HC49/U 16 MHz
LED3 LED 3mm, gelb, diffus
RESET Kurzhubtaster
ROW Wannenbuchse 16pol. 2×8
COL Wannenbuchse 16pol. 2×8
RS232 Sub-D9 Female
ISP Stiftleiste 2×5
JOY Sub-D9 Male
PWR Hohlsteckerbuchse außen 6,3mm/innen 2,0mm mit Lötfahnen

Optionale Borg16v2 CAN-Bestückungsliste:[Bearbeiten | Quelltext bearbeiten]

Position Bauteil Wert Bemerkung
CAN Stift- oder Sockelleiste 1×3
IC6 CAN-Controller-IC MCP 2515-I/SO SMD, Rückseite der Platine
IC7 CAN-Transceiver-IC MCP 2551-I/SN SMD, Rückseite der Platine
LED1 LED 5mm, grün, diffus
LED2 LED 5mm, rot, diffus
R17 Kohleschichtwiderstand 10kΩ
R22 Kohleschichtwiderstand 1kΩ
R23 Kohleschichtwiderstand 1kΩ
R24 SMD-Widerstand 33kΩ SMD, Rückseite der Platine

Optionale Borg16v2 RFM12-Bestückungsliste[Bearbeiten | Quelltext bearbeiten]

Position Bauteil Wert Bemerkung
ANT ca 17,5cm Kabel
IC8 Funk-IC RFM12
R25 Kohleschichtwiderstand 10kΩ

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

Bestückung[Bearbeiten | Quelltext bearbeiten]

Die Bestückung der Platine läuft, wenn du schon einmal 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. Um die gröbsten Anfängerfehler zu vermeiden, sind hier nochmal die grundlegendsten Vorgehensweisen beim Löten zusammengefasst.

Löthinweise für Anfänger[Bearbeiten | Quelltext bearbeiten]

Für Lötanfänger ist es sinnvoll, bleihaltiges Lot zu verwenden, da es bei der Verarbeitung etwas tolerantere Temperatur- und Zeitfenster hat. Zudem lassen sich bei bleihaltigem Lot gelungene Lötverbindungen leicht an ihrem Glanz erkennen, während matte Lötverbindungen kalte Lötstellen anzeigen. Bleifreies Lot erzeugt dagegen immer matte Lötstellen, was die optische Unterscheidung zwischen guten oder schlechten Lötverbindungen erschwert.

Dünner Lötdraht mit 0,5mm Dicke lässt sich einfacher dosieren als Drähte mit 0,75mm oder gar mehr. Steht eine temperaturgereregelte Lötstation zur Verfügung, so ist diese auf etwa 340°C einzustellen.

Die Bauteile werden von oben (also von der Seite mit dem Bestückungsdruck) durch die Platine gesteckt. Bei Bauteilen mit zwei Anschlüssen ist es für einen besseren Halt hilfreich, die Anschlussdrähte leicht nach außen zu biegen. Anschließend die Platine mit der nach unten zeigenden Oberseite auf den Tisch legen, so dass das Bauteil nicht herausfallen kann, und gegebenenfalls überstehende Drahtenden mit einem Seitenschneider auf etwa 1-2mm kürzen.

Nun mit der sauberen Lötspitze sowohl Lötauge als auch Anschlussdraht (bzw. Pin) gleichmäßig für etwa ein bis zwei Sekunden erhitzen und dann den Lötdraht zuführen, und zwar dem Pin oder dem Lötauge, nicht direkt der Lötspitze, da sich die Flussmittelseele sonst zu schnell verflüchtigt. Sobald das Lötauge und der Pin vollständig vom Lot umflossen sind, Lötkolben und Draht von der Lötstelle nehmen und das Lot ein paar Sekunden aushärten lassen (keine Erschütterungen verursachen).

Niemals versuchen, auf der Lötspitze verbliebenes Lot auf einen Pin oder ein Lötauge abzustreifen, da dort bereits alles an Flussmittel verdampft ist, was ursprünglich im Lötdraht enthalten war. Solches Lot oxidiert sofort, wodurch es breiartig, matt und schlecht leitend wird, ein Garant für kalte Lötstellen. So etwas gehört auf den Abstreifschwamm, nicht auf die Platine. Gleiches gilt, wenn sich beim Löten plötzlich größere Kugeln oder Klumpen an der Lötspitze bilden, die nicht auf die Lötstelle abfließen wollen. Ursachen für solche Kugeln sind oft ein zu lange andauernder Lötvorgang oder ein zu heiß eingestellter Lötkolben, in manchen Fällen auch minderwertiger Lötdraht mit zu wenig Flussmittel.

ICs werden in der Regel mit leicht nach außen angewinkelten Pins ausgeliefert, so dass sie sich nicht ohne weiteres in die Platine einsetzen lassen. Die Pins keinesfalls einzeln von Hand zurecht biegen, da die Gefahr besteht, sie dabei umzuknicken, abzubrechen und das Bauteil unbrauchbar zu machen. Stattdessen die Pin-Reihen in ihrer Gesamtheit von jeder Seite vorsichtig an der Tischkante nach innen drücken. Dies gegebenenfalls so oft wiederholen, bis der IC in die Platine passt. Wem das zu unhandlich ist: Im Fachhandel gibt es im einstelligen Eurobereich auch spezielle Pin-Ausrichter zu kaufen.

Um ICs, IC-Sockel oder Wannenstecker (beziehungsweise generell Bauteile mit vielen Pins) möglichst plan aufliegend auf der Platine zu befestigen, zunächst nur einen einzigen Pin in einer äußeren Ecke des Bauteils verlöten. Anschließend die Platine in die Hand nehmen und das Bauteil flächig gegen die Platine drücken und gedrückt halten. Von der anderen Seite mit dem Lötkolben die zuvor hergestellte Lötverbindung noch einmal verflüssigen. Typischerweise ergibt sich dann ein kurzes Einrastgeräusch und das Bauteil ist ausgerichtet. Es ist wichtig, dem Lot ein paar Sekunden zum Aushärten zu geben, bevor man den Druck vom Bauteil nimmt. Nun die restlichen Pins ganz normal verlöten, ausgehend vom schräg gegenüber liegenden Pin.

Empfohlene Reihenfolge[Bearbeiten | Quelltext bearbeiten]

Generell fängt man mit den flachsten Bauteilen an und arbeitet sich nach und nach zu den nächstgrößeren Bauteilen vor. Folgende Reihenfolge hat sich bewährt:

  • die Widerstände R01 bis R16, R18 bis R21 und R26
  • sofern vorhanden, der Sockel für den Mikrocontroller (IC5)
  • Treiber-ICs (IC1 und IC2) und Schieberegister-ICs (IC3 und IC4)
  • falls kein Sockel zum Einsatz kommt, der Mikrocontoller (IC5)
  • Achtung: die ICs entsprechend der im Bestückungsdruck markierten Einkerbung orientieren, einen falsch eingelöteten IC wieder zu entfernen ist aufwändig und belastet sowohl die Bauteile als auch die Platine
  • die Zeilentreiber in Form der IRLD024-MOSFETs (T1 bis T16); deren großer Doppelpin zeigt dabei in Richtung der Wannenstecker
  • Gleichrichterdiode 1N4007 (D2) für den Verpolungsschutz, der Ring muss in Richtung des Strichs auf dem Bestückungsdruck zeigen
  • Schwingquarz mit 16 MHz (X1)
  • die Kondensatoren 22pF (C6, C7) und 100nF (C2, C3, C5); C4 wird nicht bestückt
  • gelbe 3mm LED (LED3), den abgeflachten Kragen entsprechend dem Bestückungsdruck orientieren
  • die Diode 1N4148 (D1) wird stehend festgelötet, dabei zeigt der schwarze Ring auf dem Bauteil in Richtung des Strichs auf dem Bestückungsdruck; Vorsicht beim Biegen der Beinchen, da das Glasgehäuse dieser Diode schnell bricht
  • die beiden BC547B-Transistoren (T17 und T18)
  • Reset-Taster (RESET)
  • die ISP-Steckerleiste (ISP)
  • die beiden Wannenstecker an ROW und COL; Pin 1 dieser Stecker ist mit einem aufgeprägten Dreieck markiert, bitte entsprechend dem Bestückungsdruck orientieren
  • Hohlsteckerbuchse (PWR)
  • die Sub-D Anschlüsse (JOY und RS232), der Stecker (männlich) an JOY, die Buchse (weiblich) an RS232
  • der Elektrolyt-Kondensator mit 470µF (C1); bitte auf die Polung achten und den am Kondensatorgehäuse mit einem Minus markierten Pin nicht in den Pluspol der Platine stecken (im Bestückungsdruck mit einem + markiert)

LED Matrix[Bearbeiten | Quelltext bearbeiten]

Die Zeilen bilden 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[Bearbeiten | Quelltext bearbeiten]

Über die Treibertransistoren gehen ca. 1,5 bis 2V (UTreiber) 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 LEDs haben einen Spannungsabfall von 2V, an den Treiberbausteinen fallen ebenfalls 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. 120Hz 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 120mA erzeugen. Dann muss das Netzteil aber auch knapp 2A (16×120mA) 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.

Gehäuseideen[Bearbeiten | Quelltext bearbeiten]

  • Ikea Bilderrahmen RIBBA in der Größe 50x50x4.5 cm
  • LEDs auf Lochrasterplatinen verlöten und milchtransparentes Plexiglas mit Distanzhülsen befestigen (der André-Borg ist so gebaut)
  • Marcus hat eine detaillierte Bauanleitung für seinen RainbowBorg geschrieben
  • Tunix hat eine detaillierte Bauanleitung für den CTDO-Borg geschrieben

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.

Wer für seine Gehäusekonstruktion eine Trägerplatte für die LEDs benötigt und diese nicht selber fräsen möchte, kann sich im Baumarkt nach gelochten Faserplatten (MDF oder HDF) umschauen. Selbst wenn der Lochdurchmesser für die jeweiligen LEDs nicht ausreicht, lassen sich solche Platten relativ einfach nachbohren, da das Anzeichnen entfällt und sich der Bohrer wegen der bestehenden Löcher einfacher ansetzen lässt. Auch kann sich ein Blick bei Händlern von Akustikplatten lohnen, die u.a. die Fertigung von gelochten Platten nach Maß anbieten, was sie sich dann aber auch entsprechend bezahlen lassen.

Programmieren[Bearbeiten | Quelltext bearbeiten]

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 Anschlüsse PW, JOY und RS232 zu einem selbst 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[Bearbeiten | Quelltext bearbeiten]

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 externen Schwingquarzes 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 (Firmware wird ausschließlich über ein Programmiergerät übertragen)

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 (Firmware wird auch über die serielle Schnittstelle übertragen)

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[Bearbeiten | Quelltext bearbeiten]

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 12.10.2014) heraussuchen. Dort finden sich Images für den ATmega32, ATmega644(P) und den ATmega1284(P). 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[Bearbeiten | Quelltext bearbeiten]

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[Bearbeiten | Quelltext bearbeiten]

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[Bearbeiten | Quelltext bearbeiten]

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[Bearbeiten | Quelltext bearbeiten]

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.

Troubleshooting[Bearbeiten | Quelltext bearbeiten]

avrdude meldet zusammen mit dem USBasp immer "target doesn't answer"[Bearbeiten | Quelltext bearbeiten]

  • Bei fabrikneuen ATmegas sicherstellen, dass beim erstmaligen Setzen der Fuses entweder der Slow-Jumper des USBasps eingeschaltet ist oder die avrdude-Befehlszeile zusätzlich die Option "-B 4" enthält.
  • Sicherstellen, dass die Pfostenbuchse des Programmierkabels richtig herum in den ISP-Steckplatz der Platine gesteckt ist.
  • Wird die Borg16-Platine ausreichend mit Spannung versorgt? Entweder ein passendes Netzteil an der Borg16-Platine anschließen oder Stromversorgung des USBasps per Jumper zuschalten (aber nicht beides gleichzeitig). Bei einem Netzteil sicher stellen, dass auch wirklich 5 Volt herauskommen.
  • Sitzt der Mikrocontroller ordentlich in seinem Sockel? Der ATmega muss plan auf dem Sockel aufliegen, darf nicht wackeln und sich auch nicht an einer Seite abheben. Alle Pins müssen gerade im Sockel stecken (keine Knicke).
  • Mikrocontroller falsch herum eingesetzt? Das kann im Eifer des Gefechts schneller passieren, als einem lieb ist. Falls die Kerbe des Chips nicht entsprechend dem Bestückungsdruck orientiert ist, Platine umgehend vom Strom trennen und den ATmega richtig herum einsetzen.
  • Tritt der Fehler erst seit dem letzten Setzen der Fuses auf, wurde möglicherweise ein falscher Taktgebertyp eingestellt. Am einfachsten ist es, den Mikrocontroller in eine Entwicklungsplatine einzusetzen, die einen passenden Taktgeber bereit hält und dort die Fuses zu korrigieren. Falls der erwartete Typ des Taktgebers "External Clocksource" ist, lässt sich auch mit Hilfe eines zweiten Mikrocontrollers (z.B. Arduino) ein Taktsignal an einem Port-Pin erzeugen, der wiederum mit dem XTAL1-Pin des Borg16-ATmegas verbunden werden muss. Ist der Borg16-ATmega daraufhin ansprechbar, auch hier sofort die Fuses korrigieren.
  • Mikrocontroller defekt? Falls der Controller auch in anderen Platinen versagt, ist Ersatz gefragt.
  • Mikrocontroller funktioniert woanders aber nicht in der Borg16-Platine? Sofern nicht der Taktgeber die Ursache ist, nach kalten Lötstellen suchen.

Programmierung mit dem USBasp ist sehr langsam[Bearbeiten | Quelltext bearbeiten]

  • Slow-Jumper gesetzt? Dieser ist nach dem Einstellen der (korrekten!) Fuses nicht mehr notwendig.
  • Taucht eine Option "-B 4" (oder auch eine andere Zahl als 4) im avrdude-Kommando auf? Auch diese Option ist nach dem setzen der Fuses unnötig.

Programmierung über die serielle Schnittstelle schlägt fehl[Bearbeiten | Quelltext bearbeiten]

  • Ist der Bootloader in den Fuses eingeschaltet? Stimmt die in den Fuses eingestellte Größe des Bootloaders (512 Words im Fall von avrprogboot)?
  • Ist auf dem Mikrocontroller überhaupt ein serieller Bootloader aufgespielt? Bei unseren vorgefertigten Firmware-Images gibt es auch Varianten, die einen seriellen Bootloader enthalten.
  • Ist die Baudrate korrekt? Die in unseren Firmware-Images enthaltenen Bootloader sind auf 19200 Baud eingestellt (Voraussetzung ist ein Quarz mit 16 MHz).
  • Ist eine andere Baudrate als 19200 im Bootloader eingestellt oder wird ein Quarz mit einer anderen Frequenz als 16 MHz verwendet? Dann sicherstellen, dass die Baudrate auch zur Taktfrequenz des Mikrocontrollers passt. ATmegas können Baudraten nur über ganzzahlige Teiler ihrer Taktfrequenz annähern. Weicht diese Näherung um mehr als 0,2% von der tatsächlich geforderten Baudrate ab, wird die serielle Übertragung unzuverlässig. Welche Baudraten zu welchen Taktfrequenzen passen, lässt sich hier entnehmen.
  • Wird ein USB-zu-seriell-Konverter benutzt? Die Spannungen an der seriellen Schnittstelle des Borg16 bewegen sich am Rand der Norm, womit nicht jeder USB-Konverter zurecht kommt. Hier hilft es nur, ein anderes Modell zu nehmen. USB-Konverter mit dem Chip PL2303 von Prolific (unter anderem in einem USB-Konverter von Goobay verbaut, bei Reichelt erhältlich) funktionieren mit dem Borg16. Auch echte serielle Schnittstellen (vornehmlich an älteren PCs zu finden) funktionieren tadellos.

Firmware startet unerwartet neu, bleibt stehen oder stürzt mit wildem Geflacker ab[Bearbeiten | Quelltext bearbeiten]

  • Handelt es sich um selbst kompilierte/modifizierte Firmware? Wenn ja, einmal mit unserer vorgefertigten Firmware prüfen, ob wirklich ein Hardware-Problem vorliegt.
  • Ist das Netzteil richtig dimensioniert? Je nach verbauten LEDs muss das Netzteil Ströme von bis zu 2A (bei 120mA pro LED) liefern können, ohne das die Versorgungsspannung absinkt. Fällt die Spannung unter 4,3V (bzw. 4,0V bei ATmega32), hält die Brownout-Detection den Prozessor an und startet ihn neu, sobald die Spannung wieder hoch genug ist. Da dabei alle LEDs abgeschaltet werden, ist die Unterspannungssituation meist umgehend vorbei, was den Eindruck eines spontanen Neustarts erweckt.
  • Ist die Firmware mit CAN- und/oder RFM12-Support kompiliert worden, obwohl keine dieser Optionen auf der jeweiligen Borg16-Platine verbaut ist? Dies führt meist direkt beim Start zu komischen Abstürzen mit wirrem Geflacker. In dem Fall entweder die Firmware ohne CAN- bzw. RFM12-Support kompilieren oder die vorgefertigte Borg16-Firmware nehmen.
  • Etwas im Menuconfig-Tool geändert und vor dem ersten Kompilieren make clean vergessen? Das Buildsystem erkennt nicht immer, welche Dateien neu kompiliert werden müssen, wenn Einstellungen im Menuconfig-Tool geändert werden. Ein make clean stellt sicher, dass alles noch mal neu kompiliert wird.
  • Brownout-Detection in den Fuses nicht gesetzt? Dann kann es zu Memory-Corruption im EEPROM oder Flash kommen. Ursache dafür ist der beim Einschalten langsame Anstieg der Betriebsspannung auf den Nennwert beziehungsweise der langsame Spannungseinbruch beim Abschalten. Ohne die Brownout-Detection startet der ATmega bereits vor Erreichen der Nennspannung und arbeitet fehlerhaft. Das kann dazu führen, dass er wahllos irgendwelche Werte im EEPROM oder im Flash verändert, insbesondere bei Bootloadern, die über die entsprechende Speicherinstruktionen verfügen. Ob wirklich so ein Problem vorliegt, lasst sich am einfachsten mit einem Verify gegen das verwendete Image prüfen. Steht dies nicht zur Verfügung, hilft oft ein Blick ins EEPROM. Treten nach etwa 200 Bytes (mehr benutzt die Borgware-2D nicht) vereinzelt andere Werte als 0xFF auf, ist dies ein deutlicher Hinweis auf Memory-Corruption. Abhilfe: Die korrekten Fuses mit Brownout-Detection setzen und den Mikrocontroller neu programmieren.
  • Borg16v2 Abblockkondensator.jpg
    Möglicherweise ist ein zusätzlicher Abblockkondensator am ATmega-Controller notwendig. Auf den meisten Platinen funktionieren die ATmega-Controller einwandfrei. Allerdings kommt es bei manchen Kombinationen von Controllern, Platinen, Netzteilen und LED-Matrizen vor, dass die Versorgungsspannung des Controllers so stark schwankt, dass kein dauerhafter stabiler Betrieb gewährleistet ist. Typischerweise stürzt die Firmware dann während der Spiral- oder Lagerfeueranimation ab. ATmega644P-Controller sind anfälliger für dieses Problem als andere ATmega-Typen. In so einem Fall hilft es, auf der Rückseite der Platine einen zusätzlichen Keramikkondensator mit 100nF zwischen Pin 10 und 11 des ATmega-Controllers zu löten (siehe Abbildung). Die Beinchen des Keramikkondensators sollten dabei so kurz wie möglich sein, damit er seine volle Wirkung entfalten kann.

Joysticks[Bearbeiten | Quelltext bearbeiten]

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 als Competition Pro Retro, zu bekommen unter anderem bei Individual Computers. 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[Bearbeiten | Quelltext bearbeiten]

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

Module[Bearbeiten | Quelltext bearbeiten]

Spiele[Bearbeiten | Quelltext bearbeiten]

  • Tetris — das altbekannte Tetris, mit Highscore-Liste
  • Bastet Tetris — gibt dir immer den gerade unpassendsten Stein (angelehnt an Bastet)
  • First Person Tetris — nicht der Stein dreht sich, sondern das Spielfeld
  • Snake — Du spielst das bekannte Spiel "Snake" auf dem Borg.
  • LaborInvaders — ein Spaceinvaders Clone
  • Breakout — ein Breakout-Clone, ähnlich Arkanoid

Animationen[Bearbeiten | Quelltext bearbeiten]

  • AutoSnake — hier spielt die Snake mit sich selber
  • AutoBreakout — Breakout als Animation
  • GameOfLife — Conways Spiel des Lebens
  • Langtons Ameise - eine Simulation von Langtons Ameise
  • Laborlogo — ein scrollendes Laborlogo
  • Hypnotoad — ALL GLORY TO THE HYPNOTOAD!
  • Matrix — Follow the white rabbit…
  • Kaminfeuer — 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
  • Testprogramme
    • Wechselndes Schachbrettmuster
    • Wandernde Linien mit Helligkeitswechsel
    • Spirale

MCUF-Schnittstelle[Bearbeiten | Quelltext bearbeiten]

ACHTUNG: Das MCUF-Modul bezieht sich auf eine ältere Version der Borg16-Firmware, die es vor der Borgware-2D gab. Derzeit ist das MCUF-Modul noch nicht auf die Borgware-2D portiert.

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[Bearbeiten | Quelltext bearbeiten]

Bestellen[Bearbeiten | Quelltext bearbeiten]

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[Bearbeiten | Quelltext bearbeiten]

Links im Netz[Bearbeiten | Quelltext bearbeiten]

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...