Nachdem die ersten Projekte mit meinen BPB sehr vielversprechend waren, gerade die Umsetzung von Projekten mit dem ILI9143 TFT funktionieren mit der mitgelieferten Bibliothek sehr gut und mit HW SPI auch sehr schnell. Der nächste Schritt war eigentlich eine super einfache Umsetzung. Eine I2C RTC und Darstellung der Uhrzeit und des Datums auf einem I2C LCD Display 16x2 oder auch 20x4. Hat bei mir noch nciht funktioniert, Erkennung der Geräte über I2C Scanner; keine Probleme, eine LCD I2C Bibliothek mit dem Display zu kommunizieren zu lassen - keine Darstellung. Wurmt mich natürlich, aber was soll es, geht es zum nächsten Projekt. Darstellung auf einem Nokia 5110 LCD Display. Es gibt einige PCD8544 Bibliotheken, die für STM32 angepasst wurden. - Adafruit-PCD8544-Nokia-5110-LCD-library von KenjutsuGH, - Adafruit-PCD8544-Nokia-5110-LCD-library von WereCatf - PCD8544 von snigelen Alle Bibliotheken, die ich ausprobiert habe, haben funktioniert, auch wenn man noch Kleinigkeiten korrigieren musste. Da ich das Adafruit Demo für den PCD8544 schon vom Arduino her kannte, hat mich das Demo von snigelen mehr interessiert.
Blue Pill Board mit Nokia 5110 LCD Demo der PCD8544 Lib von snigelen
Blue Pill Board mit Nokia 5110 LCD Demo der PCD8544 Lib von snigelen
Vom Arduino Club Hannover habe ich eine tolle Idee fürs Arduino Debugging nachgebaut. Ein super nützlicher Arduino Debugger, der die Serielle Ausgabe des Testlings auf einem Nokia 5110 Displays anzeigt. Ich habe das Projekt, wie beschrieben auch mit einem Micro Board nachgebaut. Die Ansteuerung LEDs habe ich invertiert, damit die Ansteuerung, wie gewünscht funktioniert.
Schnelles Scrolling der seriellen Textausgabe
Im eigenen Programm nutzt man, wie gewohnt dieSerial.begin(9600);die serielle Schnittstelle starten und dann geht es schon los, mit Serial.print("$CLS,LGEA,LGNA#");löscht man den Bildschirm und schaltet die beiden LEDs auf dem Mirco Pro Board aus.
Die Kommandos beginnen mit $, enden mit # und können durch ein Komma voneinander getrennt werden.
spezieller Font für Zahlen
Die großen Zahlen werden durch das $FN# Kommando aktiviert, Text geht dann wieder mit $FT#. Der Code für den Debugger wurde völlig ohne Bibliotheken programmiert, sehr gut, um zu verstehen, was da eigentlich sonst in den Bibliotheken vor sich geht. Hier der originale Sketch vom Arduino Club Hannover.
Nachtrag 25.07.2016 Ich finde diesen Debugger Klasse! nachdem er auf dem Breadboard funktioniert, habe ich mir gestern ein Debugger auf einer Leiterplatte gebaut.
Arduino Debugger als Gerät (ohne Gehäuse)
Habe eine 4 poligen Verbinder genommen, weil ich mir Gedanken gemacht habe, ob es auch eine Möglichkeit gäbe, Daten vom Debugger zum Testling zu senden. Jetzt kommen noch Abstandhalter ans Board und fertig!
Mit der ILI9143 Bibliothek, die schon im Arduino_STM32 Paket beinhaltet ist, ist als Beispiel eine Umsetzung einer Analog Uhr auf dem ILI9143 TFT Display, vom mir sind nur die Anpassungen für das Auslesen der aktuellen Zeit aus dem RTC Baustein und die Darstellung der Zeit unter der Uhr, wie die des Wochentages.
Analog Uhr STM32F103C8T6 BPB mit TFT ILI9142 und DS3232 RTC
Nachdem ich mit etlichen unterschiedlichen Arduino Boards experimentiert habe,
meine eigenen Boards mit ATMEGA328P Prozessor gebaut habe und meinen
Spass mit den Erweiterungen hatte. Kam mit der Globalisierung eine
seltsame Situation.
Alles, was man selbst baut, ist teurer als ein in
China professionell mit SMD Technik hergestelltes fertiges Board.
Na gut, dann kaufe ich mit längerer Wartezeit Arduino Nano V3 Boards für
2,50€ pro Stück! Klasse, gleich im 5er oder 10er Pack, funktioniert gut,
sehr praktische Größe und unschlagbar günstig.
Die letzten Projekte habe ich mit dem Arduino Nano Boards umgesetzt, keine Probleme.
Auf
der Suche nach günstigen Boards kamen immer wieder super günstige STM32
Boards, speziell ein minimales Entwicklungs-Board mit einem
STM32F103C8T6 Prozessor für 2,50€.
Klingt doch Klasse, Größe stimmt,
32bitter, 64KB Flash und 20KB RAM, 2xI2C, 3xUARTs, 2xSPI Schnittstellen;
schlägt deutlich die Möglichkeiten eines Boards, das auf dem ATMEGA328P
basiert.
Mit
der sehr umfangreichen Arduino Community gibt es kaum Fragen, die offen
bleiben.
Dokumentation
Für die STM32 Gemeinde sieht das noch nicht ganz so gut aus.
Informationen zum Prozessor sind natürlich beim Hersteller ST zu finden.
Es scheint, als ob alle STM32 Bastel-Projekte auf die von Roger Clark gepflegten Artikel verweisen.
Das von Roger Clark erstellte Arduino_STM32 Projekt ermöglicht die Entwicklung von STM32 Software mit der Arduino IDE (1.6.9 Arduino.cc oder auch 1.7.10 Arduino.org, braucht Arduino DUE Board Support).
Support für diese Software gibt es unter dem Forum, wo sehr viele interessante Artikel zu finden sind.
Programmieren
Unter STM32duino-bootloader findet man Bootloader für die unterschiedlichen STM32 Boards, die eine Programmierung der Boards über den USB Port des STM32 Gerätes aus der Arduino IDE ermöglichen.
Allerdings gibt es bei den meisten BPB ein Problem mit dem USB Port, der Widerstand R12 an PA12 ist mit 10KOhm viel zu hoch, dass das Gerät erkannt wird. Es gibt Bauanleitungen, den 10KOhm Widerstand mit einem mit 1,5KOhm zu ersetzen.
Die Programmierung über den internen Seriellen Modus (DFU, PA9 und PA10, Boot 0 HIGH, Boot 1 LOW) funktioniert gut, man muss darauf achten, dass der USB-Serial Wandler 3.3V Pegel liefert.
Pinout
Es war für mich garnicht so einfach, das Pinout für mein STM32F103C8T6 zu bekommen, auf OlliW's Bastelseiten; "STM32: Hello World" gibt es eine sehr nützliche und gründliche Analyse und Dokumentation der aktuellen STM32 Boards.
RFID Technologie ist eine spannende Angelegenheit, nachdem ich erste Erfahrungen mit einem Mifare RFID Modul gesammelt hatte, wollte ich mir ein 125khz RFID RDM6300 Modul ansehen.
Es gibt ausreichend Dokumentation für das Gerät, das mit einer seriellen Schnittstelle ausgestattet ist und mit 9600 bps die RFID Tag Information zum Host überträgt.
Das Format ist einfach, die Nachricht beginnt mit 0x02 und endet mit 0x03, dazwischen ist die Tag ID und 2 Bytes Checksumme.
Die Tag ID wird hexadezimal in seiner ASCII Darstellung übertragen. Für eine dezimale Darstellung muss die Hex Zeichenfolge in einen Zahlenwert umgewandelt werden.
In den Beispielen, die ich genutzt habe, gab es Unterschiede, wie die Checksum aus den Daten berechnet wurde und welcher Anteil für die Tag ID genutzt wurde.
Die 125khz Tags, die ich aus China bekommen hatte, haben ihre ID fest vergeben und auf dem Gehäuse sichtbar. Also brauchte ich nur solange probieren, bis ich die korrekte ID mit bestätigter Checksum erhalte.
Nachdem ich sehr interessante Beschreibungen von RFID Anwendungen für den Arduino gelesen hatte, wollte ich mir ein RFID Kit für den Arduino besorgen und meine eigenen Erfahrungen sammeln. Nach doch einer recht langen Wartezeit kamen die beiden RFID RC522 Kits aus China bei mir an.
Neben dem Modul und den Leiterplatten Steckerleisten waren auch zwei RFID Tags im Lieferumfang enthalten.
Hintergrund
Wer an mehr Hingrundinformation zu RFID interessiert ist, kann unter Makecourse eine sehr ausführliche Beschreibung bekommen.
Schnell war ein kleines Demo auf dem Breadbord zusammengesteckt, 2 von 4 RFID Transpondern sind bekannt und lassen eine grüne LED leuchten, sonst eine rote...
Weiter geht es, die RFID Transponder mit Informationen zu beschreiben, aus denen dann Zugriff gewährt wird oder eine Anzeige auf einer LCD dargestellt wird.
Beispiel einfachste Zugangskontrolle
Dazu braucht man ja wenigstens zwei Dinge, etwas, was die Tags so vorbereitet, damit sie dann ausgewertet werden können. Dazu werden die fabrikneuen Tags mit einem Namen und einer Pin beschrieben. Zukünftig würden auch die Schlüssel geändert werden, aber das sind dann nur Details.
Zum Auslesen und Anzeigen auf einem LCD Display und dann weiter ein Relay oder Servo zum Öffnen einer Tür, durch den Pin könnte man zusätzlich noch mit einem Keypad den im Transponder gespeicherten Pin abfragen.
links werden die Tags beschrieben, rechts ausgewertet
Zugang OK, der Name wird ausgelesen und angezeigt
Alarm! Unbefugter Zugang, das ging noch mal gut...
Mit meinem DCF77 Projekt, hatte ich die Möglichkeit, die Uhrzeit sehr genau zu bestimmen und anzuzeigen. In anderen Projekten, die eine RTC nutzen, nutzte ich die DCF77 Bibliothek und verband das DCF77 Signal und Masse der beiden Boards, um so die RTC genau zu stellen. Diese Methode funktioniert, ist aber mühsam. Es wäre doch sehr bequem, die Zeit und das Datum drahtlos zu verteilen und auf der Empfänger-Seite wird ein SyncProvider genutzt, der aus der empfangenen Nachricht die Zeit synchronisiert.
433MHz Rx/Tx Module
Diese Module bekommt man recht günstig auch gleich als Paket mit 10 Sendern und Empfängern.
Erweiterung des DCF77 Moduls für den 433MHz Sender
Das Datum und die Zeit werden jetzt von der DCF77 synchronisierten Uhr gesendet, jede Sekunde die komplette Information, allerdings nur auf sehr kurze Distanz. Der Empfänger braucht jetzt nur die VirtualWire Bibliothek zu nutzen, die Nachricht zu empfangen und als Datum/ Zeit zurückzugeben, als SyncProvider.
Aus dem Arduino Knight Rider Post (die Knight Rider Version 3) habe ich die Idee eines LED Lauf-Licht genommen, um es mit einem kleinen Shield für den THDuino zu bauen.
THDuino mit LED Shield
Es sind 8 LEDs, die über Transitor von Arduino Ports angesteuert werden.
Die Laufzeit lies sich nur über eine Programm Änderung beeinflussen, Idee, einen Distanz Sensor nutzen, je dichter ein Objekt kommt, um so schneller läuft das LED Licht...
Mit einem Distanz-Sensor wird die Laufgeschwindigkeit reguliert
Der Sketch lässt sich noch verbessern, es stockt etwas bei schnellen Distanz Änderungen.
Der für mich bequemste Weg ein 16x2 oder 20x4 LCD Display zu steuern ist über den I2C Bus. Funktioniert zuverlässig und ist sehr einfach aufzubauen. Es ist manchmal mühsam, die Adressen der Geräte herauszufinden, manchmal ist die Dokumentation falsch, also programmiert man den I2C Scanner Sketch und lässt sich die verbundenen Geräte über den Seriellen Monitor anzeigen.
In diesem Projekt nutze ich ein 3-Wire LCD Display, um die I2C Adressen, der angeschlossenen Geräte anzuzeigen.
Anzeige von 4 erkannten Geräten mit den Adressen-Informationen
Aufbau der 2 LCD Displays und der RTC mit EEPROM
Hier sieht man das 3Wire Board für die LCD Anzeige
Der Sketch ist der original I2C Scanner mit der zusätzlichen Ausgabe auf dem LCD Display, in meinem Fall ein 16x2 Display für ein 20x4 Display müssten minimale Anpassungen durchgeführt werden.