Eine serielle Schnittstelle per i2c am Atmega

  • C
    SC16IS750 mySc (1);

    Danke!

    Kannst Du mir noch sagen, was diese Zeile Code macht?

    Es deklariert eine Objekt "mySc" der Klasse SC16IS750 und ruft den Konstruktor der Klasse mit dem Argument 1 auf

    Die "1" ist die I2C-Adresse des Extenders (und deswegen höchstwahrscheinlich falsch, war nur ein Beispiel).

    im Konstruktor (SC16IS750::SC16IS750 in der Library) findet die Initialisierung statt, damit z.B. spätere Aufrufe von mySC.read() wissen, auf welcher Adresse sie den Extender ansprechen müssen.

  • Ich hab das nochmals behirnt über Nacht …


    Die einfachste Lösung ist sicher über einen separaten AVR.

    Erstens kostet ein AVR fast nix und zweitens ist es technisch die einfachste Lösung.


    Der Z80-MBC2 hat einen I2C Port.

    Da hängt ein AVR dran als I2C Slave.

    Technisch ganz einfach und preisgünstig.


    Die Software Anpassungen sind natürlich beträchtlich.

    Aber es gibt ja schon Muster durch den GPIO der ja auch am I2C hängt.


    Man müsste also:

    • für den zweiten AVR eine I2C/Uart Bridge entwickeln (relativ easy, gibt es Muster im Netz)
    • am Z80 sieht man einfach ein weiteres UART als IO. Erst mal eine Anwendung schreiben, später im CPM anpassen
    • der AVR im Z80-MBC müsste einen weiteren IO "emulieren" und entsprechend an das I2C weiter geben


    Alle durchaus machbar.

    Das wird auch mit hohen Bitraten funktionieren.



    Beispiel im Netz:

    https://electronics.stackexcha…-received-over-i2c-on-avr

    https://www.avrfreaks.net/forum/code-uart-i2c-bridge

    • Offizieller Beitrag

    Ich hab das nochmals behirnt über Nacht …


    Die einfachste Lösung ist sicher über einen separaten AVR.

    Erstens kostet ein AVR fast nix und zweitens ist es technisch die einfachste Lösung.

    Hab ich nicht verstanden. Warum ist das einfacher, als den I2C/UART IC / in Hardware zu verwenden?

    Wenn es einfacher ist, bin ich sofort dafür.

    Aber die Schritte, die Du oben skizziert hast, brauch ich alle für den SC17I750 auch, nur daß ich für den SC127I750 keine Software anpassen muss... also für mich erscheint es sogar aufwändiger, was Du vorschlägst.

  • Naja, der SC127I750 hängt ja am I2C des AVR.

    Insofern muss man da schon einiges anpassen sowohl auf Z80 als auch auf AVR Seite.


    Wenn man statt des SC127I750 einen zweiten AVR habe, dann

    • habe ich denselben Aufwand auf AVR Seite und Z80 Seite ( .. )
    • muss mich NICHT mit dem SC127I750 vertraut machen ( ++ )
    • brauche zusätzliche Software im zweiten AVR ( -- )


    Da es schon Beispiele im Netz gibt, ist der Aufwand im zusätzlichen AVR eher gering.

    Und ich bin maximal flexibel, kann auch den ganzen RAM des AVR als Buffer nehmen

    Eventuell sogar andere Dinge abfackeln mit dem AVR (eine Floppy steuern, eine weitere SD Karte, weitere IO, ein Display …).


    Sind nur meine Gedankengänge zu dem Thema …

    • Offizieller Beitrag

    Eventuell sogar andere Dinge abfackeln mit dem AVR (eine Floppy steuern,

    Oje, das siedelt sich mindestens 5 Größenordnungen über meinem Niveau an.

    Zumal es nach kurzer Recherche keine fertigen Lösungen gibt, mit einem Arduino auf floppy mit einem File System zu arbeiten.

    Und selbst dann wäre es zu arg für mich als Einstieg in die Welt von Z80 und Arduino. Wofür dieses Z80MBC2 gut geeignet ist, ich hab schon einiges gelernt.

    Ich fände es schon nett, wenn ich mir bis zur CC genug Freizeit aus den Rippen schneiden kann, daß der Z80MC2 druckt :)

  • Oje, das siedelt sich mindestens 5 Größenordnungen über meinem Niveau an.

    [...]

    Ich fände es schon nett, wenn ich mir bis zur CC genug Freizeit aus den Rippen schneiden kann, daß der Z80MC2 druckt :)

    Das Arduino System zu lernen ist auf jeden Fall nützlich.


    Eigentlich ist das ganz einfach eine recht simple C/C++ Umgebung, die Dir einiges an Arbeit abnimmt.

    Insbesondere legt sie ein Mäntelchen (eine Schicht Candy) über die Hardware und gibt allen unterschiedlichen Arduinos ein sehr ähnliches Bild nach außen zum Programmierer ab (PIN 10 ist immer PIN 10 auch wenn es in Wirklichkeit am Chip anders ist).

    Man braucht sich anfangs nicht mit allen Details herumzuschlagen und kommt sehr schnell zu funktionierenden Lösungen.

    Wenn man dann optimieren möchte, kann man auch tiefer an die Hardware gehen und quasi direkt auf dem Metall programmieren (in C/C++), muss dann eben Datenblätter lesen und Register lesen und beschreiben.

    Dank der vielen verfügbaren Libraries ist vieles einfach nutzbar verkapselt - wie Lego.


    Der Nachteil von Arduino (und C++, Pyton, ...) ist, dass man nicht unbedingt sieht, was man da anrichtet.

    Eine einzige kleine Zeile die z.B. ein I2C UART Objekt erzeugt, macht hinter den Kulissen oft viel mehr und man wundert sich eventuell wo die KBytes an Flash Speicher geblieben sind oder warum etwas so langsam geht.

    Ich versuche, Arduino Projekte möglichst schlank zu halten, d.h. nicht alles in C++ Klassen oder Libraries zu gießen.


    Ich denke das schwierige bei Deinem Projekt ist eher das Zusammenspiel zwischen dem CP/M System in Z80 Assembler (BIOS) und der Hard/Firmware zu verstehen, um dann z.B. die Druckfunktion zu integrieren.

    Da musst Du auf zwei Hochzeiten gleichzeitig tanzen.