130
Borg 16 – Getting Started Christian Kroll Chaostreff Dortmund / LABOR e.V. 09.11.2014 / Borg16-Folien Christian Kroll (CTDO/Labor) Borg 16 – Getting Started Borg16-Folien 2014 1 / 64

Borg 16 Getting Started - wiki.das-labor.org · Borg16–GettingStarted ChristianKroll ChaostreffDortmund/LABORe.V. 09.11.2014/Borg16-Folien ChristianKroll (CTDO/Labor) Borg16–GettingStarted

  • Upload
    others

  • View
    9

  • Download
    0

Embed Size (px)

Citation preview

Page 1: Borg 16 Getting Started - wiki.das-labor.org · Borg16–GettingStarted ChristianKroll ChaostreffDortmund/LABORe.V. 09.11.2014/Borg16-Folien ChristianKroll (CTDO/Labor) Borg16–GettingStarted

Borg 16 – Getting Started

Christian Kroll

Chaostreff Dortmund / LABOR e.V.

09.11.2014 / Borg16-Folien

Christian Kroll (CTDO/Labor) Borg 16 – Getting Started Borg16-Folien 2014 1 / 64

Page 2: Borg 16 Getting Started - wiki.das-labor.org · Borg16–GettingStarted ChristianKroll ChaostreffDortmund/LABORe.V. 09.11.2014/Borg16-Folien ChristianKroll (CTDO/Labor) Borg16–GettingStarted

Gliederung

1 Einführung in den Borg 16Übersicht über die BorgsVoraussetzungen für das Build-SystemKonfigurieren und Bauen der Borgware 2DFlashen der Firmware auf den Borg 16

2 Programmieren mit der Borgware 2DAPI-FunktionenAnimationenSpiele

3 Die Ansteuerung der LED-MatrixBeispiel für den Bildaufbau

Christian Kroll (CTDO/Labor) Borg 16 – Getting Started Borg16-Folien 2014 2 / 64

Page 3: Borg 16 Getting Started - wiki.das-labor.org · Borg16–GettingStarted ChristianKroll ChaostreffDortmund/LABORe.V. 09.11.2014/Borg16-Folien ChristianKroll (CTDO/Labor) Borg16–GettingStarted

Gliederung

1 Einführung in den Borg 16Übersicht über die BorgsVoraussetzungen für das Build-SystemKonfigurieren und Bauen der Borgware 2DFlashen der Firmware auf den Borg 16

2 Programmieren mit der Borgware 2DAPI-FunktionenAnimationenSpiele

3 Die Ansteuerung der LED-MatrixBeispiel für den Bildaufbau

Christian Kroll (CTDO/Labor) Borg 16 – Getting Started Borg16-Folien 2014 3 / 64

Page 4: Borg 16 Getting Started - wiki.das-labor.org · Borg16–GettingStarted ChristianKroll ChaostreffDortmund/LABORe.V. 09.11.2014/Borg16-Folien ChristianKroll (CTDO/Labor) Borg16–GettingStarted

Der Borg 16

der Borg 16 ist eine einfache Schaltung für 16 × 16-LED-Matrizenden Kern bildet eine professionell gefertigte Leerplatine für bedrahteteBauteiledie Bausätze enthalten alle Bauteile bis auf die LEDs und derenVorwiderständeoptional lässt sich noch ein CAN-Controller (SMD) oder einRFM12-Funk-Chip verbauen (nicht in den Bausätzen enthalten)

Christian Kroll (CTDO/Labor) Borg 16 – Getting Started Borg16-Folien 2014 4 / 64

Page 5: Borg 16 Getting Started - wiki.das-labor.org · Borg16–GettingStarted ChristianKroll ChaostreffDortmund/LABORe.V. 09.11.2014/Borg16-Folien ChristianKroll (CTDO/Labor) Borg16–GettingStarted

Draufsicht auf die Platine des Borg 16

Christian Kroll (CTDO/Labor) Borg 16 – Getting Started Borg16-Folien 2014 5 / 64

Page 6: Borg 16 Getting Started - wiki.das-labor.org · Borg16–GettingStarted ChristianKroll ChaostreffDortmund/LABORe.V. 09.11.2014/Borg16-Folien ChristianKroll (CTDO/Labor) Borg16–GettingStarted

Hardware des Borg 16

AVR ATmega32 @ 16 MHz, 2 KiB RAM, 32 KiB Flash, 1 KiBEEPROMauch unterstützt: ATmega644(P) und ATmega1284(P)

2 74HCT164-Schieberegister16 IRLD024-MOSFETs (sperrend) als Zeilentreiber2 UDN2981A-Treiber für die SpaltenAnschluss für Joystick nach dem 9 pol. Atari-StandardAnschluss für RS232ISP über 5 × 2 pol. Header ausgeführt (STK200-Belegung)optionale Komponenten:

I CAN-Bus-Controller MCP2515SO mit Transceiver MCP2551SNI RFM12-ControllerI CAN und RFM12 schließen sich leider gegenseitig aus

Christian Kroll (CTDO/Labor) Borg 16 – Getting Started Borg16-Folien 2014 6 / 64

Page 7: Borg 16 Getting Started - wiki.das-labor.org · Borg16–GettingStarted ChristianKroll ChaostreffDortmund/LABORe.V. 09.11.2014/Borg16-Folien ChristianKroll (CTDO/Labor) Borg16–GettingStarted

Software des Borg 16: Die Borgware 2D

enthält über 25 Animationen und 5 Spiele (+2 Varianten)lässt sich wie der Linux-Kernel menügeführt zusammenstellen

I Auswahl von Spielen und AnimationenI Optionen für das Finetuning

enthält eine einfache API für Grafik- und Joystick-Operationenenthält einen API-Simulator, um Animationen und Spiele direkt aufdem PC debuggen zu können (für Linux, *BSD und Windows)

Christian Kroll (CTDO/Labor) Borg 16 – Getting Started Borg16-Folien 2014 7 / 64

Page 8: Borg 16 Getting Started - wiki.das-labor.org · Borg16–GettingStarted ChristianKroll ChaostreffDortmund/LABORe.V. 09.11.2014/Borg16-Folien ChristianKroll (CTDO/Labor) Borg16–GettingStarted

Impressionen

Scrolltext Fire Matrix Stonefly Game of Life

Langton's Ant Bitmap Scroller Plasma Psychedelic Squares

Menu Breakout Snake Tetris Space Invaders

Christian Kroll (CTDO/Labor) Borg 16 – Getting Started Borg16-Folien 2014 8 / 64

Page 9: Borg 16 Getting Started - wiki.das-labor.org · Borg16–GettingStarted ChristianKroll ChaostreffDortmund/LABORe.V. 09.11.2014/Borg16-Folien ChristianKroll (CTDO/Labor) Borg16–GettingStarted

Gliederung

1 Einführung in den Borg 16Übersicht über die BorgsVoraussetzungen für das Build-SystemKonfigurieren und Bauen der Borgware 2DFlashen der Firmware auf den Borg 16

2 Programmieren mit der Borgware 2DAPI-FunktionenAnimationenSpiele

3 Die Ansteuerung der LED-MatrixBeispiel für den Bildaufbau

Christian Kroll (CTDO/Labor) Borg 16 – Getting Started Borg16-Folien 2014 9 / 64

Page 10: Borg 16 Getting Started - wiki.das-labor.org · Borg16–GettingStarted ChristianKroll ChaostreffDortmund/LABORe.V. 09.11.2014/Borg16-Folien ChristianKroll (CTDO/Labor) Borg16–GettingStarted

Voraussetzungen unter LinuxAm Beispiel von Ubuntu (ähnlich für andere Distributionen)

notwendige Pakete, um Build-System samt AVR-Image zu bauen:I AVR-Crosscompiler-Toolchain: gcc-avr, avr-libc und binutils-avrI Host-Compiler-Toolchain: gcc, libc6-dev und binutilsI make als eigentliches Build-BackendI libncurses5-dev für die Menükonfiguration

der Simulator benötigt noch libfreeglut3-dev

avrdude um das Image auf den AVR flashen zu könnengit um die Borgware 2D zu beschaffen bzw. zu aktualisieren

Christian Kroll (CTDO/Labor) Borg 16 – Getting Started Borg16-Folien 2014 10 / 64

Page 11: Borg 16 Getting Started - wiki.das-labor.org · Borg16–GettingStarted ChristianKroll ChaostreffDortmund/LABORe.V. 09.11.2014/Borg16-Folien ChristianKroll (CTDO/Labor) Borg16–GettingStarted

AVR-Programmer unter Linux

Um den USBasp bzw. andere Programmer ohne Root-Rechte nutzenzu können, muss man eine udev-Regeldatei (z.B. 99-usbasp.rules) mitfolgendem Inhalt anlegen:

/etc/udev/rules.d/99-usbasp.rules# Atmel AVR ISP mkIIATTR{idVendor}=="03eb", ATTR{idProduct}=="2104", GROUP="plugdev", MODE="660"

# usbprog bootloaderATTR{idVendor}=="1781", ATTR{idProduct}=="0c62", GROUP="plugdev", MODE="660"

# USBasp programmerATTR{idVendor}=="16c0", ATTR{idProduct}=="05dc", GROUP="plugdev", MODE="660"

Anschließend kann jeder Nutzer, der der Gruppe plugdev angehört,den Programmer nutzen.

Christian Kroll (CTDO/Labor) Borg 16 – Getting Started Borg16-Folien 2014 11 / 64

Page 12: Borg 16 Getting Started - wiki.das-labor.org · Borg16–GettingStarted ChristianKroll ChaostreffDortmund/LABORe.V. 09.11.2014/Borg16-Folien ChristianKroll (CTDO/Labor) Borg16–GettingStarted

Voraussetzungen unter Windows: WinAVRCrosscompiler für die AVR-Plattform unter Windows

WinAVR1 ist eine auf dem gcc basierendeAVR-Crosscompiler-Toolchainenthält zusätzlich avrdude in einer Windows-Versionbei der Installation sicherstellen, dass im Setup-Dialog die OptionenInstall Files und Add Directories To PATH ausgewählt sindenthält noch einen erweiterten Quellcode-Editor, der für dieBorgware 2D aber nicht benötigt wird

1http://winavr.sourceforge.net/download.htmlChristian Kroll (CTDO/Labor) Borg 16 – Getting Started Borg16-Folien 2014 12 / 64

Page 13: Borg 16 Getting Started - wiki.das-labor.org · Borg16–GettingStarted ChristianKroll ChaostreffDortmund/LABORe.V. 09.11.2014/Borg16-Folien ChristianKroll (CTDO/Labor) Borg16–GettingStarted

Voraussetzungen unter Windows: CygwinLinux für Windows

Cygwin2 bildet eine Linux-Umgebung unter Windows nachliefert einen gcc-Compiler (Host) für Windows mitüber das Cygwin-Setup lassen sich zusätzlich viele Anwendungspaketeaus dem Linux-Umfeld in Windows installierenfolgende dieser Pakete benötigt die Borgware 2D

I gcc4I makeI bcI libncurses-develI ggf. git (falls nicht anderweitig installiert)

die systemweite PATH-Umgebungsvariable muss evtl. um den PfadC:\Cygwin\bin (o.ä.) ergänzt werden, wobei dieser Pfad vor dem desWinAVR stehen muss

2http://www.cygwin.comChristian Kroll (CTDO/Labor) Borg 16 – Getting Started Borg16-Folien 2014 13 / 64

Page 14: Borg 16 Getting Started - wiki.das-labor.org · Borg16–GettingStarted ChristianKroll ChaostreffDortmund/LABORe.V. 09.11.2014/Borg16-Folien ChristianKroll (CTDO/Labor) Borg16–GettingStarted

USBasp unter WindowsInstallation des Treibers mit libusb-win32

aktuelles libusb-win323 Release herunterladen und entpackennun den USBasp-Programmer in den USB-Port steckenunter libusb-win32.w.x.y.z\bin die inf-wizard.exe startenim sich öffnenden Dialog USBasp auswählen und <Next> wählenim folgenden Device Configuration-Dialog wieder <Next> wählenanschließend einen Pfad für die zu erstellende INF-Datei angebenjetzt erscheint ein Dialog mit einem <Install Now...> -ButtonTreiber-Überprüfungswarnung ignoriereneh voilà, jetzt sollte ein Installation successful erscheinenevtl. den USBasp nochmal ein- und ausstecken

3http://sourceforge.net/projects/libusb-win32/files/Christian Kroll (CTDO/Labor) Borg 16 – Getting Started Borg16-Folien 2014 14 / 64

Page 15: Borg 16 Getting Started - wiki.das-labor.org · Borg16–GettingStarted ChristianKroll ChaostreffDortmund/LABORe.V. 09.11.2014/Borg16-Folien ChristianKroll (CTDO/Labor) Borg16–GettingStarted

Gliederung

1 Einführung in den Borg 16Übersicht über die BorgsVoraussetzungen für das Build-SystemKonfigurieren und Bauen der Borgware 2DFlashen der Firmware auf den Borg 16

2 Programmieren mit der Borgware 2DAPI-FunktionenAnimationenSpiele

3 Die Ansteuerung der LED-MatrixBeispiel für den Bildaufbau

Christian Kroll (CTDO/Labor) Borg 16 – Getting Started Borg16-Folien 2014 15 / 64

Page 16: Borg 16 Getting Started - wiki.das-labor.org · Borg16–GettingStarted ChristianKroll ChaostreffDortmund/LABORe.V. 09.11.2014/Borg16-Folien ChristianKroll (CTDO/Labor) Borg16–GettingStarted

Die Borgware 2D beschaffen

Ein Terminal (Cygwin unter Windows) starten:

Quellcode aus GitHub auscheckengit clone https://github.com/das-labor/borgware-2dcd borgware-2dgit submodule initgit submodule update

Die letzten beiden Schritte binden die RFM12-Library in den Quellcodeein. Mit einem git pull origin master im borgware-2d-Verzeichnislässt sich der Quellbaum später aktualisieren.

Christian Kroll (CTDO/Labor) Borg 16 – Getting Started Borg16-Folien 2014 16 / 64

Page 17: Borg 16 Getting Started - wiki.das-labor.org · Borg16–GettingStarted ChristianKroll ChaostreffDortmund/LABORe.V. 09.11.2014/Borg16-Folien ChristianKroll (CTDO/Labor) Borg16–GettingStarted

Die erste Konfiguration

im frisch ausgecheckten Verzeichnis ein make menuconfig ausführenBorg Configuration──────────────────────────────────────────────────────────────────────────────┌─────────────────────────────── Main Menu ───────────────────────────────┐│ Arrow keys navigate the menu. <Enter> selects submenus --->. ││ Highlighted letters are hotkeys. Pressing <Y> includes, <N> excludes. ││ <Esc><Esc> to exit, <?> for Help. Legend: [*] enabled [ ] disabled ││ [-] not available ││ ┌─────────────────────────────────────────────────────────────────────┐ ││ │ Load a Default Configuration ---> │ ││ │ General Setup ---> │ ││ │ Borg Hardware ---> │ ││ │ Features ---> │ ││ │ [ ] Scrolltext Support ---> (NEW) │ ││ │ [ ] RFM12 Support ---> (NEW) │ ││ │ [ ] joystick support ---> (NEW) │ ││ │ [ ] CAN bus support ---> (NEW) │ ││ │ [-] Menu Support │ ││ │ Games ---> │ ││ └──────────────v(+)───────────────────────────────────────────────────┘ │├─────────────────────────────────────────────────────────────────────────┤│ <Select> < Exit > < Help > │└─────────────────────────────────────────────────────────────────────────┘

klappt es nicht, fehlen oft die Header von ncurses (wirklichlibncurses5-dev bzw. unter Cygwin libncurses-develinstalliert?)

Christian Kroll (CTDO/Labor) Borg 16 – Getting Started Borg16-Folien 2014 17 / 64

Page 18: Borg 16 Getting Started - wiki.das-labor.org · Borg16–GettingStarted ChristianKroll ChaostreffDortmund/LABORe.V. 09.11.2014/Borg16-Folien ChristianKroll (CTDO/Labor) Borg16–GettingStarted

Der erste Schritt nach einem frischen Checkout

zunächst muss unter Load a Default Configuration einmaligdas Profil borg-16 geladen werden┌──────────────────── Load Default Configuration ────────────────────┐│ Select the default profile you wish to load. <Esc><Esc> to abort. ││ ││ ┌────────────────────────────────────────────────────────────────┐ ││ │ ( ) borg-16 │ ││ │ ( ) borg-ancient │ ││ │ ( ) borg-andre │ ││ │ ( ) borgjacke │ ││ │ ( ) borg-ls │ ││ │ ( ) FFM-Jochen │ ││ │ ( ) FFM-LedBrett │ ││ └────────────────────────────────────────────────────────────────┘ │├────────────────────────────────────────────────────────────────────┤│ <Select> < Help > │└────────────────────────────────────────────────────────────────────┘

ein Return bringt uns unmittelbar zum Hauptmenü zurückwir haben nun eine sinnvolle Anfangskonfiguration

Christian Kroll (CTDO/Labor) Borg 16 – Getting Started Borg16-Folien 2014 18 / 64

Page 19: Borg 16 Getting Started - wiki.das-labor.org · Borg16–GettingStarted ChristianKroll ChaostreffDortmund/LABORe.V. 09.11.2014/Borg16-Folien ChristianKroll (CTDO/Labor) Borg16–GettingStarted

Borgware 2D: General Setup

im General Setup lassen sich der verwendete Mikrocontroller samtTaktfrequenz einstellen┌─────────── General Setup ────────────┐│ Arrow keys navigate the menu... ││ ┌──────────────────────────────────┐ ││ │ (ATmega32) Target MCU │ ││ │ (16000000) MCU frequency │ ││ └──────────────────────────────────┘ │├──────────────────────────────────────┤│ <Select> < Exit > < Help > │└──────────────────────────────────────┘

┌────────────────┐│ ( ) ATmega8 ││ (X) ATmega32 ││ ( ) ATmega328 ││ ( ) ATmega644 ││ ( ) ATmega644p ││ ( ) ATmega8515 │└────────────────┘

gültige Werte für den Borg 16 sind ATmega32 und 16000000 Hzwird der pinkompatible ATmega644(P) benutzt, so ist dies hierentsprechend umzutragen

Christian Kroll (CTDO/Labor) Borg 16 – Getting Started Borg16-Folien 2014 19 / 64

Page 20: Borg 16 Getting Started - wiki.das-labor.org · Borg16–GettingStarted ChristianKroll ChaostreffDortmund/LABORe.V. 09.11.2014/Borg16-Folien ChristianKroll (CTDO/Labor) Borg16–GettingStarted

Borgware 2D: Borg Hardware

unter Borg Hardware werden der zu verwendende Hardware-Treiberund die Eigenschaften der Matrix konfiguriertfür den Borg 16 sind die hier gezeigten Werte richtig

┌──────────── Borg Hardware ────────────┐│ Arrow keys navigate the menu... ││ ┌───────────────────────────────────┐ ││ │ (16) Number of rows │ ││ │ (16) Number of columns │ ││ │ (3) Number of brightnes-levels │ ││ │ (Borg-16) Hardware Driver │ ││ │ Borg16 port setup ---> │ ││ └───────────────────────────────────┘ │├───────────────────────────────────────┤│ <Select> < Exit > < Help > │└───────────────────────────────────────┘

┌──────────── Borg16 port setup ──────────────┐│ Arrow keys navigate the menu... ││ ┌─────────────────────────────────────────┐ ││ │ (PORTC) Column Port 1 (right) │ ││ │ (PORTA) Column Port 2 (left) │ ││ │ (PORTD) port for row shiftregisters │ ││ │ --- pin numbers on shiftregister port │ ││ │ (Pin4) /MCLR Pin │ ││ │ (Pin6) CLK Pin │ ││ │ (Pin7) DATA Pin │ ││ │ --- fixing hardwareproblems in software │ ││ │ [ ] reverse cols │ ││ │ [ ] invert rows │ ││ │ --- for borg jacket │ ││ │ [ ] interlaced rows │ ││ │ [ ] interlaced cols │ ││ └─────────────────────────────────────────┘ │├─────────────────────────────────────────────┤│ <Select> < Exit > < Help > │└─────────────────────────────────────────────┘

die Matrix-Parameter müssen mit den fest verdrahteten Werten imausgewählten Treiber übereinstimmen

Christian Kroll (CTDO/Labor) Borg 16 – Getting Started Borg16-Folien 2014 20 / 64

Page 21: Borg 16 Getting Started - wiki.das-labor.org · Borg16–GettingStarted ChristianKroll ChaostreffDortmund/LABORe.V. 09.11.2014/Borg16-Folien ChristianKroll (CTDO/Labor) Borg16–GettingStarted

Borgware 2D: Features

Features enthält einen kryptographisch sicheren Zufallsgenerator┌───────────── Features ───────────────┐│ Arrow keys navigate the menu... ││ ┌──────────────────────────────────┐ ││ │ [*] prng random number generator │ ││ │ [-] CAN Time Extension │ ││ └──────────────────────────────────┘ │├──────────────────────────────────────┤│ <Select> < Exit > < Help > │└──────────────────────────────────────┘

viele Animationen und Spiele lassen sich nur auswählen, wenn eraktiviert istCAN Time Extension ist nur in Verbindung mit derLabor-CAN-Infrastruktur sinnvoll

Christian Kroll (CTDO/Labor) Borg 16 – Getting Started Borg16-Folien 2014 21 / 64

Page 22: Borg 16 Getting Started - wiki.das-labor.org · Borg16–GettingStarted ChristianKroll ChaostreffDortmund/LABORe.V. 09.11.2014/Borg16-Folien ChristianKroll (CTDO/Labor) Borg16–GettingStarted

Borgware 2D: Scrolltext Support

[∗] Scrolltext Support –-> aktiviert die API-Funktion fürLauftexte, die alle Spiele benötigenim Untermenü lassen sich noch Schriftart, Scrollgeschwindigkeit undder regelmäßig erscheinende Lauftext einstellen

┌──────────── Scrolltext Support ───────────────┐│ Arrow keys navigate the menu... ││ ┌───────────────────────────────────────────┐ ││ │ (Arial_8) Scrolltext Font │ ││ │ (128) Scrolltest buffer size │ ││ │ (20) Default x speed │ ││ │ (20) Default y speed │ ││ │ Default text: "</#www.das-labor.org" │ ││ └───────────────────────────────────────────┘ │├───────────────────────────────────────────────┤│ <Select> < Exit > < Help > │└───────────────────────────────────────────────┘

der Text muss mit „</#“ beginnen (Lauftext von rechts nach links),sonst erscheint nichtstatsächlich verbirgt sich dahinter eine Syntax für Lauftexteffekte, essei an dieser Stelle auf das Labor-Wiki4 verwiesen

4http://www.das-labor.org/wiki/BorgTextAnimChristian Kroll (CTDO/Labor) Borg 16 – Getting Started Borg16-Folien 2014 22 / 64

Page 23: Borg 16 Getting Started - wiki.das-labor.org · Borg16–GettingStarted ChristianKroll ChaostreffDortmund/LABORe.V. 09.11.2014/Borg16-Folien ChristianKroll (CTDO/Labor) Borg16–GettingStarted

Borgware 2D: Joystick Support

Joystick Support –-> Aktvierung der Joystick-Unterstützung(Voraussetzung für Spiele) und Einstellung des Joystick-TypsHardware-spezifische Eigenschaften befinden sich im Untermenü┌────────── Joystick Support ──────────┐│ Arrow keys navigate the menu... ││ ┌──────────────────────────────────┐ ││ │ [*] Joystick Support │ ││ │ (Atari-9-Pin) Joystick Type │ ││ │ Joystick Settings ---> │ ││ └──────────────────────────────────┘ │├──────────────────────────────────────┤│ <Select> < Exit > < Help > │└──────────────────────────────────────┘

┌────────── Joystick Settings ─────────┐│ Arrow keys navigate the menu... ││ ┌──────────────────────────────────┐ ││ │ (PINB) Pin up │ ││ │ (Bit0) Bit up │ ││ │ (PINB) Pin down │ ││ │ (Bit1) Bit down │ ││ │ (PINB) Pin left │ ││ │ (Bit2) Bit left │ ││ │ (PINB) Pin right │ ││ │ (Bit3) Bit right │ ││ │ (PIND) Pin fire │ ││ │ (Bit3) Bit fire │ ││ └──────────────────────────────────┘ │├──────────────────────────────────────┤│ <Select> < Exit > < Help > │└──────────────────────────────────────┘

die hier gezeigten Werte sind die richtigen für den Borg 16

Christian Kroll (CTDO/Labor) Borg 16 – Getting Started Borg16-Folien 2014 23 / 64

Page 24: Borg 16 Getting Started - wiki.das-labor.org · Borg16–GettingStarted ChristianKroll ChaostreffDortmund/LABORe.V. 09.11.2014/Borg16-Folien ChristianKroll (CTDO/Labor) Borg16–GettingStarted

Borgware 2D: Menu Support, Games, Animations

[∗] Menu Support ermöglicht die Spielauswahl mit dem Joystick

Games –-> beherbergt eben diese Spiele:┌────────────── Games ───────────────┐│ Arrow keys navigate the menu... ││ ┌────────────────────────────────┐ ││ │ [*] Tetris ---> │ ││ │ [*] Space Invaders │ ││ │ [*] Snake │ ││ │ [*] Breakout │ ││ │ [*] Kart │ ││ └────────────────────────────────┘ │├────────────────────────────────────┤│ <Select> < Exit > < Help > │└────────────────────────────────────┘

┌────────────── Tetris ──────────────┐│ Arrow keys navigate the menu... ││ ┌────────────────────────────────┐ ││ │ [*] Standard Tetris │ ││ │ [*] Bastard Tetris │ ││ │ [*] First Person Tetris │ ││ └────────────────────────────────┘ │├────────────────────────────────────┤│ <Select> < Exit > < Help > │└────────────────────────────────────┘

Animations –-> enhält im Untermenü eine Vielzahl vonAnimationen (siehe Impressionen)

Christian Kroll (CTDO/Labor) Borg 16 – Getting Started Borg16-Folien 2014 24 / 64

Page 25: Borg 16 Getting Started - wiki.das-labor.org · Borg16–GettingStarted ChristianKroll ChaostreffDortmund/LABORe.V. 09.11.2014/Borg16-Folien ChristianKroll (CTDO/Labor) Borg16–GettingStarted

Borgware 2D: CAN und RFM12

[ ] RFM12 support –-> und [ ] CAN bus support –-> sind nursinnvoll, wenn diese Komponenten auch verbaut sinddie RFM12-Library verfügt zudem über keine Simulator-Stubs, so dassein Simulator-Build fehlschlägt, wenn diese Option aktiv ist

Christian Kroll (CTDO/Labor) Borg 16 – Getting Started Borg16-Folien 2014 25 / 64

Page 26: Borg 16 Getting Started - wiki.das-labor.org · Borg16–GettingStarted ChristianKroll ChaostreffDortmund/LABORe.V. 09.11.2014/Borg16-Folien ChristianKroll (CTDO/Labor) Borg16–GettingStarted

Speichern der Konfiguration

wählt man im Hauptmenü <Exit> , so wird nach dem Speichern derKonfiguration gefragt┌──────────────────────────────────────────────────────────┐│ Do you wish to save your new Borg configuration? │├──────────────────────────────────────────────────────────┤│ < Yes > < No > │└──────────────────────────────────────────────────────────┘

dies bejahen wir, woraufhin eine .config-Datei (Build-System)und eine autoconf.h-Datei (Quellcode) erzeugt werden

Christian Kroll (CTDO/Labor) Borg 16 – Getting Started Borg16-Folien 2014 26 / 64

Page 27: Borg 16 Getting Started - wiki.das-labor.org · Borg16–GettingStarted ChristianKroll ChaostreffDortmund/LABORe.V. 09.11.2014/Borg16-Folien ChristianKroll (CTDO/Labor) Borg16–GettingStarted

Der erste Build

Ein make stößt den Build-Vorgang an:make

checking dependencies for pixel.cchecking dependencies for display_loop.c...==============================image compiled for: atmega32size is:

Program: 26320 bytes(.text + .data)

Data: 618 bytes(.data + .bss)==============================

hat alles geklappt liegt nun das Image image.hex im Intel-Hex-Formatim borgware-2d-Verzeichnis

Christian Kroll (CTDO/Labor) Borg 16 – Getting Started Borg16-Folien 2014 27 / 64

Page 28: Borg 16 Getting Started - wiki.das-labor.org · Borg16–GettingStarted ChristianKroll ChaostreffDortmund/LABORe.V. 09.11.2014/Borg16-Folien ChristianKroll (CTDO/Labor) Borg16–GettingStarted

Gliederung

1 Einführung in den Borg 16Übersicht über die BorgsVoraussetzungen für das Build-SystemKonfigurieren und Bauen der Borgware 2DFlashen der Firmware auf den Borg 16

2 Programmieren mit der Borgware 2DAPI-FunktionenAnimationenSpiele

3 Die Ansteuerung der LED-MatrixBeispiel für den Bildaufbau

Christian Kroll (CTDO/Labor) Borg 16 – Getting Started Borg16-Folien 2014 28 / 64

Page 29: Borg 16 Getting Started - wiki.das-labor.org · Borg16–GettingStarted ChristianKroll ChaostreffDortmund/LABORe.V. 09.11.2014/Borg16-Folien ChristianKroll (CTDO/Labor) Borg16–GettingStarted

Voraussetzungen bei der Hardware

die folgenden Schritte gehen davon aus, dass. . .I . . . die Platine des Borg 16 vollständig aufgebaut istI . . . der USBasp am PC angeschlossen und eingerichtet istI . . . die ISP-Schnittstelle des Borg 16 mit dem USBasp verbunden ist

die ISP-Leitungen des Borg 16 sind über einen 5 × 2-Headerausgeführt mit Pin 1 oben rechts (D-Sub-Anschlüssen zeigen inSüdrichtung)bei erstmaliger Inbetriebnahme des ATMega muss der SLOW-Jumper(J3) des USBasp gesetzt sein

Christian Kroll (CTDO/Labor) Borg 16 – Getting Started Borg16-Folien 2014 29 / 64

Page 30: Borg 16 Getting Started - wiki.das-labor.org · Borg16–GettingStarted ChristianKroll ChaostreffDortmund/LABORe.V. 09.11.2014/Borg16-Folien ChristianKroll (CTDO/Labor) Borg16–GettingStarted

Einen jungfräulichen Mikrocontroller vorbereitenFuses setzen mit USBasp, avrdude und ISP-Schnittstelle

der Mikrocontroller wird einmalig über sog. Fuses eingestellt, wobeiwir zwischen lfuse, hfuse und bei ATmega644(P)/1284(P) auch efuseunterscheidendie genaue Bedeutung der einzelnen Bits der Fuses lässt sich aus demDatenblatt des jeweiligen Mikrocontrollers entnehmenkonkret stellen wir bei den ATmegas folgendes ein:

I externes Quarz mit 16 MHzI EEPROM-Inhalte bleiben beim Flashen erhaltenI Bootloader nutzen (optional)I Bootloadergröße 512 Words (=̂1024 Bytes)I serielle Programmierung über ISP zulassenI Brownout-Detection bei 4,3V

Keine Experimente an den Fuses!Vorsicht beim Ändern der Fuses! Eine falsche Einstellung kann denATmega dauerhaft unbrauchbar machen!

Christian Kroll (CTDO/Labor) Borg 16 – Getting Started Borg16-Folien 2014 30 / 64

Page 31: Borg 16 Getting Started - wiki.das-labor.org · Borg16–GettingStarted ChristianKroll ChaostreffDortmund/LABORe.V. 09.11.2014/Borg16-Folien ChristianKroll (CTDO/Labor) Borg16–GettingStarted

Fuses setzen mit USBasp und avrdude

Passende Fuses für den Borg 16 (ohne Bootloader)MCU lfuse hfuse efuse avrdude-BefehlATmega32 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

über den Fuse-Calculator5 von Engbedded lassen sich diehexadezimalen Werte in sprechende Namen umwandelndie dort verwendeten Bezeichnungen kann man dann bequem imDatenblatt des jeweiligen Controllers nachschlagen

5http://www.engbedded.com/fusecalcChristian Kroll (CTDO/Labor) Borg 16 – Getting Started Borg16-Folien 2014 31 / 64

Page 32: Borg 16 Getting Started - wiki.das-labor.org · Borg16–GettingStarted ChristianKroll ChaostreffDortmund/LABORe.V. 09.11.2014/Borg16-Folien ChristianKroll (CTDO/Labor) Borg16–GettingStarted

Fuses setzen mit USBasp und avrdude

Passende Fuses für den Borg 16 (mit Bootloader)MCU lfuse hfuse efuse avrdude-BefehlATmega32 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

mit Bootloader bedeutet, dass die letzten 512 Words (=̂1024 Bytes)des Flash-ROMs für ein von der Borgware-2D unabhängigesProgramm (dem Bootloader) reserviert sinddie o.g. Fuse-Einstellungen sorgen dafür, dass der ATmega nacheinem Reset den Bootloader anstatt die Borgware-2D startet

Christian Kroll (CTDO/Labor) Borg 16 – Getting Started Borg16-Folien 2014 32 / 64

Page 33: Borg 16 Getting Started - wiki.das-labor.org · Borg16–GettingStarted ChristianKroll ChaostreffDortmund/LABORe.V. 09.11.2014/Borg16-Folien ChristianKroll (CTDO/Labor) Borg16–GettingStarted

Den Borg 16 mit dem USBasp flashenProgrammierung über den ISP

Die image.hex -Datei mit avrdude und USBasp flashenATmega32 avrdude -c usbasp -p m32 -U f:w:image.hexATmega644 avrdude -c usbasp -p m644 -U f:w:image.hexATmega644P avrdude -c usbasp -p m644p -U f:w:image.hexATmega1284 avrdude -c usbasp -p m1284 -U f:w:image.hexATmega1284p avrdude -c usbasp -p m1284p -U f:w:image.hex

Dies weißt avrdude an, als Programmer -c einen USBasp zu verwenden, als Target -p einenATmega32/644(P)/1284(P) anzunehmen und eine Speicheroperation -U im Flash-ROM fdurchzuführen, und zwar das Schreiben w des Inhalts von image.hex.

BootloaderWird die Borgware 2D direkt mittels ISP auf den ATmega übertragen,geht ein evtl. zuvor aufgespielter Bootloader verloren. Dementsprechendmuss der Bootloader in den Fuses ggf. deaktiviert werden.

Christian Kroll (CTDO/Labor) Borg 16 – Getting Started Borg16-Folien 2014 33 / 64

Page 34: Borg 16 Getting Started - wiki.das-labor.org · Borg16–GettingStarted ChristianKroll ChaostreffDortmund/LABORe.V. 09.11.2014/Borg16-Folien ChristianKroll (CTDO/Labor) Borg16–GettingStarted

Bootloader

anstatt mit einem dediziertem Programmiergerät wie dem USBaspkann sich ein AVR auch „selber” flashender hintere Teil des Flash-ROMs kann per Fuse für einen Bootloaderreserviert werden, der nach einem Reset direkt gestartet wirddieser kann bei Bedarf die eigentliche Firmware von anderen Quellenwie der seriellen Schnittstelle nachladen und vorne abspeichern

Bootloader

0x0000 0xFC00

Regulärer Flash-ROM-Bereich

Start1

wird ggf. überschrieben2

Rücksprung in eigentliche Firmware3

externeDaten

Christian Kroll (CTDO/Labor) Borg 16 – Getting Started Borg16-Folien 2014 34 / 64

Page 35: Borg 16 Getting Started - wiki.das-labor.org · Borg16–GettingStarted ChristianKroll ChaostreffDortmund/LABORe.V. 09.11.2014/Borg16-Folien ChristianKroll (CTDO/Labor) Borg16–GettingStarted

Serieller Bootloader für den Borg16

in der AVR109 Application Note6 beschreibt Atmel ein Protokoll zumFlashen von AVR-Controllern über die serielle Schnittstelledieses Protokoll wird von vielen AVR-zentrierten Werkzeugen (u.a.von avrdude) unterstütztwir verwenden AVRProg Boot 0.85 von Martin Thomas et al.7

den vorgenannten genannten Bootloader8 herunterladen, entpackenund in das Verzeichnis wechseln

6http://www.atmel.com/Images/doc1644.pdf7http://www.siwawi.arubi.uni-kl.de/avr_projects/index.html#avrprog_boot8http://www.siwawi.arubi.uni-kl.de/avr_projects/avrprog_boot_v0_85_20081203.zip

Christian Kroll (CTDO/Labor) Borg 16 – Getting Started Borg16-Folien 2014 35 / 64

Page 36: Borg 16 Getting Started - wiki.das-labor.org · Borg16–GettingStarted ChristianKroll ChaostreffDortmund/LABORe.V. 09.11.2014/Borg16-Folien ChristianKroll (CTDO/Labor) Borg16–GettingStarted

AVRProg Boot konfigurieren, bauen und flashen

AVRProg Bootim makefile die Variable MCU auf atmega32 setzen (für ATmega644/Pentsprechend adaptieren) und BOOTSIZE auf 512 ändernin der main.c müssen folgende #defines geändert werden:#define F_CPU 16000000#define BAUDRATE 19200// #define START_SIMPLE auskommentieren!!#define START_WAIT

anschließend kann der Bootloader mit make gebaut werdenmittels avrdude den Bootloader flashen (dieses Mal noch über ISP)und ggf. Fuses setzenavrdude -c usbasp -p m32 -U f:w:main.hex

Christian Kroll (CTDO/Labor) Borg 16 – Getting Started Borg16-Folien 2014 36 / 64

Page 37: Borg 16 Getting Started - wiki.das-labor.org · Borg16–GettingStarted ChristianKroll ChaostreffDortmund/LABORe.V. 09.11.2014/Borg16-Folien ChristianKroll (CTDO/Labor) Borg16–GettingStarted

Flashen über die serielle Schnittstelle

der ATmega enthält nun lediglich den Bootloader und dieBorgware 2D muss jetzt seriell überspielt werdendazu ist der Borg 16 mit einem seriellen Kabel oder einemUSB-Seriell-Adapter mit dem PC zu verbindenavrdude im borgware-2d-Verzeichnis folgendermaßen aufrufen:avrdude -c avr109 -b 19200 -P /dev/ttyS0|COM1 \-p m32|m644|m644p -U f:w:image.hex

die grau hinterlegten Angaben sind der Situation entsprechendanzupassenwenn man den Borg 16 seriell flashen möchte, den Resetknopf 1-2Sekunden drücken, unmittelbar danach obiges avrdude-Kommandoabsetzen, dann sollte der Flash-Vorgang einsetzenes kann ein paar Versuche kosten, bis es klappt

Christian Kroll (CTDO/Labor) Borg 16 – Getting Started Borg16-Folien 2014 37 / 64

Page 38: Borg 16 Getting Started - wiki.das-labor.org · Borg16–GettingStarted ChristianKroll ChaostreffDortmund/LABORe.V. 09.11.2014/Borg16-Folien ChristianKroll (CTDO/Labor) Borg16–GettingStarted

Gliederung

1 Einführung in den Borg 16Übersicht über die BorgsVoraussetzungen für das Build-SystemKonfigurieren und Bauen der Borgware 2DFlashen der Firmware auf den Borg 16

2 Programmieren mit der Borgware 2DAPI-FunktionenAnimationenSpiele

3 Die Ansteuerung der LED-MatrixBeispiel für den Bildaufbau

Christian Kroll (CTDO/Labor) Borg 16 – Getting Started Borg16-Folien 2014 38 / 64

Page 39: Borg 16 Getting Started - wiki.das-labor.org · Borg16–GettingStarted ChristianKroll ChaostreffDortmund/LABORe.V. 09.11.2014/Borg16-Folien ChristianKroll (CTDO/Labor) Borg16–GettingStarted

Grober Ablauf in der Borgware 2D

main.c

display_loop.c

Animation 1

Animation 2

Animation n

menu/menu.c

Spiel 1

Spiel 2

...

oder

oder

Interrupt Handler (z.B. TIMER0_COMP_vect)

Ansteuerung der Matrix mitBilddaten aus einem Framebuffer

Christian Kroll (CTDO/Labor) Borg 16 – Getting Started Borg16-Folien 2014 39 / 64

Page 40: Borg 16 Getting Started - wiki.das-labor.org · Borg16–GettingStarted ChristianKroll ChaostreffDortmund/LABORe.V. 09.11.2014/Borg16-Folien ChristianKroll (CTDO/Labor) Borg16–GettingStarted

Wichtige Anlaufpunkte

src/config.h enthält (indirekt über src/autoconf.h) wichtigeParameter wie Abmessungen und Farbtiefe der Matrix

I NUMPLANES – die Anzahl der HelligkeitsstufenI NUM_ROWS – die Anzahl der ZeilenI NUM_COLS – die Anzahl der Spalten

src/main.c ist der Einstiegspunkt, der die Hardware initialisiert undanschließend eine Endlosschleife startetdiese ist in src/display_loop.c, und geht alle konfiguriertenAnimationen durch

Christian Kroll (CTDO/Labor) Borg 16 – Getting Started Borg16-Folien 2014 40 / 64

Page 41: Borg 16 Getting Started - wiki.das-labor.org · Borg16–GettingStarted ChristianKroll ChaostreffDortmund/LABORe.V. 09.11.2014/Borg16-Folien ChristianKroll (CTDO/Labor) Borg16–GettingStarted

Die Pixel-API in src/pixel.h

In src/pixel.h befinden sich folgende Schnittstellen:der Typ pixel, eine Struktur mit den Attributen x und y

(pixel){0, 0} ist hierbei RECHTS OBENdie Funktion setpixel(pixel p, unsigned char c), wobei c einHelligkeitswert von 0 bis 3 sein mussfür die meisten Dinge ist setpixel(...) vollkommen ausreichendwer mehr Geschwindigkeit braucht, kann direkt in den Framebufferschreiben

Christian Kroll (CTDO/Labor) Borg 16 – Getting Started Borg16-Folien 2014 41 / 64

Page 42: Borg 16 Getting Started - wiki.das-labor.org · Borg16–GettingStarted ChristianKroll ChaostreffDortmund/LABORe.V. 09.11.2014/Borg16-Folien ChristianKroll (CTDO/Labor) Borg16–GettingStarted

Der Framebuffer

unsigned char pixmap[NUMPLANE][NUM_ROWS][LINEBYTES] enthältden FramebufferLINEBYTES entepricht dabei NUM_COLS / 8 (immer aufgerundet)ein Pixel verteilt sich über drei Planes, wo er jeweils durch ein Bitrepräsentiert wirdin je mehr Planes das jeweils ihn repräsentierende Bit gesetzt ist,desto heller wird er dargestellttechnisch ist es so, dass die entsprechende LED länger leuchtet, jeöfter das Bit gesetzt ist

Christian Kroll (CTDO/Labor) Borg 16 – Getting Started Borg16-Folien 2014 42 / 64

Page 43: Borg 16 Getting Started - wiki.das-labor.org · Borg16–GettingStarted ChristianKroll ChaostreffDortmund/LABORe.V. 09.11.2014/Borg16-Folien ChristianKroll (CTDO/Labor) Borg16–GettingStarted

Der Framebuffer anschaulich

0 1 1 1

0 0 1 21 1 1

0 1 1 1

0 1 1 1

0 0 1 1

0 0 1 1

0 0 1 1

0 0 1 1

0 0 0 1

0 0 0 1

0 0 0 1

0 0 0 1

NUM_COLSNUM_R

OWS

NUMPLANES

Christian Kroll (CTDO/Labor) Borg 16 – Getting Started Borg16-Folien 2014 43 / 64

Page 44: Borg 16 Getting Started - wiki.das-labor.org · Borg16–GettingStarted ChristianKroll ChaostreffDortmund/LABORe.V. 09.11.2014/Borg16-Folien ChristianKroll (CTDO/Labor) Borg16–GettingStarted

Nützliche Funktionen

in src/util.h gibt es die wait(int ms)-Funktion, die ms Millisekundenwarteteine Animation sollte immer ein wait(x) enthalten, da dort ein Hookenthalten ist, der u.a. den Menüaufruf ermöglichtin src/random/prng.h befindet sich der Zufallsgenerator, der mittelsrandom8() eine zufällige Zahl zwischen 0 und 255 zurückgibtsrc/scrolltext/scrolltext.h enthält die scrolltext(char*str)-Funktion, die einen Lauftext ausgibtnicht vergessen: ein String muss mit einem Kommando wie „</#“eingeleitet werden

Christian Kroll (CTDO/Labor) Borg 16 – Getting Started Borg16-Folien 2014 44 / 64

Page 45: Borg 16 Getting Started - wiki.das-labor.org · Borg16–GettingStarted ChristianKroll ChaostreffDortmund/LABORe.V. 09.11.2014/Borg16-Folien ChristianKroll (CTDO/Labor) Borg16–GettingStarted

Joystick-Abfrage in src/joystick/joystick.h

um den Joystick abzufragen gibt es 5 MakrosI JOYISUPI JOYISDOWNI JOYISLEFTI JOYISRIGHTI JOYISFIRE

diese Makros liefern einen Wert ungleich 0, sobald die entsprechendeRichtung gedrückt wirdwenn man den Joystick in einem sehr kurzen Zeitintervall abfragt,muss man das Nachprellen der Kontakte berücksichtigen (siehesrc/games/tetris/input.c

Christian Kroll (CTDO/Labor) Borg 16 – Getting Started Borg16-Folien 2014 45 / 64

Page 46: Borg 16 Getting Started - wiki.das-labor.org · Borg16–GettingStarted ChristianKroll ChaostreffDortmund/LABORe.V. 09.11.2014/Borg16-Folien ChristianKroll (CTDO/Labor) Borg16–GettingStarted

Gliederung

1 Einführung in den Borg 16Übersicht über die BorgsVoraussetzungen für das Build-SystemKonfigurieren und Bauen der Borgware 2DFlashen der Firmware auf den Borg 16

2 Programmieren mit der Borgware 2DAPI-FunktionenAnimationenSpiele

3 Die Ansteuerung der LED-MatrixBeispiel für den Bildaufbau

Christian Kroll (CTDO/Labor) Borg 16 – Getting Started Borg16-Folien 2014 46 / 64

Page 47: Borg 16 Getting Started - wiki.das-labor.org · Borg16–GettingStarted ChristianKroll ChaostreffDortmund/LABORe.V. 09.11.2014/Borg16-Folien ChristianKroll (CTDO/Labor) Borg16–GettingStarted

Vorgehensweise zum Einbinden einer Animation

ein kompilierfähiges Grundgerüst in Form einer .c- und .h-Datei imVerzeichnis src/animations anlegendas Konfigrationsmenü über die neue Animation in Kenntnis setzen,d.h. die Datei src/animations/config.in anpassendas Build-System ebenfalls in Kenntnis setzen und die Dateisrc/animations/Makefile ergänzenden eingangs erwähnten Header in die src/display_loop.c inkludierenim großem switch/case-Block der display_loop()-Funktion einenoch nicht vergebene Nummer suchenanhand dieser Nummer einen neuen case anfügen und dort dieAnimation aufrufen

Christian Kroll (CTDO/Labor) Borg 16 – Getting Started Borg16-Folien 2014 47 / 64

Page 48: Borg 16 Getting Started - wiki.das-labor.org · Borg16–GettingStarted ChristianKroll ChaostreffDortmund/LABORe.V. 09.11.2014/Borg16-Folien ChristianKroll (CTDO/Labor) Borg16–GettingStarted

Die Header-Datei src/animations/myanim.h

#ifndef MYANIM_H_#define MYANIM_H_

void myanim(void);

#endif /* MYANIM_H_ */

Christian Kroll (CTDO/Labor) Borg 16 – Getting Started Borg16-Folien 2014 48 / 64

Page 49: Borg 16 Getting Started - wiki.das-labor.org · Borg16–GettingStarted ChristianKroll ChaostreffDortmund/LABORe.V. 09.11.2014/Borg16-Folien ChristianKroll (CTDO/Labor) Borg16–GettingStarted

Die C-Datei src/animations/myanim.c

#include "../config.h"#include "../pixel.h"#include "../util.h"#include "../random/prng.h"#include "myanim.h"

void myanim(void) {unsigned char startcolor = 0, color;

unsigned int const times = 100 + (random8() % 100);for (unsigned int t = 0; t < times; ++t) {

for (unsigned char y = 0; y < NUM_ROWS; ++y) {color = startcolor;for (unsigned char x = 0; x < NUM_COLS; ++x) {

setpixel((pixel){x, y}, color);color = (color + 1) % (NUMPLANE + 1);

}}startcolor = (startcolor + 1) % (NUMPLANE + 1);wait(150);

}}

Christian Kroll (CTDO/Labor) Borg 16 – Getting Started Borg16-Folien 2014 49 / 64

Page 50: Borg 16 Getting Started - wiki.das-labor.org · Borg16–GettingStarted ChristianKroll ChaostreffDortmund/LABORe.V. 09.11.2014/Borg16-Folien ChristianKroll (CTDO/Labor) Borg16–GettingStarted

Menükonfiguration anpassen

in den src/animations/config.in sollte vorzugsweise am Endefolgendes einfügt werden:bool „MyAnim“ ANIMATION_MYANIM $RANDOM_SUPPORT

dies erzeugt eine Checkbox MyAnim im Animations-Untermenüund erstellt ein #define ANIMATION_MYANIM und eine gleichlautendeEnv-Variable für Makeund wir setzen voraus, dass der Zufallsgenerator konfiguriert sein muss

Christian Kroll (CTDO/Labor) Borg 16 – Getting Started Borg16-Folien 2014 50 / 64

Page 51: Borg 16 Getting Started - wiki.das-labor.org · Borg16–GettingStarted ChristianKroll ChaostreffDortmund/LABORe.V. 09.11.2014/Borg16-Folien ChristianKroll (CTDO/Labor) Borg16–GettingStarted

Makefile für Animation anpassen

in src/animations/Makefile folgendes ergänzen:

ifeq ($(ANIMATION_MYANIM),y)SRC += myanim.c

endif

hier ist die Env-Variable zu nehmen, die man in dersrc/animations/config.in-Datei festgelegt hat

Christian Kroll (CTDO/Labor) Borg 16 – Getting Started Borg16-Folien 2014 51 / 64

Page 52: Borg 16 Getting Started - wiki.das-labor.org · Borg16–GettingStarted ChristianKroll ChaostreffDortmund/LABORe.V. 09.11.2014/Borg16-Folien ChristianKroll (CTDO/Labor) Borg16–GettingStarted

Anpassen der src/display_loop.c

am Anfang der src/display_loop.c den Header einbinden:

#include "myanim.h"

freie Nummer (hier z.B. 26) im switch/case-Block finden und einencase für diese Nummer anlegen, der die neue Animation aufruft,diesen zusätzlich mit dem im src/animations/config.in definierten#define konditional einbinden:

#ifdef ANIMATION_MYANIMcase 26:

myanim();break;

#endif

Christian Kroll (CTDO/Labor) Borg 16 – Getting Started Borg16-Folien 2014 52 / 64

Page 53: Borg 16 Getting Started - wiki.das-labor.org · Borg16–GettingStarted ChristianKroll ChaostreffDortmund/LABORe.V. 09.11.2014/Borg16-Folien ChristianKroll (CTDO/Labor) Borg16–GettingStarted

Gliederung

1 Einführung in den Borg 16Übersicht über die BorgsVoraussetzungen für das Build-SystemKonfigurieren und Bauen der Borgware 2DFlashen der Firmware auf den Borg 16

2 Programmieren mit der Borgware 2DAPI-FunktionenAnimationenSpiele

3 Die Ansteuerung der LED-MatrixBeispiel für den Bildaufbau

Christian Kroll (CTDO/Labor) Borg 16 – Getting Started Borg16-Folien 2014 53 / 64

Page 54: Borg 16 Getting Started - wiki.das-labor.org · Borg16–GettingStarted ChristianKroll ChaostreffDortmund/LABORe.V. 09.11.2014/Borg16-Folien ChristianKroll (CTDO/Labor) Borg16–GettingStarted

Vorgehensweise zum Einbinden eines Spiels

ein neues Verzeichnis (z.B. mygame) unterhalb von src/gameserstellenein kompilierfähiges Grundgerüst in Form einer .c- und .h-Datei imVerzeichnis src/games/mygame anlegendas Konfigrationsmenü über das neue Spiel in Kenntnis setzen, d.h.die Datei src/games/config.in anpassendas Build-System ebenfalls in Kenntnis setzen und die Dateisrc/games/config.mk ergänzen sowie in src/games/mygame einneues Makefile anlegeneinen Menü-Datensatz erstellen

Christian Kroll (CTDO/Labor) Borg 16 – Getting Started Borg16-Folien 2014 54 / 64

Page 55: Borg 16 Getting Started - wiki.das-labor.org · Borg16–GettingStarted ChristianKroll ChaostreffDortmund/LABORe.V. 09.11.2014/Borg16-Folien ChristianKroll (CTDO/Labor) Borg16–GettingStarted

Die Header-Datei src/games/mygame/mygame.h

#ifndef MYGAME_H_#define MYGAME_H_

void mygame(void);

#endif /* MYGAME_H_ */

Christian Kroll (CTDO/Labor) Borg 16 – Getting Started Borg16-Folien 2014 55 / 64

Page 56: Borg 16 Getting Started - wiki.das-labor.org · Borg16–GettingStarted ChristianKroll ChaostreffDortmund/LABORe.V. 09.11.2014/Borg16-Folien ChristianKroll (CTDO/Labor) Borg16–GettingStarted

Die C-Datei src/games/mygame/mygame.c

#include "../../config.h"#include "../../pixel.h"#include "../../util.h"#include "../../compat/pgmspace.h"#include "../../menu/menu.h"#include "../../joystick/joystick.h"#include "../../scrolltext/scrolltext.h"#include "mygame.h"

void mygame(void) {pixel hero = {NUM_COLS / 2, NUM_ROWS / 2};old = {0,0};clear_screen(0);

while (1) {if (old.x != hero.x || old.y != hero.y) {

setpixel(old, 0);old = hero;

}setpixel(hero, NUMPLANE);

if (JOYISDOWN)++hero.y;

else if (JOYISUP)--hero.y;

else if (JOYISLEFT)++hero.x;

else if (JOYISRIGHT)--hero.x;

/* Hero, don’t touch the border! */if (hero.x == 0 || hero.x == (NUM_COLS-1) ||

hero.y == 0 || hero.y == (NUM_ROWS-1))break;

wait(100);}scrolltext("</#Game Over!");

}

Christian Kroll (CTDO/Labor) Borg 16 – Getting Started Borg16-Folien 2014 56 / 64

Page 57: Borg 16 Getting Started - wiki.das-labor.org · Borg16–GettingStarted ChristianKroll ChaostreffDortmund/LABORe.V. 09.11.2014/Borg16-Folien ChristianKroll (CTDO/Labor) Borg16–GettingStarted

Menükonfiguration anpassen

in den src/games/config.in sollte vorzugsweise am Ende folgendeseinfügt werden:bool “MyGame“ GAME_MYGAME $JOYSTICK_SUPPORT

dies erzeugt eine Checkbox MyGame im Games-Untermenüund erstellt ein #define GAME_MYGAME und eine gleichlautendeEnv-Variable für Makeund wir setzen voraus, dass der Joystick-Support konfiguriert seinmuss

Christian Kroll (CTDO/Labor) Borg 16 – Getting Started Borg16-Folien 2014 57 / 64

Page 58: Borg 16 Getting Started - wiki.das-labor.org · Borg16–GettingStarted ChristianKroll ChaostreffDortmund/LABORe.V. 09.11.2014/Borg16-Folien ChristianKroll (CTDO/Labor) Borg16–GettingStarted

Makefile für die Spiele anpassen

in src/games/games.mk folgendes ergänzen:

ifeq ($(GAME_MYGAME),y)SUBDIRS += games/mygameendif

hier ist einfach das neu erstellte Verzeichnis zu $SUBDIRShinzuzufügen

Christian Kroll (CTDO/Labor) Borg 16 – Getting Started Borg16-Folien 2014 58 / 64

Page 59: Borg 16 Getting Started - wiki.das-labor.org · Borg16–GettingStarted ChristianKroll ChaostreffDortmund/LABORe.V. 09.11.2014/Borg16-Folien ChristianKroll (CTDO/Labor) Borg16–GettingStarted

Neues Makefile in games/mygame erstellen

src/games/mygame/Makefile anlegen und folgendes eintragen:

MAKETOPDIR = ../../..TARGET =

include $(MAKETOPDIR)/defaults.mk

SRC = mygame.c

include $(MAKETOPDIR)/rules.mkinclude $(MAKETOPDIR)/depend.mk

Christian Kroll (CTDO/Labor) Borg 16 – Getting Started Borg16-Folien 2014 59 / 64

Page 60: Borg 16 Getting Started - wiki.das-labor.org · Borg16–GettingStarted ChristianKroll ChaostreffDortmund/LABORe.V. 09.11.2014/Borg16-Folien ChristianKroll (CTDO/Labor) Borg16–GettingStarted

Einbindung in das In-Game-Menü

innerhalb der der Quelldatei des Spiels (typischerweise nach denIncludes) folgende globale Variable definieren:

#if defined MENU_SUPPORT && defined GAME_MYGAME// mygame icon (MSB is leftmost pixel)static const uint8_t icon[8] PROGMEM =

{0x55, 0xaa, 0x55, 0xaa, 0x55, 0xaa, 0x55, 0xaa};

game_descriptor_t mygame_game_descriptor__attribute__((section(".game_descriptors"))) =

{&mygame,icon,

};#endif

Christian Kroll (CTDO/Labor) Borg 16 – Getting Started Borg16-Folien 2014 60 / 64

Page 61: Borg 16 Getting Started - wiki.das-labor.org · Borg16–GettingStarted ChristianKroll ChaostreffDortmund/LABORe.V. 09.11.2014/Borg16-Folien ChristianKroll (CTDO/Labor) Borg16–GettingStarted

Einbindung in das In-Game-Menü

icon definiert dabei das Icon in den Abmessungen 8× 8 als Array von8 uint8_t-Elementenein Element steht für eine komplette Zeile des Iconsdas Bitmuster des Werts entspricht der grafischen Repräsentation derZeile (MSB links außen, LSB rechts außen)die game_descriptor_t-Struktur enthält einen Pointer auf diesesIcon und einen Function-Pointer auf die Funktion, die das Spiel startetdiese Funktion darf keine Argument erwartendie kryptischen Attribute sind wichtig, damit die Datenstrukturenbeim Linken in die passenden Speicherbereiche verfrachtet werden

Christian Kroll (CTDO/Labor) Borg 16 – Getting Started Borg16-Folien 2014 61 / 64

Page 62: Borg 16 Getting Started - wiki.das-labor.org · Borg16–GettingStarted ChristianKroll ChaostreffDortmund/LABORe.V. 09.11.2014/Borg16-Folien ChristianKroll (CTDO/Labor) Borg16–GettingStarted

Die fertige C-Datei src/games/mygame/mygame.c

#include "../../config.h"#include "../../pixel.h"#include "../../util.h"#include "../../compat/pgmspace.h"#include "../../menu/menu.h"#include "../../joystick/joystick.h"#include "../../scrolltext/scrolltext.h"#include "mygame.h"

#if defined MENU_SUPPORT && defined GAME_MYGAME// mygame icon (MSB is leftmost pixel)static const uint8_t icon[8] PROGMEM =

{0x55, 0xaa, 0x55, 0xaa, 0x55, 0xaa, 0x55, 0xaa};

game_descriptor_t mygame_game_descriptor__attribute__((section(".game_descriptors"))) =

{&mygame,icon,

};#endif

void mygame(void) {pixel hero = {NUM_COLS / 2, NUM_ROWS / 2};old = {0,0};clear_screen(0);

while (1) {if (old.x != hero.x || old.y != hero.y) {

setpixel(old, 0);old = hero;

}setpixel(hero, NUMPLANE);

if (JOYISDOWN)++hero.y;

else if (JOYISUP)--hero.y;

else if (JOYISLEFT)++hero.x;

else if (JOYISRIGHT)--hero.x;

/* Hero, don’t touch the border! */if (hero.x == 0 || hero.x == (NUM_COLS-1) ||

hero.y == 0 || hero.y == (NUM_ROWS-1))break;

wait(100);}scrolltext("</#Game Over!");

}

Christian Kroll (CTDO/Labor) Borg 16 – Getting Started Borg16-Folien 2014 62 / 64

Page 63: Borg 16 Getting Started - wiki.das-labor.org · Borg16–GettingStarted ChristianKroll ChaostreffDortmund/LABORe.V. 09.11.2014/Borg16-Folien ChristianKroll (CTDO/Labor) Borg16–GettingStarted

Gliederung

1 Einführung in den Borg 16Übersicht über die BorgsVoraussetzungen für das Build-SystemKonfigurieren und Bauen der Borgware 2DFlashen der Firmware auf den Borg 16

2 Programmieren mit der Borgware 2DAPI-FunktionenAnimationenSpiele

3 Die Ansteuerung der LED-MatrixBeispiel für den Bildaufbau

Christian Kroll (CTDO/Labor) Borg 16 – Getting Started Borg16-Folien 2014 63 / 64

Page 64: Borg 16 Getting Started - wiki.das-labor.org · Borg16–GettingStarted ChristianKroll ChaostreffDortmund/LABORe.V. 09.11.2014/Borg16-Folien ChristianKroll (CTDO/Labor) Borg16–GettingStarted

Die LED-Matrix

IRLD024

IRLD024

IRLD024

IRLD024

IRLD024

IRLD024

IRLD024

IRLD024

IRLD024

IRLD024

IRLD024

IRLD024

IRLD024

IRLD024

IRLD024

IRLD024

PD6

PD7

VCC

R16

R15

R14

R13

R12

R11

R10

R9

R8

R7

R6

R5

R4

R3

R2

R1

UDN2981A UDN2981A

VC

C

PC

7

PC

6

PC

5

PC

4

PC

3

PC

2

PC

1

PC

0

VC

C

PA

7

PA

6

PA

5

PA

4

PA

3

PA

2

PA

1

PA

0

O0O1O2O3O4O5O6O7GND

I0I1I2I3I4I5I6I7VCC

O0O1O2O3O4O5O6O7

I0I1I2I3I4I5I6I7

GND

VCC

typedef unsigned char u8_t;u8_t pixmap[3][16][2];

void show(u8_t row, u8_t p) { COLPORT1 = COLPORT2 = 0; if (row == 0) { // row: 0 ROWPORT |= (1 << PIN_DATA); ROWPORT |= (1 << PIN_CLK); ROWPORT &= ~(1 << PIN_CLK); ROWPORT &= ~(1 << PIN_DATA); } else { ROWPORT |= (1 << PIN_CLK); ROWPORT &= ~(1 << PIN_CLK); }

// CP2: 0x01 CP1: 0x80 COLPORT1 = pixmap[p][row][0]; COLPORT2 = pixmap[p][row][1];}

GND

VCC

MR

CP

DSA

DSB

Q0

Q1

Q2

Q3

Q4

Q5

Q6

Q7

74H

CT164

GND

VCC

MR

CP

DSA

DSB

Q0

Q1

Q2

Q3

Q4

Q5

Q6

Q7

74H

CT164

COLPORT2 COLPORT1

ROWPORTPD6 ≙ PIN_DATAPD7 ≙ PIN_CLK

Christian Kroll (CTDO/Labor) Borg 16 – Getting Started Borg16-Folien 2014 64 / 64

Page 65: Borg 16 Getting Started - wiki.das-labor.org · Borg16–GettingStarted ChristianKroll ChaostreffDortmund/LABORe.V. 09.11.2014/Borg16-Folien ChristianKroll (CTDO/Labor) Borg16–GettingStarted

Die LED-Matrix

IRLD024

IRLD024

IRLD024

IRLD024

IRLD024

IRLD024

IRLD024

IRLD024

IRLD024

IRLD024

IRLD024

IRLD024

IRLD024

IRLD024

IRLD024

IRLD024

PD6

PD7

VCC

R16

R15

R14

R13

R12

R11

R10

R9

R8

R7

R6

R5

R4

R3

R2

R1

UDN2981A UDN2981A

VC

C

PC

7

PC

6

PC

5

PC

4

PC

3

PC

2

PC

1

PC

0

VC

C

PA

7

PA

6

PA

5

PA

4

PA

3

PA

2

PA

1

PA

0

O0O1O2O3O4O5O6O7GND

I0I1I2I3I4I5I6I7VCC

O0O1O2O3O4O5O6O7

I0I1I2I3I4I5I6I7

GND

VCC

typedef unsigned char u8_t;u8_t pixmap[3][16][2];

void show(u8_t row, u8_t p) { COLPORT1 = COLPORT2 = 0; if (row == 0) { // row: 0 ROWPORT |= (1 << PIN_DATA); ROWPORT |= (1 << PIN_CLK); ROWPORT &= ~(1 << PIN_CLK); ROWPORT &= ~(1 << PIN_DATA); } else { ROWPORT |= (1 << PIN_CLK); ROWPORT &= ~(1 << PIN_CLK); }

// CP2: 0x01 CP1: 0x80 COLPORT1 = pixmap[p][row][0]; COLPORT2 = pixmap[p][row][1];}

GND

VCC

MR

CP

DSA

DSB

Q0

Q1

Q2

Q3

Q4

Q5

Q6

Q7

74H

CT164

GND

VCC

MR

CP

DSA

DSB

Q0

Q1

Q2

Q3

Q4

Q5

Q6

Q7

74H

CT164

COLPORT2 COLPORT1

ROWPORTPD6 ≙ PIN_DATAPD7 ≙ PIN_CLK

Christian Kroll (CTDO/Labor) Borg 16 – Getting Started Borg16-Folien 2014 64 / 64

Page 66: Borg 16 Getting Started - wiki.das-labor.org · Borg16–GettingStarted ChristianKroll ChaostreffDortmund/LABORe.V. 09.11.2014/Borg16-Folien ChristianKroll (CTDO/Labor) Borg16–GettingStarted

Die LED-Matrix

IRLD024

IRLD024

IRLD024

IRLD024

IRLD024

IRLD024

IRLD024

IRLD024

IRLD024

IRLD024

IRLD024

IRLD024

IRLD024

IRLD024

IRLD024

IRLD024

PD6

PD7

VCC

R16

R15

R14

R13

R12

R11

R10

R9

R8

R7

R6

R5

R4

R3

R2

R1

UDN2981A UDN2981A

VC

C

PC

7

PC

6

PC

5

PC

4

PC

3

PC

2

PC

1

PC

0

VC

C

PA

7

PA

6

PA

5

PA

4

PA

3

PA

2

PA

1

PA

0

O0O1O2O3O4O5O6O7GND

I0I1I2I3I4I5I6I7VCC

O0O1O2O3O4O5O6O7

I0I1I2I3I4I5I6I7

GND

VCC

typedef unsigned char u8_t;u8_t pixmap[3][16][2];

void show(u8_t row, u8_t p) { COLPORT1 = COLPORT2 = 0; if (row == 0) { // row: 0 ROWPORT |= (1 << PIN_DATA); ROWPORT |= (1 << PIN_CLK); ROWPORT &= ~(1 << PIN_CLK); ROWPORT &= ~(1 << PIN_DATA); } else { ROWPORT |= (1 << PIN_CLK); ROWPORT &= ~(1 << PIN_CLK); }

// CP2: 0x01 CP1: 0x80 COLPORT1 = pixmap[p][row][0]; COLPORT2 = pixmap[p][row][1];}

GND

VCC

MR

CP

DSA

DSB

Q0

Q1

Q2

Q3

Q4

Q5

Q6

Q7

74H

CT164

GND

VCC

MR

CP

DSA

DSB

Q0

Q1

Q2

Q3

Q4

Q5

Q6

Q7

74H

CT164

COLPORT2 COLPORT1

ROWPORTPD6 ≙ PIN_DATAPD7 ≙ PIN_CLK

Christian Kroll (CTDO/Labor) Borg 16 – Getting Started Borg16-Folien 2014 64 / 64

Page 67: Borg 16 Getting Started - wiki.das-labor.org · Borg16–GettingStarted ChristianKroll ChaostreffDortmund/LABORe.V. 09.11.2014/Borg16-Folien ChristianKroll (CTDO/Labor) Borg16–GettingStarted

Die LED-Matrix

IRLD024

IRLD024

IRLD024

IRLD024

IRLD024

IRLD024

IRLD024

IRLD024

IRLD024

IRLD024

IRLD024

IRLD024

IRLD024

IRLD024

IRLD024

IRLD024

PD6

PD7

VCC

R16

R15

R14

R13

R12

R11

R10

R9

R8

R7

R6

R5

R4

R3

R2

R1

UDN2981A UDN2981A

VC

C

PC

7

PC

6

PC

5

PC

4

PC

3

PC

2

PC

1

PC

0

VC

C

PA

7

PA

6

PA

5

PA

4

PA

3

PA

2

PA

1

PA

0

O0O1O2O3O4O5O6O7GND

I0I1I2I3I4I5I6I7VCC

O0O1O2O3O4O5O6O7

I0I1I2I3I4I5I6I7

GND

VCC

typedef unsigned char u8_t;u8_t pixmap[3][16][2];

void show(u8_t row, u8_t p) { COLPORT1 = COLPORT2 = 0; if (row == 0) { // row: 0 ROWPORT |= (1 << PIN_DATA); ROWPORT |= (1 << PIN_CLK); ROWPORT &= ~(1 << PIN_CLK); ROWPORT &= ~(1 << PIN_DATA); } else { ROWPORT |= (1 << PIN_CLK); ROWPORT &= ~(1 << PIN_CLK); }

// CP2: 0x01 CP1: 0x80 COLPORT1 = pixmap[p][row][0]; COLPORT2 = pixmap[p][row][1];}

GND

VCC

MR

CP

DSA

DSB

Q0

Q1

Q2

Q3

Q4

Q5

Q6

Q7

74H

CT164

GND

VCC

MR

CP

DSA

DSB

Q0

Q1

Q2

Q3

Q4

Q5

Q6

Q7

74H

CT164

COLPORT2 COLPORT1

ROWPORTPD6 ≙ PIN_DATAPD7 ≙ PIN_CLK

Christian Kroll (CTDO/Labor) Borg 16 – Getting Started Borg16-Folien 2014 64 / 64

Page 68: Borg 16 Getting Started - wiki.das-labor.org · Borg16–GettingStarted ChristianKroll ChaostreffDortmund/LABORe.V. 09.11.2014/Borg16-Folien ChristianKroll (CTDO/Labor) Borg16–GettingStarted

Die LED-Matrix

IRLD024

IRLD024

IRLD024

IRLD024

IRLD024

IRLD024

IRLD024

IRLD024

IRLD024

IRLD024

IRLD024

IRLD024

IRLD024

IRLD024

IRLD024

IRLD024

PD6

PD7

VCC

R16

R15

R14

R13

R12

R11

R10

R9

R8

R7

R6

R5

R4

R3

R2

R1

UDN2981A UDN2981A

VC

C

PC

7

PC

6

PC

5

PC

4

PC

3

PC

2

PC

1

PC

0

VC

C

PA

7

PA

6

PA

5

PA

4

PA

3

PA

2

PA

1

PA

0

O0O1O2O3O4O5O6O7GND

I0I1I2I3I4I5I6I7VCC

O0O1O2O3O4O5O6O7

I0I1I2I3I4I5I6I7

GND

VCC

typedef unsigned char u8_t;u8_t pixmap[3][16][2];

void show(u8_t row, u8_t p) { COLPORT1 = COLPORT2 = 0; if (row == 0) { // row: 0 ROWPORT |= (1 << PIN_DATA); ROWPORT |= (1 << PIN_CLK); ROWPORT &= ~(1 << PIN_CLK); ROWPORT &= ~(1 << PIN_DATA); } else { ROWPORT |= (1 << PIN_CLK); ROWPORT &= ~(1 << PIN_CLK); }

// CP2: 0x01 CP1: 0x80 COLPORT1 = pixmap[p][row][0]; COLPORT2 = pixmap[p][row][1];}

GND

VCC

MR

CP

DSA

DSB

Q0

Q1

Q2

Q3

Q4

Q5

Q6

Q7

74H

CT164

GND

VCC

MR

CP

DSA

DSB

Q0

Q1

Q2

Q3

Q4

Q5

Q6

Q7

74H

CT164

COLPORT2 COLPORT1

ROWPORTPD6 ≙ PIN_DATAPD7 ≙ PIN_CLK

Christian Kroll (CTDO/Labor) Borg 16 – Getting Started Borg16-Folien 2014 64 / 64

Page 69: Borg 16 Getting Started - wiki.das-labor.org · Borg16–GettingStarted ChristianKroll ChaostreffDortmund/LABORe.V. 09.11.2014/Borg16-Folien ChristianKroll (CTDO/Labor) Borg16–GettingStarted

Die LED-Matrix

IRLD024

IRLD024

IRLD024

IRLD024

IRLD024

IRLD024

IRLD024

IRLD024

IRLD024

IRLD024

IRLD024

IRLD024

IRLD024

IRLD024

IRLD024

IRLD024

PD6

PD7

VCC

R16

R15

R14

R13

R12

R11

R10

R9

R8

R7

R6

R5

R4

R3

R2

R1

UDN2981A UDN2981A

VC

C

PC

7

PC

6

PC

5

PC

4

PC

3

PC

2

PC

1

PC

0

VC

C

PA

7

PA

6

PA

5

PA

4

PA

3

PA

2

PA

1

PA

0

O0O1O2O3O4O5O6O7GND

I0I1I2I3I4I5I6I7VCC

O0O1O2O3O4O5O6O7

I0I1I2I3I4I5I6I7

GND

VCC

typedef unsigned char u8_t;u8_t pixmap[3][16][2];

void show(u8_t row, u8_t p) { COLPORT1 = COLPORT2 = 0; if (row == 0) { // row: 1 ROWPORT |= (1 << PIN_DATA); ROWPORT |= (1 << PIN_CLK); ROWPORT &= ~(1 << PIN_CLK); ROWPORT &= ~(1 << PIN_DATA); } else { ROWPORT |= (1 << PIN_CLK); ROWPORT &= ~(1 << PIN_CLK); }

// CP2: 0x01 CP1: 0x80 COLPORT1 = pixmap[p][row][0]; COLPORT2 = pixmap[p][row][1];}

GND

VCC

MR

CP

DSA

DSB

Q0

Q1

Q2

Q3

Q4

Q5

Q6

Q7

74H

CT164

GND

VCC

MR

CP

DSA

DSB

Q0

Q1

Q2

Q3

Q4

Q5

Q6

Q7

74H

CT164

COLPORT2 COLPORT1

ROWPORTPD6 ≙ PIN_DATAPD7 ≙ PIN_CLK

Christian Kroll (CTDO/Labor) Borg 16 – Getting Started Borg16-Folien 2014 64 / 64

Page 70: Borg 16 Getting Started - wiki.das-labor.org · Borg16–GettingStarted ChristianKroll ChaostreffDortmund/LABORe.V. 09.11.2014/Borg16-Folien ChristianKroll (CTDO/Labor) Borg16–GettingStarted

Die LED-Matrix

IRLD024

IRLD024

IRLD024

IRLD024

IRLD024

IRLD024

IRLD024

IRLD024

IRLD024

IRLD024

IRLD024

IRLD024

IRLD024

IRLD024

IRLD024

IRLD024

PD6

PD7

VCC

R16

R15

R14

R13

R12

R11

R10

R9

R8

R7

R6

R5

R4

R3

R2

R1

UDN2981A UDN2981A

VC

C

PC

7

PC

6

PC

5

PC

4

PC

3

PC

2

PC

1

PC

0

VC

C

PA

7

PA

6

PA

5

PA

4

PA

3

PA

2

PA

1

PA

0

O0O1O2O3O4O5O6O7GND

I0I1I2I3I4I5I6I7VCC

O0O1O2O3O4O5O6O7

I0I1I2I3I4I5I6I7

GND

VCC

typedef unsigned char u8_t;u8_t pixmap[3][16][2];

void show(u8_t row, u8_t p) { COLPORT1 = COLPORT2 = 0; if (row == 0) { // row: 1 ROWPORT |= (1 << PIN_DATA); ROWPORT |= (1 << PIN_CLK); ROWPORT &= ~(1 << PIN_CLK); ROWPORT &= ~(1 << PIN_DATA); } else { ROWPORT |= (1 << PIN_CLK); ROWPORT &= ~(1 << PIN_CLK); }

// CP2: 0x01 CP1: 0x80 COLPORT1 = pixmap[p][row][0]; COLPORT2 = pixmap[p][row][1];}

GND

VCC

MR

CP

DSA

DSB

Q0

Q1

Q2

Q3

Q4

Q5

Q6

Q7

74H

CT164

GND

VCC

MR

CP

DSA

DSB

Q0

Q1

Q2

Q3

Q4

Q5

Q6

Q7

74H

CT164

COLPORT2 COLPORT1

ROWPORTPD6 ≙ PIN_DATAPD7 ≙ PIN_CLK

Christian Kroll (CTDO/Labor) Borg 16 – Getting Started Borg16-Folien 2014 64 / 64

Page 71: Borg 16 Getting Started - wiki.das-labor.org · Borg16–GettingStarted ChristianKroll ChaostreffDortmund/LABORe.V. 09.11.2014/Borg16-Folien ChristianKroll (CTDO/Labor) Borg16–GettingStarted

Die LED-Matrix

IRLD024

IRLD024

IRLD024

IRLD024

IRLD024

IRLD024

IRLD024

IRLD024

IRLD024

IRLD024

IRLD024

IRLD024

IRLD024

IRLD024

IRLD024

IRLD024

PD6

PD7

VCC

R16

R15

R14

R13

R12

R11

R10

R9

R8

R7

R6

R5

R4

R3

R2

R1

UDN2981A UDN2981A

VC

C

PC

7

PC

6

PC

5

PC

4

PC

3

PC

2

PC

1

PC

0

VC

C

PA

7

PA

6

PA

5

PA

4

PA

3

PA

2

PA

1

PA

0

O0O1O2O3O4O5O6O7GND

I0I1I2I3I4I5I6I7VCC

O0O1O2O3O4O5O6O7

I0I1I2I3I4I5I6I7

GND

VCC

typedef unsigned char u8_t;u8_t pixmap[3][16][2];

void show(u8_t row, u8_t p) { COLPORT1 = COLPORT2 = 0; if (row == 0) { // row: 1 ROWPORT |= (1 << PIN_DATA); ROWPORT |= (1 << PIN_CLK); ROWPORT &= ~(1 << PIN_CLK); ROWPORT &= ~(1 << PIN_DATA); } else { ROWPORT |= (1 << PIN_CLK); ROWPORT &= ~(1 << PIN_CLK); }

// CP2: 0x01 CP1: 0x80 COLPORT1 = pixmap[p][row][0]; COLPORT2 = pixmap[p][row][1];}

GND

VCC

MR

CP

DSA

DSB

Q0

Q1

Q2

Q3

Q4

Q5

Q6

Q7

74H

CT164

GND

VCC

MR

CP

DSA

DSB

Q0

Q1

Q2

Q3

Q4

Q5

Q6

Q7

74H

CT164

COLPORT2 COLPORT1

ROWPORTPD6 ≙ PIN_DATAPD7 ≙ PIN_CLK

Christian Kroll (CTDO/Labor) Borg 16 – Getting Started Borg16-Folien 2014 64 / 64

Page 72: Borg 16 Getting Started - wiki.das-labor.org · Borg16–GettingStarted ChristianKroll ChaostreffDortmund/LABORe.V. 09.11.2014/Borg16-Folien ChristianKroll (CTDO/Labor) Borg16–GettingStarted

Die LED-Matrix

IRLD024

IRLD024

IRLD024

IRLD024

IRLD024

IRLD024

IRLD024

IRLD024

IRLD024

IRLD024

IRLD024

IRLD024

IRLD024

IRLD024

IRLD024

IRLD024

PD6

PD7

VCC

R16

R15

R14

R13

R12

R11

R10

R9

R8

R7

R6

R5

R4

R3

R2

R1

UDN2981A UDN2981A

VC

C

PC

7

PC

6

PC

5

PC

4

PC

3

PC

2

PC

1

PC

0

VC

C

PA

7

PA

6

PA

5

PA

4

PA

3

PA

2

PA

1

PA

0

O0O1O2O3O4O5O6O7GND

I0I1I2I3I4I5I6I7VCC

O0O1O2O3O4O5O6O7

I0I1I2I3I4I5I6I7

GND

VCC

typedef unsigned char u8_t;u8_t pixmap[3][16][2];

void show(u8_t row, u8_t p) { COLPORT1 = COLPORT2 = 0; if (row == 0) { // row: 1 ROWPORT |= (1 << PIN_DATA); ROWPORT |= (1 << PIN_CLK); ROWPORT &= ~(1 << PIN_CLK); ROWPORT &= ~(1 << PIN_DATA); } else { ROWPORT |= (1 << PIN_CLK); ROWPORT &= ~(1 << PIN_CLK); }

// CP2: 0x01 CP1: 0x80 COLPORT1 = pixmap[p][row][0]; COLPORT2 = pixmap[p][row][1];}

GND

VCC

MR

CP

DSA

DSB

Q0

Q1

Q2

Q3

Q4

Q5

Q6

Q7

74H

CT164

GND

VCC

MR

CP

DSA

DSB

Q0

Q1

Q2

Q3

Q4

Q5

Q6

Q7

74H

CT164

COLPORT2 COLPORT1

ROWPORTPD6 ≙ PIN_DATAPD7 ≙ PIN_CLK

Christian Kroll (CTDO/Labor) Borg 16 – Getting Started Borg16-Folien 2014 64 / 64

Page 73: Borg 16 Getting Started - wiki.das-labor.org · Borg16–GettingStarted ChristianKroll ChaostreffDortmund/LABORe.V. 09.11.2014/Borg16-Folien ChristianKroll (CTDO/Labor) Borg16–GettingStarted

Die LED-Matrix

IRLD024

IRLD024

IRLD024

IRLD024

IRLD024

IRLD024

IRLD024

IRLD024

IRLD024

IRLD024

IRLD024

IRLD024

IRLD024

IRLD024

IRLD024

IRLD024

PD6

PD7

VCC

R16

R15

R14

R13

R12

R11

R10

R9

R8

R7

R6

R5

R4

R3

R2

R1

UDN2981A UDN2981A

VC

C

PC

7

PC

6

PC

5

PC

4

PC

3

PC

2

PC

1

PC

0

VC

C

PA

7

PA

6

PA

5

PA

4

PA

3

PA

2

PA

1

PA

0

O0O1O2O3O4O5O6O7GND

I0I1I2I3I4I5I6I7VCC

O0O1O2O3O4O5O6O7

I0I1I2I3I4I5I6I7

GND

VCC

typedef unsigned char u8_t;u8_t pixmap[3][16][2];

void show(u8_t row, u8_t p) { COLPORT1 = COLPORT2 = 0; if (row == 0) { // row: 1 ROWPORT |= (1 << PIN_DATA); ROWPORT |= (1 << PIN_CLK); ROWPORT &= ~(1 << PIN_CLK); ROWPORT &= ~(1 << PIN_DATA); } else { ROWPORT |= (1 << PIN_CLK); ROWPORT &= ~(1 << PIN_CLK); }

// CP2: 0x01 CP1: 0x80 COLPORT1 = pixmap[p][row][0]; COLPORT2 = pixmap[p][row][1];}

GND

VCC

MR

CP

DSA

DSB

Q0

Q1

Q2

Q3

Q4

Q5

Q6

Q7

74H

CT164

GND

VCC

MR

CP

DSA

DSB

Q0

Q1

Q2

Q3

Q4

Q5

Q6

Q7

74H

CT164

COLPORT2 COLPORT1

ROWPORTPD6 ≙ PIN_DATAPD7 ≙ PIN_CLK

Christian Kroll (CTDO/Labor) Borg 16 – Getting Started Borg16-Folien 2014 64 / 64

Page 74: Borg 16 Getting Started - wiki.das-labor.org · Borg16–GettingStarted ChristianKroll ChaostreffDortmund/LABORe.V. 09.11.2014/Borg16-Folien ChristianKroll (CTDO/Labor) Borg16–GettingStarted

Die LED-Matrix

IRLD024

IRLD024

IRLD024

IRLD024

IRLD024

IRLD024

IRLD024

IRLD024

IRLD024

IRLD024

IRLD024

IRLD024

IRLD024

IRLD024

IRLD024

IRLD024

PD6

PD7

VCC

R16

R15

R14

R13

R12

R11

R10

R9

R8

R7

R6

R5

R4

R3

R2

R1

UDN2981A UDN2981A

VC

C

PC

7

PC

6

PC

5

PC

4

PC

3

PC

2

PC

1

PC

0

VC

C

PA

7

PA

6

PA

5

PA

4

PA

3

PA

2

PA

1

PA

0

O0O1O2O3O4O5O6O7GND

I0I1I2I3I4I5I6I7VCC

O0O1O2O3O4O5O6O7

I0I1I2I3I4I5I6I7

GND

VCC

typedef unsigned char u8_t;u8_t pixmap[3][16][2];

void show(u8_t row, u8_t p) { COLPORT1 = COLPORT2 = 0; if (row == 0) { // row: 2 ROWPORT |= (1 << PIN_DATA); ROWPORT |= (1 << PIN_CLK); ROWPORT &= ~(1 << PIN_CLK); ROWPORT &= ~(1 << PIN_DATA); } else { ROWPORT |= (1 << PIN_CLK); ROWPORT &= ~(1 << PIN_CLK); }

// CP2: 0x03 CP1: 0xC0 COLPORT1 = pixmap[p][row][0]; COLPORT2 = pixmap[p][row][1];}

GND

VCC

MR

CP

DSA

DSB

Q0

Q1

Q2

Q3

Q4

Q5

Q6

Q7

74H

CT164

GND

VCC

MR

CP

DSA

DSB

Q0

Q1

Q2

Q3

Q4

Q5

Q6

Q7

74H

CT164

COLPORT2 COLPORT1

ROWPORTPD6 ≙ PIN_DATAPD7 ≙ PIN_CLK

Christian Kroll (CTDO/Labor) Borg 16 – Getting Started Borg16-Folien 2014 64 / 64

Page 75: Borg 16 Getting Started - wiki.das-labor.org · Borg16–GettingStarted ChristianKroll ChaostreffDortmund/LABORe.V. 09.11.2014/Borg16-Folien ChristianKroll (CTDO/Labor) Borg16–GettingStarted

Die LED-Matrix

IRLD024

IRLD024

IRLD024

IRLD024

IRLD024

IRLD024

IRLD024

IRLD024

IRLD024

IRLD024

IRLD024

IRLD024

IRLD024

IRLD024

IRLD024

IRLD024

PD6

PD7

VCC

R16

R15

R14

R13

R12

R11

R10

R9

R8

R7

R6

R5

R4

R3

R2

R1

UDN2981A UDN2981A

VC

C

PC

7

PC

6

PC

5

PC

4

PC

3

PC

2

PC

1

PC

0

VC

C

PA

7

PA

6

PA

5

PA

4

PA

3

PA

2

PA

1

PA

0

O0O1O2O3O4O5O6O7GND

I0I1I2I3I4I5I6I7VCC

O0O1O2O3O4O5O6O7

I0I1I2I3I4I5I6I7

GND

VCC

typedef unsigned char u8_t;u8_t pixmap[3][16][2];

void show(u8_t row, u8_t p) { COLPORT1 = COLPORT2 = 0; if (row == 0) { // row: 2 ROWPORT |= (1 << PIN_DATA); ROWPORT |= (1 << PIN_CLK); ROWPORT &= ~(1 << PIN_CLK); ROWPORT &= ~(1 << PIN_DATA); } else { ROWPORT |= (1 << PIN_CLK); ROWPORT &= ~(1 << PIN_CLK); }

// CP2: 0x03 CP1: 0xC0 COLPORT1 = pixmap[p][row][0]; COLPORT2 = pixmap[p][row][1];}

GND

VCC

MR

CP

DSA

DSB

Q0

Q1

Q2

Q3

Q4

Q5

Q6

Q7

74H

CT164

GND

VCC

MR

CP

DSA

DSB

Q0

Q1

Q2

Q3

Q4

Q5

Q6

Q7

74H

CT164

COLPORT2 COLPORT1

ROWPORTPD6 ≙ PIN_DATAPD7 ≙ PIN_CLK

Christian Kroll (CTDO/Labor) Borg 16 – Getting Started Borg16-Folien 2014 64 / 64

Page 76: Borg 16 Getting Started - wiki.das-labor.org · Borg16–GettingStarted ChristianKroll ChaostreffDortmund/LABORe.V. 09.11.2014/Borg16-Folien ChristianKroll (CTDO/Labor) Borg16–GettingStarted

Die LED-Matrix

IRLD024

IRLD024

IRLD024

IRLD024

IRLD024

IRLD024

IRLD024

IRLD024

IRLD024

IRLD024

IRLD024

IRLD024

IRLD024

IRLD024

IRLD024

IRLD024

PD6

PD7

VCC

R16

R15

R14

R13

R12

R11

R10

R9

R8

R7

R6

R5

R4

R3

R2

R1

UDN2981A UDN2981A

VC

C

PC

7

PC

6

PC

5

PC

4

PC

3

PC

2

PC

1

PC

0

VC

C

PA

7

PA

6

PA

5

PA

4

PA

3

PA

2

PA

1

PA

0

O0O1O2O3O4O5O6O7GND

I0I1I2I3I4I5I6I7VCC

O0O1O2O3O4O5O6O7

I0I1I2I3I4I5I6I7

GND

VCC

typedef unsigned char u8_t;u8_t pixmap[3][16][2];

void show(u8_t row, u8_t p) { COLPORT1 = COLPORT2 = 0; if (row == 0) { // row: 2 ROWPORT |= (1 << PIN_DATA); ROWPORT |= (1 << PIN_CLK); ROWPORT &= ~(1 << PIN_CLK); ROWPORT &= ~(1 << PIN_DATA); } else { ROWPORT |= (1 << PIN_CLK); ROWPORT &= ~(1 << PIN_CLK); }

// CP2: 0x03 CP1: 0xC0 COLPORT1 = pixmap[p][row][0]; COLPORT2 = pixmap[p][row][1];}

GND

VCC

MR

CP

DSA

DSB

Q0

Q1

Q2

Q3

Q4

Q5

Q6

Q7

74H

CT164

GND

VCC

MR

CP

DSA

DSB

Q0

Q1

Q2

Q3

Q4

Q5

Q6

Q7

74H

CT164

COLPORT2 COLPORT1

ROWPORTPD6 ≙ PIN_DATAPD7 ≙ PIN_CLK

Christian Kroll (CTDO/Labor) Borg 16 – Getting Started Borg16-Folien 2014 64 / 64

Page 77: Borg 16 Getting Started - wiki.das-labor.org · Borg16–GettingStarted ChristianKroll ChaostreffDortmund/LABORe.V. 09.11.2014/Borg16-Folien ChristianKroll (CTDO/Labor) Borg16–GettingStarted

Die LED-Matrix

IRLD024

IRLD024

IRLD024

IRLD024

IRLD024

IRLD024

IRLD024

IRLD024

IRLD024

IRLD024

IRLD024

IRLD024

IRLD024

IRLD024

IRLD024

IRLD024

PD6

PD7

VCC

R16

R15

R14

R13

R12

R11

R10

R9

R8

R7

R6

R5

R4

R3

R2

R1

UDN2981A UDN2981A

VC

C

PC

7

PC

6

PC

5

PC

4

PC

3

PC

2

PC

1

PC

0

VC

C

PA

7

PA

6

PA

5

PA

4

PA

3

PA

2

PA

1

PA

0

O0O1O2O3O4O5O6O7GND

I0I1I2I3I4I5I6I7VCC

O0O1O2O3O4O5O6O7

I0I1I2I3I4I5I6I7

GND

VCC

typedef unsigned char u8_t;u8_t pixmap[3][16][2];

void show(u8_t row, u8_t p) { COLPORT1 = COLPORT2 = 0; if (row == 0) { // row: 2 ROWPORT |= (1 << PIN_DATA); ROWPORT |= (1 << PIN_CLK); ROWPORT &= ~(1 << PIN_CLK); ROWPORT &= ~(1 << PIN_DATA); } else { ROWPORT |= (1 << PIN_CLK); ROWPORT &= ~(1 << PIN_CLK); }

// CP2: 0x03 CP1: 0xC0 COLPORT1 = pixmap[p][row][0]; COLPORT2 = pixmap[p][row][1];}

GND

VCC

MR

CP

DSA

DSB

Q0

Q1

Q2

Q3

Q4

Q5

Q6

Q7

74H

CT164

GND

VCC

MR

CP

DSA

DSB

Q0

Q1

Q2

Q3

Q4

Q5

Q6

Q7

74H

CT164

COLPORT2 COLPORT1

ROWPORTPD6 ≙ PIN_DATAPD7 ≙ PIN_CLK

Christian Kroll (CTDO/Labor) Borg 16 – Getting Started Borg16-Folien 2014 64 / 64

Page 78: Borg 16 Getting Started - wiki.das-labor.org · Borg16–GettingStarted ChristianKroll ChaostreffDortmund/LABORe.V. 09.11.2014/Borg16-Folien ChristianKroll (CTDO/Labor) Borg16–GettingStarted

Die LED-Matrix

IRLD024

IRLD024

IRLD024

IRLD024

IRLD024

IRLD024

IRLD024

IRLD024

IRLD024

IRLD024

IRLD024

IRLD024

IRLD024

IRLD024

IRLD024

IRLD024

PD6

PD7

VCC

R16

R15

R14

R13

R12

R11

R10

R9

R8

R7

R6

R5

R4

R3

R2

R1

UDN2981A UDN2981A

VC

C

PC

7

PC

6

PC

5

PC

4

PC

3

PC

2

PC

1

PC

0

VC

C

PA

7

PA

6

PA

5

PA

4

PA

3

PA

2

PA

1

PA

0

O0O1O2O3O4O5O6O7GND

I0I1I2I3I4I5I6I7VCC

O0O1O2O3O4O5O6O7

I0I1I2I3I4I5I6I7

GND

VCC

typedef unsigned char u8_t;u8_t pixmap[3][16][2];

void show(u8_t row, u8_t p) { COLPORT1 = COLPORT2 = 0; if (row == 0) { // row: 3 ROWPORT |= (1 << PIN_DATA); ROWPORT |= (1 << PIN_CLK); ROWPORT &= ~(1 << PIN_CLK); ROWPORT &= ~(1 << PIN_DATA); } else { ROWPORT |= (1 << PIN_CLK); ROWPORT &= ~(1 << PIN_CLK); }

// CP2: 0x07 CP1: 0xE0 COLPORT1 = pixmap[p][row][0]; COLPORT2 = pixmap[p][row][1];}

GND

VCC

MR

CP

DSA

DSB

Q0

Q1

Q2

Q3

Q4

Q5

Q6

Q7

74H

CT164

GND

VCC

MR

CP

DSA

DSB

Q0

Q1

Q2

Q3

Q4

Q5

Q6

Q7

74H

CT164

COLPORT2 COLPORT1

ROWPORTPD6 ≙ PIN_DATAPD7 ≙ PIN_CLK

Christian Kroll (CTDO/Labor) Borg 16 – Getting Started Borg16-Folien 2014 64 / 64

Page 79: Borg 16 Getting Started - wiki.das-labor.org · Borg16–GettingStarted ChristianKroll ChaostreffDortmund/LABORe.V. 09.11.2014/Borg16-Folien ChristianKroll (CTDO/Labor) Borg16–GettingStarted

Die LED-Matrix

IRLD024

IRLD024

IRLD024

IRLD024

IRLD024

IRLD024

IRLD024

IRLD024

IRLD024

IRLD024

IRLD024

IRLD024

IRLD024

IRLD024

IRLD024

IRLD024

PD6

PD7

VCC

R16

R15

R14

R13

R12

R11

R10

R9

R8

R7

R6

R5

R4

R3

R2

R1

UDN2981A UDN2981A

VC

C

PC

7

PC

6

PC

5

PC

4

PC

3

PC

2

PC

1

PC

0

VC

C

PA

7

PA

6

PA

5

PA

4

PA

3

PA

2

PA

1

PA

0

O0O1O2O3O4O5O6O7GND

I0I1I2I3I4I5I6I7VCC

O0O1O2O3O4O5O6O7

I0I1I2I3I4I5I6I7

GND

VCC

typedef unsigned char u8_t;u8_t pixmap[3][16][2];

void show(u8_t row, u8_t p) { COLPORT1 = COLPORT2 = 0; if (row == 0) { // row: 3 ROWPORT |= (1 << PIN_DATA); ROWPORT |= (1 << PIN_CLK); ROWPORT &= ~(1 << PIN_CLK); ROWPORT &= ~(1 << PIN_DATA); } else { ROWPORT |= (1 << PIN_CLK); ROWPORT &= ~(1 << PIN_CLK); }

// CP2: 0x07 CP1: 0xE0 COLPORT1 = pixmap[p][row][0]; COLPORT2 = pixmap[p][row][1];}

GND

VCC

MR

CP

DSA

DSB

Q0

Q1

Q2

Q3

Q4

Q5

Q6

Q7

74H

CT164

GND

VCC

MR

CP

DSA

DSB

Q0

Q1

Q2

Q3

Q4

Q5

Q6

Q7

74H

CT164

COLPORT2 COLPORT1

ROWPORTPD6 ≙ PIN_DATAPD7 ≙ PIN_CLK

Christian Kroll (CTDO/Labor) Borg 16 – Getting Started Borg16-Folien 2014 64 / 64

Page 80: Borg 16 Getting Started - wiki.das-labor.org · Borg16–GettingStarted ChristianKroll ChaostreffDortmund/LABORe.V. 09.11.2014/Borg16-Folien ChristianKroll (CTDO/Labor) Borg16–GettingStarted

Die LED-Matrix

IRLD024

IRLD024

IRLD024

IRLD024

IRLD024

IRLD024

IRLD024

IRLD024

IRLD024

IRLD024

IRLD024

IRLD024

IRLD024

IRLD024

IRLD024

IRLD024

PD6

PD7

VCC

R16

R15

R14

R13

R12

R11

R10

R9

R8

R7

R6

R5

R4

R3

R2

R1

UDN2981A UDN2981A

VC

C

PC

7

PC

6

PC

5

PC

4

PC

3

PC

2

PC

1

PC

0

VC

C

PA

7

PA

6

PA

5

PA

4

PA

3

PA

2

PA

1

PA

0

O0O1O2O3O4O5O6O7GND

I0I1I2I3I4I5I6I7VCC

O0O1O2O3O4O5O6O7

I0I1I2I3I4I5I6I7

GND

VCC

typedef unsigned char u8_t;u8_t pixmap[3][16][2];

void show(u8_t row, u8_t p) { COLPORT1 = COLPORT2 = 0; if (row == 0) { // row: 3 ROWPORT |= (1 << PIN_DATA); ROWPORT |= (1 << PIN_CLK); ROWPORT &= ~(1 << PIN_CLK); ROWPORT &= ~(1 << PIN_DATA); } else { ROWPORT |= (1 << PIN_CLK); ROWPORT &= ~(1 << PIN_CLK); }

// CP2: 0x07 CP1: 0xE0 COLPORT1 = pixmap[p][row][0]; COLPORT2 = pixmap[p][row][1];}

GND

VCC

MR

CP

DSA

DSB

Q0

Q1

Q2

Q3

Q4

Q5

Q6

Q7

74H

CT164

GND

VCC

MR

CP

DSA

DSB

Q0

Q1

Q2

Q3

Q4

Q5

Q6

Q7

74H

CT164

COLPORT2 COLPORT1

ROWPORTPD6 ≙ PIN_DATAPD7 ≙ PIN_CLK

Christian Kroll (CTDO/Labor) Borg 16 – Getting Started Borg16-Folien 2014 64 / 64

Page 81: Borg 16 Getting Started - wiki.das-labor.org · Borg16–GettingStarted ChristianKroll ChaostreffDortmund/LABORe.V. 09.11.2014/Borg16-Folien ChristianKroll (CTDO/Labor) Borg16–GettingStarted

Die LED-Matrix

IRLD024

IRLD024

IRLD024

IRLD024

IRLD024

IRLD024

IRLD024

IRLD024

IRLD024

IRLD024

IRLD024

IRLD024

IRLD024

IRLD024

IRLD024

IRLD024

PD6

PD7

VCC

R16

R15

R14

R13

R12

R11

R10

R9

R8

R7

R6

R5

R4

R3

R2

R1

UDN2981A UDN2981A

VC

C

PC

7

PC

6

PC

5

PC

4

PC

3

PC

2

PC

1

PC

0

VC

C

PA

7

PA

6

PA

5

PA

4

PA

3

PA

2

PA

1

PA

0

O0O1O2O3O4O5O6O7GND

I0I1I2I3I4I5I6I7VCC

O0O1O2O3O4O5O6O7

I0I1I2I3I4I5I6I7

GND

VCC

typedef unsigned char u8_t;u8_t pixmap[3][16][2];

void show(u8_t row, u8_t p) { COLPORT1 = COLPORT2 = 0; if (row == 0) { // row: 3 ROWPORT |= (1 << PIN_DATA); ROWPORT |= (1 << PIN_CLK); ROWPORT &= ~(1 << PIN_CLK); ROWPORT &= ~(1 << PIN_DATA); } else { ROWPORT |= (1 << PIN_CLK); ROWPORT &= ~(1 << PIN_CLK); }

// CP2: 0x07 CP1: 0xE0 COLPORT1 = pixmap[p][row][0]; COLPORT2 = pixmap[p][row][1];}

GND

VCC

MR

CP

DSA

DSB

Q0

Q1

Q2

Q3

Q4

Q5

Q6

Q7

74H

CT164

GND

VCC

MR

CP

DSA

DSB

Q0

Q1

Q2

Q3

Q4

Q5

Q6

Q7

74H

CT164

COLPORT2 COLPORT1

ROWPORTPD6 ≙ PIN_DATAPD7 ≙ PIN_CLK

Christian Kroll (CTDO/Labor) Borg 16 – Getting Started Borg16-Folien 2014 64 / 64

Page 82: Borg 16 Getting Started - wiki.das-labor.org · Borg16–GettingStarted ChristianKroll ChaostreffDortmund/LABORe.V. 09.11.2014/Borg16-Folien ChristianKroll (CTDO/Labor) Borg16–GettingStarted

Die LED-Matrix

IRLD024

IRLD024

IRLD024

IRLD024

IRLD024

IRLD024

IRLD024

IRLD024

IRLD024

IRLD024

IRLD024

IRLD024

IRLD024

IRLD024

IRLD024

IRLD024

PD6

PD7

VCC

R16

R15

R14

R13

R12

R11

R10

R9

R8

R7

R6

R5

R4

R3

R2

R1

UDN2981A UDN2981A

VC

C

PC

7

PC

6

PC

5

PC

4

PC

3

PC

2

PC

1

PC

0

VC

C

PA

7

PA

6

PA

5

PA

4

PA

3

PA

2

PA

1

PA

0

O0O1O2O3O4O5O6O7GND

I0I1I2I3I4I5I6I7VCC

O0O1O2O3O4O5O6O7

I0I1I2I3I4I5I6I7

GND

VCC

typedef unsigned char u8_t;u8_t pixmap[3][16][2];

void show(u8_t row, u8_t p) { COLPORT1 = COLPORT2 = 0; if (row == 0) { // row: 4 ROWPORT |= (1 << PIN_DATA); ROWPORT |= (1 << PIN_CLK); ROWPORT &= ~(1 << PIN_CLK); ROWPORT &= ~(1 << PIN_DATA); } else { ROWPORT |= (1 << PIN_CLK); ROWPORT &= ~(1 << PIN_CLK); }

// CP2: 0xFF CP1: 0xFF COLPORT1 = pixmap[p][row][0]; COLPORT2 = pixmap[p][row][1];}

GND

VCC

MR

CP

DSA

DSB

Q0

Q1

Q2

Q3

Q4

Q5

Q6

Q7

74H

CT164

GND

VCC

MR

CP

DSA

DSB

Q0

Q1

Q2

Q3

Q4

Q5

Q6

Q7

74H

CT164

COLPORT2 COLPORT1

ROWPORTPD6 ≙ PIN_DATAPD7 ≙ PIN_CLK

Christian Kroll (CTDO/Labor) Borg 16 – Getting Started Borg16-Folien 2014 64 / 64

Page 83: Borg 16 Getting Started - wiki.das-labor.org · Borg16–GettingStarted ChristianKroll ChaostreffDortmund/LABORe.V. 09.11.2014/Borg16-Folien ChristianKroll (CTDO/Labor) Borg16–GettingStarted

Die LED-Matrix

IRLD024

IRLD024

IRLD024

IRLD024

IRLD024

IRLD024

IRLD024

IRLD024

IRLD024

IRLD024

IRLD024

IRLD024

IRLD024

IRLD024

IRLD024

IRLD024

PD6

PD7

VCC

R16

R15

R14

R13

R12

R11

R10

R9

R8

R7

R6

R5

R4

R3

R2

R1

UDN2981A UDN2981A

VC

C

PC

7

PC

6

PC

5

PC

4

PC

3

PC

2

PC

1

PC

0

VC

C

PA

7

PA

6

PA

5

PA

4

PA

3

PA

2

PA

1

PA

0

O0O1O2O3O4O5O6O7GND

I0I1I2I3I4I5I6I7VCC

O0O1O2O3O4O5O6O7

I0I1I2I3I4I5I6I7

GND

VCC

typedef unsigned char u8_t;u8_t pixmap[3][16][2];

void show(u8_t row, u8_t p) { COLPORT1 = COLPORT2 = 0; if (row == 0) { // row: 4 ROWPORT |= (1 << PIN_DATA); ROWPORT |= (1 << PIN_CLK); ROWPORT &= ~(1 << PIN_CLK); ROWPORT &= ~(1 << PIN_DATA); } else { ROWPORT |= (1 << PIN_CLK); ROWPORT &= ~(1 << PIN_CLK); }

// CP2: 0xFF CP1: 0xFF COLPORT1 = pixmap[p][row][0]; COLPORT2 = pixmap[p][row][1];}

GND

VCC

MR

CP

DSA

DSB

Q0

Q1

Q2

Q3

Q4

Q5

Q6

Q7

74H

CT164

GND

VCC

MR

CP

DSA

DSB

Q0

Q1

Q2

Q3

Q4

Q5

Q6

Q7

74H

CT164

COLPORT2 COLPORT1

ROWPORTPD6 ≙ PIN_DATAPD7 ≙ PIN_CLK

Christian Kroll (CTDO/Labor) Borg 16 – Getting Started Borg16-Folien 2014 64 / 64

Page 84: Borg 16 Getting Started - wiki.das-labor.org · Borg16–GettingStarted ChristianKroll ChaostreffDortmund/LABORe.V. 09.11.2014/Borg16-Folien ChristianKroll (CTDO/Labor) Borg16–GettingStarted

Die LED-Matrix

IRLD024

IRLD024

IRLD024

IRLD024

IRLD024

IRLD024

IRLD024

IRLD024

IRLD024

IRLD024

IRLD024

IRLD024

IRLD024

IRLD024

IRLD024

IRLD024

PD6

PD7

VCC

R16

R15

R14

R13

R12

R11

R10

R9

R8

R7

R6

R5

R4

R3

R2

R1

UDN2981A UDN2981A

VC

C

PC

7

PC

6

PC

5

PC

4

PC

3

PC

2

PC

1

PC

0

VC

C

PA

7

PA

6

PA

5

PA

4

PA

3

PA

2

PA

1

PA

0

O0O1O2O3O4O5O6O7GND

I0I1I2I3I4I5I6I7VCC

O0O1O2O3O4O5O6O7

I0I1I2I3I4I5I6I7

GND

VCC

typedef unsigned char u8_t;u8_t pixmap[3][16][2];

void show(u8_t row, u8_t p) { COLPORT1 = COLPORT2 = 0; if (row == 0) { // row: 4 ROWPORT |= (1 << PIN_DATA); ROWPORT |= (1 << PIN_CLK); ROWPORT &= ~(1 << PIN_CLK); ROWPORT &= ~(1 << PIN_DATA); } else { ROWPORT |= (1 << PIN_CLK); ROWPORT &= ~(1 << PIN_CLK); }

// CP2: 0xFF CP1: 0xFF COLPORT1 = pixmap[p][row][0]; COLPORT2 = pixmap[p][row][1];}

GND

VCC

MR

CP

DSA

DSB

Q0

Q1

Q2

Q3

Q4

Q5

Q6

Q7

74H

CT164

GND

VCC

MR

CP

DSA

DSB

Q0

Q1

Q2

Q3

Q4

Q5

Q6

Q7

74H

CT164

COLPORT2 COLPORT1

ROWPORTPD6 ≙ PIN_DATAPD7 ≙ PIN_CLK

Christian Kroll (CTDO/Labor) Borg 16 – Getting Started Borg16-Folien 2014 64 / 64

Page 85: Borg 16 Getting Started - wiki.das-labor.org · Borg16–GettingStarted ChristianKroll ChaostreffDortmund/LABORe.V. 09.11.2014/Borg16-Folien ChristianKroll (CTDO/Labor) Borg16–GettingStarted

Die LED-Matrix

IRLD024

IRLD024

IRLD024

IRLD024

IRLD024

IRLD024

IRLD024

IRLD024

IRLD024

IRLD024

IRLD024

IRLD024

IRLD024

IRLD024

IRLD024

IRLD024

PD6

PD7

VCC

R16

R15

R14

R13

R12

R11

R10

R9

R8

R7

R6

R5

R4

R3

R2

R1

UDN2981A UDN2981A

VC

C

PC

7

PC

6

PC

5

PC

4

PC

3

PC

2

PC

1

PC

0

VC

C

PA

7

PA

6

PA

5

PA

4

PA

3

PA

2

PA

1

PA

0

O0O1O2O3O4O5O6O7GND

I0I1I2I3I4I5I6I7VCC

O0O1O2O3O4O5O6O7

I0I1I2I3I4I5I6I7

GND

VCC

typedef unsigned char u8_t;u8_t pixmap[3][16][2];

void show(u8_t row, u8_t p) { COLPORT1 = COLPORT2 = 0; if (row == 0) { // row: 4 ROWPORT |= (1 << PIN_DATA); ROWPORT |= (1 << PIN_CLK); ROWPORT &= ~(1 << PIN_CLK); ROWPORT &= ~(1 << PIN_DATA); } else { ROWPORT |= (1 << PIN_CLK); ROWPORT &= ~(1 << PIN_CLK); }

// CP2: 0xFF CP1: 0xFF COLPORT1 = pixmap[p][row][0]; COLPORT2 = pixmap[p][row][1];}

GND

VCC

MR

CP

DSA

DSB

Q0

Q1

Q2

Q3

Q4

Q5

Q6

Q7

74H

CT164

GND

VCC

MR

CP

DSA

DSB

Q0

Q1

Q2

Q3

Q4

Q5

Q6

Q7

74H

CT164

COLPORT2 COLPORT1

ROWPORTPD6 ≙ PIN_DATAPD7 ≙ PIN_CLK

Christian Kroll (CTDO/Labor) Borg 16 – Getting Started Borg16-Folien 2014 64 / 64

Page 86: Borg 16 Getting Started - wiki.das-labor.org · Borg16–GettingStarted ChristianKroll ChaostreffDortmund/LABORe.V. 09.11.2014/Borg16-Folien ChristianKroll (CTDO/Labor) Borg16–GettingStarted

Die LED-Matrix

IRLD024

IRLD024

IRLD024

IRLD024

IRLD024

IRLD024

IRLD024

IRLD024

IRLD024

IRLD024

IRLD024

IRLD024

IRLD024

IRLD024

IRLD024

IRLD024

PD6

PD7

VCC

R16

R15

R14

R13

R12

R11

R10

R9

R8

R7

R6

R5

R4

R3

R2

R1

UDN2981A UDN2981A

VC

C

PC

7

PC

6

PC

5

PC

4

PC

3

PC

2

PC

1

PC

0

VC

C

PA

7

PA

6

PA

5

PA

4

PA

3

PA

2

PA

1

PA

0

O0O1O2O3O4O5O6O7GND

I0I1I2I3I4I5I6I7VCC

O0O1O2O3O4O5O6O7

I0I1I2I3I4I5I6I7

GND

VCC

typedef unsigned char u8_t;u8_t pixmap[3][16][2];

void show(u8_t row, u8_t p) { COLPORT1 = COLPORT2 = 0; if (row == 0) { // row: 5 ROWPORT |= (1 << PIN_DATA); ROWPORT |= (1 << PIN_CLK); ROWPORT &= ~(1 << PIN_CLK); ROWPORT &= ~(1 << PIN_DATA); } else { ROWPORT |= (1 << PIN_CLK); ROWPORT &= ~(1 << PIN_CLK); }

// CP2: 0x7F CP1: 0xFE COLPORT1 = pixmap[p][row][0]; COLPORT2 = pixmap[p][row][1];}

GND

VCC

MR

CP

DSA

DSB

Q0

Q1

Q2

Q3

Q4

Q5

Q6

Q7

74H

CT164

GND

VCC

MR

CP

DSA

DSB

Q0

Q1

Q2

Q3

Q4

Q5

Q6

Q7

74H

CT164

COLPORT2 COLPORT1

ROWPORTPD6 ≙ PIN_DATAPD7 ≙ PIN_CLK

Christian Kroll (CTDO/Labor) Borg 16 – Getting Started Borg16-Folien 2014 64 / 64

Page 87: Borg 16 Getting Started - wiki.das-labor.org · Borg16–GettingStarted ChristianKroll ChaostreffDortmund/LABORe.V. 09.11.2014/Borg16-Folien ChristianKroll (CTDO/Labor) Borg16–GettingStarted

Die LED-Matrix

IRLD024

IRLD024

IRLD024

IRLD024

IRLD024

IRLD024

IRLD024

IRLD024

IRLD024

IRLD024

IRLD024

IRLD024

IRLD024

IRLD024

IRLD024

IRLD024

PD6

PD7

VCC

R16

R15

R14

R13

R12

R11

R10

R9

R8

R7

R6

R5

R4

R3

R2

R1

UDN2981A UDN2981A

VC

C

PC

7

PC

6

PC

5

PC

4

PC

3

PC

2

PC

1

PC

0

VC

C

PA

7

PA

6

PA

5

PA

4

PA

3

PA

2

PA

1

PA

0

O0O1O2O3O4O5O6O7GND

I0I1I2I3I4I5I6I7VCC

O0O1O2O3O4O5O6O7

I0I1I2I3I4I5I6I7

GND

VCC

typedef unsigned char u8_t;u8_t pixmap[3][16][2];

void show(u8_t row, u8_t p) { COLPORT1 = COLPORT2 = 0; if (row == 0) { // row: 5 ROWPORT |= (1 << PIN_DATA); ROWPORT |= (1 << PIN_CLK); ROWPORT &= ~(1 << PIN_CLK); ROWPORT &= ~(1 << PIN_DATA); } else { ROWPORT |= (1 << PIN_CLK); ROWPORT &= ~(1 << PIN_CLK); }

// CP2: 0x7F CP1: 0xFE COLPORT1 = pixmap[p][row][0]; COLPORT2 = pixmap[p][row][1];}

GND

VCC

MR

CP

DSA

DSB

Q0

Q1

Q2

Q3

Q4

Q5

Q6

Q7

74H

CT164

GND

VCC

MR

CP

DSA

DSB

Q0

Q1

Q2

Q3

Q4

Q5

Q6

Q7

74H

CT164

COLPORT2 COLPORT1

ROWPORTPD6 ≙ PIN_DATAPD7 ≙ PIN_CLK

Christian Kroll (CTDO/Labor) Borg 16 – Getting Started Borg16-Folien 2014 64 / 64

Page 88: Borg 16 Getting Started - wiki.das-labor.org · Borg16–GettingStarted ChristianKroll ChaostreffDortmund/LABORe.V. 09.11.2014/Borg16-Folien ChristianKroll (CTDO/Labor) Borg16–GettingStarted

Die LED-Matrix

IRLD024

IRLD024

IRLD024

IRLD024

IRLD024

IRLD024

IRLD024

IRLD024

IRLD024

IRLD024

IRLD024

IRLD024

IRLD024

IRLD024

IRLD024

IRLD024

PD6

PD7

VCC

R16

R15

R14

R13

R12

R11

R10

R9

R8

R7

R6

R5

R4

R3

R2

R1

UDN2981A UDN2981A

VC

C

PC

7

PC

6

PC

5

PC

4

PC

3

PC

2

PC

1

PC

0

VC

C

PA

7

PA

6

PA

5

PA

4

PA

3

PA

2

PA

1

PA

0

O0O1O2O3O4O5O6O7GND

I0I1I2I3I4I5I6I7VCC

O0O1O2O3O4O5O6O7

I0I1I2I3I4I5I6I7

GND

VCC

typedef unsigned char u8_t;u8_t pixmap[3][16][2];

void show(u8_t row, u8_t p) { COLPORT1 = COLPORT2 = 0; if (row == 0) { // row: 5 ROWPORT |= (1 << PIN_DATA); ROWPORT |= (1 << PIN_CLK); ROWPORT &= ~(1 << PIN_CLK); ROWPORT &= ~(1 << PIN_DATA); } else { ROWPORT |= (1 << PIN_CLK); ROWPORT &= ~(1 << PIN_CLK); }

// CP2: 0x7F CP1: 0xFE COLPORT1 = pixmap[p][row][0]; COLPORT2 = pixmap[p][row][1];}

GND

VCC

MR

CP

DSA

DSB

Q0

Q1

Q2

Q3

Q4

Q5

Q6

Q7

74H

CT164

GND

VCC

MR

CP

DSA

DSB

Q0

Q1

Q2

Q3

Q4

Q5

Q6

Q7

74H

CT164

COLPORT2 COLPORT1

ROWPORTPD6 ≙ PIN_DATAPD7 ≙ PIN_CLK

Christian Kroll (CTDO/Labor) Borg 16 – Getting Started Borg16-Folien 2014 64 / 64

Page 89: Borg 16 Getting Started - wiki.das-labor.org · Borg16–GettingStarted ChristianKroll ChaostreffDortmund/LABORe.V. 09.11.2014/Borg16-Folien ChristianKroll (CTDO/Labor) Borg16–GettingStarted

Die LED-Matrix

IRLD024

IRLD024

IRLD024

IRLD024

IRLD024

IRLD024

IRLD024

IRLD024

IRLD024

IRLD024

IRLD024

IRLD024

IRLD024

IRLD024

IRLD024

IRLD024

PD6

PD7

VCC

R16

R15

R14

R13

R12

R11

R10

R9

R8

R7

R6

R5

R4

R3

R2

R1

UDN2981A UDN2981A

VC

C

PC

7

PC

6

PC

5

PC

4

PC

3

PC

2

PC

1

PC

0

VC

C

PA

7

PA

6

PA

5

PA

4

PA

3

PA

2

PA

1

PA

0

O0O1O2O3O4O5O6O7GND

I0I1I2I3I4I5I6I7VCC

O0O1O2O3O4O5O6O7

I0I1I2I3I4I5I6I7

GND

VCC

typedef unsigned char u8_t;u8_t pixmap[3][16][2];

void show(u8_t row, u8_t p) { COLPORT1 = COLPORT2 = 0; if (row == 0) { // row: 5 ROWPORT |= (1 << PIN_DATA); ROWPORT |= (1 << PIN_CLK); ROWPORT &= ~(1 << PIN_CLK); ROWPORT &= ~(1 << PIN_DATA); } else { ROWPORT |= (1 << PIN_CLK); ROWPORT &= ~(1 << PIN_CLK); }

// CP2: 0x7F CP1: 0xFE COLPORT1 = pixmap[p][row][0]; COLPORT2 = pixmap[p][row][1];}

GND

VCC

MR

CP

DSA

DSB

Q0

Q1

Q2

Q3

Q4

Q5

Q6

Q7

74H

CT164

GND

VCC

MR

CP

DSA

DSB

Q0

Q1

Q2

Q3

Q4

Q5

Q6

Q7

74H

CT164

COLPORT2 COLPORT1

ROWPORTPD6 ≙ PIN_DATAPD7 ≙ PIN_CLK

Christian Kroll (CTDO/Labor) Borg 16 – Getting Started Borg16-Folien 2014 64 / 64

Page 90: Borg 16 Getting Started - wiki.das-labor.org · Borg16–GettingStarted ChristianKroll ChaostreffDortmund/LABORe.V. 09.11.2014/Borg16-Folien ChristianKroll (CTDO/Labor) Borg16–GettingStarted

Die LED-Matrix

IRLD024

IRLD024

IRLD024

IRLD024

IRLD024

IRLD024

IRLD024

IRLD024

IRLD024

IRLD024

IRLD024

IRLD024

IRLD024

IRLD024

IRLD024

IRLD024

PD6

PD7

VCC

R16

R15

R14

R13

R12

R11

R10

R9

R8

R7

R6

R5

R4

R3

R2

R1

UDN2981A UDN2981A

VC

C

PC

7

PC

6

PC

5

PC

4

PC

3

PC

2

PC

1

PC

0

VC

C

PA

7

PA

6

PA

5

PA

4

PA

3

PA

2

PA

1

PA

0

O0O1O2O3O4O5O6O7GND

I0I1I2I3I4I5I6I7VCC

O0O1O2O3O4O5O6O7

I0I1I2I3I4I5I6I7

GND

VCC

typedef unsigned char u8_t;u8_t pixmap[3][16][2];

void show(u8_t row, u8_t p) { COLPORT1 = COLPORT2 = 0; if (row == 0) { // row: 6 ROWPORT |= (1 << PIN_DATA); ROWPORT |= (1 << PIN_CLK); ROWPORT &= ~(1 << PIN_CLK); ROWPORT &= ~(1 << PIN_DATA); } else { ROWPORT |= (1 << PIN_CLK); ROWPORT &= ~(1 << PIN_CLK); }

// CP2: 0x3F CP1: 0xFC COLPORT1 = pixmap[p][row][0]; COLPORT2 = pixmap[p][row][1];}

GND

VCC

MR

CP

DSA

DSB

Q0

Q1

Q2

Q3

Q4

Q5

Q6

Q7

74H

CT164

GND

VCC

MR

CP

DSA

DSB

Q0

Q1

Q2

Q3

Q4

Q5

Q6

Q7

74H

CT164

COLPORT2 COLPORT1

ROWPORTPD6 ≙ PIN_DATAPD7 ≙ PIN_CLK

Christian Kroll (CTDO/Labor) Borg 16 – Getting Started Borg16-Folien 2014 64 / 64

Page 91: Borg 16 Getting Started - wiki.das-labor.org · Borg16–GettingStarted ChristianKroll ChaostreffDortmund/LABORe.V. 09.11.2014/Borg16-Folien ChristianKroll (CTDO/Labor) Borg16–GettingStarted

Die LED-Matrix

IRLD024

IRLD024

IRLD024

IRLD024

IRLD024

IRLD024

IRLD024

IRLD024

IRLD024

IRLD024

IRLD024

IRLD024

IRLD024

IRLD024

IRLD024

IRLD024

PD6

PD7

VCC

R16

R15

R14

R13

R12

R11

R10

R9

R8

R7

R6

R5

R4

R3

R2

R1

UDN2981A UDN2981A

VC

C

PC

7

PC

6

PC

5

PC

4

PC

3

PC

2

PC

1

PC

0

VC

C

PA

7

PA

6

PA

5

PA

4

PA

3

PA

2

PA

1

PA

0

O0O1O2O3O4O5O6O7GND

I0I1I2I3I4I5I6I7VCC

O0O1O2O3O4O5O6O7

I0I1I2I3I4I5I6I7

GND

VCC

typedef unsigned char u8_t;u8_t pixmap[3][16][2];

void show(u8_t row, u8_t p) { COLPORT1 = COLPORT2 = 0; if (row == 0) { // row: 6 ROWPORT |= (1 << PIN_DATA); ROWPORT |= (1 << PIN_CLK); ROWPORT &= ~(1 << PIN_CLK); ROWPORT &= ~(1 << PIN_DATA); } else { ROWPORT |= (1 << PIN_CLK); ROWPORT &= ~(1 << PIN_CLK); }

// CP2: 0x3F CP1: 0xFC COLPORT1 = pixmap[p][row][0]; COLPORT2 = pixmap[p][row][1];}

GND

VCC

MR

CP

DSA

DSB

Q0

Q1

Q2

Q3

Q4

Q5

Q6

Q7

74H

CT164

GND

VCC

MR

CP

DSA

DSB

Q0

Q1

Q2

Q3

Q4

Q5

Q6

Q7

74H

CT164

COLPORT2 COLPORT1

ROWPORTPD6 ≙ PIN_DATAPD7 ≙ PIN_CLK

Christian Kroll (CTDO/Labor) Borg 16 – Getting Started Borg16-Folien 2014 64 / 64

Page 92: Borg 16 Getting Started - wiki.das-labor.org · Borg16–GettingStarted ChristianKroll ChaostreffDortmund/LABORe.V. 09.11.2014/Borg16-Folien ChristianKroll (CTDO/Labor) Borg16–GettingStarted

Die LED-Matrix

IRLD024

IRLD024

IRLD024

IRLD024

IRLD024

IRLD024

IRLD024

IRLD024

IRLD024

IRLD024

IRLD024

IRLD024

IRLD024

IRLD024

IRLD024

IRLD024

PD6

PD7

VCC

R16

R15

R14

R13

R12

R11

R10

R9

R8

R7

R6

R5

R4

R3

R2

R1

UDN2981A UDN2981A

VC

C

PC

7

PC

6

PC

5

PC

4

PC

3

PC

2

PC

1

PC

0

VC

C

PA

7

PA

6

PA

5

PA

4

PA

3

PA

2

PA

1

PA

0

O0O1O2O3O4O5O6O7GND

I0I1I2I3I4I5I6I7VCC

O0O1O2O3O4O5O6O7

I0I1I2I3I4I5I6I7

GND

VCC

typedef unsigned char u8_t;u8_t pixmap[3][16][2];

void show(u8_t row, u8_t p) { COLPORT1 = COLPORT2 = 0; if (row == 0) { // row: 6 ROWPORT |= (1 << PIN_DATA); ROWPORT |= (1 << PIN_CLK); ROWPORT &= ~(1 << PIN_CLK); ROWPORT &= ~(1 << PIN_DATA); } else { ROWPORT |= (1 << PIN_CLK); ROWPORT &= ~(1 << PIN_CLK); }

// CP2: 0x3F CP1: 0xFC COLPORT1 = pixmap[p][row][0]; COLPORT2 = pixmap[p][row][1];}

GND

VCC

MR

CP

DSA

DSB

Q0

Q1

Q2

Q3

Q4

Q5

Q6

Q7

74H

CT164

GND

VCC

MR

CP

DSA

DSB

Q0

Q1

Q2

Q3

Q4

Q5

Q6

Q7

74H

CT164

COLPORT2 COLPORT1

ROWPORTPD6 ≙ PIN_DATAPD7 ≙ PIN_CLK

Christian Kroll (CTDO/Labor) Borg 16 – Getting Started Borg16-Folien 2014 64 / 64

Page 93: Borg 16 Getting Started - wiki.das-labor.org · Borg16–GettingStarted ChristianKroll ChaostreffDortmund/LABORe.V. 09.11.2014/Borg16-Folien ChristianKroll (CTDO/Labor) Borg16–GettingStarted

Die LED-Matrix

IRLD024

IRLD024

IRLD024

IRLD024

IRLD024

IRLD024

IRLD024

IRLD024

IRLD024

IRLD024

IRLD024

IRLD024

IRLD024

IRLD024

IRLD024

IRLD024

PD6

PD7

VCC

R16

R15

R14

R13

R12

R11

R10

R9

R8

R7

R6

R5

R4

R3

R2

R1

UDN2981A UDN2981A

VC

C

PC

7

PC

6

PC

5

PC

4

PC

3

PC

2

PC

1

PC

0

VC

C

PA

7

PA

6

PA

5

PA

4

PA

3

PA

2

PA

1

PA

0

O0O1O2O3O4O5O6O7GND

I0I1I2I3I4I5I6I7VCC

O0O1O2O3O4O5O6O7

I0I1I2I3I4I5I6I7

GND

VCC

typedef unsigned char u8_t;u8_t pixmap[3][16][2];

void show(u8_t row, u8_t p) { COLPORT1 = COLPORT2 = 0; if (row == 0) { // row: 6 ROWPORT |= (1 << PIN_DATA); ROWPORT |= (1 << PIN_CLK); ROWPORT &= ~(1 << PIN_CLK); ROWPORT &= ~(1 << PIN_DATA); } else { ROWPORT |= (1 << PIN_CLK); ROWPORT &= ~(1 << PIN_CLK); }

// CP2: 0x3F CP1: 0xFC COLPORT1 = pixmap[p][row][0]; COLPORT2 = pixmap[p][row][1];}

GND

VCC

MR

CP

DSA

DSB

Q0

Q1

Q2

Q3

Q4

Q5

Q6

Q7

74H

CT164

GND

VCC

MR

CP

DSA

DSB

Q0

Q1

Q2

Q3

Q4

Q5

Q6

Q7

74H

CT164

COLPORT2 COLPORT1

ROWPORTPD6 ≙ PIN_DATAPD7 ≙ PIN_CLK

Christian Kroll (CTDO/Labor) Borg 16 – Getting Started Borg16-Folien 2014 64 / 64

Page 94: Borg 16 Getting Started - wiki.das-labor.org · Borg16–GettingStarted ChristianKroll ChaostreffDortmund/LABORe.V. 09.11.2014/Borg16-Folien ChristianKroll (CTDO/Labor) Borg16–GettingStarted

Die LED-Matrix

IRLD024

IRLD024

IRLD024

IRLD024

IRLD024

IRLD024

IRLD024

IRLD024

IRLD024

IRLD024

IRLD024

IRLD024

IRLD024

IRLD024

IRLD024

IRLD024

PD6

PD7

VCC

R16

R15

R14

R13

R12

R11

R10

R9

R8

R7

R6

R5

R4

R3

R2

R1

UDN2981A UDN2981A

VC

C

PC

7

PC

6

PC

5

PC

4

PC

3

PC

2

PC

1

PC

0

VC

C

PA

7

PA

6

PA

5

PA

4

PA

3

PA

2

PA

1

PA

0

O0O1O2O3O4O5O6O7GND

I0I1I2I3I4I5I6I7VCC

O0O1O2O3O4O5O6O7

I0I1I2I3I4I5I6I7

GND

VCC

typedef unsigned char u8_t;u8_t pixmap[3][16][2];

void show(u8_t row, u8_t p) { COLPORT1 = COLPORT2 = 0; if (row == 0) { // row: 7 ROWPORT |= (1 << PIN_DATA); ROWPORT |= (1 << PIN_CLK); ROWPORT &= ~(1 << PIN_CLK); ROWPORT &= ~(1 << PIN_DATA); } else { ROWPORT |= (1 << PIN_CLK); ROWPORT &= ~(1 << PIN_CLK); }

// CP2: 0x0F CP1: 0xF0 COLPORT1 = pixmap[p][row][0]; COLPORT2 = pixmap[p][row][1];}

GND

VCC

MR

CP

DSA

DSB

Q0

Q1

Q2

Q3

Q4

Q5

Q6

Q7

74H

CT164

GND

VCC

MR

CP

DSA

DSB

Q0

Q1

Q2

Q3

Q4

Q5

Q6

Q7

74H

CT164

COLPORT2 COLPORT1

ROWPORTPD6 ≙ PIN_DATAPD7 ≙ PIN_CLK

Christian Kroll (CTDO/Labor) Borg 16 – Getting Started Borg16-Folien 2014 64 / 64

Page 95: Borg 16 Getting Started - wiki.das-labor.org · Borg16–GettingStarted ChristianKroll ChaostreffDortmund/LABORe.V. 09.11.2014/Borg16-Folien ChristianKroll (CTDO/Labor) Borg16–GettingStarted

Die LED-Matrix

IRLD024

IRLD024

IRLD024

IRLD024

IRLD024

IRLD024

IRLD024

IRLD024

IRLD024

IRLD024

IRLD024

IRLD024

IRLD024

IRLD024

IRLD024

IRLD024

PD6

PD7

VCC

R16

R15

R14

R13

R12

R11

R10

R9

R8

R7

R6

R5

R4

R3

R2

R1

UDN2981A UDN2981A

VC

C

PC

7

PC

6

PC

5

PC

4

PC

3

PC

2

PC

1

PC

0

VC

C

PA

7

PA

6

PA

5

PA

4

PA

3

PA

2

PA

1

PA

0

O0O1O2O3O4O5O6O7GND

I0I1I2I3I4I5I6I7VCC

O0O1O2O3O4O5O6O7

I0I1I2I3I4I5I6I7

GND

VCC

typedef unsigned char u8_t;u8_t pixmap[3][16][2];

void show(u8_t row, u8_t p) { COLPORT1 = COLPORT2 = 0; if (row == 0) { // row: 7 ROWPORT |= (1 << PIN_DATA); ROWPORT |= (1 << PIN_CLK); ROWPORT &= ~(1 << PIN_CLK); ROWPORT &= ~(1 << PIN_DATA); } else { ROWPORT |= (1 << PIN_CLK); ROWPORT &= ~(1 << PIN_CLK); }

// CP2: 0x0F CP1: 0xF0 COLPORT1 = pixmap[p][row][0]; COLPORT2 = pixmap[p][row][1];}

GND

VCC

MR

CP

DSA

DSB

Q0

Q1

Q2

Q3

Q4

Q5

Q6

Q7

74H

CT164

GND

VCC

MR

CP

DSA

DSB

Q0

Q1

Q2

Q3

Q4

Q5

Q6

Q7

74H

CT164

COLPORT2 COLPORT1

ROWPORTPD6 ≙ PIN_DATAPD7 ≙ PIN_CLK

Christian Kroll (CTDO/Labor) Borg 16 – Getting Started Borg16-Folien 2014 64 / 64

Page 96: Borg 16 Getting Started - wiki.das-labor.org · Borg16–GettingStarted ChristianKroll ChaostreffDortmund/LABORe.V. 09.11.2014/Borg16-Folien ChristianKroll (CTDO/Labor) Borg16–GettingStarted

Die LED-Matrix

IRLD024

IRLD024

IRLD024

IRLD024

IRLD024

IRLD024

IRLD024

IRLD024

IRLD024

IRLD024

IRLD024

IRLD024

IRLD024

IRLD024

IRLD024

IRLD024

PD6

PD7

VCC

R16

R15

R14

R13

R12

R11

R10

R9

R8

R7

R6

R5

R4

R3

R2

R1

UDN2981A UDN2981A

VC

C

PC

7

PC

6

PC

5

PC

4

PC

3

PC

2

PC

1

PC

0

VC

C

PA

7

PA

6

PA

5

PA

4

PA

3

PA

2

PA

1

PA

0

O0O1O2O3O4O5O6O7GND

I0I1I2I3I4I5I6I7VCC

O0O1O2O3O4O5O6O7

I0I1I2I3I4I5I6I7

GND

VCC

typedef unsigned char u8_t;u8_t pixmap[3][16][2];

void show(u8_t row, u8_t p) { COLPORT1 = COLPORT2 = 0; if (row == 0) { // row: 7 ROWPORT |= (1 << PIN_DATA); ROWPORT |= (1 << PIN_CLK); ROWPORT &= ~(1 << PIN_CLK); ROWPORT &= ~(1 << PIN_DATA); } else { ROWPORT |= (1 << PIN_CLK); ROWPORT &= ~(1 << PIN_CLK); }

// CP2: 0x0F CP1: 0xF0 COLPORT1 = pixmap[p][row][0]; COLPORT2 = pixmap[p][row][1];}

GND

VCC

MR

CP

DSA

DSB

Q0

Q1

Q2

Q3

Q4

Q5

Q6

Q7

74H

CT164

GND

VCC

MR

CP

DSA

DSB

Q0

Q1

Q2

Q3

Q4

Q5

Q6

Q7

74H

CT164

COLPORT2 COLPORT1

ROWPORTPD6 ≙ PIN_DATAPD7 ≙ PIN_CLK

Christian Kroll (CTDO/Labor) Borg 16 – Getting Started Borg16-Folien 2014 64 / 64

Page 97: Borg 16 Getting Started - wiki.das-labor.org · Borg16–GettingStarted ChristianKroll ChaostreffDortmund/LABORe.V. 09.11.2014/Borg16-Folien ChristianKroll (CTDO/Labor) Borg16–GettingStarted

Die LED-Matrix

IRLD024

IRLD024

IRLD024

IRLD024

IRLD024

IRLD024

IRLD024

IRLD024

IRLD024

IRLD024

IRLD024

IRLD024

IRLD024

IRLD024

IRLD024

IRLD024

PD6

PD7

VCC

R16

R15

R14

R13

R12

R11

R10

R9

R8

R7

R6

R5

R4

R3

R2

R1

UDN2981A UDN2981A

VC

C

PC

7

PC

6

PC

5

PC

4

PC

3

PC

2

PC

1

PC

0

VC

C

PA

7

PA

6

PA

5

PA

4

PA

3

PA

2

PA

1

PA

0

O0O1O2O3O4O5O6O7GND

I0I1I2I3I4I5I6I7VCC

O0O1O2O3O4O5O6O7

I0I1I2I3I4I5I6I7

GND

VCC

typedef unsigned char u8_t;u8_t pixmap[3][16][2];

void show(u8_t row, u8_t p) { COLPORT1 = COLPORT2 = 0; if (row == 0) { // row: 7 ROWPORT |= (1 << PIN_DATA); ROWPORT |= (1 << PIN_CLK); ROWPORT &= ~(1 << PIN_CLK); ROWPORT &= ~(1 << PIN_DATA); } else { ROWPORT |= (1 << PIN_CLK); ROWPORT &= ~(1 << PIN_CLK); }

// CP2: 0x0F CP1: 0xF0 COLPORT1 = pixmap[p][row][0]; COLPORT2 = pixmap[p][row][1];}

GND

VCC

MR

CP

DSA

DSB

Q0

Q1

Q2

Q3

Q4

Q5

Q6

Q7

74H

CT164

GND

VCC

MR

CP

DSA

DSB

Q0

Q1

Q2

Q3

Q4

Q5

Q6

Q7

74H

CT164

COLPORT2 COLPORT1

ROWPORTPD6 ≙ PIN_DATAPD7 ≙ PIN_CLK

Christian Kroll (CTDO/Labor) Borg 16 – Getting Started Borg16-Folien 2014 64 / 64

Page 98: Borg 16 Getting Started - wiki.das-labor.org · Borg16–GettingStarted ChristianKroll ChaostreffDortmund/LABORe.V. 09.11.2014/Borg16-Folien ChristianKroll (CTDO/Labor) Borg16–GettingStarted

Die LED-Matrix

IRLD024

IRLD024

IRLD024

IRLD024

IRLD024

IRLD024

IRLD024

IRLD024

IRLD024

IRLD024

IRLD024

IRLD024

IRLD024

IRLD024

IRLD024

IRLD024

PD6

PD7

VCC

R16

R15

R14

R13

R12

R11

R10

R9

R8

R7

R6

R5

R4

R3

R2

R1

UDN2981A UDN2981A

VC

C

PC

7

PC

6

PC

5

PC

4

PC

3

PC

2

PC

1

PC

0

VC

C

PA

7

PA

6

PA

5

PA

4

PA

3

PA

2

PA

1

PA

0

O0O1O2O3O4O5O6O7GND

I0I1I2I3I4I5I6I7VCC

O0O1O2O3O4O5O6O7

I0I1I2I3I4I5I6I7

GND

VCC

typedef unsigned char u8_t;u8_t pixmap[3][16][2];

void show(u8_t row, u8_t p) { COLPORT1 = COLPORT2 = 0; if (row == 0) { // row: 8 ROWPORT |= (1 << PIN_DATA); ROWPORT |= (1 << PIN_CLK); ROWPORT &= ~(1 << PIN_CLK); ROWPORT &= ~(1 << PIN_DATA); } else { ROWPORT |= (1 << PIN_CLK); ROWPORT &= ~(1 << PIN_CLK); }

// CP2: 0x0F CP1: 0xF0 COLPORT1 = pixmap[p][row][0]; COLPORT2 = pixmap[p][row][1];}

GND

VCC

MR

CP

DSA

DSB

Q0

Q1

Q2

Q3

Q4

Q5

Q6

Q7

74H

CT164

GND

VCC

MR

CP

DSA

DSB

Q0

Q1

Q2

Q3

Q4

Q5

Q6

Q7

74H

CT164

COLPORT2 COLPORT1

ROWPORTPD6 ≙ PIN_DATAPD7 ≙ PIN_CLK

Christian Kroll (CTDO/Labor) Borg 16 – Getting Started Borg16-Folien 2014 64 / 64

Page 99: Borg 16 Getting Started - wiki.das-labor.org · Borg16–GettingStarted ChristianKroll ChaostreffDortmund/LABORe.V. 09.11.2014/Borg16-Folien ChristianKroll (CTDO/Labor) Borg16–GettingStarted

Die LED-Matrix

IRLD024

IRLD024

IRLD024

IRLD024

IRLD024

IRLD024

IRLD024

IRLD024

IRLD024

IRLD024

IRLD024

IRLD024

IRLD024

IRLD024

IRLD024

IRLD024

PD6

PD7

VCC

R16

R15

R14

R13

R12

R11

R10

R9

R8

R7

R6

R5

R4

R3

R2

R1

UDN2981A UDN2981A

VC

C

PC

7

PC

6

PC

5

PC

4

PC

3

PC

2

PC

1

PC

0

VC

C

PA

7

PA

6

PA

5

PA

4

PA

3

PA

2

PA

1

PA

0

O0O1O2O3O4O5O6O7GND

I0I1I2I3I4I5I6I7VCC

O0O1O2O3O4O5O6O7

I0I1I2I3I4I5I6I7

GND

VCC

typedef unsigned char u8_t;u8_t pixmap[3][16][2];

void show(u8_t row, u8_t p) { COLPORT1 = COLPORT2 = 0; if (row == 0) { // row: 8 ROWPORT |= (1 << PIN_DATA); ROWPORT |= (1 << PIN_CLK); ROWPORT &= ~(1 << PIN_CLK); ROWPORT &= ~(1 << PIN_DATA); } else { ROWPORT |= (1 << PIN_CLK); ROWPORT &= ~(1 << PIN_CLK); }

// CP2: 0x0F CP1: 0xF0 COLPORT1 = pixmap[p][row][0]; COLPORT2 = pixmap[p][row][1];}

GND

VCC

MR

CP

DSA

DSB

Q0

Q1

Q2

Q3

Q4

Q5

Q6

Q7

74H

CT164

GND

VCC

MR

CP

DSA

DSB

Q0

Q1

Q2

Q3

Q4

Q5

Q6

Q7

74H

CT164

COLPORT2 COLPORT1

ROWPORTPD6 ≙ PIN_DATAPD7 ≙ PIN_CLK

Christian Kroll (CTDO/Labor) Borg 16 – Getting Started Borg16-Folien 2014 64 / 64

Page 100: Borg 16 Getting Started - wiki.das-labor.org · Borg16–GettingStarted ChristianKroll ChaostreffDortmund/LABORe.V. 09.11.2014/Borg16-Folien ChristianKroll (CTDO/Labor) Borg16–GettingStarted

Die LED-Matrix

IRLD024

IRLD024

IRLD024

IRLD024

IRLD024

IRLD024

IRLD024

IRLD024

IRLD024

IRLD024

IRLD024

IRLD024

IRLD024

IRLD024

IRLD024

IRLD024

PD6

PD7

VCC

R16

R15

R14

R13

R12

R11

R10

R9

R8

R7

R6

R5

R4

R3

R2

R1

UDN2981A UDN2981A

VC

C

PC

7

PC

6

PC

5

PC

4

PC

3

PC

2

PC

1

PC

0

VC

C

PA

7

PA

6

PA

5

PA

4

PA

3

PA

2

PA

1

PA

0

O0O1O2O3O4O5O6O7GND

I0I1I2I3I4I5I6I7VCC

O0O1O2O3O4O5O6O7

I0I1I2I3I4I5I6I7

GND

VCC

typedef unsigned char u8_t;u8_t pixmap[3][16][2];

void show(u8_t row, u8_t p) { COLPORT1 = COLPORT2 = 0; if (row == 0) { // row: 8 ROWPORT |= (1 << PIN_DATA); ROWPORT |= (1 << PIN_CLK); ROWPORT &= ~(1 << PIN_CLK); ROWPORT &= ~(1 << PIN_DATA); } else { ROWPORT |= (1 << PIN_CLK); ROWPORT &= ~(1 << PIN_CLK); }

// CP2: 0x0F CP1: 0xF0 COLPORT1 = pixmap[p][row][0]; COLPORT2 = pixmap[p][row][1];}

GND

VCC

MR

CP

DSA

DSB

Q0

Q1

Q2

Q3

Q4

Q5

Q6

Q7

74H

CT164

GND

VCC

MR

CP

DSA

DSB

Q0

Q1

Q2

Q3

Q4

Q5

Q6

Q7

74H

CT164

COLPORT2 COLPORT1

ROWPORTPD6 ≙ PIN_DATAPD7 ≙ PIN_CLK

Christian Kroll (CTDO/Labor) Borg 16 – Getting Started Borg16-Folien 2014 64 / 64

Page 101: Borg 16 Getting Started - wiki.das-labor.org · Borg16–GettingStarted ChristianKroll ChaostreffDortmund/LABORe.V. 09.11.2014/Borg16-Folien ChristianKroll (CTDO/Labor) Borg16–GettingStarted

Die LED-Matrix

IRLD024

IRLD024

IRLD024

IRLD024

IRLD024

IRLD024

IRLD024

IRLD024

IRLD024

IRLD024

IRLD024

IRLD024

IRLD024

IRLD024

IRLD024

IRLD024

PD6

PD7

VCC

R16

R15

R14

R13

R12

R11

R10

R9

R8

R7

R6

R5

R4

R3

R2

R1

UDN2981A UDN2981A

VC

C

PC

7

PC

6

PC

5

PC

4

PC

3

PC

2

PC

1

PC

0

VC

C

PA

7

PA

6

PA

5

PA

4

PA

3

PA

2

PA

1

PA

0

O0O1O2O3O4O5O6O7GND

I0I1I2I3I4I5I6I7VCC

O0O1O2O3O4O5O6O7

I0I1I2I3I4I5I6I7

GND

VCC

typedef unsigned char u8_t;u8_t pixmap[3][16][2];

void show(u8_t row, u8_t p) { COLPORT1 = COLPORT2 = 0; if (row == 0) { // row: 8 ROWPORT |= (1 << PIN_DATA); ROWPORT |= (1 << PIN_CLK); ROWPORT &= ~(1 << PIN_CLK); ROWPORT &= ~(1 << PIN_DATA); } else { ROWPORT |= (1 << PIN_CLK); ROWPORT &= ~(1 << PIN_CLK); }

// CP2: 0x0F CP1: 0xF0 COLPORT1 = pixmap[p][row][0]; COLPORT2 = pixmap[p][row][1];}

GND

VCC

MR

CP

DSA

DSB

Q0

Q1

Q2

Q3

Q4

Q5

Q6

Q7

74H

CT164

GND

VCC

MR

CP

DSA

DSB

Q0

Q1

Q2

Q3

Q4

Q5

Q6

Q7

74H

CT164

COLPORT2 COLPORT1

ROWPORTPD6 ≙ PIN_DATAPD7 ≙ PIN_CLK

Christian Kroll (CTDO/Labor) Borg 16 – Getting Started Borg16-Folien 2014 64 / 64

Page 102: Borg 16 Getting Started - wiki.das-labor.org · Borg16–GettingStarted ChristianKroll ChaostreffDortmund/LABORe.V. 09.11.2014/Borg16-Folien ChristianKroll (CTDO/Labor) Borg16–GettingStarted

Die LED-Matrix

IRLD024

IRLD024

IRLD024

IRLD024

IRLD024

IRLD024

IRLD024

IRLD024

IRLD024

IRLD024

IRLD024

IRLD024

IRLD024

IRLD024

IRLD024

IRLD024

PD6

PD7

VCC

R16

R15

R14

R13

R12

R11

R10

R9

R8

R7

R6

R5

R4

R3

R2

R1

UDN2981A UDN2981A

VC

C

PC

7

PC

6

PC

5

PC

4

PC

3

PC

2

PC

1

PC

0

VC

C

PA

7

PA

6

PA

5

PA

4

PA

3

PA

2

PA

1

PA

0

O0O1O2O3O4O5O6O7GND

I0I1I2I3I4I5I6I7VCC

O0O1O2O3O4O5O6O7

I0I1I2I3I4I5I6I7

GND

VCC

typedef unsigned char u8_t;u8_t pixmap[3][16][2];

void show(u8_t row, u8_t p) { COLPORT1 = COLPORT2 = 0; if (row == 0) { // row: 9 ROWPORT |= (1 << PIN_DATA); ROWPORT |= (1 << PIN_CLK); ROWPORT &= ~(1 << PIN_CLK); ROWPORT &= ~(1 << PIN_DATA); } else { ROWPORT |= (1 << PIN_CLK); ROWPORT &= ~(1 << PIN_CLK); }

// CP2: 0x1F CP1: 0xF8 COLPORT1 = pixmap[p][row][0]; COLPORT2 = pixmap[p][row][1];}

GND

VCC

MR

CP

DSA

DSB

Q0

Q1

Q2

Q3

Q4

Q5

Q6

Q7

74H

CT164

GND

VCC

MR

CP

DSA

DSB

Q0

Q1

Q2

Q3

Q4

Q5

Q6

Q7

74H

CT164

COLPORT2 COLPORT1

ROWPORTPD6 ≙ PIN_DATAPD7 ≙ PIN_CLK

Christian Kroll (CTDO/Labor) Borg 16 – Getting Started Borg16-Folien 2014 64 / 64

Page 103: Borg 16 Getting Started - wiki.das-labor.org · Borg16–GettingStarted ChristianKroll ChaostreffDortmund/LABORe.V. 09.11.2014/Borg16-Folien ChristianKroll (CTDO/Labor) Borg16–GettingStarted

Die LED-Matrix

IRLD024

IRLD024

IRLD024

IRLD024

IRLD024

IRLD024

IRLD024

IRLD024

IRLD024

IRLD024

IRLD024

IRLD024

IRLD024

IRLD024

IRLD024

IRLD024

PD6

PD7

VCC

R16

R15

R14

R13

R12

R11

R10

R9

R8

R7

R6

R5

R4

R3

R2

R1

UDN2981A UDN2981A

VC

C

PC

7

PC

6

PC

5

PC

4

PC

3

PC

2

PC

1

PC

0

VC

C

PA

7

PA

6

PA

5

PA

4

PA

3

PA

2

PA

1

PA

0

O0O1O2O3O4O5O6O7GND

I0I1I2I3I4I5I6I7VCC

O0O1O2O3O4O5O6O7

I0I1I2I3I4I5I6I7

GND

VCC

typedef unsigned char u8_t;u8_t pixmap[3][16][2];

void show(u8_t row, u8_t p) { COLPORT1 = COLPORT2 = 0; if (row == 0) { // row: 9 ROWPORT |= (1 << PIN_DATA); ROWPORT |= (1 << PIN_CLK); ROWPORT &= ~(1 << PIN_CLK); ROWPORT &= ~(1 << PIN_DATA); } else { ROWPORT |= (1 << PIN_CLK); ROWPORT &= ~(1 << PIN_CLK); }

// CP2: 0x1F CP1: 0xF8 COLPORT1 = pixmap[p][row][0]; COLPORT2 = pixmap[p][row][1];}

GND

VCC

MR

CP

DSA

DSB

Q0

Q1

Q2

Q3

Q4

Q5

Q6

Q7

74H

CT164

GND

VCC

MR

CP

DSA

DSB

Q0

Q1

Q2

Q3

Q4

Q5

Q6

Q7

74H

CT164

COLPORT2 COLPORT1

ROWPORTPD6 ≙ PIN_DATAPD7 ≙ PIN_CLK

Christian Kroll (CTDO/Labor) Borg 16 – Getting Started Borg16-Folien 2014 64 / 64

Page 104: Borg 16 Getting Started - wiki.das-labor.org · Borg16–GettingStarted ChristianKroll ChaostreffDortmund/LABORe.V. 09.11.2014/Borg16-Folien ChristianKroll (CTDO/Labor) Borg16–GettingStarted

Die LED-Matrix

IRLD024

IRLD024

IRLD024

IRLD024

IRLD024

IRLD024

IRLD024

IRLD024

IRLD024

IRLD024

IRLD024

IRLD024

IRLD024

IRLD024

IRLD024

IRLD024

PD6

PD7

VCC

R16

R15

R14

R13

R12

R11

R10

R9

R8

R7

R6

R5

R4

R3

R2

R1

UDN2981A UDN2981A

VC

C

PC

7

PC

6

PC

5

PC

4

PC

3

PC

2

PC

1

PC

0

VC

C

PA

7

PA

6

PA

5

PA

4

PA

3

PA

2

PA

1

PA

0

O0O1O2O3O4O5O6O7GND

I0I1I2I3I4I5I6I7VCC

O0O1O2O3O4O5O6O7

I0I1I2I3I4I5I6I7

GND

VCC

typedef unsigned char u8_t;u8_t pixmap[3][16][2];

void show(u8_t row, u8_t p) { COLPORT1 = COLPORT2 = 0; if (row == 0) { // row: 9 ROWPORT |= (1 << PIN_DATA); ROWPORT |= (1 << PIN_CLK); ROWPORT &= ~(1 << PIN_CLK); ROWPORT &= ~(1 << PIN_DATA); } else { ROWPORT |= (1 << PIN_CLK); ROWPORT &= ~(1 << PIN_CLK); }

// CP2: 0x1F CP1: 0xF8 COLPORT1 = pixmap[p][row][0]; COLPORT2 = pixmap[p][row][1];}

GND

VCC

MR

CP

DSA

DSB

Q0

Q1

Q2

Q3

Q4

Q5

Q6

Q7

74H

CT164

GND

VCC

MR

CP

DSA

DSB

Q0

Q1

Q2

Q3

Q4

Q5

Q6

Q7

74H

CT164

COLPORT2 COLPORT1

ROWPORTPD6 ≙ PIN_DATAPD7 ≙ PIN_CLK

Christian Kroll (CTDO/Labor) Borg 16 – Getting Started Borg16-Folien 2014 64 / 64

Page 105: Borg 16 Getting Started - wiki.das-labor.org · Borg16–GettingStarted ChristianKroll ChaostreffDortmund/LABORe.V. 09.11.2014/Borg16-Folien ChristianKroll (CTDO/Labor) Borg16–GettingStarted

Die LED-Matrix

IRLD024

IRLD024

IRLD024

IRLD024

IRLD024

IRLD024

IRLD024

IRLD024

IRLD024

IRLD024

IRLD024

IRLD024

IRLD024

IRLD024

IRLD024

IRLD024

PD6

PD7

VCC

R16

R15

R14

R13

R12

R11

R10

R9

R8

R7

R6

R5

R4

R3

R2

R1

UDN2981A UDN2981A

VC

C

PC

7

PC

6

PC

5

PC

4

PC

3

PC

2

PC

1

PC

0

VC

C

PA

7

PA

6

PA

5

PA

4

PA

3

PA

2

PA

1

PA

0

O0O1O2O3O4O5O6O7GND

I0I1I2I3I4I5I6I7VCC

O0O1O2O3O4O5O6O7

I0I1I2I3I4I5I6I7

GND

VCC

typedef unsigned char u8_t;u8_t pixmap[3][16][2];

void show(u8_t row, u8_t p) { COLPORT1 = COLPORT2 = 0; if (row == 0) { // row: 9 ROWPORT |= (1 << PIN_DATA); ROWPORT |= (1 << PIN_CLK); ROWPORT &= ~(1 << PIN_CLK); ROWPORT &= ~(1 << PIN_DATA); } else { ROWPORT |= (1 << PIN_CLK); ROWPORT &= ~(1 << PIN_CLK); }

// CP2: 0x1F CP1: 0xF8 COLPORT1 = pixmap[p][row][0]; COLPORT2 = pixmap[p][row][1];}

GND

VCC

MR

CP

DSA

DSB

Q0

Q1

Q2

Q3

Q4

Q5

Q6

Q7

74H

CT164

GND

VCC

MR

CP

DSA

DSB

Q0

Q1

Q2

Q3

Q4

Q5

Q6

Q7

74H

CT164

COLPORT2 COLPORT1

ROWPORTPD6 ≙ PIN_DATAPD7 ≙ PIN_CLK

Christian Kroll (CTDO/Labor) Borg 16 – Getting Started Borg16-Folien 2014 64 / 64

Page 106: Borg 16 Getting Started - wiki.das-labor.org · Borg16–GettingStarted ChristianKroll ChaostreffDortmund/LABORe.V. 09.11.2014/Borg16-Folien ChristianKroll (CTDO/Labor) Borg16–GettingStarted

Die LED-Matrix

IRLD024

IRLD024

IRLD024

IRLD024

IRLD024

IRLD024

IRLD024

IRLD024

IRLD024

IRLD024

IRLD024

IRLD024

IRLD024

IRLD024

IRLD024

IRLD024

PD6

PD7

VCC

R16

R15

R14

R13

R12

R11

R10

R9

R8

R7

R6

R5

R4

R3

R2

R1

UDN2981A UDN2981A

VC

C

PC

7

PC

6

PC

5

PC

4

PC

3

PC

2

PC

1

PC

0

VC

C

PA

7

PA

6

PA

5

PA

4

PA

3

PA

2

PA

1

PA

0

O0O1O2O3O4O5O6O7GND

I0I1I2I3I4I5I6I7VCC

O0O1O2O3O4O5O6O7

I0I1I2I3I4I5I6I7

GND

VCC

typedef unsigned char u8_t;u8_t pixmap[3][16][2];

void show(u8_t row, u8_t p) { COLPORT1 = COLPORT2 = 0; if (row == 0) { // row: 10 ROWPORT |= (1 << PIN_DATA); ROWPORT |= (1 << PIN_CLK); ROWPORT &= ~(1 << PIN_CLK); ROWPORT &= ~(1 << PIN_DATA); } else { ROWPORT |= (1 << PIN_CLK); ROWPORT &= ~(1 << PIN_CLK); }

// CP2: 0x3F CP1: 0xFC COLPORT1 = pixmap[p][row][0]; COLPORT2 = pixmap[p][row][1];}

GND

VCC

MR

CP

DSA

DSB

Q0

Q1

Q2

Q3

Q4

Q5

Q6

Q7

74H

CT164

GND

VCC

MR

CP

DSA

DSB

Q0

Q1

Q2

Q3

Q4

Q5

Q6

Q7

74H

CT164

COLPORT2 COLPORT1

ROWPORTPD6 ≙ PIN_DATAPD7 ≙ PIN_CLK

Christian Kroll (CTDO/Labor) Borg 16 – Getting Started Borg16-Folien 2014 64 / 64

Page 107: Borg 16 Getting Started - wiki.das-labor.org · Borg16–GettingStarted ChristianKroll ChaostreffDortmund/LABORe.V. 09.11.2014/Borg16-Folien ChristianKroll (CTDO/Labor) Borg16–GettingStarted

Die LED-Matrix

IRLD024

IRLD024

IRLD024

IRLD024

IRLD024

IRLD024

IRLD024

IRLD024

IRLD024

IRLD024

IRLD024

IRLD024

IRLD024

IRLD024

IRLD024

IRLD024

PD6

PD7

VCC

R16

R15

R14

R13

R12

R11

R10

R9

R8

R7

R6

R5

R4

R3

R2

R1

UDN2981A UDN2981A

VC

C

PC

7

PC

6

PC

5

PC

4

PC

3

PC

2

PC

1

PC

0

VC

C

PA

7

PA

6

PA

5

PA

4

PA

3

PA

2

PA

1

PA

0

O0O1O2O3O4O5O6O7GND

I0I1I2I3I4I5I6I7VCC

O0O1O2O3O4O5O6O7

I0I1I2I3I4I5I6I7

GND

VCC

typedef unsigned char u8_t;u8_t pixmap[3][16][2];

void show(u8_t row, u8_t p) { COLPORT1 = COLPORT2 = 0; if (row == 0) { // row: 10 ROWPORT |= (1 << PIN_DATA); ROWPORT |= (1 << PIN_CLK); ROWPORT &= ~(1 << PIN_CLK); ROWPORT &= ~(1 << PIN_DATA); } else { ROWPORT |= (1 << PIN_CLK); ROWPORT &= ~(1 << PIN_CLK); }

// CP2: 0x3F CP1: 0xFC COLPORT1 = pixmap[p][row][0]; COLPORT2 = pixmap[p][row][1];}

GND

VCC

MR

CP

DSA

DSB

Q0

Q1

Q2

Q3

Q4

Q5

Q6

Q7

74H

CT164

GND

VCC

MR

CP

DSA

DSB

Q0

Q1

Q2

Q3

Q4

Q5

Q6

Q7

74H

CT164

COLPORT2 COLPORT1

ROWPORTPD6 ≙ PIN_DATAPD7 ≙ PIN_CLK

Christian Kroll (CTDO/Labor) Borg 16 – Getting Started Borg16-Folien 2014 64 / 64

Page 108: Borg 16 Getting Started - wiki.das-labor.org · Borg16–GettingStarted ChristianKroll ChaostreffDortmund/LABORe.V. 09.11.2014/Borg16-Folien ChristianKroll (CTDO/Labor) Borg16–GettingStarted

Die LED-Matrix

IRLD024

IRLD024

IRLD024

IRLD024

IRLD024

IRLD024

IRLD024

IRLD024

IRLD024

IRLD024

IRLD024

IRLD024

IRLD024

IRLD024

IRLD024

IRLD024

PD6

PD7

VCC

R16

R15

R14

R13

R12

R11

R10

R9

R8

R7

R6

R5

R4

R3

R2

R1

UDN2981A UDN2981A

VC

C

PC

7

PC

6

PC

5

PC

4

PC

3

PC

2

PC

1

PC

0

VC

C

PA

7

PA

6

PA

5

PA

4

PA

3

PA

2

PA

1

PA

0

O0O1O2O3O4O5O6O7GND

I0I1I2I3I4I5I6I7VCC

O0O1O2O3O4O5O6O7

I0I1I2I3I4I5I6I7

GND

VCC

typedef unsigned char u8_t;u8_t pixmap[3][16][2];

void show(u8_t row, u8_t p) { COLPORT1 = COLPORT2 = 0; if (row == 0) { // row: 10 ROWPORT |= (1 << PIN_DATA); ROWPORT |= (1 << PIN_CLK); ROWPORT &= ~(1 << PIN_CLK); ROWPORT &= ~(1 << PIN_DATA); } else { ROWPORT |= (1 << PIN_CLK); ROWPORT &= ~(1 << PIN_CLK); }

// CP2: 0x3F CP1: 0xFC COLPORT1 = pixmap[p][row][0]; COLPORT2 = pixmap[p][row][1];}

GND

VCC

MR

CP

DSA

DSB

Q0

Q1

Q2

Q3

Q4

Q5

Q6

Q7

74H

CT164

GND

VCC

MR

CP

DSA

DSB

Q0

Q1

Q2

Q3

Q4

Q5

Q6

Q7

74H

CT164

COLPORT2 COLPORT1

ROWPORTPD6 ≙ PIN_DATAPD7 ≙ PIN_CLK

Christian Kroll (CTDO/Labor) Borg 16 – Getting Started Borg16-Folien 2014 64 / 64

Page 109: Borg 16 Getting Started - wiki.das-labor.org · Borg16–GettingStarted ChristianKroll ChaostreffDortmund/LABORe.V. 09.11.2014/Borg16-Folien ChristianKroll (CTDO/Labor) Borg16–GettingStarted

Die LED-Matrix

IRLD024

IRLD024

IRLD024

IRLD024

IRLD024

IRLD024

IRLD024

IRLD024

IRLD024

IRLD024

IRLD024

IRLD024

IRLD024

IRLD024

IRLD024

IRLD024

PD6

PD7

VCC

R16

R15

R14

R13

R12

R11

R10

R9

R8

R7

R6

R5

R4

R3

R2

R1

UDN2981A UDN2981A

VC

C

PC

7

PC

6

PC

5

PC

4

PC

3

PC

2

PC

1

PC

0

VC

C

PA

7

PA

6

PA

5

PA

4

PA

3

PA

2

PA

1

PA

0

O0O1O2O3O4O5O6O7GND

I0I1I2I3I4I5I6I7VCC

O0O1O2O3O4O5O6O7

I0I1I2I3I4I5I6I7

GND

VCC

typedef unsigned char u8_t;u8_t pixmap[3][16][2];

void show(u8_t row, u8_t p) { COLPORT1 = COLPORT2 = 0; if (row == 0) { // row: 10 ROWPORT |= (1 << PIN_DATA); ROWPORT |= (1 << PIN_CLK); ROWPORT &= ~(1 << PIN_CLK); ROWPORT &= ~(1 << PIN_DATA); } else { ROWPORT |= (1 << PIN_CLK); ROWPORT &= ~(1 << PIN_CLK); }

// CP2: 0x3F CP1: 0xFC COLPORT1 = pixmap[p][row][0]; COLPORT2 = pixmap[p][row][1];}

GND

VCC

MR

CP

DSA

DSB

Q0

Q1

Q2

Q3

Q4

Q5

Q6

Q7

74H

CT164

GND

VCC

MR

CP

DSA

DSB

Q0

Q1

Q2

Q3

Q4

Q5

Q6

Q7

74H

CT164

COLPORT2 COLPORT1

ROWPORTPD6 ≙ PIN_DATAPD7 ≙ PIN_CLK

Christian Kroll (CTDO/Labor) Borg 16 – Getting Started Borg16-Folien 2014 64 / 64

Page 110: Borg 16 Getting Started - wiki.das-labor.org · Borg16–GettingStarted ChristianKroll ChaostreffDortmund/LABORe.V. 09.11.2014/Borg16-Folien ChristianKroll (CTDO/Labor) Borg16–GettingStarted

Die LED-Matrix

IRLD024

IRLD024

IRLD024

IRLD024

IRLD024

IRLD024

IRLD024

IRLD024

IRLD024

IRLD024

IRLD024

IRLD024

IRLD024

IRLD024

IRLD024

IRLD024

PD6

PD7

VCC

R16

R15

R14

R13

R12

R11

R10

R9

R8

R7

R6

R5

R4

R3

R2

R1

UDN2981A UDN2981A

VC

C

PC

7

PC

6

PC

5

PC

4

PC

3

PC

2

PC

1

PC

0

VC

C

PA

7

PA

6

PA

5

PA

4

PA

3

PA

2

PA

1

PA

0

O0O1O2O3O4O5O6O7GND

I0I1I2I3I4I5I6I7VCC

O0O1O2O3O4O5O6O7

I0I1I2I3I4I5I6I7

GND

VCC

typedef unsigned char u8_t;u8_t pixmap[3][16][2];

void show(u8_t row, u8_t p) { COLPORT1 = COLPORT2 = 0; if (row == 0) { // row: 11 ROWPORT |= (1 << PIN_DATA); ROWPORT |= (1 << PIN_CLK); ROWPORT &= ~(1 << PIN_CLK); ROWPORT &= ~(1 << PIN_DATA); } else { ROWPORT |= (1 << PIN_CLK); ROWPORT &= ~(1 << PIN_CLK); }

// CP2: 0x3E CP1: 0x7C COLPORT1 = pixmap[p][row][0]; COLPORT2 = pixmap[p][row][1];}

GND

VCC

MR

CP

DSA

DSB

Q0

Q1

Q2

Q3

Q4

Q5

Q6

Q7

74H

CT164

GND

VCC

MR

CP

DSA

DSB

Q0

Q1

Q2

Q3

Q4

Q5

Q6

Q7

74H

CT164

COLPORT2 COLPORT1

ROWPORTPD6 ≙ PIN_DATAPD7 ≙ PIN_CLK

Christian Kroll (CTDO/Labor) Borg 16 – Getting Started Borg16-Folien 2014 64 / 64

Page 111: Borg 16 Getting Started - wiki.das-labor.org · Borg16–GettingStarted ChristianKroll ChaostreffDortmund/LABORe.V. 09.11.2014/Borg16-Folien ChristianKroll (CTDO/Labor) Borg16–GettingStarted

Die LED-Matrix

IRLD024

IRLD024

IRLD024

IRLD024

IRLD024

IRLD024

IRLD024

IRLD024

IRLD024

IRLD024

IRLD024

IRLD024

IRLD024

IRLD024

IRLD024

IRLD024

PD6

PD7

VCC

R16

R15

R14

R13

R12

R11

R10

R9

R8

R7

R6

R5

R4

R3

R2

R1

UDN2981A UDN2981A

VC

C

PC

7

PC

6

PC

5

PC

4

PC

3

PC

2

PC

1

PC

0

VC

C

PA

7

PA

6

PA

5

PA

4

PA

3

PA

2

PA

1

PA

0

O0O1O2O3O4O5O6O7GND

I0I1I2I3I4I5I6I7VCC

O0O1O2O3O4O5O6O7

I0I1I2I3I4I5I6I7

GND

VCC

typedef unsigned char u8_t;u8_t pixmap[3][16][2];

void show(u8_t row, u8_t p) { COLPORT1 = COLPORT2 = 0; if (row == 0) { // row: 11 ROWPORT |= (1 << PIN_DATA); ROWPORT |= (1 << PIN_CLK); ROWPORT &= ~(1 << PIN_CLK); ROWPORT &= ~(1 << PIN_DATA); } else { ROWPORT |= (1 << PIN_CLK); ROWPORT &= ~(1 << PIN_CLK); }

// CP2: 0x3E CP1: 0x7C COLPORT1 = pixmap[p][row][0]; COLPORT2 = pixmap[p][row][1];}

GND

VCC

MR

CP

DSA

DSB

Q0

Q1

Q2

Q3

Q4

Q5

Q6

Q7

74H

CT164

GND

VCC

MR

CP

DSA

DSB

Q0

Q1

Q2

Q3

Q4

Q5

Q6

Q7

74H

CT164

COLPORT2 COLPORT1

ROWPORTPD6 ≙ PIN_DATAPD7 ≙ PIN_CLK

Christian Kroll (CTDO/Labor) Borg 16 – Getting Started Borg16-Folien 2014 64 / 64

Page 112: Borg 16 Getting Started - wiki.das-labor.org · Borg16–GettingStarted ChristianKroll ChaostreffDortmund/LABORe.V. 09.11.2014/Borg16-Folien ChristianKroll (CTDO/Labor) Borg16–GettingStarted

Die LED-Matrix

IRLD024

IRLD024

IRLD024

IRLD024

IRLD024

IRLD024

IRLD024

IRLD024

IRLD024

IRLD024

IRLD024

IRLD024

IRLD024

IRLD024

IRLD024

IRLD024

PD6

PD7

VCC

R16

R15

R14

R13

R12

R11

R10

R9

R8

R7

R6

R5

R4

R3

R2

R1

UDN2981A UDN2981A

VC

C

PC

7

PC

6

PC

5

PC

4

PC

3

PC

2

PC

1

PC

0

VC

C

PA

7

PA

6

PA

5

PA

4

PA

3

PA

2

PA

1

PA

0

O0O1O2O3O4O5O6O7GND

I0I1I2I3I4I5I6I7VCC

O0O1O2O3O4O5O6O7

I0I1I2I3I4I5I6I7

GND

VCC

typedef unsigned char u8_t;u8_t pixmap[3][16][2];

void show(u8_t row, u8_t p) { COLPORT1 = COLPORT2 = 0; if (row == 0) { // row: 11 ROWPORT |= (1 << PIN_DATA); ROWPORT |= (1 << PIN_CLK); ROWPORT &= ~(1 << PIN_CLK); ROWPORT &= ~(1 << PIN_DATA); } else { ROWPORT |= (1 << PIN_CLK); ROWPORT &= ~(1 << PIN_CLK); }

// CP2: 0x3E CP1: 0x7C COLPORT1 = pixmap[p][row][0]; COLPORT2 = pixmap[p][row][1];}

GND

VCC

MR

CP

DSA

DSB

Q0

Q1

Q2

Q3

Q4

Q5

Q6

Q7

74H

CT164

GND

VCC

MR

CP

DSA

DSB

Q0

Q1

Q2

Q3

Q4

Q5

Q6

Q7

74H

CT164

COLPORT2 COLPORT1

ROWPORTPD6 ≙ PIN_DATAPD7 ≙ PIN_CLK

Christian Kroll (CTDO/Labor) Borg 16 – Getting Started Borg16-Folien 2014 64 / 64

Page 113: Borg 16 Getting Started - wiki.das-labor.org · Borg16–GettingStarted ChristianKroll ChaostreffDortmund/LABORe.V. 09.11.2014/Borg16-Folien ChristianKroll (CTDO/Labor) Borg16–GettingStarted

Die LED-Matrix

IRLD024

IRLD024

IRLD024

IRLD024

IRLD024

IRLD024

IRLD024

IRLD024

IRLD024

IRLD024

IRLD024

IRLD024

IRLD024

IRLD024

IRLD024

IRLD024

PD6

PD7

VCC

R16

R15

R14

R13

R12

R11

R10

R9

R8

R7

R6

R5

R4

R3

R2

R1

UDN2981A UDN2981A

VC

C

PC

7

PC

6

PC

5

PC

4

PC

3

PC

2

PC

1

PC

0

VC

C

PA

7

PA

6

PA

5

PA

4

PA

3

PA

2

PA

1

PA

0

O0O1O2O3O4O5O6O7GND

I0I1I2I3I4I5I6I7VCC

O0O1O2O3O4O5O6O7

I0I1I2I3I4I5I6I7

GND

VCC

typedef unsigned char u8_t;u8_t pixmap[3][16][2];

void show(u8_t row, u8_t p) { COLPORT1 = COLPORT2 = 0; if (row == 0) { // row: 11 ROWPORT |= (1 << PIN_DATA); ROWPORT |= (1 << PIN_CLK); ROWPORT &= ~(1 << PIN_CLK); ROWPORT &= ~(1 << PIN_DATA); } else { ROWPORT |= (1 << PIN_CLK); ROWPORT &= ~(1 << PIN_CLK); }

// CP2: 0x3E CP1: 0x7C COLPORT1 = pixmap[p][row][0]; COLPORT2 = pixmap[p][row][1];}

GND

VCC

MR

CP

DSA

DSB

Q0

Q1

Q2

Q3

Q4

Q5

Q6

Q7

74H

CT164

GND

VCC

MR

CP

DSA

DSB

Q0

Q1

Q2

Q3

Q4

Q5

Q6

Q7

74H

CT164

COLPORT2 COLPORT1

ROWPORTPD6 ≙ PIN_DATAPD7 ≙ PIN_CLK

Christian Kroll (CTDO/Labor) Borg 16 – Getting Started Borg16-Folien 2014 64 / 64

Page 114: Borg 16 Getting Started - wiki.das-labor.org · Borg16–GettingStarted ChristianKroll ChaostreffDortmund/LABORe.V. 09.11.2014/Borg16-Folien ChristianKroll (CTDO/Labor) Borg16–GettingStarted

Die LED-Matrix

IRLD024

IRLD024

IRLD024

IRLD024

IRLD024

IRLD024

IRLD024

IRLD024

IRLD024

IRLD024

IRLD024

IRLD024

IRLD024

IRLD024

IRLD024

IRLD024

PD6

PD7

VCC

R16

R15

R14

R13

R12

R11

R10

R9

R8

R7

R6

R5

R4

R3

R2

R1

UDN2981A UDN2981A

VC

C

PC

7

PC

6

PC

5

PC

4

PC

3

PC

2

PC

1

PC

0

VC

C

PA

7

PA

6

PA

5

PA

4

PA

3

PA

2

PA

1

PA

0

O0O1O2O3O4O5O6O7GND

I0I1I2I3I4I5I6I7VCC

O0O1O2O3O4O5O6O7

I0I1I2I3I4I5I6I7

GND

VCC

typedef unsigned char u8_t;u8_t pixmap[3][16][2];

void show(u8_t row, u8_t p) { COLPORT1 = COLPORT2 = 0; if (row == 0) { // row: 12 ROWPORT |= (1 << PIN_DATA); ROWPORT |= (1 << PIN_CLK); ROWPORT &= ~(1 << PIN_CLK); ROWPORT &= ~(1 << PIN_DATA); } else { ROWPORT |= (1 << PIN_CLK); ROWPORT &= ~(1 << PIN_CLK); }

// CP2: 0x78 CP1: 0x1E COLPORT1 = pixmap[p][row][0]; COLPORT2 = pixmap[p][row][1];}

GND

VCC

MR

CP

DSA

DSB

Q0

Q1

Q2

Q3

Q4

Q5

Q6

Q7

74H

CT164

GND

VCC

MR

CP

DSA

DSB

Q0

Q1

Q2

Q3

Q4

Q5

Q6

Q7

74H

CT164

COLPORT2 COLPORT1

ROWPORTPD6 ≙ PIN_DATAPD7 ≙ PIN_CLK

Christian Kroll (CTDO/Labor) Borg 16 – Getting Started Borg16-Folien 2014 64 / 64

Page 115: Borg 16 Getting Started - wiki.das-labor.org · Borg16–GettingStarted ChristianKroll ChaostreffDortmund/LABORe.V. 09.11.2014/Borg16-Folien ChristianKroll (CTDO/Labor) Borg16–GettingStarted

Die LED-Matrix

IRLD024

IRLD024

IRLD024

IRLD024

IRLD024

IRLD024

IRLD024

IRLD024

IRLD024

IRLD024

IRLD024

IRLD024

IRLD024

IRLD024

IRLD024

IRLD024

PD6

PD7

VCC

R16

R15

R14

R13

R12

R11

R10

R9

R8

R7

R6

R5

R4

R3

R2

R1

UDN2981A UDN2981A

VC

C

PC

7

PC

6

PC

5

PC

4

PC

3

PC

2

PC

1

PC

0

VC

C

PA

7

PA

6

PA

5

PA

4

PA

3

PA

2

PA

1

PA

0

O0O1O2O3O4O5O6O7GND

I0I1I2I3I4I5I6I7VCC

O0O1O2O3O4O5O6O7

I0I1I2I3I4I5I6I7

GND

VCC

typedef unsigned char u8_t;u8_t pixmap[3][16][2];

void show(u8_t row, u8_t p) { COLPORT1 = COLPORT2 = 0; if (row == 0) { // row: 12 ROWPORT |= (1 << PIN_DATA); ROWPORT |= (1 << PIN_CLK); ROWPORT &= ~(1 << PIN_CLK); ROWPORT &= ~(1 << PIN_DATA); } else { ROWPORT |= (1 << PIN_CLK); ROWPORT &= ~(1 << PIN_CLK); }

// CP2: 0x78 CP1: 0x1E COLPORT1 = pixmap[p][row][0]; COLPORT2 = pixmap[p][row][1];}

GND

VCC

MR

CP

DSA

DSB

Q0

Q1

Q2

Q3

Q4

Q5

Q6

Q7

74H

CT164

GND

VCC

MR

CP

DSA

DSB

Q0

Q1

Q2

Q3

Q4

Q5

Q6

Q7

74H

CT164

COLPORT2 COLPORT1

ROWPORTPD6 ≙ PIN_DATAPD7 ≙ PIN_CLK

Christian Kroll (CTDO/Labor) Borg 16 – Getting Started Borg16-Folien 2014 64 / 64

Page 116: Borg 16 Getting Started - wiki.das-labor.org · Borg16–GettingStarted ChristianKroll ChaostreffDortmund/LABORe.V. 09.11.2014/Borg16-Folien ChristianKroll (CTDO/Labor) Borg16–GettingStarted

Die LED-Matrix

IRLD024

IRLD024

IRLD024

IRLD024

IRLD024

IRLD024

IRLD024

IRLD024

IRLD024

IRLD024

IRLD024

IRLD024

IRLD024

IRLD024

IRLD024

IRLD024

PD6

PD7

VCC

R16

R15

R14

R13

R12

R11

R10

R9

R8

R7

R6

R5

R4

R3

R2

R1

UDN2981A UDN2981A

VC

C

PC

7

PC

6

PC

5

PC

4

PC

3

PC

2

PC

1

PC

0

VC

C

PA

7

PA

6

PA

5

PA

4

PA

3

PA

2

PA

1

PA

0

O0O1O2O3O4O5O6O7GND

I0I1I2I3I4I5I6I7VCC

O0O1O2O3O4O5O6O7

I0I1I2I3I4I5I6I7

GND

VCC

typedef unsigned char u8_t;u8_t pixmap[3][16][2];

void show(u8_t row, u8_t p) { COLPORT1 = COLPORT2 = 0; if (row == 0) { // row: 12 ROWPORT |= (1 << PIN_DATA); ROWPORT |= (1 << PIN_CLK); ROWPORT &= ~(1 << PIN_CLK); ROWPORT &= ~(1 << PIN_DATA); } else { ROWPORT |= (1 << PIN_CLK); ROWPORT &= ~(1 << PIN_CLK); }

// CP2: 0x78 CP1: 0x1E COLPORT1 = pixmap[p][row][0]; COLPORT2 = pixmap[p][row][1];}

GND

VCC

MR

CP

DSA

DSB

Q0

Q1

Q2

Q3

Q4

Q5

Q6

Q7

74H

CT164

GND

VCC

MR

CP

DSA

DSB

Q0

Q1

Q2

Q3

Q4

Q5

Q6

Q7

74H

CT164

COLPORT2 COLPORT1

ROWPORTPD6 ≙ PIN_DATAPD7 ≙ PIN_CLK

Christian Kroll (CTDO/Labor) Borg 16 – Getting Started Borg16-Folien 2014 64 / 64

Page 117: Borg 16 Getting Started - wiki.das-labor.org · Borg16–GettingStarted ChristianKroll ChaostreffDortmund/LABORe.V. 09.11.2014/Borg16-Folien ChristianKroll (CTDO/Labor) Borg16–GettingStarted

Die LED-Matrix

IRLD024

IRLD024

IRLD024

IRLD024

IRLD024

IRLD024

IRLD024

IRLD024

IRLD024

IRLD024

IRLD024

IRLD024

IRLD024

IRLD024

IRLD024

IRLD024

PD6

PD7

VCC

R16

R15

R14

R13

R12

R11

R10

R9

R8

R7

R6

R5

R4

R3

R2

R1

UDN2981A UDN2981A

VC

C

PC

7

PC

6

PC

5

PC

4

PC

3

PC

2

PC

1

PC

0

VC

C

PA

7

PA

6

PA

5

PA

4

PA

3

PA

2

PA

1

PA

0

O0O1O2O3O4O5O6O7GND

I0I1I2I3I4I5I6I7VCC

O0O1O2O3O4O5O6O7

I0I1I2I3I4I5I6I7

GND

VCC

typedef unsigned char u8_t;u8_t pixmap[3][16][2];

void show(u8_t row, u8_t p) { COLPORT1 = COLPORT2 = 0; if (row == 0) { // row: 12 ROWPORT |= (1 << PIN_DATA); ROWPORT |= (1 << PIN_CLK); ROWPORT &= ~(1 << PIN_CLK); ROWPORT &= ~(1 << PIN_DATA); } else { ROWPORT |= (1 << PIN_CLK); ROWPORT &= ~(1 << PIN_CLK); }

// CP2: 0x78 CP1: 0x1E COLPORT1 = pixmap[p][row][0]; COLPORT2 = pixmap[p][row][1];}

GND

VCC

MR

CP

DSA

DSB

Q0

Q1

Q2

Q3

Q4

Q5

Q6

Q7

74H

CT164

GND

VCC

MR

CP

DSA

DSB

Q0

Q1

Q2

Q3

Q4

Q5

Q6

Q7

74H

CT164

COLPORT2 COLPORT1

ROWPORTPD6 ≙ PIN_DATAPD7 ≙ PIN_CLK

Christian Kroll (CTDO/Labor) Borg 16 – Getting Started Borg16-Folien 2014 64 / 64

Page 118: Borg 16 Getting Started - wiki.das-labor.org · Borg16–GettingStarted ChristianKroll ChaostreffDortmund/LABORe.V. 09.11.2014/Borg16-Folien ChristianKroll (CTDO/Labor) Borg16–GettingStarted

Die LED-Matrix

IRLD024

IRLD024

IRLD024

IRLD024

IRLD024

IRLD024

IRLD024

IRLD024

IRLD024

IRLD024

IRLD024

IRLD024

IRLD024

IRLD024

IRLD024

IRLD024

PD6

PD7

VCC

R16

R15

R14

R13

R12

R11

R10

R9

R8

R7

R6

R5

R4

R3

R2

R1

UDN2981A UDN2981A

VC

C

PC

7

PC

6

PC

5

PC

4

PC

3

PC

2

PC

1

PC

0

VC

C

PA

7

PA

6

PA

5

PA

4

PA

3

PA

2

PA

1

PA

0

O0O1O2O3O4O5O6O7GND

I0I1I2I3I4I5I6I7VCC

O0O1O2O3O4O5O6O7

I0I1I2I3I4I5I6I7

GND

VCC

typedef unsigned char u8_t;u8_t pixmap[3][16][2];

void show(u8_t row, u8_t p) { COLPORT1 = COLPORT2 = 0; if (row == 0) { // row: 13 ROWPORT |= (1 << PIN_DATA); ROWPORT |= (1 << PIN_CLK); ROWPORT &= ~(1 << PIN_CLK); ROWPORT &= ~(1 << PIN_DATA); } else { ROWPORT |= (1 << PIN_CLK); ROWPORT &= ~(1 << PIN_CLK); }

// CP2: 0x70 CP1: 0x0E COLPORT1 = pixmap[p][row][0]; COLPORT2 = pixmap[p][row][1];}

GND

VCC

MR

CP

DSA

DSB

Q0

Q1

Q2

Q3

Q4

Q5

Q6

Q7

74H

CT164

GND

VCC

MR

CP

DSA

DSB

Q0

Q1

Q2

Q3

Q4

Q5

Q6

Q7

74H

CT164

COLPORT2 COLPORT1

ROWPORTPD6 ≙ PIN_DATAPD7 ≙ PIN_CLK

Christian Kroll (CTDO/Labor) Borg 16 – Getting Started Borg16-Folien 2014 64 / 64

Page 119: Borg 16 Getting Started - wiki.das-labor.org · Borg16–GettingStarted ChristianKroll ChaostreffDortmund/LABORe.V. 09.11.2014/Borg16-Folien ChristianKroll (CTDO/Labor) Borg16–GettingStarted

Die LED-Matrix

IRLD024

IRLD024

IRLD024

IRLD024

IRLD024

IRLD024

IRLD024

IRLD024

IRLD024

IRLD024

IRLD024

IRLD024

IRLD024

IRLD024

IRLD024

IRLD024

PD6

PD7

VCC

R16

R15

R14

R13

R12

R11

R10

R9

R8

R7

R6

R5

R4

R3

R2

R1

UDN2981A UDN2981A

VC

C

PC

7

PC

6

PC

5

PC

4

PC

3

PC

2

PC

1

PC

0

VC

C

PA

7

PA

6

PA

5

PA

4

PA

3

PA

2

PA

1

PA

0

O0O1O2O3O4O5O6O7GND

I0I1I2I3I4I5I6I7VCC

O0O1O2O3O4O5O6O7

I0I1I2I3I4I5I6I7

GND

VCC

typedef unsigned char u8_t;u8_t pixmap[3][16][2];

void show(u8_t row, u8_t p) { COLPORT1 = COLPORT2 = 0; if (row == 0) { // row: 13 ROWPORT |= (1 << PIN_DATA); ROWPORT |= (1 << PIN_CLK); ROWPORT &= ~(1 << PIN_CLK); ROWPORT &= ~(1 << PIN_DATA); } else { ROWPORT |= (1 << PIN_CLK); ROWPORT &= ~(1 << PIN_CLK); }

// CP2: 0x70 CP1: 0x0E COLPORT1 = pixmap[p][row][0]; COLPORT2 = pixmap[p][row][1];}

GND

VCC

MR

CP

DSA

DSB

Q0

Q1

Q2

Q3

Q4

Q5

Q6

Q7

74H

CT164

GND

VCC

MR

CP

DSA

DSB

Q0

Q1

Q2

Q3

Q4

Q5

Q6

Q7

74H

CT164

COLPORT2 COLPORT1

ROWPORTPD6 ≙ PIN_DATAPD7 ≙ PIN_CLK

Christian Kroll (CTDO/Labor) Borg 16 – Getting Started Borg16-Folien 2014 64 / 64

Page 120: Borg 16 Getting Started - wiki.das-labor.org · Borg16–GettingStarted ChristianKroll ChaostreffDortmund/LABORe.V. 09.11.2014/Borg16-Folien ChristianKroll (CTDO/Labor) Borg16–GettingStarted

Die LED-Matrix

IRLD024

IRLD024

IRLD024

IRLD024

IRLD024

IRLD024

IRLD024

IRLD024

IRLD024

IRLD024

IRLD024

IRLD024

IRLD024

IRLD024

IRLD024

IRLD024

PD6

PD7

VCC

R16

R15

R14

R13

R12

R11

R10

R9

R8

R7

R6

R5

R4

R3

R2

R1

UDN2981A UDN2981A

VC

C

PC

7

PC

6

PC

5

PC

4

PC

3

PC

2

PC

1

PC

0

VC

C

PA

7

PA

6

PA

5

PA

4

PA

3

PA

2

PA

1

PA

0

O0O1O2O3O4O5O6O7GND

I0I1I2I3I4I5I6I7VCC

O0O1O2O3O4O5O6O7

I0I1I2I3I4I5I6I7

GND

VCC

typedef unsigned char u8_t;u8_t pixmap[3][16][2];

void show(u8_t row, u8_t p) { COLPORT1 = COLPORT2 = 0; if (row == 0) { // row: 13 ROWPORT |= (1 << PIN_DATA); ROWPORT |= (1 << PIN_CLK); ROWPORT &= ~(1 << PIN_CLK); ROWPORT &= ~(1 << PIN_DATA); } else { ROWPORT |= (1 << PIN_CLK); ROWPORT &= ~(1 << PIN_CLK); }

// CP2: 0x70 CP1: 0x0E COLPORT1 = pixmap[p][row][0]; COLPORT2 = pixmap[p][row][1];}

GND

VCC

MR

CP

DSA

DSB

Q0

Q1

Q2

Q3

Q4

Q5

Q6

Q7

74H

CT164

GND

VCC

MR

CP

DSA

DSB

Q0

Q1

Q2

Q3

Q4

Q5

Q6

Q7

74H

CT164

COLPORT2 COLPORT1

ROWPORTPD6 ≙ PIN_DATAPD7 ≙ PIN_CLK

Christian Kroll (CTDO/Labor) Borg 16 – Getting Started Borg16-Folien 2014 64 / 64

Page 121: Borg 16 Getting Started - wiki.das-labor.org · Borg16–GettingStarted ChristianKroll ChaostreffDortmund/LABORe.V. 09.11.2014/Borg16-Folien ChristianKroll (CTDO/Labor) Borg16–GettingStarted

Die LED-Matrix

IRLD024

IRLD024

IRLD024

IRLD024

IRLD024

IRLD024

IRLD024

IRLD024

IRLD024

IRLD024

IRLD024

IRLD024

IRLD024

IRLD024

IRLD024

IRLD024

PD6

PD7

VCC

R16

R15

R14

R13

R12

R11

R10

R9

R8

R7

R6

R5

R4

R3

R2

R1

UDN2981A UDN2981A

VC

C

PC

7

PC

6

PC

5

PC

4

PC

3

PC

2

PC

1

PC

0

VC

C

PA

7

PA

6

PA

5

PA

4

PA

3

PA

2

PA

1

PA

0

O0O1O2O3O4O5O6O7GND

I0I1I2I3I4I5I6I7VCC

O0O1O2O3O4O5O6O7

I0I1I2I3I4I5I6I7

GND

VCC

typedef unsigned char u8_t;u8_t pixmap[3][16][2];

void show(u8_t row, u8_t p) { COLPORT1 = COLPORT2 = 0; if (row == 0) { // row: 13 ROWPORT |= (1 << PIN_DATA); ROWPORT |= (1 << PIN_CLK); ROWPORT &= ~(1 << PIN_CLK); ROWPORT &= ~(1 << PIN_DATA); } else { ROWPORT |= (1 << PIN_CLK); ROWPORT &= ~(1 << PIN_CLK); }

// CP2: 0x70 CP1: 0x0E COLPORT1 = pixmap[p][row][0]; COLPORT2 = pixmap[p][row][1];}

GND

VCC

MR

CP

DSA

DSB

Q0

Q1

Q2

Q3

Q4

Q5

Q6

Q7

74H

CT164

GND

VCC

MR

CP

DSA

DSB

Q0

Q1

Q2

Q3

Q4

Q5

Q6

Q7

74H

CT164

COLPORT2 COLPORT1

ROWPORTPD6 ≙ PIN_DATAPD7 ≙ PIN_CLK

Christian Kroll (CTDO/Labor) Borg 16 – Getting Started Borg16-Folien 2014 64 / 64

Page 122: Borg 16 Getting Started - wiki.das-labor.org · Borg16–GettingStarted ChristianKroll ChaostreffDortmund/LABORe.V. 09.11.2014/Borg16-Folien ChristianKroll (CTDO/Labor) Borg16–GettingStarted

Die LED-Matrix

IRLD024

IRLD024

IRLD024

IRLD024

IRLD024

IRLD024

IRLD024

IRLD024

IRLD024

IRLD024

IRLD024

IRLD024

IRLD024

IRLD024

IRLD024

IRLD024

PD6

PD7

VCC

R16

R15

R14

R13

R12

R11

R10

R9

R8

R7

R6

R5

R4

R3

R2

R1

UDN2981A UDN2981A

VC

C

PC

7

PC

6

PC

5

PC

4

PC

3

PC

2

PC

1

PC

0

VC

C

PA

7

PA

6

PA

5

PA

4

PA

3

PA

2

PA

1

PA

0

O0O1O2O3O4O5O6O7GND

I0I1I2I3I4I5I6I7VCC

O0O1O2O3O4O5O6O7

I0I1I2I3I4I5I6I7

GND

VCC

typedef unsigned char u8_t;u8_t pixmap[3][16][2];

void show(u8_t row, u8_t p) { COLPORT1 = COLPORT2 = 0; if (row == 0) { // row: 14 ROWPORT |= (1 << PIN_DATA); ROWPORT |= (1 << PIN_CLK); ROWPORT &= ~(1 << PIN_CLK); ROWPORT &= ~(1 << PIN_DATA); } else { ROWPORT |= (1 << PIN_CLK); ROWPORT &= ~(1 << PIN_CLK); }

// CP2: 0x60 CP1: 0x06 COLPORT1 = pixmap[p][row][0]; COLPORT2 = pixmap[p][row][1];}

GND

VCC

MR

CP

DSA

DSB

Q0

Q1

Q2

Q3

Q4

Q5

Q6

Q7

74H

CT164

GND

VCC

MR

CP

DSA

DSB

Q0

Q1

Q2

Q3

Q4

Q5

Q6

Q7

74H

CT164

COLPORT2 COLPORT1

ROWPORTPD6 ≙ PIN_DATAPD7 ≙ PIN_CLK

Christian Kroll (CTDO/Labor) Borg 16 – Getting Started Borg16-Folien 2014 64 / 64

Page 123: Borg 16 Getting Started - wiki.das-labor.org · Borg16–GettingStarted ChristianKroll ChaostreffDortmund/LABORe.V. 09.11.2014/Borg16-Folien ChristianKroll (CTDO/Labor) Borg16–GettingStarted

Die LED-Matrix

IRLD024

IRLD024

IRLD024

IRLD024

IRLD024

IRLD024

IRLD024

IRLD024

IRLD024

IRLD024

IRLD024

IRLD024

IRLD024

IRLD024

IRLD024

IRLD024

PD6

PD7

VCC

R16

R15

R14

R13

R12

R11

R10

R9

R8

R7

R6

R5

R4

R3

R2

R1

UDN2981A UDN2981A

VC

C

PC

7

PC

6

PC

5

PC

4

PC

3

PC

2

PC

1

PC

0

VC

C

PA

7

PA

6

PA

5

PA

4

PA

3

PA

2

PA

1

PA

0

O0O1O2O3O4O5O6O7GND

I0I1I2I3I4I5I6I7VCC

O0O1O2O3O4O5O6O7

I0I1I2I3I4I5I6I7

GND

VCC

typedef unsigned char u8_t;u8_t pixmap[3][16][2];

void show(u8_t row, u8_t p) { COLPORT1 = COLPORT2 = 0; if (row == 0) { // row: 14 ROWPORT |= (1 << PIN_DATA); ROWPORT |= (1 << PIN_CLK); ROWPORT &= ~(1 << PIN_CLK); ROWPORT &= ~(1 << PIN_DATA); } else { ROWPORT |= (1 << PIN_CLK); ROWPORT &= ~(1 << PIN_CLK); }

// CP2: 0x60 CP1: 0x06 COLPORT1 = pixmap[p][row][0]; COLPORT2 = pixmap[p][row][1];}

GND

VCC

MR

CP

DSA

DSB

Q0

Q1

Q2

Q3

Q4

Q5

Q6

Q7

74H

CT164

GND

VCC

MR

CP

DSA

DSB

Q0

Q1

Q2

Q3

Q4

Q5

Q6

Q7

74H

CT164

COLPORT2 COLPORT1

ROWPORTPD6 ≙ PIN_DATAPD7 ≙ PIN_CLK

Christian Kroll (CTDO/Labor) Borg 16 – Getting Started Borg16-Folien 2014 64 / 64

Page 124: Borg 16 Getting Started - wiki.das-labor.org · Borg16–GettingStarted ChristianKroll ChaostreffDortmund/LABORe.V. 09.11.2014/Borg16-Folien ChristianKroll (CTDO/Labor) Borg16–GettingStarted

Die LED-Matrix

IRLD024

IRLD024

IRLD024

IRLD024

IRLD024

IRLD024

IRLD024

IRLD024

IRLD024

IRLD024

IRLD024

IRLD024

IRLD024

IRLD024

IRLD024

IRLD024

PD6

PD7

VCC

R16

R15

R14

R13

R12

R11

R10

R9

R8

R7

R6

R5

R4

R3

R2

R1

UDN2981A UDN2981A

VC

C

PC

7

PC

6

PC

5

PC

4

PC

3

PC

2

PC

1

PC

0

VC

C

PA

7

PA

6

PA

5

PA

4

PA

3

PA

2

PA

1

PA

0

O0O1O2O3O4O5O6O7GND

I0I1I2I3I4I5I6I7VCC

O0O1O2O3O4O5O6O7

I0I1I2I3I4I5I6I7

GND

VCC

typedef unsigned char u8_t;u8_t pixmap[3][16][2];

void show(u8_t row, u8_t p) { COLPORT1 = COLPORT2 = 0; if (row == 0) { // row: 14 ROWPORT |= (1 << PIN_DATA); ROWPORT |= (1 << PIN_CLK); ROWPORT &= ~(1 << PIN_CLK); ROWPORT &= ~(1 << PIN_DATA); } else { ROWPORT |= (1 << PIN_CLK); ROWPORT &= ~(1 << PIN_CLK); }

// CP2: 0x60 CP1: 0x06 COLPORT1 = pixmap[p][row][0]; COLPORT2 = pixmap[p][row][1];}

GND

VCC

MR

CP

DSA

DSB

Q0

Q1

Q2

Q3

Q4

Q5

Q6

Q7

74H

CT164

GND

VCC

MR

CP

DSA

DSB

Q0

Q1

Q2

Q3

Q4

Q5

Q6

Q7

74H

CT164

COLPORT2 COLPORT1

ROWPORTPD6 ≙ PIN_DATAPD7 ≙ PIN_CLK

Christian Kroll (CTDO/Labor) Borg 16 – Getting Started Borg16-Folien 2014 64 / 64

Page 125: Borg 16 Getting Started - wiki.das-labor.org · Borg16–GettingStarted ChristianKroll ChaostreffDortmund/LABORe.V. 09.11.2014/Borg16-Folien ChristianKroll (CTDO/Labor) Borg16–GettingStarted

Die LED-Matrix

IRLD024

IRLD024

IRLD024

IRLD024

IRLD024

IRLD024

IRLD024

IRLD024

IRLD024

IRLD024

IRLD024

IRLD024

IRLD024

IRLD024

IRLD024

IRLD024

PD6

PD7

VCC

R16

R15

R14

R13

R12

R11

R10

R9

R8

R7

R6

R5

R4

R3

R2

R1

UDN2981A UDN2981A

VC

C

PC

7

PC

6

PC

5

PC

4

PC

3

PC

2

PC

1

PC

0

VC

C

PA

7

PA

6

PA

5

PA

4

PA

3

PA

2

PA

1

PA

0

O0O1O2O3O4O5O6O7GND

I0I1I2I3I4I5I6I7VCC

O0O1O2O3O4O5O6O7

I0I1I2I3I4I5I6I7

GND

VCC

typedef unsigned char u8_t;u8_t pixmap[3][16][2];

void show(u8_t row, u8_t p) { COLPORT1 = COLPORT2 = 0; if (row == 0) { // row: 14 ROWPORT |= (1 << PIN_DATA); ROWPORT |= (1 << PIN_CLK); ROWPORT &= ~(1 << PIN_CLK); ROWPORT &= ~(1 << PIN_DATA); } else { ROWPORT |= (1 << PIN_CLK); ROWPORT &= ~(1 << PIN_CLK); }

// CP2: 0x60 CP1: 0x06 COLPORT1 = pixmap[p][row][0]; COLPORT2 = pixmap[p][row][1];}

GND

VCC

MR

CP

DSA

DSB

Q0

Q1

Q2

Q3

Q4

Q5

Q6

Q7

74H

CT164

GND

VCC

MR

CP

DSA

DSB

Q0

Q1

Q2

Q3

Q4

Q5

Q6

Q7

74H

CT164

COLPORT2 COLPORT1

ROWPORTPD6 ≙ PIN_DATAPD7 ≙ PIN_CLK

Christian Kroll (CTDO/Labor) Borg 16 – Getting Started Borg16-Folien 2014 64 / 64

Page 126: Borg 16 Getting Started - wiki.das-labor.org · Borg16–GettingStarted ChristianKroll ChaostreffDortmund/LABORe.V. 09.11.2014/Borg16-Folien ChristianKroll (CTDO/Labor) Borg16–GettingStarted

Die LED-Matrix

IRLD024

IRLD024

IRLD024

IRLD024

IRLD024

IRLD024

IRLD024

IRLD024

IRLD024

IRLD024

IRLD024

IRLD024

IRLD024

IRLD024

IRLD024

IRLD024

PD6

PD7

VCC

R16

R15

R14

R13

R12

R11

R10

R9

R8

R7

R6

R5

R4

R3

R2

R1

UDN2981A UDN2981A

VC

C

PC

7

PC

6

PC

5

PC

4

PC

3

PC

2

PC

1

PC

0

VC

C

PA

7

PA

6

PA

5

PA

4

PA

3

PA

2

PA

1

PA

0

O0O1O2O3O4O5O6O7GND

I0I1I2I3I4I5I6I7VCC

O0O1O2O3O4O5O6O7

I0I1I2I3I4I5I6I7

GND

VCC

typedef unsigned char u8_t;u8_t pixmap[3][16][2];

void show(u8_t row, u8_t p) { COLPORT1 = COLPORT2 = 0; if (row == 0) { // row: 15 ROWPORT |= (1 << PIN_DATA); ROWPORT |= (1 << PIN_CLK); ROWPORT &= ~(1 << PIN_CLK); ROWPORT &= ~(1 << PIN_DATA); } else { ROWPORT |= (1 << PIN_CLK); ROWPORT &= ~(1 << PIN_CLK); }

// CP2: 0xC0 CP1: 0x03 COLPORT1 = pixmap[p][row][0]; COLPORT2 = pixmap[p][row][1];}

GND

VCC

MR

CP

DSA

DSB

Q0

Q1

Q2

Q3

Q4

Q5

Q6

Q7

74H

CT164

GND

VCC

MR

CP

DSA

DSB

Q0

Q1

Q2

Q3

Q4

Q5

Q6

Q7

74H

CT164

COLPORT2 COLPORT1

ROWPORTPD6 ≙ PIN_DATAPD7 ≙ PIN_CLK

Christian Kroll (CTDO/Labor) Borg 16 – Getting Started Borg16-Folien 2014 64 / 64

Page 127: Borg 16 Getting Started - wiki.das-labor.org · Borg16–GettingStarted ChristianKroll ChaostreffDortmund/LABORe.V. 09.11.2014/Borg16-Folien ChristianKroll (CTDO/Labor) Borg16–GettingStarted

Die LED-Matrix

IRLD024

IRLD024

IRLD024

IRLD024

IRLD024

IRLD024

IRLD024

IRLD024

IRLD024

IRLD024

IRLD024

IRLD024

IRLD024

IRLD024

IRLD024

IRLD024

PD6

PD7

VCC

R16

R15

R14

R13

R12

R11

R10

R9

R8

R7

R6

R5

R4

R3

R2

R1

UDN2981A UDN2981A

VC

C

PC

7

PC

6

PC

5

PC

4

PC

3

PC

2

PC

1

PC

0

VC

C

PA

7

PA

6

PA

5

PA

4

PA

3

PA

2

PA

1

PA

0

O0O1O2O3O4O5O6O7GND

I0I1I2I3I4I5I6I7VCC

O0O1O2O3O4O5O6O7

I0I1I2I3I4I5I6I7

GND

VCC

typedef unsigned char u8_t;u8_t pixmap[3][16][2];

void show(u8_t row, u8_t p) { COLPORT1 = COLPORT2 = 0; if (row == 0) { // row: 15 ROWPORT |= (1 << PIN_DATA); ROWPORT |= (1 << PIN_CLK); ROWPORT &= ~(1 << PIN_CLK); ROWPORT &= ~(1 << PIN_DATA); } else { ROWPORT |= (1 << PIN_CLK); ROWPORT &= ~(1 << PIN_CLK); }

// CP2: 0xC0 CP1: 0x03 COLPORT1 = pixmap[p][row][0]; COLPORT2 = pixmap[p][row][1];}

GND

VCC

MR

CP

DSA

DSB

Q0

Q1

Q2

Q3

Q4

Q5

Q6

Q7

74H

CT164

GND

VCC

MR

CP

DSA

DSB

Q0

Q1

Q2

Q3

Q4

Q5

Q6

Q7

74H

CT164

COLPORT2 COLPORT1

ROWPORTPD6 ≙ PIN_DATAPD7 ≙ PIN_CLK

Christian Kroll (CTDO/Labor) Borg 16 – Getting Started Borg16-Folien 2014 64 / 64

Page 128: Borg 16 Getting Started - wiki.das-labor.org · Borg16–GettingStarted ChristianKroll ChaostreffDortmund/LABORe.V. 09.11.2014/Borg16-Folien ChristianKroll (CTDO/Labor) Borg16–GettingStarted

Die LED-Matrix

IRLD024

IRLD024

IRLD024

IRLD024

IRLD024

IRLD024

IRLD024

IRLD024

IRLD024

IRLD024

IRLD024

IRLD024

IRLD024

IRLD024

IRLD024

IRLD024

PD6

PD7

VCC

R16

R15

R14

R13

R12

R11

R10

R9

R8

R7

R6

R5

R4

R3

R2

R1

UDN2981A UDN2981A

VC

C

PC

7

PC

6

PC

5

PC

4

PC

3

PC

2

PC

1

PC

0

VC

C

PA

7

PA

6

PA

5

PA

4

PA

3

PA

2

PA

1

PA

0

O0O1O2O3O4O5O6O7GND

I0I1I2I3I4I5I6I7VCC

O0O1O2O3O4O5O6O7

I0I1I2I3I4I5I6I7

GND

VCC

typedef unsigned char u8_t;u8_t pixmap[3][16][2];

void show(u8_t row, u8_t p) { COLPORT1 = COLPORT2 = 0; if (row == 0) { // row: 15 ROWPORT |= (1 << PIN_DATA); ROWPORT |= (1 << PIN_CLK); ROWPORT &= ~(1 << PIN_CLK); ROWPORT &= ~(1 << PIN_DATA); } else { ROWPORT |= (1 << PIN_CLK); ROWPORT &= ~(1 << PIN_CLK); }

// CP2: 0xC0 CP1: 0x03 COLPORT1 = pixmap[p][row][0]; COLPORT2 = pixmap[p][row][1];}

GND

VCC

MR

CP

DSA

DSB

Q0

Q1

Q2

Q3

Q4

Q5

Q6

Q7

74H

CT164

GND

VCC

MR

CP

DSA

DSB

Q0

Q1

Q2

Q3

Q4

Q5

Q6

Q7

74H

CT164

COLPORT2 COLPORT1

ROWPORTPD6 ≙ PIN_DATAPD7 ≙ PIN_CLK

Christian Kroll (CTDO/Labor) Borg 16 – Getting Started Borg16-Folien 2014 64 / 64

Page 129: Borg 16 Getting Started - wiki.das-labor.org · Borg16–GettingStarted ChristianKroll ChaostreffDortmund/LABORe.V. 09.11.2014/Borg16-Folien ChristianKroll (CTDO/Labor) Borg16–GettingStarted

Die LED-Matrix

IRLD024

IRLD024

IRLD024

IRLD024

IRLD024

IRLD024

IRLD024

IRLD024

IRLD024

IRLD024

IRLD024

IRLD024

IRLD024

IRLD024

IRLD024

IRLD024

PD6

PD7

VCC

R16

R15

R14

R13

R12

R11

R10

R9

R8

R7

R6

R5

R4

R3

R2

R1

UDN2981A UDN2981A

VC

C

PC

7

PC

6

PC

5

PC

4

PC

3

PC

2

PC

1

PC

0

VC

C

PA

7

PA

6

PA

5

PA

4

PA

3

PA

2

PA

1

PA

0

O0O1O2O3O4O5O6O7GND

I0I1I2I3I4I5I6I7VCC

O0O1O2O3O4O5O6O7

I0I1I2I3I4I5I6I7

GND

VCC

typedef unsigned char u8_t;u8_t pixmap[3][16][2];

void show(u8_t row, u8_t p) { COLPORT1 = COLPORT2 = 0; if (row == 0) { // row: 15 ROWPORT |= (1 << PIN_DATA); ROWPORT |= (1 << PIN_CLK); ROWPORT &= ~(1 << PIN_CLK); ROWPORT &= ~(1 << PIN_DATA); } else { ROWPORT |= (1 << PIN_CLK); ROWPORT &= ~(1 << PIN_CLK); }

// CP2: 0xC0 CP1: 0x03 COLPORT1 = pixmap[p][row][0]; COLPORT2 = pixmap[p][row][1];}

GND

VCC

MR

CP

DSA

DSB

Q0

Q1

Q2

Q3

Q4

Q5

Q6

Q7

74H

CT164

GND

VCC

MR

CP

DSA

DSB

Q0

Q1

Q2

Q3

Q4

Q5

Q6

Q7

74H

CT164

COLPORT2 COLPORT1

ROWPORTPD6 ≙ PIN_DATAPD7 ≙ PIN_CLK

Christian Kroll (CTDO/Labor) Borg 16 – Getting Started Borg16-Folien 2014 64 / 64

Page 130: Borg 16 Getting Started - wiki.das-labor.org · Borg16–GettingStarted ChristianKroll ChaostreffDortmund/LABORe.V. 09.11.2014/Borg16-Folien ChristianKroll (CTDO/Labor) Borg16–GettingStarted

Die LED-Matrix

IRLD024

IRLD024

IRLD024

IRLD024

IRLD024

IRLD024

IRLD024

IRLD024

IRLD024

IRLD024

IRLD024

IRLD024

IRLD024

IRLD024

IRLD024

IRLD024

PD6

PD7

VCC

R16

R15

R14

R13

R12

R11

R10

R9

R8

R7

R6

R5

R4

R3

R2

R1

UDN2981A UDN2981A

VC

C

PC

7

PC

6

PC

5

PC

4

PC

3

PC

2

PC

1

PC

0

VC

C

PA

7

PA

6

PA

5

PA

4

PA

3

PA

2

PA

1

PA

0

O0O1O2O3O4O5O6O7GND

I0I1I2I3I4I5I6I7VCC

O0O1O2O3O4O5O6O7

I0I1I2I3I4I5I6I7

GND

VCC

typedef unsigned char u8_t;u8_t pixmap[3][16][2];

void show(u8_t row, u8_t p) { COLPORT1 = COLPORT2 = 0; if (row == 0) { // row: 0 ROWPORT |= (1 << PIN_DATA); ROWPORT |= (1 << PIN_CLK); ROWPORT &= ~(1 << PIN_CLK); ROWPORT &= ~(1 << PIN_DATA); } else { ROWPORT |= (1 << PIN_CLK); ROWPORT &= ~(1 << PIN_CLK); }

// CP2: 0x00 CP1: 0x00 COLPORT1 = pixmap[p][row][0]; COLPORT2 = pixmap[p][row][1];}

GND

VCC

MR

CP

DSA

DSB

Q0

Q1

Q2

Q3

Q4

Q5

Q6

Q7

74H

CT164

GND

VCC

MR

CP

DSA

DSB

Q0

Q1

Q2

Q3

Q4

Q5

Q6

Q7

74H

CT164

COLPORT2 COLPORT1

ROWPORTPD6 ≙ PIN_DATAPD7 ≙ PIN_CLK

Christian Kroll (CTDO/Labor) Borg 16 – Getting Started Borg16-Folien 2014 64 / 64