Zwei Soft-I2C parallel, Code von P.Fleury

OP #1800235
Lesenswert?

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
Lesenswert?

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
Lesenswert?

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
Lesenswert?

>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
Lesenswert?

>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
Lesenswert?

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

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren