ATmega4809 TWI Slave an PF2/PF3

Hallo liebe Gemeinde.

Ich bin der Markus und lese hier schon einige Zeit mit, nun möchte ich hier mal eine Frage stellen.

Aktuell habe ich folgendes vor:
An einem ATmega4809 (kein Arduino-Board) möchte ich gerne als TWI-Slave arbeiten. Am Mega ist die Masterfunktion nicht relevant.

Der TWI-Master (ein ESP32) sowie der Mega arbeiten mit 3,3V. Die TWI-Leitungen sind via 2K0-Widerstände an 3,3V geführt.

Es ist so, das sofern SDA/SCL an PC2/PC3 angeschlossen sind, funktioniert die Kommunikation.

Schließe ich den TWI an PF2/PF3 an und aktiviere via TWI0.DUALCTRL den DUAL-MODE

    Wire.pins(PIN_PC2,PIN_PC3);
    TWI0.DUALCTRL = TWI_ENABLE_bm;  
    Wire.begin(0x55);
    Wire.onReceive(TWIreceiveEvent); // register event
    Wire.onRequest(TWIrequestEvent); // register event

bekomme ich keine Werte

Die Kommunikation als Slave mit PORTMUX (Master on PC2/PC3, Slave on PF2/PF3) soll aber laut laut Datenblatt des mega funktionieren.

Anscheinend wird dies aber wenig genutzt (google liefert leider wenig bis keine für mich brauchbaren Hilfestellungen)

Wo ist hier mein Fehler?

Achja, das ganze ist aktuell auf einem Steckbrett aufgebaut.
Das der ESP als Master funktioniert, ist ja daran zu erkennen das der Slave, wenn am PC2/PC3 angeschlossen, auch arbeitet, sofern der DUAL-MODE abgeschalten ist.

Danke für eure Hilfe und Grüße
Markus

Hallo,

meine Glaskugel sagt du hast das Microchip Curiosity Nano Board. Zudem wirst du das Package von MCUdude installiert haben. Die Info ist schon wichtig. Ich vermute nur mit dem aktivieren von I2C Dualcontrol ist das nicht getan. Ich weiß nur das Spencekonde, der die AVR DB Reihe betreut, beide Serien sind in ihren Hardwareeinheiten sehr ähnlich, dabei ist den I2C DualControl Mode einzubauen. Die tauschen sich häufig aus bei Änderungen.

Also was ich vor Kurzem gelesen hatte war noch ein Dritter im Bunde der die DualMode Idee hatte und seinen Basiscode lieferte. Zusammen mit SpenceKonde und MCUdude tüfteln sie etwas aus. Ich vermute sie sind auch noch nicht fertig. Dazu kannst bei beiden auf Github einmal vorbeischauen. Das findest du schon.

Helfen kann ich dir dabei leider nicht und der Controller ist hier kaum vertreten. Einen Versuch hatte ich hier gestartet. Ob es jemand nutzt kann ich nicht sagen. Bezieht sich verstärkt auf das Every Nano Board, auch wenn man vieles übernehmen könnte. Größere Chancen hast du im englischen Teil.

Wobei ich hier im deutschen Teil niemanden auf die Füße treten möchte falls wer was dazu weiß.

Hallo Doc Arduino,

nein, es handelt sich nicht um ein fertiges Bord, vielmehr um einen nackten mega welcher im 40er PDIP-Gehäuse steckt.

Also wirklich gar kein Board

Und ich nutze den megaAVR-Core

Ok, den mcudude werde ich mir mal ansehen und dort mein Anliegen schildern.

Deinen Link sehe ich mir direkt mal genauer an.

Was das englische Forum angeht, warte ich hier noch etwas ab, nicht das ich am Ende zwei Threads habe und es undurchsichtig wird.

Im Zweifel muss ich das geplante PCB Layout später abändern, wollte dies jedoch aus diversen Gründen vermeiden.

Falls noch jemand Ideen hat, gerne her damit, derweil beschäftige ich mich mal im Detail mit den libs und dem Datenblatt, mal sehen wie ich das zusammenbekomme.

Vermutlich ist das aber alles eher nicht so trivial wie ich gehofft habe

Danke und Gruss
Markus

Hallo,

okay, dein Nickname deutete auf das Originalboard hin. :wink:
Wenn du die Arduino IDE mit der Every Nano Einstellung nutzt, dann befürchte ich das der DualMode überhaupt nicht vorgesehen ist, weil da eben noch mehr dazugehört. Das MCUdude Package kannste dir vorstellen wie den Arduino megaAVR Core nur eben mit noch mehr Funktionen.

Wenn du nach dem Dual Mode suchst, kannst du auch alles lesen was mit einem AVR DA/DB zu tun hat in irgendwelchen Foren. Kann man alles 1:1 oder fast 1:1 übernehmen.

Die Frage ich dennoch stelle ist. Wofür brauchst du den Dual Modus wirklich? Ohne dich davon abbringen zu wollen. Wenn dein ESP der Master ist hat er die Kontrolle über den Bus. Die Slaves dürfen nur reagieren wenn der Master sie anspricht. Ansonsten hättest du plötzlich 2 Master. Der ESP und der ATmega4809.

Hallo Doc,

danke für deine Antwort:

Der Name darf im englischen wörtlich genommen werden, hier ist wirklich projektbedingt eine Neugier vorhanden. Ganz nebenbei beschreibt es auch so meine Person, speziell im technischen Bereich :wink:

ich benutze die IDE nicht mit den Every-Einstellungen sondern habe den Controller direkt ausgewählt. Die AVR DA/DB sehe ich mir hierzu gerne an, scheint es doch etwas mehr Infos darüber zu geben.

Die Frage nach dem Warum?

Recht einfach, wir entwickeln gerade eine Platine, welche später zwei TWI-Inseln bedienen soll.

Dazu dient der ESP als Gateway (Modbus) und der Mega als IO-Controller.
Die Einstellungen und Parameter werden via TWI zwischen ESP und Mega ausgetauscht, der ESP verwaltet noch ein Display im späteren Projektverlauf. Hier also performance-bedingte Architektur notwendig.

Der Mega macht via SPI die gesamte IO-Abwicklung und reportet via TWI als Slave an den ESP
Der vorgehaltene Master ist dafür gedacht, im späteren Verlauf der Projektentwicklung weitere ICs anzubinden.. Da dieses Produkt (also die ICs am TWI die hinzukommen) schon fertig ist lässt sich an diesem wenig bis nichts ändern. Hier muss der Mega also als Master auftreten.

Bei dieser Anwendung kommen noch spielerein hinzu wie: Andere Taktfrequenz des TWI für die zusätzlichen ICs und Kabellängen welche entsprechend zu berücksichtigen sind.

Über die technischen Finessen, speziell der Kabellängen haben wir einige Erfahrung gesammelt.

Bin ich deiner Meinung nach auf dem Holzweg? Lass es mich wissen.

Übrigens ist deine Lib recht interessant, danke für den Link. Obgleich ich in meiner Anwendung versuche möglichst auf Libs zu verzichten, sind doch einige interessante Infos und Anwendungsfälle dabei, die ich noch gar nicht bedacht habe.

Falls du noch Infos brauchst, gib gerne Bescheid.

Grüße Markus

Hallo,

vorweg, ich habe mit I2C sowas Großes noch nie gemacht. Bin beeindruckt über eure Arbeit. Ich weiß nur das es nicht einfach ist wenn sich 2 Master auf einem Bus um die Vorherrschaft streiten. Die Buskollisionen muss man erkennen und dann verschieden zeitlich verzögern bis jeder Master einen freien Bus hat. Ich weiß allerdings nicht ob der DualMode das in seiner I2C Hardwareinheit selbst schon kann. Vielleicht kann sie das selbst aufdrösseln.

Meine Kommunikationserfahrung bezieht sich auf serielle Übertragung mit einem Master und mehreren Slaves was alles auf einer RS485 Verbindung beruht. Würde ich hier Multi Master probieren hätte ich das gleiche Problem mit Buskollisionen.

Deine IDE Konfiguration usw. müßtest du jedoch nochmal genauer darlegen. Du bist ja hier im Arduino Forum. Alles Werkzeug was davon abweicht sollte man erwähnen. Ich weiß nämlich zufällig das man in der Arduino IDE standardmäßig einen ATmega4809 nicht direkt auswählen kann. Das kann man nur mit einem installierten MCUdude Core Package.

Oder du verwendest Atmel/Microchip Studio und hast dir das Arduino megaAVR0 Core Package passend extrahiert und programmierst darin den nackten ATmega4809? Wobei du damit aber nicht alles vom µC nutzen kannst, weil das sich alles auf das Uno Wifi Rev2 und Every Nano Board bezieht.

Da komme ich jetzt ehrlich gesagt noch nicht ganz mit wenn ich die Begriffe IDE, megaAVR0 Core und nackten 40 Pin ATmega4809 vor mir liegen habe.