mikrocontroller.net

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


Autor: Sascha W. (bucky2k)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht 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
;***** Adapt these SCA and SCL port and pin definition to your target !!

#define SDA      1    // SDA Port A, Pin 1   
#define SCL  0    // SCL Port A, Pin 0
#define SDA_PORT        PORTA           // SDA Port A
#define SCL_PORT        PORTA           // SCL Port A         

und
;*************************************************************************
; Initialization of the I2C bus interface. Need to be called only once
; 
; extern void i2c_init(void)
;*************************************************************************
  .global i2c_init
  .func i2c_init
i2c_init:

  cbi SDA_DDR,SDA    ;release SDA
  cbi SCL_DDR,SCL    ;release SCL
  cbi SDA_OUT,SDA
  cbi SCL_OUT,SCL
  ret
  .endfunc

Autor: holger (Gast)
Datum:

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

Wozu? Schneller wird es damit auch nicht.

Autor: Sascha W. (bucky2k)
Datum:

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

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

Autor: Ago (Gast)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht 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.

Autor: Sascha W. (bucky2k)
Datum:

Bewertung
0 lesenswert
nicht 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...

Autor: holger (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: holger (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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;)

Autor: Sascha W. (bucky2k)
Datum:

Bewertung
0 lesenswert
nicht 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

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.