Software
Das Programm hat eine eigene Sektion für die Konfiguration aller Arbeitsbedingungen.
Diese ist mit "
USER CONFIG SECTION" gekennzeichnet, dort stellt man die Parameter, passend zur Maschine und seinen Bedürfnissen ein.
Sind alle Einstellungen gemacht und gespeichert, kann das Programm kompiliert und in den '
Arduino nano' geladen werden.
Alle relevanten Einstellungen erkläre ich an dieser Stelle.
44. HELLO_LOGO
"
true" Beim Einschalten wird das Logo angezeigt.
"
false" Beim Einschalten wird kein Logo angezeigt.
45. HELLO_TEXT
"
true" Beim Einschalten wird der Begrüßungstext angezeigt.
"
false" Beim Einschalten wird kein Begrüßungstext angezeigt.
46. HELLO_TIMEOUT
"
3000" Die Anzeigedauer der Begrüßung in Millisekunden. 3000 steht also für 3 Sekunden.
47. BRIGHTNESS
"
128" Die Helligkeit des Displays im Bereich von 0 bis 255 als initialer Startwert. Beim Betrieb kann die Helligkeit mittels Taster eingestellt werden und wird dann im EEPROM des Mikrocontrollers abgelegt. Konstruktionsbedingt liegen die sichtbaren Helligkeitsänderungen mehr im unteren Bereich, weiter oben sieht man keinen Unterschied mehr.
48. FLIPDISPLAY
"
false" Der Inhalt des Displays wird so ausgegeben, wie es der Hersteller vorsieht.
"
true" Der Inhalt des Displays wird um 180 Grad gedreht ausgegeben. Das ist praktisch, wenn man das Display verkehrt herum eingebaut hat oder einbauen musste.
49. INVERTDISPLAY
"
false" Die Anzeige auf dem Display ist hell auf dunklem Hintergrund.
"
true" Die Anzeige auf dem Display ist dunkel auf hellem Hintergrund (nur praktisch, wenn man selbst Schriften oder Bilder entwickelt und die Position pixelgenau sehen möchte. Außerdem kann man durch diese Einstellung das komplette Displayfeld sehen um es mechanisch auszurichten.
50. SWAPCLICK
Die Funktion des einfachen Klicks kann mit der Funktion des Doppelklicks vertauscht werden.
51. FONTSIZE
"
1" Mittlere Schrift- und Anzeigengröße. In dieser Einstellung passen in der Breite mehr Informationen auf das Display und die Höhe passt auch in kleine mechanische Ausschnitte von vorhandenen Displays in den Maschinen.
"
2" Die größte mögliche Darstellung. In der Höhe werden die maximalen 32 Pixel des Displays ausgenutzt. Daher weniger Informationen in der Breite.
52. UNSIGN
"
false" Counterwerte werden mit negativem Vorzeichen angezeigt, wenn sie negativ sind (z.B. nach einen 0-Reset mitten im Band und zurückspulen).
"
true" Es werden keine negativen Vorzeichen im normalen Counter angezeigt (nur im Zählmodus, nicht bei der Meter- oder Echtzeitanzeige). Der Counter verhält sich wie ein mechanisches Modell.
53. DIGITS_MINUTES
Anzahl der Minutenstellen bei der Echtzeitanzeige. Möglich ist 2 oder 3. Bei drei Stellen entfallen die Stunden.
54. DIGITS_COUNTER
"
6" Je nach eingestellter Anzeigengröße können hier die Anzahl der Stellen für den normalen Zähler eingetragen werden.
Bei FONTSIZE=1 passen maximal 6 Stellen auf das Display, gültige Werte bei FONTSIZE=1 sind 4, 5 oder 6 Stellen.
Bei FONTSIZE=2 passen maximal 5 Stellen auf das Display, gültige Werte bei FONTSIZE=2 sind 4 oder 5 Stellen.
55. PULSES_COUNTER
"
1" Die Anzahl der erforderlichen Impulse, um eine Stelle bei dem normalen Zähler weiter zu zählen.
Angenommen es gibt eine Segmentscheibe mit 4 Segmenten und man möchte pro Umdrehung eine Stelle weiterzählen, nimmt man die Einstellung 4.
Dann wären 4 Impulse nötig pro Zählung. Das muss jeder für sich einstellen!
56. OPHOURSOFFSET
Der Offset für den Betriebsstundenzähler in Sekunden. Hier kann eine feste Zeit eingetragen werden, zu der der aktuelle Zähler dazu addiert wird.
Es gibt diverse Onlinetools zum Umrechnen einer Zeitangabe in Sekunden.
59. MACHINE
Bandmaschinenbezeichnung. Momentan stehen nur zwei Möglichkeiten zur Verfügung: '700' für die Revox A700 und 'NONE', wenn keine unterstützte Maschine vorhanden ist.
60. SHOWSPEED
Legt fest, ob die Geschwindigkeitsangaben kurz auf dem Display ausgegeben werden sollen oder nicht.
61. SPEEDHIGH
Korrekturwert für 38cm/s bei der eingestellten Maschine.
62. SPEEDMIDDLE
Korrekturwert für 19cm/s bei der eingestellten Maschine.
63. SPEEDLOW
Korrekturwert für 9,5cm/s bei der eingestellten Maschine.
64. CAPSTANOFF
Interner Arbeitswert des Zustands, wenn der Capstan nicht dreht (momentan gibt es keine Veranlassung, diesen Wert zu ändern).
65. NUMSEGS
Anzahl der Segmente der Bandrolle.
66. SCOPE
Umfang der Bandrolle in mm.
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
70. SENSOR_A
Arduino-Pin (Eingang) für Sensor A. (durch Vertauschen der Pinangabe für SENSOR_A und SENSOR_B kann die Zählrichtung umgekehrt werden!).
71. SENSOR_B
Arduino-Pin (Eingang) für Sensor B. (durch Vertauschen der Pinangabe für SENSOR_A und SENSOR_B kann die Zählrichtung umgekehrt werden!).
72. SPEED95
Arduino-Pin (Eingang) für die Bandgeschwindigkeit 9,5cm/s (active LOW).
73. SPEED19
Arduino-Pin (Eingang) für die Bandgeschwindigkeit 19cm/s (active LOW).
74. SPEED38
Arduino-Pin (Eingang) für die Bandgeschwindigkeit 38cm/s (active LOW).
75. BUTTON
Arduino-Pin (Eingang) für den Anschluss des Tasters.
76. ZEROPOINT
Arduino-Pin (Ausgang) für den Null-Impuls.
77. LED
Arduino-Pin (Ausgang) für die onboard-LED zum Anzeigen des Speichervorgangs.
78. LEFT
Logischer Zustand der Drehrichtung 'links'.
79. RIGHT
Logischer Zustand der Drehrichtung 'rechts'.
80. bis 85.
Diverse EEPROM-Adressen (nur Ändern, wenn Zellen nach 100.000 Schreibvorgängen verbraucht sind!).
86. I2C_ADDRESS
Adresse des Displays. In den meisten Fällen vom Hersteller auf 0x3C festgelegt. In Ausnahmefällen auch 0x3D möglich.
87. USE_FRAM
- noch ohne Funktion! -
Begrüßungstext
Der Begrüßungstext kann sehr einfach geändert werden.
Bitte im Programm nach 'welcome helloText' suchen. Dort findet man dann diesen Abschnitt:
Code:
/**
* Here you define the welcome text. A maximum of 2 lines is possible.
* Syntax: Message, column (0 to 128), row (1 or 2).
* If a line is not used, it is commented out.
**********************************************************************/
welcome helloText[2] = {
/*Line1*/ { "DIYLAB", 52, 1 },
/*Line2*/ { "COUNTER 0.99", 52, 2 }
};
/**********************************************************************/
Mit dem benutzten Font 'utf8font10x16' sind auf dem Display 2 Zeilen möglich.
Die Syntax des oben zu sehenden Codeabschnitts ist "Text", Spalte, Zeile.
Der Text sollte natürlich auf die Displaybreite passen, ein Scrolling ist nicht implementiert.
Mit 'Spalte' ist ein Punkt zwischen 0 und 128 gemeint, auf den der Cursor gesetzt wird.
Mit Zeile ist entweder Zeile 1 oder Zeile 2 gemeint.
Wenn nur eine Zeile benutzt werden soll, kann die andere Zeile einfach mit zwei // auskommentiert werden.
Wer andere Schriftarten und Größen verwenden will, sollte sich unbedingt mit der Dokumentation der verwendeten OLED-Bibliothek auseinandersetzen.
VORSICHT: Änderungen der Schriftart und Größe wirken sich direkt auf den Menüpunkt 'Brightness' aus und könnten zu einer falschen Darstellung führen!
Startlogo
Das verwendete OLED-Display hat eine Auflösung von 128x32 Pixeln. Jedes Pixel kann per Direktbeschreibung des Puffers einzeln gesetzt werden.
Daher ist es recht einfach, beim Start ein Bild in dieser Größe anzuzeigen. Das Bild kann mit jedem Zeichenprogramm erstellt werden, welches Bitmapformate abspeichern kann.
Für unser Startlogo habe ich z.B. solch ein Bild benutzt:
Das Hintergrundgitter ist natürlich nur im Zeichenprogramm enthalten und zeigt die einzelnen Pixel.
Ihr könnt z.B. auch mit eurem Zeichenprogramm Text an beliebigen Stellen zeichnen, in jeder Sprache.
Ist dann das Bild fertig, muss es in ein Format gewandelt werden, welches der Arduino verarbeiten kann.
Dazu gibt es eine wundervolle Website, die das für euch erledigt:
https://javl.github.io/image2cpp/
Dort ladet ihr euer Bild hoch und stellt folgendes ein:
Wenn ihr dann auf '
Generate code' klickt, habt ihr im Kästchen darunter den kompletten Code für unser Projekt.
Ihr öffnet im Projektverzeichnis die Datei
logo.h und kopiert den generierten Code dort hinein (den kompletten vorhandenen Code bitte ersetzen!).
Dann nur noch die Zeile:
Code:
const unsigned char NaN [] PROGMEM = {
durch:
Code:
const unsigned char logo [] PROGMEM = {
ersetzen, das Projekt kompilieren und in den Arduino laden und schon habt ihr ein neues Logo!
Schriftarten
Es kam öfter die Frage:
"wie kann ich die Schriftgröße verändern?".
Dazu muss man verstehen, dass ein Mikrocontroller natürlich kein PC oder Tablet ist und verwendete Schriften auf Displays beliebiger Art nicht als Vektoren, sondern als Bild dargestellt werden.
Jeder Pixel eines Zeichens ist ein Bit und ein Zeichen kann nicht frei skaliert werden.
Die von uns verwendete Bibliothek stellt bereits eine stattliche Auswahl an Schriftarten zur Verfügung. Vielleicht guckt ihr mal ins Font-Verzeichnis der Bibliothek?
Alle Arduino-Bibliotheken werden hier abgelegt:
c:\Users\<dein Windows Benutzername>\Documents\Arduino\libraries\
Dort findet ihr auch die Bibliothek '
SSD1306Ascii' - die verwenden wir für unser Projekt!
*Anmerkung: '
SSD1306' bezieht sich auf den Chip, der sich auf dem OLED-Display befindet und das Display steuert. '
Ascii' bedeutet, dass diese Bibliothek ausschließlich dafür entwickelt wurde, ASCII-Schriftzeichen darzustellen und keine Grafikroutinen beinhaltet.
Es gibt natürlich verschiedene Bibliotheken anderer Entwickler die viel mehr Komfort, Grafikroutinen und Effekte haben, allerdings sind diese Bibliotheken meist wesentlich langsamer und brauchen deutlich mehr Speicherplatz im Controller.
Im Verzeichnis
C:\Users\<dein Windows Benutzername>\Documents\Arduino\libraries\SSD1306Ascii\src\fonts\ findet ihr alle Schriften, die unsere Bibliothek zur Verfügung stellt.
An dieser Stelle muss ich euch aber bremsen, ich habe alle Schriften durch
.
Wir haben bei diesem Projekt teilweise sehr spezielle Anforderungen an die Darstellung und Größe der Schriftzeichen, so dass ich zwei Schriftarten selbst erstellen musste.
Benutzt werden von uns insgesamt 3 Schriftarten:
utf8font10x16.h (für den Begrüßungstext und die Änderung der Displayhelligkeit - ist bei der Bibliothek dabei)
tapecounter_16x24.h (Für die Darstellung bei FONTSIZE 1, selbst erstellt)
tapecounter_23x32.h (Für die Darstellung bei FONTSIZE 2, selbst erstellt)
Die Zahlen im Dateinamen stehen für die maximale Größe der Zeichen (einige Zeichen können weniger Breite haben, es sind Proportionalschriften).
Wer nun möchte, kann sich also selbst einen eigenen Zeichensatz erstellen.
Wobei dies eine sehr zeitaufwändige Angelegenheit ist und die Anpassung auf optimale Darstellung bei unserem Projekt schwierig ist, ganz besonders bei
FONTSIZE 2.
Dort wird mit einigen Tricks gearbeitet, die z.B. gewährleisten, dass bei der Meteranzeige trotz des begrenzten Platzes auch mehr als 1000 Meter angezeigt werden können.
Da die Veränderung der Schriften in unserem Projekt ein komplexes Thema ist, möchte ich dies nicht Supporten, bitte verzeiht mir diese Entscheidung. Der Counter wird mit passenden und funktionierenden Schriften geliefert, darum leider kein Support.
Ok, wer es nicht lassen kann:
Ganz unten auf dieser Seite findet ihr zwei Downloads. Einmal ein kleines Programm zum Zeichnen von Schriften und die beiden selbst erstellten Schriften in 24px und 32px Größe.
Das Programm ist im Internet schwer zu finden, daher biete ich es hier zum Download an.
Es ist eine Java-Applikation und setzt eine installierte Java-JRE voraus (Oracle Java geht, OpenJDK nicht probiert).
Ihr könnt nun meine Schriftdateien damit öffnen, die haben die Endung '
.fnt' und auch Zeichen für Zeichen ansehen. Dieses Programm ist in der Lage, die nötigen C-Header Dateien zu erzeugen, die unser Projekt benötigt (diese Dateien haben die Endung '
.h'.
Die exportierte Schrift als Header-Datei lässt sich mit jedem Texteditor anschauen.
Wenn ihr die exportierte Schrift im Texteditor anschaut, werdet ihr merken, dass das Java-Programm leicht Buggy ist! In der Datei steht bei der Font-Größe ein negativer Wert.
Alles Negative muss ins Positive geändert werden und bei der Größe selbst muss dann natürlich auch die reelle, positive Größe der Zeichen als HEX-Zahl eingetragen werden, sonst kommt nur Pixelmatsch
.
Außerdem ist eine Zeile zu ändern!
Beim Export wird im Header dies erzeugt:
Code:
static uint8_t <name eurer schrift>[] PROGMEM = {
Das muss in:
Code:
GLCDFONTDECL(<name eurer schrift>) = {
... geändert werden.
Am besten ist es, ihr vergleicht eure erzeugten Headerdateien mit den originalen Dateien.
Nun habt ihr alle Werkzeuge um selbst kreativ zu werkeln, viel Spaß!
Downloads:
Fonts.zip
GLCDFontCreator.zip
Segmentscheibe als Excel-Macro Datei (danke Detlef!)