eforth220 auf Arduino Nano

  • Forth Programming on MCU's


    Weiteres suchen nach einer guten Forth-Implementation für Mikrocontroller raubten viel zeit bis zum miss- teil- und vollerfolg.

    Den vollerfolg will ich hier kurz vorstellen. Der beitrag ist für forth-interessierte gedacht und setzt einige arduino- und forth-kenntnisse voraus.

    Ich will hier keinen gegenpol zum laufende micropyton-kurs von rene eröffnen, jedoch eignet sich forth meiner ansicht nach excellent zur programmierung von mikrokontrollern.

    20210517_102806(1).jpg. f5d3wQRddqZQXq1I2KWCqSKC3X8HbsWchUGNRmlPoQvtCFz-pyEubh6Ipq25obV1ciSn416hgWX3KaTfz_RzrUkW_m4YBw-MqDvXGY6MZYYXBWPU7HWRNu05Co7E3YtrAafgXsXG6oETcUUad0-ZZf5rQV2mckFjrYtT_omGn0rWWFylZNcqJQMEosSDRkcVWxISgwgsg2544DGwQiqjYXAvAvOWg87pJoIWt-M1Jpii=s2048.jpg

    Das Lolin ESP32S Modul vereint WIFI, Bluetooth und einen Micro USB Anschluss mit einem CP2102 auf kleinstem Raum.
    Das Modul ist bereits mit Antenne, rauscharmen Verstärkern, Filtern und dem Power Management Modul integriert. Dieses Board arbeitet im 2,4 GHz Dual-Modus.


    Hier all die links um an die dinge heran zu kommen:

    Daten: https://en.wikipedia.org/wiki/ESP32

    Treiber: Treiber CP2102


    ESP32-Board in Arduino: installing-the-esp32-board-in-arduino-ide (meine boardwahl ist das esp32 Lolin)

    additional boardmanger url's https://dl.espressif.com/dl/package_esp32_index.json


    Software-Pool von "CH Ting" eforth ino datei


    eforth INO-File download esp32forth_59_webBrowser

    Enthält espforth_59.ino, rom_56.h, data/load.text

    HowTo: install-eforth-for-esp32

    Hier wird eine neuere ino-datei vorgeschlagen. Verwende aber die oben vorgeschlagene


    PDF Dokument zum ESP32Forth


    ESP32-Referenz: technical-manuals-esp32


    Vorgehen:

    • ESP32-Board mit USB am PC verbinden
    • CP2102 Treiber installieren
    • Bootbotton am ESP32 drücken - der verbindungston ertönt
    • esp32forth_59_webBrowser - zip herunterladen. Enthält espforth_59.ino, rom_56.h, data/load.text
    • Das alles in einen Arduino sketchfolder kopieren
    • In Arduino den ESP32BoardManagerinstallieren
    • Die INO-datei laden und die webserver daten für deine umgebung bearbeiten.
    • Bildschirmfoto 2021-05-17 um 11.33.40.png
    • Jetzt das ino-file compilieren und zum esp32 hochladen. (übertragungstempo bei 115200)

    Mein ESP32 steckt nun an einem 5V ladegerät und das eforth ist darauf laufend. WLAN ist aktiv und wartet auf einen host.

    20210517_120457(1).jpg

    Im webbrowser die adresse 192.168.1.117 (in meinem Fall) aufrufen und die bedienoberfläche erscheint.

    Kann in deiner Routerconfiguration 192.168.1.1 ausgelesen werden.

    Bildschirmfoto 2021-05-17 um 11.19.16.png

    Die gelbe linie ist die eingabezeile, im weissen feld erscheint die ausgabe. In der menuzeile auf dezimal stellen.

    ein klick auf words zeigt die vorhandnen worte.

    Der Clou ist nun die möglichkeit eine text-datei hochzuladen welche wortdefinitionen enthält.

    Diese werden sofort compiliert und das lexikon ist um diese einträge erweitert.

    Ich lade also nur eine menge wortdefinitionenn hoch, die für die aktuelle anwendung benötigt werden.

    Diese textdatei kann so aussehen:

    Code
    1. : gruss cr ." guten Tag Hobbyelektroniker " ;    ( -- ) , gibt eine Grussphrase aus)
    2. : square dup * . ;    ( a -- , quadriert eine Zahl und gibt sie aus)

    Es kann also eine textdatei mit worten für motorsteuerung, hausautomation, gerätesteuerung oder andere anwendungen hochgeladen werden.

    Das war nun kompakt. Ich hoffe dass mir keine groben fehler unterlaufen sind und alles nachvollziehbar ist.


    Grüsse in die schönen frühlingstage und gniessets 1416-wink2-gif

    * letzte Worte des Fallschirmspringers : " scheiss Motten" ! *



  • Forth Programming on Arduino

    Ich bin einen schritt weiter und das problem mit dem verlust der programmierten Forth-Worte bei einem reset ist gelöst.

    0033mer veröffentlichte weitere videos. Darin stellt er das hexfile IA.hex zur verfügung.

    Darin sind einige für den atmega328p relevante befehle (forth-worte) bereits enthalten.

    Was mir aber weiter hilft ist das wort EXTEND, das die programmierten lexikoneinträge permanent macht, also in das flash schreibt.

    Beim nächsten start oder reset ist alles noch da. Weiter wird im video gezeigt wie ein sogenannter TURNKEY erstellt wird.

    Nach dieser prozedur startet der arduino nano (oder auch uno) mit dem gewünschten programm.


    Was mich als erstes interessiert ist, wie EXTEND funktioniert. Ich will ein "nesting" durchführen worin klar wird, wie und mit welchen vorgängerworten EXTEND compiliert wurde. Jetzt geht es nicht ohne lesen zumindest des dokuments ForthArduino.pdf


    :!:  0033mer Video zum faschen des hexfiles und vorführen wie die dinge funktionieren

    EXTEND minute 11 bis 14

    TURNKEY minute 14 bis 15


    :!: 0033mer video mit weiteren darstellungen und input/output register setzen. Gut erklärt!


    :!: Nite1 zeigt in seinem video eine praktische anwendung mit eforth auf einem arduino


    Für FORTH interessierte hier nochmals links zu dokumenten und zur IA.hex datei


    Tera Term download

    Das IA.hex zum flaschen des arduino mit eforth

    eforth328-master-system-install


    Dokument zu eforth-arduino

    Starting-FORTH von Leo Brodie

    Thinking-FORTH von Leo Brodie


    Flashen des Hexfiles.jpg Das IA.hex wird geflasht


    in Betrieb mit TeraTerm.jpg Betrieb mit TeraTerm über ein usb-kabel


    Forth-Lexikon in IA.hex.jpg Ein screenshot des lexikons IA.hex nach dem flashen


    Gruss 1416-wink2-gif

    * letzte Worte des Fallschirmspringers : " scheiss Motten" ! *



  • Forth Programming on Arduino


    Auf einem C64 programmierte ich zum erstenmal in Forth. Schrittmotoren machten genau das was ich wollte und der einblick in die arbeitsweise von prozessoren war leicht zu gewinnen. Dieser beitrag ist nostalgischer natur. Toll finde ich die maschinennähe der forth-sprache und die möglichkeit, ein betriebssystem zu entwickeln, das nur für die spezielle anwendung konzipiert ist, schlank und nichts unnötiges enthaltend.


    @kai

    Es gelang mir das hexfile auszulesen, jedoch waren die erweiterungen des FORTH-LEXIKON darin nicht enthalten. Der versuch den arduino-nano mit einer hilfsspanung (9mA) zu halten geht nicht. Beim erneuten aufruf mit TERATERM muss ja der resetknopf gedrückt werden - denk dir den rest selber :evil:


    Mit meinen kenntnissen muss ich den versuch als "nur ein wenig rumprobieren" taxieren. Jedenfalls ist eFORTH auf dem nano so nicht nutzbar. Es gibt noch varianten von eforth auf einem stm32, vielleicht gehts damit besser?


    Das englisch geschrieben dokument zum eforth auf arduino hat 137 Seiten. Nein - das mag ich jetzt nicht alles durchlesen. Nur eine textstelle will ich hier ins deutsche übersetzt zeigen.


    Kapitel 4.2 Flash-Programmierung

    Der ATmega328P ist mit seiner Harvard-Architektur sehr feindlich gegenüber FORTH eingestellt. Es ist schwierig, das FORTH-System im Flash-Speicher zu erweitern. AmForth hat gezeigt, dass wir neue FORTH-Befehle in den Flash-Speicher einfügen können, indem wir einen primitiven Befehl I! verwenden. Er schreibt jedoch eine Zelle nach der anderen in den Flash-Speicher, und das ist sehr ineffizient, da er eine Seite des Flash-Speichers löschen und die geänderte Seite wieder in den Flash-Speicher schreiben muss. Dadurch könnten die erlaubten Lösch-Schreib-Zyklen im Flash-Speicher des ATmega328P schnell erschöpft sein.

    Der Flash-Speicher im ATmega328P ist für 10.000 Schreib-Lösch-Zyklen spezifiziert. Sie müssen sehr vorsichtig mit diesen Schreib-Lösch-Zyklen sein, wenn Sie dem FORTH-System neue Befehle hinzufügen. Um die Lösch-Schreib-Zyklen zu minimieren und die Lebensdauer des Flash-Speichers zu verlängern, habe ich die große Waffe in Chuck Moores Arsenal herausgeholt: die Ping-Pong-Block-Puffer.

    Ich verwende zwei 128-Byte-Seitenpuffer im RAM, um kompilierten Code zu speichern. Neue FORTH-Befehle werden in diesen Puffern kompiliert. Zwei Puffer sind notwendig, damit Vorwärtsreferenzen über eine Seitengrenze hinweg aufgelöst werden können. Andernfalls würden viele weitere Lösch-Schreib-Zyklen beim Aufbau von Strukturen in benachbarten Seiten des Flash-Speichers verschwendet werden. Erst wenn beide Puffer voll sind, wird der zuletzt benutzte Puffer in den Flash-Speicher gespült, bevor eine neue Seite des Flash-Speichers in diesen Puffer eingelesen wird.

    Der Nachteil ist, dass ein neuer Befehl, nachdem er definiert wurde, nicht ausgeführt werden kann, solange er nicht geflusht wird. Das Ausführen eines Befehls in einem Puffer führt definitiv zum Absturz des Systems. Denken Sie immer daran, am Ende einer Quellcodedatei einen FLUSH-Befehl einzufügen. Wenn Sie eingegebene Codezeilen kompilieren, denken Sie daran, einen FLUSH-Befehl auszuführen, bevor Sie einen gerade eingegebenen Befehl ausführen. Andernfalls müssen Sie sich darauf einstellen, das System aus dem AVR Studio 4 neu zu laden. Dieser Fehler wird passieren, glauben Sie mir, und er ist beunruhigend. Aber denken Sie daran, dass wir es mit einem Mikrocontroller zu tun haben, und dessen Flash-Speicher kann nur 10.000 Schreib-Lösch-Zyklen aushalten.


    Für FORTH interessierte hier drei links zu dokumenten

    Forth auf Arduino zum aktuellen thread

    Starting-FORTH von Leo Brodie

    Thinking-FORTH von Leo Brodie


    Grüsse in den Frühling wink2.gif

    * letzte Worte des Fallschirmspringers : " scheiss Motten" ! *



  • Ich weiß nicht ob da alles gesichert wird was Du brauchst aber Du kannst es ja mal probieren.


    Wenn die Arduino IDE installiert ist mit dem mitgelieferten "avrdude":


    Code
    1. "C:\Program Files (x86)\Arduino\hardware\tools\avr\bin>avrdude" -C C:\Users\<Benutzername>\AppData\Local\Arduino15\packages\arduino\tools\avrdude\6.3.0-arduino17/etc/avrdude.conf -c arduino -P COM3 -p atmega328p -U eeprom:r:D:\meinprogramm.eep:i
    2. "C:\Program Files (x86)\Arduino\hardware\tools\avr\bin>avrdude" -C C:\Users\<Benutzername>\AppData\Local\Arduino15\packages\arduino\tools\avrdude\6.3.0-arduino17/etc/avrdude.conf -c arduino -P COM3 -p atmega328p -U flash:r:D:\meinprogramm.hex:i


    Das könnte man als Batchfile skripten.


    Natürlich müssen Pfadnamen, COM Port usw. an die lokalen Begebenheiten angepasst werden. In diesem Fall wird das EEProm und Flash in die "Datei D:\meinprogramm.eep|hex" ausgelesen.


    Oder weil Du ja eh AVR Studio brauchst du nur auf den Read Button klicken:


    AVR-Studio.png

    Das Reh springt hoch. Das Reh springt weit. Warum auch nicht? Es hat ja Zeit. 8o

  • Arduino Hex File Programming / Forth Programming Language


    Es reitzte mich schon lange "forth" auf einem mikrocotroller zu installieren.

    Motivation und anleitung fand ich letztlich auf dem youtube-kanal 0033mer.

    Hier der Link zum Video    https://www.youtube.com/watch?v=n7l4Wn6xalc

    Der autor erklärt ausführlich wie mit der installation vorzugehen ist.

    Er liefert auch nützliche links in der videobeschreibung.


    Forth ist eine "Concatenative"-Programmiersprache. Das heißt, es gibt nur minimale Syntaxregeln, und Befehle beziehungsweise Funktionen (im Forth-Sprachgebrauch "Wörter") werden mit Leerzeichen getrennt hintereinander geschrieben. Alle Bestandteile, die in populären Programmiersprachen durch Syntax umgesetzt sind (Kommentare, Variablendefinitionen, Kontrollstrukturen wie Schleifen oder Entscheidungen mit IF-THEN-ELSE) sind unter Forth ganz normale "Wörter".

    Im Umkehrschluss bedeutet das, dass Programmierer "ihr" Forth selbst in beliebiger Weise anpassen können. Forth ist wie ein Baukasten für eigene Programmiersprachen, die es Programmierern und Programmiererinnen erlauben, möglichst elegant die gewünschte Anwendung zu implementieren.


    Infos zu forth erhält man hier: 4th Gesellschaft


    Was man dazu braucht:

    • das hexfile eforth220.hex (ist unten beigefügt)
    • avr-studio oder atmel-studio
    • ein avr-isp programmer
    • die software tera term, eine terminal emulation. Zum download. https://tera-term.en.lo4d.com/download


    Ich wiederhole hier nicht die anleitung von 0033mer. Schau dir dafür das video an.

    Hier der link zum video    https://www.youtube.com/watch?v=n7l4Wn6xalc


    Forth auf dem nano fuktioniert auf's beste.

    • Nano am usb-port einstecken
    • in teraterm die seriellen einstellungen vornehmen
    • dann am nano den reset gedrückt.

    Fort meldet sich im terminal, enter beantwortet forth mit dem bekannten ok.

    Die erweiterung des lexkons nach der anleitung von 0033mer klappt auch.

    Das hexfile eforth220.hex.zip

    Der CH341SER Treiber CH341SER.ZIP


    Aber! :evil:

    Entfernt man den nano von der stromversorgung verliert man alle programmierten erweiterungen.

    Jetzt meine Frage an die community:

    Wie kann ich den speicher vom arduimo nano als hexfile auslesen um die aktuelle version des forth-systems zu erhalten und später wieder zu laden?


    Grüsse pasted-from-clipboard.png

    * letzte Worte des Fallschirmspringers : " scheiss Motten" ! *