Weiß jemand, wie man die I2C-Schnittstelle auf bestimmte Pins festlegt? Ich suche nach der Initialisierung passen zur Adafruit Bibliothek: https://github.com/adafruit/Adafruit_nRF52_Arduino/blob/master/libraries/Wire/Wire_nRF52.cpp
Ich weiß nur wo sie festgelegt wird. in der betreffenden variant.h z.B. https://github.com/adafruit/Adafruit_nRF52_Arduino/blob/7b8d3e1f4172f8618f5e2e7978047628cda84c76/variants/circuitplayground_nrf52840/variant.h Wie sich Änderungen auswirken, kann ich nicht sagen.
Danke für die Antwort. Mir ging's jetzt eher um den konkreten Syntax. Das Beispiel für die Standardpins für TWI sieh ja so aus:
1 | #include <Wire.h> |
2 | |
3 | void setup() |
4 | {
|
5 | Wire.begin(); // join i2c bus (address optional for master) |
6 | }
|
7 | |
8 | ...
|
Ich will sie aber umbiegen können und vermute diese Funktion: TwoWire::TwoWire(NRF_TWIM_Type * p_twim, NRF_TWIS_Type * p_twis, IRQn_Type IRQn, uint8_t pinSDA, uint8_t pinSCL) Wie sieht ein Codebeispiel aus, um die Pins festzulegen?
chris schrieb: > Wie sieht ein Codebeispiel aus, um die Pins festzulegen? Habe ich doch gerade gesagt! Oder nicht? Warum verlinke ich das überhaupt? Übrigens das was du Funktion nennst ist der Konstruktor! Und dessen Aufruf (instanziirung von Wire und Wire1) findest du in der *.cpp Datei welche du verlinkt hast. Aber vielleicht siehst du das ja nicht, ..... Also lese ich dir das mal vor:
1 | //..schnipp
|
2 | |
3 | #if WIRE_INTERFACES_COUNT > 0
|
4 | TwoWire Wire(NRF_TWIM0, NRF_TWIS0, SPIM0_SPIS0_TWIM0_TWIS0_SPI0_TWI0_IRQn, PIN_WIRE_SDA, PIN_WIRE_SCL); |
5 | |
6 | //..schnipp
|
7 | |
8 | #if WIRE_INTERFACES_COUNT > 1
|
9 | TwoWire Wire1(NRF_TWIM1, NRF_TWIS1, SPIM1_SPIS1_TWIM1_TWIS1_SPI1_TWI1_IRQn, PIN_WIRE1_SDA, PIN_WIRE1_SCL); |
10 | |
11 | //..schnipp
|
Danke. Allerdings sehe ich im von dir geposteten Link nur die Pin-Definitionen, nicht aber den Code den du ausgeschnitten hast ....? Und ich kenne die Bedeutung dieser Definitionen nicht: NRF_TWIM1, NRF_TWIS1, SPIM1_SPIS1_TWIM1_TWIS1_SPI1_TWI1_IRQn
chris schrieb: > Allerdings sehe ich im von dir geposteten Link nur die Pin-Definitionen, > nicht aber den Code den du ausgeschnitten hast ....? Wo ich den ausgeschnitten habe? Arduino Fanboy D. schrieb: > Und dessen Aufruf (instanziirung von Wire und Wire1) findest du in der > *.cpp Datei welche du verlinkt hast. Du findest den Code also nicht hinter MEINEM Link, sondern hinter DEINEM. Korrektur: instanziirung: Instantiierung
Ich hatte vermutet, dass man bei der MCU die I2C pins in gewissen Grenzen frei konfigurieren kann. Wenn ich es richtig sehe, gibt es aber nur Wire und Wire1 mit festgelegter Pinzuordnung. Jetzt wäre die Frage, ob die MCU mehr kann oder nur die Arduino Lib auf die zwei Pins beschränkt ist.
Adafruit hat für den NRF52 leider keine Funktion vorgesehen die Pins zu ändern. 1. Definiere dir eine neue Varaint mit deinen I2C Pins 2. Andere die bestehende Variant 3. Wenn du die I2C Pins während der Laufzeit ändern willst/musst, dann darfst du Wire bzw Wire1 nicht nutzen sonden musst eine eigene TwoWire Class initialisieren mit den entsprechenden Pin und Peripheriezuordnungen.
In der Library, die du verlinkt hast gibt es eine Methode setPins(..). Das heißt mit einer Zeile Wire.setPins(sda_pin,scl_pin) lassen sich die Pins leicht ändern. Ich vermute, das das nur vor Wire.begin() geht, aber das habe ich jetzt noch nicht direkt ausprobiert.
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.