Hallo,
ich würde gern zwei Software TWI/I2C Busse parallel nebeneinander auf
einem ATMega324PA laufen lassen. Da ich leider keinen Schimmer von
Assembler habe, weiss ich nicht wie ich es hinbekomme, in Fleury's Code
die Pinnummern zu ändern, z.B. indem ich z.B. in der i2c_init() die
beiden Pinnummern für SCL und SDA übergebe. Port ist immer der selbe.
Muss ich jetzt extra Assembler lernen oder kann mir dabei jemand auf die
Schnelle mit dem entscheidenden Tipp/Codebeispiel helfen? Anbei der
Fleury Code + Header.
Gruß und Danke,
Sascha
1
;***** Adapt these SCA and SCL port and pin definition to your target !!
holger schrieb:> Wozu? Schneller wird es damit auch nicht.
Zwei Sensoren; nicht änderbare, gleiche Adresse, kein ChipSelect
vorhanden, Hardware I2C anderweitig belegt.
Du könntest versuchen, SCL zu Multiplexen. Im Anhang mal eine Schaltung
mit der es gehen müßte (!), vielleicht aber mal die Kommentare der
Profis hier abwarten. Ich habe einen Binärdekoder HCF4555 eingesetzt
(der hat 2 Decoder von denen einer nicht genutzt wird).
mit einem 74AC11238 (3-to-8 Decoder) müßte es auch gehen, hier könntest
du bei geschickter Beschaltung aber 4 oder sogar 8 Sensoren anschließen,
bräuchtest dann aber bis zu 3 zusätzliche Portpins zur Adressierung.
Ohne Gewähr! Vermutlich sehe ich auch nach dem Absenden gleich einen
Fehler in meiner Schaltung...
Ach so: SDA/SCL links -> vom/zum µC, rechts zu den Sensoren.
Danke, leider liegt die fertige Schaltung schon vor mir. Ich könnte
natürlich auch den ganzen Fleury-Code kopieren und alle doppelten
variablennamen usw. umbenennen. Aber es muss doch einen einfachen Weg
geben, über einen jeweils vorher aufzurufenden Init die Konstanten SDA
und SCL zu ändern. Nur raffe ich garnicht wie ich diese manipulieren
kann, ASM ist halt nix für einmal-im-jahr-µC Nutzer wie mich...
>Aber es muss doch einen einfachen Weg>geben, über einen jeweils vorher aufzurufenden Init die Konstanten SDA>>und SCL zu ändern.
Vergiss es. Die benutzten Konstanten werden vom Assembler auch nur
als Konstanten eingesetzt. Die sind nicht dynamisch und können auch
nicht zur Laufzeit an den Code übergeben werden. Da musst du selbst was
schreiben, oder wie oben schon angedeutet den I2C multiplexen.
>Da musst du selbst was>schreiben, oder wie oben schon angedeutet den I2C multiplexen.
Oder die Datei i2cmaster.S in i2cmaster2.S kopieren,
allen Konstanten und Funktionen eine 2 hinten dranhängen.
Dann ist der Drops in 10 Minuten gelutscht;)
holger schrieb:> Die sind nicht dynamisch und können auch>> nicht zur Laufzeit an den Code übergeben werden
Wo Du es so sagst auch für mich logisch...
holger schrieb:> Oder die Datei i2cmaster.S in i2cmaster2.S kopieren,> allen Konstanten und Funktionen eine 2 hinten dranhängen.> Dann ist der Drops in 10 Minuten gelutscht;)
Soeben fertiggestellt bevor ich deinen Beitrag gelesen habe, exakt wie
von Dir vorgeschlagen ;-) Habe es nur in der ursprüglichen i2cmaster.S
belassen und dort nun alles doppelt.
Alles in allem nicht schön aber selten und die Sensoren senden nun beide
fleißig. Thx an alle.
Eine eigene Frage?
Dieser Thread ist über 16 Jahre alt.
Stell sie in einem eigenen Thread – dort lesen mehr Leute mit, und sie wird öfter und schneller beantwortet.