Borgware-2D: Unterschied zwischen den Versionen

Aus LaborWiki
Wechseln zu: Navigation, Suche
K (Simulator-Abschnitt auf den Stand von Ende 2012 (!) gebracht)
(Übersicht: LoL Shield)
 
(8 dazwischenliegende Versionen desselben Benutzers werden nicht angezeigt)
Zeile 1: Zeile 1:
Die Borgware-2D stellt ein Framework dar, um den Wildwuchs an Programmen und Funktionen, die mittlerweile für diverse Borgs geschrieben wurden, zu vereinheitlichen und über ein Ncurses-Menü konfigurierbar zu machen.
+
==Übersicht==
 +
Die Borgware-2D ist eine Firmware für AVR-basierte, zweidimensionale LED-Matrizen, insbesondere die [http://www.das-labor.org/wiki/Blinken_Borgs Blinken Borgs]. Hauptplattform ist der [http://www.das-labor.org/wiki/Borg16 Borg16]-Bausatz. Andere unterstützte Plattformen sind das [http://www.hackerspace-ffm.de/wiki/index.php?title=LedBrett LED Brett] vom [http://www.hackerspace-ffm.de Hackerspace FFM], das [http://www.elo-web.de/elo/mikrocontroller-und-programmierung/ping-pong/das-franzis-pingpong ELO Ping-Pong-Board] oder das [http://jimmieprodgers.com/kits/lolshield/ LoL Shield] von Jimmie P. Rodgers.
  
=Installation=
+
{|
[[Bild:Borgware2d_menuconfig.png|thumb|120px|right|Screenshot der Menuconfig]]
+
|
Zuerst einmal benötigst Du die aktuellen Quellen aus dem svn. Diese kannst Du mit folgendem Befehl auschecken:
+
[[Bild:Borg-andre2.jpg|thumb|120px|left|Andrés Ur-Borg]]
svn co https://www.das-labor.org/svn/microcontroller/src-atmel/borg/borgware-2d
+
|
 
+
[[Bild:Borg16Screen.jpg|thumb|120px|left|Borg16 mit Testdisplay]]
Wechsel danach in das Verzeichnis und wähle die Dinge aus, die Du für Deinen Borg nutzen möchtest. Tippe <code>make menuconfig</code>.
+
|}
  
Zum erstellen der Software für '''den Microcontroller''' kannst Du nun einfach <code>make</code> eingeben und abwarten bis er fertig ist. Zum '''Flashen mit dem USBasp''' benutze den Befehl <code>make uflash</code>.
+
==Animationen==
 +
Mittlerweile gibt es zahlreiche Animationen für die Borgs. Hier sind ein paar Beispiele:
  
Eventuell fehlen dir zum compilieren diverse packete, die Fehlermeldungen beim ausführen können dir helfen (oder auch nicht). Unter Debian/Ubuntu probiere "<code>sudo aptitude install build-essential make libncurses5-dev gcc-avr avr-libc binutils-avr avrdude freeglut3-dev -y</code>" um die packete zu installieren.
 
 
=Simulator=
 
Die Borgware enhält einen OpenGL/GLUT-basierten Simulator für Linux und FreeBSD (jeweils x86/x64) und einen GDI/Win32-basierten Simulator für Windows (benötigt Cygwin, x86). Der Simulator-Build lässt sich über den Befehl <code>make simulator</code> anstoßen, wobei das Buildsystem automatischen den korrekten Simulator wählt. Nach einem erfolgreichen Build liegt ein Binary namens <code>borgsim</code> oder <code>borgsim.exe</code> im selben Verzeichnis.
 
 
Aufgrund speziell angepasster Linkerskripte läuft der Simulator derzeit nur unter Linux, FreeBSD und Windows (und dort auch nur unter x86 bzw. x64). Prinzipiell ist der OpenGL-basierte Simulator plattform-unabhängig, allerdings müssen pro Betriebsystem und Architektur entsprechende Linkerskripte vorgehalten und ins Build-System integriert werden. Die Linkerskripte erzeugen beim Binden automatisch eine Datenstruktur für die Spielmenüeinträge und ermöglichen die EEPROM-Emulation im Simulator. Die Anhängigkeit von diesen Skripten ist derzeit das einzige Hindernis in Bezug auf Plattformunabhängigkeit. Da derzeit niemand an der Borgware arbeitet wird sich das in absehbarer Zeit nicht ändern. Patches welcome.
 
 
==Tastenbelegung==
 
q            Beenden des Simulators
 
wasd          Joystick Befehle
 
space        Joystick Feuer
 
Pfeiltasten  Rotation der Ansicht (nicht unter Windows)
 
 
=Animationen=
 
Mittlerweile gibt es Zahlreiche Animationen für die Borgs. Hier sind ein paar Beispiele:
 
 
{|
 
{|
|
 
[[Bild:Borgware2d_snake.png|thumb|120px|left|Snake]]
 
 
|
 
|
 
[[Bild:Borgware2d_matrix.png|thumb|120px|left|Matrix]]
 
[[Bild:Borgware2d_matrix.png|thumb|120px|left|Matrix]]
Zeile 38: Zeile 23:
 
|}
 
|}
  
=Spiele=
+
Ein [https://raw.github.com/das-labor/borgware-2d/master/doc/img/borg_anim.gif animiertes GIF (3,5 MB)] vermittelt einen Eindruck von der Borgware-2D in Action ;)
==Tetris==
+
 
 +
==Spiele==
 +
 
 +
{|
 +
|
 +
[[Bild:Borgware2d_snake.png|thumb|120px|left|Snake]]
 +
|
 
[[Bild:Borgware2d_tetris.png|thumb|120px|left|Tetris]]
 
[[Bild:Borgware2d_tetris.png|thumb|120px|left|Tetris]]
 +
|}
 +
 +
* Tetris
 +
** Classic: Das ganz normale Tetris
 +
** First Person Tetris: Statt die Steine zu drehen, dreht man hierbei das Spielfeld um den Stein
 +
** Bastet: Diese Tetris Variante gibt einem stets den Stein, den man gerade am wenigsten gebrauchen kann
 +
* Snake
 +
* BreakOut
 +
* Space Invaders
 +
 +
 +
==Quellen==
 +
Die aktuellen Quellen liegen bei [https://github.com/das-labor/borgware-2d GitHub]. Diese lassen sich mit folgenden Befehlen auschecken:
 +
git clone https://github.com/das-labor/borgware-2d.git
 +
cd borgware-2d
 +
git submodule init
 +
git submodule update
 +
 +
Die letzten beiden Befehle sind notwendig, um die RFM12-Libary als Unterprojekt einzubinden.
 +
 +
==Bauen der Firmware==
 +
 +
Derzeit unterstützte Build-Plattformen sind Linux, FreeBSD, NetBSD und Windows (via Cygwin). Die Simulator-Unterstützung beschränkt sich momentan auf x86- und x86_64-Architekturen.
 +
Für BSD gilt eine Besonderheit: Wenn hier von '''make''' die Rede ist, muss dort stattdessen '''gmake''' eingesetzt werden.
 +
Folgende Abhängigkeiten gelten unter den jeweiligen Systemen:
 +
 +
 +
===Abhängigkeiten unter Linux/BSD===
 +
 +
Die Paketnamen basieren auf den Debian/Ubuntu-Repositorys. Bitte entsprechend der Nomenklatur der verwendeten Linux-Distribution (bzw. BSD) anpassen.
 +
 +
* build-essential (installiert eine komplette GCC-Tool-Chain für den Host)
 +
* bc
 +
* make (gmake unter FreeBSD)
 +
* libncurses5-dev
 +
* gcc-avr
 +
* avr-libc
 +
* binutils-avr
 +
* avrdude
 +
* freeglut3-dev
 +
* bash (ja, BSD, du bist gemeint!)
 +
 +
 +
===Abhängigkeiten unter Windows===
 +
 +
*AVR GCC Toolchain für Windows, die Qual der Wahl:
 +
**[http://winavr.sourceforge.net WinAVR]
 +
***avrdude bereits enthalten
 +
***Setup-Tool bietet an, die Toolchain in den Systempfad einzutragen
 +
***direkter Download von SourceForge
 +
***Projekt wurde 2010 eingestellt, daher ziemlich veraltet (avr-gcc 4.3.3)
 +
**[http://www.atmel.com/tools/atmelavrtoolchainforwindows.aspx Atmel AVR Toolchain for Windows]
 +
***aktiv gepflegt, daher recht aktuell
 +
***Homepage nervt mit umständlichem Registrierungsformular vor dem Download
 +
***die Toolchain muss manuell im Systempfad eingetragen werden
 +
***avrdude ist nicht enthalten (aber es ist eine parallele WinAVR-Installation möglich)
 +
* [http://www.cygwin.com/ Cygwin(64)]
 +
** bc
 +
** make
 +
** gcc-core
 +
** gdb
 +
** libncurses-devel (Cygwin)
 +
** libncursesw-devel (Cygwin64)
 +
* [http://sourceforge.net/apps/trac/libusb-win32/wiki libusb-win32] sofern ein USBasp-Programmiergerät mit avrdude genutzt wird
 +
 +
 +
===Konfigurieren===
 +
 +
[[Bild:Borgware2d_menuconfig.png|thumb|120px|right|Screenshot der Menuconfig]]
 +
Ein (Cygwin-)Terminal öffnen, ins Checkout-Verzeichnis wechseln und folgendes einippen:
 +
make menuconfig
 +
 +
Dadurch startet ein Ncurses-basiertes Textmenü, mit dem sich einige Eigenschaften der Zielplattform einstellen lassen. Vorsicht ist geboten, wenn IDEs wie Eclipse zum Einsatz kommen, da sich dort integrierte Terminal-Emulatoren gerne an Ncurses-Ausgaben verschlucken. Um zu verhindern, dass das Ncurses-Menü durch einen normalen Build-Vorgang (via '''make''') aufgerufen wird, muss nach einem frischen Checkout bzw. nach einem '''make mrproper''' mindestens einmal '''make menuconfig''' in einem normalen Terminal-Emulator aufgerufen werden.
  
Tetris gibt es gleich in 3 verschiedenen Varianten
 
* Classic: Das ganz normale Tetris
 
* First Person Tetris: Statt die Steine zu drehen, dreht man hierbei das Spielfeld um den Stein
 
* Bastet: Diese Tetris Variante gibt einem stets den Stein, den man gerade am wenigsten gebrauchen kann
 
  
 +
===Kompilieren===
  
 +
Um die Firmware nach der Konfiguration für die Zielplattform zu bauen, genügt ein einfaches
 +
make
  
 +
Die Borgware enhält einen Simulator für Linux und BSD (OpenGL) sowie einen für Windows (Win32/GDI, Cygwin). Der Simulator-Build lässt sich folgendermaßen anstoßen:
 +
make simulator
 +
Das Build-System wählt automatischen den korrekten Simulator. Nach einem erfolgreichen Build liegt ein Binary namens <code>borgsim</code> oder <code>borgsim.exe</code> im selben Verzeichnis.
  
 +
==Handhabung des Simulators==
  
 +
Bitte behaltet im Hinterkopf, dass der Simulator KEIN Emulator ist. Er ermöglicht lediglich, die Borgware-2D als native Host-Anwendung zu bauen, so dass man seinen C-Code mit Hilfe eines Host-Debuggers wie dem GDB inspizieren kann. Der GUI-Thread der Anwendung fragt den simulierten Framebuffer des Borgs alle 20ms (Windows 40ms) ab und zeichnet seinen Inhalt in ein Fenster.
  
==Snake==
+
Die WASD-Tasten stehen für die Joystick-Richtungen und SPACE agiert als Feuerknopf. Der OpenGL-basierte Simulator (Linux/FreeBSD) erlaubt es, den Betrachtungswinkel der Matrix über die Pfeiltasten zu ändern (nicht unter Windows).
Füttere die Schlange
 
  
==Pong==
+
Aufgrund speziell angepasster Linkerskripte läuft der Simulator derzeit nur unter Linux, FreeBSD, NetBSD und Windows (und dort auch nur unter x86 bzw. x64). Prinzipiell ist der OpenGL-basierte Simulator plattform-unabhängig, allerdings müssen pro Betriebsystem und Architektur entsprechende Linkerskripte vorgehalten und ins Build-System integriert werden. Die Linkerskripte erzeugen beim Binden automatisch eine Datenstruktur für die Spielmenüeinträge und ermöglichen die EEPROM-Emulation im Simulator. Die Abhängigkeit von diesen Skripten ist derzeit das einzige Hindernis in Bezug auf Plattformunabhängigkeit. Patches welcome.  
hat nix mit dem Befehl Ping zu tun.
 
  
==Space Invaders==
 
Erst Schiessen, dann fragen.
 
  
= Verwandte Projekte =
+
== Verwandte Projekte ==
 +
* [http://blinkenlights.net/ Project Blinken Lights] benutzt gerne ganze Häuserfassaden für Animationen. Bekannt aus Funk und Fernsehen!
 
* [http://wiki.niftylight.de/index.php/Libniftyled LibNiftyLed] ist ein Projekt das sich mit der Abstraktion von LED-Steuerungen beschäftigt
 
* [http://wiki.niftylight.de/index.php/Libniftyled LibNiftyLed] ist ein Projekt das sich mit der Abstraktion von LED-Steuerungen beschäftigt

Aktuelle Version vom 18. Juni 2014, 00:45 Uhr

Übersicht[Bearbeiten]

Die Borgware-2D ist eine Firmware für AVR-basierte, zweidimensionale LED-Matrizen, insbesondere die Blinken Borgs. Hauptplattform ist der Borg16-Bausatz. Andere unterstützte Plattformen sind das LED Brett vom Hackerspace FFM, das ELO Ping-Pong-Board oder das LoL Shield von Jimmie P. Rodgers.

Andrés Ur-Borg
Borg16 mit Testdisplay

Animationen[Bearbeiten]

Mittlerweile gibt es zahlreiche Animationen für die Borgs. Hier sind ein paar Beispiele:

Matrix
Feuer
Scroll-Animation für Elemente der Spiele

...und viele weitere

Ein animiertes GIF (3,5 MB) vermittelt einen Eindruck von der Borgware-2D in Action ;)

Spiele[Bearbeiten]

Snake
Tetris
  • Tetris
    • Classic: Das ganz normale Tetris
    • First Person Tetris: Statt die Steine zu drehen, dreht man hierbei das Spielfeld um den Stein
    • Bastet: Diese Tetris Variante gibt einem stets den Stein, den man gerade am wenigsten gebrauchen kann
  • Snake
  • BreakOut
  • Space Invaders


Quellen[Bearbeiten]

Die aktuellen Quellen liegen bei GitHub. Diese lassen sich mit folgenden Befehlen auschecken:

git clone https://github.com/das-labor/borgware-2d.git
cd borgware-2d
git submodule init
git submodule update

Die letzten beiden Befehle sind notwendig, um die RFM12-Libary als Unterprojekt einzubinden.

Bauen der Firmware[Bearbeiten]

Derzeit unterstützte Build-Plattformen sind Linux, FreeBSD, NetBSD und Windows (via Cygwin). Die Simulator-Unterstützung beschränkt sich momentan auf x86- und x86_64-Architekturen. Für BSD gilt eine Besonderheit: Wenn hier von make die Rede ist, muss dort stattdessen gmake eingesetzt werden. Folgende Abhängigkeiten gelten unter den jeweiligen Systemen:


Abhängigkeiten unter Linux/BSD[Bearbeiten]

Die Paketnamen basieren auf den Debian/Ubuntu-Repositorys. Bitte entsprechend der Nomenklatur der verwendeten Linux-Distribution (bzw. BSD) anpassen.

  • build-essential (installiert eine komplette GCC-Tool-Chain für den Host)
  • bc
  • make (gmake unter FreeBSD)
  • libncurses5-dev
  • gcc-avr
  • avr-libc
  • binutils-avr
  • avrdude
  • freeglut3-dev
  • bash (ja, BSD, du bist gemeint!)


Abhängigkeiten unter Windows[Bearbeiten]

  • AVR GCC Toolchain für Windows, die Qual der Wahl:
    • WinAVR
      • avrdude bereits enthalten
      • Setup-Tool bietet an, die Toolchain in den Systempfad einzutragen
      • direkter Download von SourceForge
      • Projekt wurde 2010 eingestellt, daher ziemlich veraltet (avr-gcc 4.3.3)
    • Atmel AVR Toolchain for Windows
      • aktiv gepflegt, daher recht aktuell
      • Homepage nervt mit umständlichem Registrierungsformular vor dem Download
      • die Toolchain muss manuell im Systempfad eingetragen werden
      • avrdude ist nicht enthalten (aber es ist eine parallele WinAVR-Installation möglich)
  • Cygwin(64)
    • bc
    • make
    • gcc-core
    • gdb
    • libncurses-devel (Cygwin)
    • libncursesw-devel (Cygwin64)
  • libusb-win32 sofern ein USBasp-Programmiergerät mit avrdude genutzt wird


Konfigurieren[Bearbeiten]

Screenshot der Menuconfig

Ein (Cygwin-)Terminal öffnen, ins Checkout-Verzeichnis wechseln und folgendes einippen:

make menuconfig

Dadurch startet ein Ncurses-basiertes Textmenü, mit dem sich einige Eigenschaften der Zielplattform einstellen lassen. Vorsicht ist geboten, wenn IDEs wie Eclipse zum Einsatz kommen, da sich dort integrierte Terminal-Emulatoren gerne an Ncurses-Ausgaben verschlucken. Um zu verhindern, dass das Ncurses-Menü durch einen normalen Build-Vorgang (via make) aufgerufen wird, muss nach einem frischen Checkout bzw. nach einem make mrproper mindestens einmal make menuconfig in einem normalen Terminal-Emulator aufgerufen werden.


Kompilieren[Bearbeiten]

Um die Firmware nach der Konfiguration für die Zielplattform zu bauen, genügt ein einfaches

make 

Die Borgware enhält einen Simulator für Linux und BSD (OpenGL) sowie einen für Windows (Win32/GDI, Cygwin). Der Simulator-Build lässt sich folgendermaßen anstoßen:

make simulator

Das Build-System wählt automatischen den korrekten Simulator. Nach einem erfolgreichen Build liegt ein Binary namens borgsim oder borgsim.exe im selben Verzeichnis.

Handhabung des Simulators[Bearbeiten]

Bitte behaltet im Hinterkopf, dass der Simulator KEIN Emulator ist. Er ermöglicht lediglich, die Borgware-2D als native Host-Anwendung zu bauen, so dass man seinen C-Code mit Hilfe eines Host-Debuggers wie dem GDB inspizieren kann. Der GUI-Thread der Anwendung fragt den simulierten Framebuffer des Borgs alle 20ms (Windows 40ms) ab und zeichnet seinen Inhalt in ein Fenster.

Die WASD-Tasten stehen für die Joystick-Richtungen und SPACE agiert als Feuerknopf. Der OpenGL-basierte Simulator (Linux/FreeBSD) erlaubt es, den Betrachtungswinkel der Matrix über die Pfeiltasten zu ändern (nicht unter Windows).

Aufgrund speziell angepasster Linkerskripte läuft der Simulator derzeit nur unter Linux, FreeBSD, NetBSD und Windows (und dort auch nur unter x86 bzw. x64). Prinzipiell ist der OpenGL-basierte Simulator plattform-unabhängig, allerdings müssen pro Betriebsystem und Architektur entsprechende Linkerskripte vorgehalten und ins Build-System integriert werden. Die Linkerskripte erzeugen beim Binden automatisch eine Datenstruktur für die Spielmenüeinträge und ermöglichen die EEPROM-Emulation im Simulator. Die Abhängigkeit von diesen Skripten ist derzeit das einzige Hindernis in Bezug auf Plattformunabhängigkeit. Patches welcome.


Verwandte Projekte[Bearbeiten]

  • Project Blinken Lights benutzt gerne ganze Häuserfassaden für Animationen. Bekannt aus Funk und Fernsehen!
  • LibNiftyLed ist ein Projekt das sich mit der Abstraktion von LED-Steuerungen beschäftigt