Hello, Guest the thread was viewed703 times and contains 5 replies

last post from cbmhardware at the

C2Net ... eine Datasette mit Wifi

  • Vor einiger Zeit entdeckte ich den Raspberry Pi Pico W und in mir keimte die Idee, damit per Wifi meine CrossDev Dateien zu senden. Als Programmier-Plattform diente die Arduino-IDE, die den schönen Vorteil hat , dass man auf eine große Auswahl verwendbarer Libs zurückgreifen kann.


    Das Ergebnis ist nun im meinem GIT: https://github.com/cbmuser/c2net Die Software ist im Moment etwas mehr als ein "proof of concept" und unterstützt nur Standard LOAD.


    Um diesen Adapter so nachzubilden, braucht man ein paar low-cost Komponenten, einen C2N-Stecker und natürlich seine WLAN Zugangsdaten. Die werden in das Programm des Pi Pico kompiliert, was einerseits sicherer ist, aber auch das Verscherbeln auf Ebay unmöglich macht. Dazu müsste man die dann wieder auslagern.

    Code
    1. Datei: c2n.ino
    2. const char *ssid = "your SSID";
    3. const char *password = "your password";



    Zur Arduino-IDE wird ein Zusatz benötigt, damit man den Pico dort verwenden kann: https://github.com/earlephilhower/arduino-pico . Das ist schnell integriert, dann fehlen nur noch ein paar Libs aus dem Arduino-Fundus, danach kann der Quelltext kompiliert werden.



    Im Bild sieht man den Aufbau auf meinem schon wieder staubigen Steckboard. Die Taster von rechts nach links: Reset, Umschalten von Wifi auf Cardreader, Auswahl vom Cardreader. Der Pico Pi arbeitet mit 3.3V I/Os, deshalb muss ein Levelshifter dazwischen, damit das CBM TTL 5V nicht die Ports zerstört. Die Motor-Leitung benötigt einen Spannungsteiler vor dem Levelshifter, dieser besteht aus zwei 1K-Widerständen.

    Allein das I2C-Display kann direkt angeschlossen werden, obwohl es mit 5V betrieben wird, da nur Schreibzugriffe auf den I2C-Adapter ausgeführt werden. Hinter dem Display ist einer dieser PC8574-Adapter aufgelötet. Die Adresse muss ggf. im Source auch angepasst werden, meist ist es 0x27, bei mir war es 0x3F. Auf dem Foto erkennt man, dass die Software bei ASCII ->PETSCII nur "A-Z" passend konvertert, da wollte ich heute noch ran.


    Den Aufbau kann man gestalten wie man lustig ist: "wild wired" , Lochraster oder selbst eine Trägerplatine entwerfen.


    Der Cardreader wird (je nach Kauf) bei mir mit 3.3V betrieben. Die Speicherkarte hat im Moment nur die Aufgabe gesendete Dateien zu sichern. Da gehen bei der aktuellen Version keine Unterverzeichnisse und es befindet sich immer eine Datei namens "DIR" auf der Karte. Diese Datei wird nach jedem Transfer aktualisiert und ist der temporäre Speicher für den Server, der diese nach Aufruf ausgibt.


    Der Transfer vom PC

    Dazu wird "curl" verwendet: https://curl.se/ und es kann nur in Richtung Adapter gesendet werden. Wenn ein Dateiname schon vorhanden ist, wird dieser beim erneuten Senden überschrieben ! - Das habe ich so belassen, damit ich meine CrossDev-Experiment immer wieder nach Neukompilieren überschreibe.


    curl 192.168.2.105 listet den Inhalt der Speicherkarte auf, das geht natürlich auch im Browser.


    curl -T programm.prg 192.168.2.105 sendet die Datei programm.prg und schreibt oder überschreibt diese auf der SD-Card.



    Die Speicherkarte

    Die Speicherkarte dient im Moment als billiger Massenspeicher. Ich hatte erst über FRAM oder EEPROM nachgedacht, letztlich ist die SD-Card einfacher. Man kann das Filesystem nutzen und bei Defekt eine andere, alte Karte verwenden.


    Die Cardreader-Funktion

    Die ist noch sehr rudimentär. Man kann mit einem Button auf den Cardreader umschalten. Dann erscheint "DATASETTE" im Display und es kann mit einem weiteren Button durchs Verzeichnis gescrollt werden. Wenn man die passende Datei gefunden hat, schaltet man über den ersten Taster wieder um, es erscheint "C2Net active !" und der gewählte Dateinamen in der zweiten Zeile. Jetzt kann die Datei mit LOAD in den Commodore-Computer geladen werden. Beim CBM kann man einfach nur warten, beim C64 muss die "C="-Taste gedrückt werden, bis ein kurzes "Found" aufblinkt.



    Zukunftsgedanken

    Für den Pi Pico ist das alles natürlich nur eine Kleinigkeit und da geht viel mehr. Speichern vom CBM, ein TAP-Player, Fastloader oder TWI. Mal sehen ...

  • Ein kleines Update, das morgen auch ins Git kommt. Ich hatte mir in den letzten Wochen zwischendurch eine kleine Platine mit allen notwendigen Komponenten anfertigen lassen.


    An den Feiertage hat man dann auch mal Zeit sich mit der Software zu beschäftigen. im Einzelnen:

    + Zeit von ntp.org: nach dem Connect im Netz, holt der Adapter sich die "Atomzeit" ab.

    + DS1307 Uhren-Chip: der wird mit der vorher genannten Datenquelle gestellt.

    + 24C256 E²Prom-Unterstützung

    + ausgelagerte WLAN-Daten: diese werden von einer speziellen Datei (/sys/secret.c2n) geladen, ins E²prom geschrieben und die Quelldatei dann gelöscht. Danach startet es dann aus den gespeicherten Daten.

    + Anzeige der Heimnetz-IP und der Zeit, wenn man den Select-Button im Idle-Modus drückt. Schaltet sich nach 3 Sekunden wieder selbst zurück.

    Das ist die aktuelle Version. Der eine Jumper ist für einen später geplanten Offline-Modus und der andere für Winter-/Sommerzeit. Von ntp.org bezieht man UTC+0, das damit angepasst werden kann. Die Batterie ist bei der Online-Version eigentlich nicht notwendig, wenn beim Boot sowieso immer die Uhr gestellt wird. Eigentlich könnte man den Uhren-Chip dann auch ganz einsparen und bei Bedarf die Zeit online abholen.


    ToDo:

    Speichern und Fastloader

    Den timestamp dann auch beim Speichern der Dateien nutzen. Das sollte bis morgen noch klappen.

    Probleme: der Uhren-Chip spinnt manchmal. Das könnte man auch mit der Online-Zeit vorab lösen, wenn mal wieder Stunde 45 angezeigt wird. Pullups auf SDA und SCL brachten keinen Erfolg, aber vielleicht komme ich noch drauf.


    Die endgültige Platine entsteht dann auch im Laufe der Programmierung.

  • Ich hatte mir in den letzten Wochen zwischendurch eine kleine Platine mit allen notwendigen Komponenten anfertigen lassen.

    :)

    ich habe mal deinen schaltplan kurz überflogen.

    D1 1n4148 an der batterie, schließt doch deine batterie kurz und entladet die sofort,
    warum hast du die da vorgesehen?

    gruß
    helmut


  • Ops, die ist falsch herum. Sollte ein einfacher Verpolungsschutz wie im Datenblatt werden. Danke für den Hinweis !

  • Der aktuelle Quelltext für die Arduino-IDE ist im Git: https://github.com/cbmuser/c2net

    Auf der Speicherkarte sollte ein Verzeichnis namens sys vorhanden sein. Darin kann man dann seine secret.c2n Datei kopieren. Diese sollte ausschließlich folgenden Inhalt in der ersten Zeile haben:

    WLANSSID,WLANPASSWORD

    Es darf im Passwort kein Komma vorhanden sein (geht das überhaupt ?) und kein Enter oder Space am Zeilenende gedrückt werden.

    Es muss ein aktives WLAN erreichbar sein und der UDP-Port zu ntp.org offen sein. Zudem muss bei jedem Start eine Speicherkarte im Slot stecken.


    Den timestamp für gespeicherte Dateien muss ich leider auf die ToDo-Liste setzen. Haben bisher keine Lösung gefunden, wie man den SD-Callback für den Zeitstempel im Server-Prozess verwendet. Über die variable myclock kann man im Moment nur einstellen, welche Uhr auf dem Display angezeigt werden soll. Entweder der interne RTC oder Zeit vom NTP.

    Platine gibt es im Moment noch nicht. Das kann man sich aber auch sehr einfach aus ein paar low-cost Komponenten von Ebay bauen: Datenlogger mit 24c256 und DS1307, 4 Kanal Level-Shifter, SD-Slot, einem 1602-Display mit I2C-Adapter und natürlich dem Pi Pico W. Mehr ist das nicht.


    Am eingetragenen Jumper kann man Sommer- und Winterzeit einstellen.


    Datasette mit Sommer- und Winterzeit. :)