RaspberryPi


Projektlogbuch RasPi Projekt

Auf dieser Seite wird der Projektfortschritt dokumentiert. Das dient zu folgenden Zwecken:

  • Für mich selbst, um zu sehen wann habe ich wa sgemacht
  • Für andere die eventuell ein ähnliches Vorhaben planen
  • ... um etwas an die Welt zurückzugeben ;-)

20.08.17: Strukturelle Anpassung im Programm

Damit der Code etwas lesbarer wird habe ich jetzt auch die Source File gespilttet. Dazu gibt es jetzt für jedes Modul ein eigenes File. Das macht die Entwicklung einfacher und das eigentliche Programm lesbarer.

Ich bin auf der Suche nach einer entsprechenden IDE. Gefunden habe ich bereits ein paar aber in der Konstellation das alles auf dem RasPi läuft nur die Softwareentwicklung auf der Workstation unter Windows läuft ....da hab ich noch nicht die Lösung gefunden. Muss noch etwas probieren. In der Übergangszeit geht es wohl auch mit Notepad++

Was den SPI Bus und die Erweiterung angeht mit dem MCP23S17 bin ich einen deutlichen Schritt weiter. Für den temperatur Sensor TC77 habe ich jetzt die Anpassung mit dem PIO gemacht und das läuft auch. Jetzt muss das vereinheitlicht werden.

Im Hauptprogramm habe ich vorgesehen das es einen Scheduler gibt der alle 1, 5, 15, 30 und 60 Sekunden läuft. In diesen Sektionen können Programmteile gelegt werden die nicht so oft aufgerufen werden müssen. (z.B. Logging, Temperaturabfrage, ....)

17.08.17: Nochmal der Port Expander für SPI

Nachdem ich den MCP23S17 nicht ans laufen bekommen habe und immer wieder nach dem Fehler suchte habe ich ihn nun endlich gefunden ... ein Bit im ICON Register war leider falsch gesetzt und kaum macht man es richtig, geht es.Manchmal benötigt man etwas Abstand von der Sache und einen neuen Anlauf.

Das Ergebnis ist nun, weitere 16 CS Leitungen stehen für Geräte am SPI Bus zur Verfügung. Das sollte erst einmal reichen. Die Routine ist jetzt nutzbar und es müssen noch ein paar Marcos in C definiert werden. Mit diesem Modul wird jetzt eines der CS Leitungen für den Port Expander verwendet und eine CS Leitung ist noch frei für mögliche Erweiterungen.

Der nächste Schritt ist nun, die bestehenden SPI Module so umzuschreiben, dass die CS Leitungen des Port Expanders verwendet werden. Das sollte eigentlich reine Fleißarbeit sein und Probleme sollten hier jetzt nicht bei auftauchen.

26.5.17: Port Expander für SPI

Nach einer Nacht drüber schlafen ist es jetzt klar wie es weiter geht und mehere Geräte am SPI Bus angesprochen werden können. Der Weg über eine Daisy Chain soll erst einmal ausgeschlossen werden. Bleibt also für jedes Device eine eigene CS Leitung zur Verfügung zu stellen. Der Raspi hat zwei CS Kanäle. Am CS0 kommt jetzt ein Port Expander und der schaltet vor der Übertragung das richtige Device ein. Dann wird die Übertragung CS1 gemacht und danach am Port Expander wieder der CS auf HIGH gelegt. Als Port Expander wird die 16 Kanal Varainte genommen, dann können die nicht genutzen Ports ggf. auch noch anders verwendet werden.

Dann geht es weiter mit den Devices am Bus. Ich habe noch einen TC77 Temperatursensor hier liegen. Der sollte recht schnell verdrathet sein und dann kann die Software dazu geschrieben werden.

So ganz ist das Thema PIC noch nicht vom Tisch. Der PIC hat einige devices on board und könnte gute Dienste leisten, zumal er dann auch programmierbar währe und ebenfalls über SPI kommunizieren kann. Damit könnte man sich auch einige einzelne Geräte sparen. Bleibt auf jeden Fall im Hinterkopf.

TC77 (Temperatur Sensor) ist online

Gesagt, getan - der Temperatursensor ist ONLINE. Mit ein paar Käbelchen angeschlossen und etwas Programmierung verrichtet er schon seinen Dienst. Dabei hatte ich noch ein Fehler in der SPI Routine gefunden. Diese hat zwar den Wert der über MISO gesendet wurde gelesen aber leider nicht korrekt zurückgegeben. Jetzt passt es und ich weiss das die Temperatur in der Bastelbude jetzt 20.1 Grad ist.

24.5.2017: SPI Bus und Programmiersprache

Nachdem ich mich nun an Python versucht habe, weil das ja die Programmiersprache ist die besonders mit dem Raspi klar kommt und es hier bereits einige Libraries gibt, muss ich mir eingestehen - wir werden wohl keine Freunde. Die Alternative ist C. Wie schaut meine Umgebung jetzt aus?

Der Raspi hat nun erst einmal im Netzwerk seinen Platz gefunden, das Projektlaufwerk gibt er jetzt auch mit Samba an Windows Rechner frei. Damit ist das schreiben von Programmen einfacher - ich nutze gern einen anderen Editor als VI oder nano, oder .... Notepad++ ist deutlich angenehmer.

Das was ich unter Python nicht hinbekommen habe ist unter C dann doch erheblich angenehmer. Die strukturelle Schreibweise in C (oder gcc) liegt mir mehr und auch das es kein Interpreter, sondern ein Compiler ist passt mir auch. Unter Python hatte ich Programmabbrüche die ich nicht erklären konnte und ... Schluss damit, ist nicht meins!

Unter C nutze ich wiredPi. Das geht super und jetzt habe ich den SPI Bus exemplarisch angeschlossen. Auf einem LCD (DOGM-162) wird jetzt die aktuelle Uhrzeit und Datum ausgegeben. Für das Troubleshooting ist nun der LogicAnalysator und das DSO mit aktueller Software nutzbar. Im Bild ist ein Screenshot vom LogicAnalyser. Macht richtig Spaß mit dem Kleinen am EKG ;-)

Jetzt ist erst mal nachdenken angesagt. Von Haus aus hat der SPI Bus 2 CS Leitungen. Jetzt müsste ich mal überlegen wie die Erweitert werden sollen und dann auch von der Software unterstützt wird.

Nachdenken = schlafen. Gute Nacht

15.5.17: Struktureller Aufbau vom Programm

Hier mal ein paar strukturelle Überlegungen zum Programm:

Das Programm wird beim start des Raspi über den Runlevel gestartet als Daemon, also als Service und läuft im Hintergrund. Eine Kommunikation mit dem Programm über eine Tastatur ist nicht vorgesehen. Wenn eine Kommunikation stattfinden soll, dann muss diese über ein Interface (Netzwerk oder Datei) erfolgen.

Jede Funktion beendet sich automatisch und wartet niemals auf eine Eingabe. Das ist notwendig um ein hängen bleiben der Software zu vermeiden.

Zeitkritische Themen werden mit Interrupts bearbeitet. Das ist noch eine besondere Baustelle da Linux kein Echtzeit OS ist und nicht garantieren kann das ein Timer zu einer korrekten Zeit ausgelöst wird.

Das Hauptprogramm läuft in einer Endlosschleife und steuert die nicht zeitkritischen Themen vom logischen Ablauf. Zeitkritische Themen werden vom Timer Interrupt als ISR (Interrupt Service Routine) aufgerufen.

 Sektionen im Programm:

  • Interpreter
  • Hinweise zum Autor, Version, Historie
  • Bibliotheken die eingebunden werden
  • Globale Variablen
  • Funktionen
  • Hauptprogramm (endlos)

Ein wichtiger Punkt ist wie Programmteile parallelisiert werden. Bei Microcontrollern wird das unter anderem mit Timer Interrupts gelöst. Ich habe eine Idee wie das unter Linux gemacht werden kann, ist aber nicht so komfortabel wie beim Microcontroller und lage nicht so genau, noch so schnell. Hier jetzt der Quellcode:

13.5.17: Erste Inbetriebnahme und Entwicklungsumgebung

Der Raspberry Pi Model 3 und das Gehäuse sind in der letzten Woche eingetroffen. Das OS ist installiert und das kleine System läuft seit ein paar Tagen im hauseigenen Netzwerk  ganz gut und stabil.

Gestern habe ich ein paar Dinge für die Peripherie bestellt. Erstaunlicherweise kann man bei Amazon hier recht viele Dinge bestellen bei denen es einfach nicht mehr lohnt diese selber zu bauen.

Bestellt habe ich:

  • Expansion Board + Anschlusskabel an den Pi
  • IO Expander

Damit ist zumindest erst einmal die Kommunikation mit der Außenwelt über den GPIO möglich. Der Zugriff auf den GPIO Port in dem Gehäuse ist doch etwas verwinkelt und klein, mit dem Anschlusskabel ist das dann alles auf der Werkbank einfacher und mit dem Breadboard flexibler.