Skip to content

Software1

Nikolai Radke edited this page Jul 13, 2020 · 41 revisions

Nokos Software 1

Um Noko auf den ersten Start vorzubereiten, muss der Arduino natürlich mit der Software versehen werden. Darüber hinaus benötigt Noko einige Voreinstellungen, die im EEPROM des Nano gespeichert werden. Außerdem können einige Compiliereinstellungen vorgenommen werden, um den Sketch klein zu halten. Für kommende Versionen mit noch mehr erstaunlichen Features!

Für einen Prototyp müssen die Sketche angepasst werden, da voreingestellt alle Features aktiviert sind. Das ist auch sinnvoll, Noko will ja schließlich vorab zeigen, was er alles kann. Die Anpassungen sind zudem sehr einfach.

Kompileroptionen (optional, für IDE 1.6.9 und älter oder 1.8.2 und neuer)

Hinweis: Auch ohne Optiboot passt der Sketch unter neueren IDEs (1.6.10 und höher) in den Flash-Speicher des Arduinos. Bei älteren Versionen müssen sowohl Optiboot als auch Kompileroptionen eingestellt werden. In den neueren IDEs werden die Kompileroptionen schlicht ignoriert, warum auch immer. Optiboot ist auch bei neueren IDEs immer empfehlenswert!

Seit IDE 1.8.2 werden Kompilieroptionen wieder akzeptiert. Wer Noko modifizieren will und auf mehr Flashspeicher angewiesen ist, der spart auf diese Weise ca. 800 Bytes. Immerhin.

Zunächst wird die Datei platform.txt angepasst. Diese liegt in einem der folgenden Verzeichnisse:

  • Linux: /usr/share/arduino/hardware/arduino/avr/platform.txt
  • Windows: [Arduino Verzeichnis]/hardware/arduino/avr/platform.txt.

Nun muss die die Datei in einem (vernünftigen!) Editor geöffnet und die Zeilen unter

# These can be overridden in platform.local.txt

mit den folgenden Zeilen überschrieben werden. Vorher ist noch eine Sicherungskopie der alten platform.txt sinnvoll.

Linux mit IDE 1.6.6 bis 1.6.9 und ab 1.8.2

# These can be overridden in platform.local.txt
# Compiling options for Noko and Noko.ino
compiler.c.extra_flags=-flto -funsafe-math-optimizations -mcall-prologues -maccumulate-args -ffunction-sections -fdata-sections -fmerge-constants
compiler.c.elf.extra_flags=-flto -funsafe-math-optimizations -mcall-prologues -maccumulate-args -ffunction-sections -fdata-sections -fmerge-constants
compiler.S.extra_flags=
compiler.cpp.extra_flags=-flto -funsafe-math-optimizations -mcall-prologues -maccumulate-args -ffunction-sections -fdata-sections -fmerge-constants
compiler.ar.extra_flags=
compiler.objcopy.eep.extra_flags=
compiler.elf2hex.extra_flags=

Windows mit IDE 1.6.6 bis 1.6.9

# These can be overridden in platform.local.txt
# Compiling options for Noko and Noko.ino
compiler.c.extra_flags=-funsafe-math-optimizations -mcall-prologues -maccumulate-args -ffunction-sections -fdata-sections -fmerge-constants
compiler.c.elf.extra_flags=-funsafe-math-optimizations -mcall-prologues -maccumulate-args -ffunction-sections -fdata-sections -fmerge-constants
compiler.S.extra_flags=
compiler.cpp.extra_flags=-funsafe-math-optimizations -mcall-prologues -maccumulate-args -ffunction-sections -fdata-sections -fmerge-constants
compiler.ar.extra_flags=
compiler.objcopy.eep.extra_flags=
compiler.elf2hex.extra_flags=

Leider ist unter Windows mit 1.6.9 oder älter das Plugin Link Time Optimization ausgeschaltet, die Option -flto kann daher nicht verwendet werden. Dadurch wird der kompilierte Sketch erheblich größer, Optiboot ist in diesem Falle also zwingend notwendig.

Nachdem die Datei gespeichert wurde, kann die IDE neu gestartet werden und die Einstellungen werden aktiv.

Noko_EEPROM_Disc0.ino

Mit diesem Sketch werden die Grundeinstellungen in das EEPROM gebrannt. Des weiteren wird dieser Sketch auch verwendet, um Hörspieltitel und -längen im AT24C32-EEPROM auf dem Board der Echtzeituhr zu speichern. Dieses Feature ist optional und wird zu einem späteren Zeitpunkt behandelt.

  1. In der Arduino-IDE den Sketch Noko_EEPROM_Disc0.ino öffnen.
  2. Die Zeile #define def_stories // Stories on SD card? auskommentieren. Das geht, indem man // an den Anfang der Zeile setzt.
  3. Ggf. die Zeitzone bei #define zz 1 // Timezone 1 = MEZ anpassen.
  4. Persönliche Daten eintragen:
// Personal informations
//                {"                    "}
const char name[]={"Nikolai Radke       "};

//                 {"                                        "}
const char email[]={"kontakt@            nikolairadke.de     "};

// Birthday: gt=day, gm=month
const byte gt=7; // Ich
const byte gm=12;

Leerzeichen und Zeilenumbrüche beachten, da das Display 4x20 Zeilen hat.

Zum Schluss den Sketch auf den Arduino laden. Dabei beachten, dass unter Board, sofern Optiboot aufgespielt wurde, nicht mehr Arduino NANO, sondern Arduino/Genuino UNO eingestellt ist. Für Neulinge: Das geht unter Sketch > Hochladen.

Die Voreinstellungen werden nun in das EEPROM geschrieben. Neugierige können über den seriellen Monitor zusehen. Nach einigen Sekunden ist der Vorgang abgeschlossen.

Noko.ino

Nun wird der eigentliche Sketch fällig. Auch hier müssen einige kleine Anpassungen vorgenommen werden.

  1. Den Sketch Noko.ino öffnen.
  2. Optionale Features deaktivieren. Das sind das Radio, das 24LC256-EEPROM und die Hörspiele. Dazu müssen diese drei Zeilen am Anfang des Sketches entsprechend auskommentiert werden:
#define def_radio           // Using Radio?
#define def_external_eeprom // Using external EEPROM?
#define def_stories         // Stories on SD card?
  1. Voice Set auswählen. Wird noch das alte Voice Set mit 111 Dateien verwendet, muss die Kommentierung angepasst werden:
#define voice_set_111   // Old set with 111 files
//#define voice_set_226 // New set with 235 files
  1. Display anpassen. Noko kann die Adresse selbst ermitteln. Das ist auch voreingestellt. Ist die Adresse unbekannt oder passt nicht, da ein anderer Port Expander verwendet wird, den I2C-Scanner oder Noko Diagnostics verwenden und eine eigene Adresse eintragen.
#define display_address 0x00    // Autodetect
//#define display_address 0x27  // Blue 
//#define display_address 0x3F  // Yellow

Nun kann der Sketch auf den Arduino geladen und ein Prototyp gebaut werden. Wie das geht, wird im nächsten Kapitel beschrieben.

Was bedeutet uint8_t requestFrom(uint8_t, uint8_t);?

Beim Kompilieren gibt die IDE eine Warnmeldung aus. Das ist nicht weiter schlimm und bedeutet lediglich, dass diese Funktion eigentlich eine Integer-Variable als Parameter benötigt, von mir aber nur ein Byte bekommt. So spare ich etwas Flash-Speicher. Funktioniert trotzdem.

Probleme beim Kompilieren von Noko.ino?

Kein Problem! Unter howto_compile/precompiled sind sämtliche Varianten auf Deutsch und Englisch bereits vorkompiliert und können direkt mit AVRDude auf den Arduino gespielt werden. Eine Anleitung dazu steht unter howto_compile. Für Linux gibt es noch ein GUI, was die Bedienung erheblich erleichtert.