Zwei Soft-I2C parallel, Code von P.Fleury

OP #1800235
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 !!
2

3
#define SDA      1    // SDA Port A, Pin 1   
4
#define SCL  0    // SCL Port A, Pin 0
5
#define SDA_PORT        PORTA           // SDA Port A
6
#define SCL_PORT        PORTA           // SCL Port A

und
1
;*************************************************************************
2
; Initialization of the I2C bus interface. Need to be called only once
3
; 
4
; extern void i2c_init(void)
5
;*************************************************************************
6
  .global i2c_init
7
  .func i2c_init
8
i2c_init:
9

10
  cbi SDA_DDR,SDA    ;release SDA
11
  cbi SCL_DDR,SCL    ;release SCL
12
  cbi SDA_OUT,SDA
13
  cbi SCL_OUT,SCL
14
  ret
15
  .endfunc
Angehängte Dateien:
Gast #1800427
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.
Angehängte Dateien:
OP #1800439
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...
Gast #1800446
>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.
Gast #1800460
>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;)
OP #1800476
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.

Antwort schreiben

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.

Neuen Thread starten

Eine Lösung, Ergänzung oder Rückmeldung zu diesem Thread? Dann antworte hier.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.