Forum: Mikrocontroller und Digitale Elektronik Zwei Soft-I2C parallel, Code von P.Fleury


von Sascha W. (bucky2k)


Angehängte Dateien:

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

von holger (Gast)


Lesenswert?

>ich würde gern zwei Software TWI/I2C Busse parallel nebeneinander auf
>einem ATMega324PA laufen lassen.

Wozu? Schneller wird es damit auch nicht.

von Sascha W. (bucky2k)


Lesenswert?

holger schrieb:
> Wozu? Schneller wird es damit auch nicht.

Zwei Sensoren; nicht änderbare, gleiche Adresse, kein ChipSelect 
vorhanden, Hardware I2C anderweitig belegt.

von Ago (Gast)


Angehängte Dateien:

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.

von Sascha W. (bucky2k)


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...

von holger (Gast)


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.

von holger (Gast)


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;)

von Sascha W. (bucky2k)


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.

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.