Hat schon jemand Wire.h Auf dem Due FEHLERFREI ans Laufen bekommen ?

Hallo
Ich hatte das Dilemma schon vor Jahren das es nicht möglich war I2C Geräte an den Arduino Due (20/21 + Widerstand Entfernung) zu betreiben.
Ich behilf mir damals in dem ich die ganzen Bibliotheken auf Wire1 und den Pins 70/71 umbog.
Problem ist aber D70 ist auch SCK0 was aber zu Serial 1 Gehört.

Was zur folge hatte das sich Serial1 und I2C immer wieder störten und ich das in Software ausbügeln musste aber es lief "Irgendwie"
Mein neuer Aufbau soll diesen FUSCH aber nicht mehr haben sondern die Standard Pins 20 und 21 wieder verwenden.

Ich habe die letzten Tage mit verschieden Versionen von der Wire Bibliothek getestet aber habe nix erreichen können.

Da das Problem schon fast 10 Jahre bekannt ist wollte ich mal wissen ob sich in den letzten Jahren was getan hat und ichs nur nicht gefunden habe.

Zusammen Gefast was ich mit "Geht nicht" Meine:

In file included from C:\Users\PC\AppData\Local\Arduino15\packages\arduino\hardware\sam\1.6.12\libraries\Wire\src\Wire.cpp:25:0:
C:\Users\PC\AppData\Local\Arduino15\packages\arduino\hardware\sam\1.6.12\libraries\Wire\src\Wire.h: In constructor 'TwoWire::TwoWire(Twi*, void (*)(), void (*)())':
C:\Users\PC\AppData\Local\Arduino15\packages\arduino\hardware\sam\1.6.12\libraries\Wire\src\Wire.h:96:7: warning: 'TwoWire::twi' will be initialized after [-Wreorder]
  Twi *twi;
       ^
C:\Users\PC\AppData\Local\Arduino15\packages\arduino\hardware\sam\1.6.12\libraries\Wire\src\Wire.h:72:10: warning:   'uint8_t TwoWire::rxBufferIndex' [-Wreorder]
  uint8_t rxBufferIndex;
          ^
C:\Users\PC\AppData\Local\Arduino15\packages\arduino\hardware\sam\1.6.12\libraries\Wire\src\Wire.cpp:95:1: warning:   when initialized here [-Wreorder]
 TwoWire::TwoWire(Twi *_twi, void(*_beginCb)(void), void(*_endCb)(void)) :
 ^
In file included from C:\Users\PC\AppData\Local\Arduino15\packages\arduino\hardware\sam\1.6.12\libraries\Wire\src\Wire.cpp:25:0:
C:\Users\PC\AppData\Local\Arduino15\packages\arduino\hardware\sam\1.6.12\libraries\Wire\src\Wire.h:108:16: warning: 'TwoWire::status' will be initialized after [-Wreorder]
  TwoWireStatus status;
                ^
C:\Users\PC\AppData\Local\Arduino15\packages\arduino\hardware\sam\1.6.12\libraries\Wire\src\Wire.h:90:30: warning:   'void (* TwoWire::onBeginCallback)()' [-Wreorder]
  void (*onBeginCallback)(void);
                              ^
C:\Users\PC\AppData\Local\Arduino15\packages\arduino\hardware\sam\1.6.12\libraries\Wire\src\Wire.cpp:95:1: warning:   when initialized here [-Wreorder]
 TwoWire::TwoWire(Twi *_twi, void(*_beginCb)(void), void(*_endCb)(void)) :
 ^
C:\Users\PC\AppData\Local\Arduino15\packages\arduino\hardware\sam\1.6.12\libraries\Wire\src\Wire.cpp: At global scope:
C:\Users\PC\AppData\Local\Arduino15\packages\arduino\hardware\sam\1.6.12\libraries\Wire\src\Wire.cpp:145:9: warning: unused parameter 'sendStop' [-Wunused-parameter]
 uint8_t TwoWire::requestFrom(uint8_t address, uint8_t quantity, uint32_t iaddress, uint8_t isize, uint8_t sendStop) {
         ^
C:\Users\PC\AppData\Local\Arduino15\packages\arduino\hardware\sam\1.6.12\libraries\Wire\src\Wire.cpp:212:9: warning: unused parameter 'sendStop' [-Wunused-parameter]
 uint8_t TwoWire::endTransmission(uint8_t sendStop) {

Es Wird zwar hochgeladen Findet aber natürlich keine Geräte/Adressen.

Ich hatte mal irgendein Code der Ohne die Wire.h lief der fand alle Geräte und Adressen.
Nur ist es halt so das die meisten Bibliotheken halt auf Wire.h setzten.
Ich verstehe ja auch nicht wieso die bei AVR und Sam Gleich heißen müssen.

Nutzen möchte ich zum Beispiel ENS160 wie auch INA3221

Würde mich sehr Freuen wenn jemand damit schon mal zutuen hatte und es lösen konnte.
Vielen Lieben Dank.

Der Due wird mir wire1 angesprochen.

Weil diese einfach den DUE nicht unterstützen WOLLEN!

Das Problem haben auch andere Nutzer, deren Bibs nicht auf einem ESP laufen oder what ever.
Ich hab hier sogar schon erlebt, dass Dinge auf einem UNO liefen, aber auf einem MEGA nicht.

so what.
is halt so.

Danke dir für deine Einschätzung und Glückwunsch zu deinen Karma Punkten.

Dann muss ich mal gucken wie ich die 4 INA3221 ohne die Wire.h ausgelesen bekomme.
Und auf die neue "Spielerei" mit dem ENS160 verzichte.

Danke dir.

Wenn denn deine Hauptsteuerung unbedingt auf dem Arduino Due bleiben soll, dann würde ich einen anderen kleinen Microcontroller nehmen zum Beispiel Seeeduino XIAO SAMD21
Achtung ganz wichtig es muss ein Seeeduino XIAO SAMD21 sein
nehmen. Der SAMD21 liest die I2C-Sensoren Luftqulitätssensor ENS160 wie auch den Strom-Spannungssensor INA3221 ein und sendet die Daten per serieller Schnittstelle an den Arduino Due.

vielen Dank Stefan für den Hinweis zum Samd21 den kannte ich noch nicht scheint ja ähnlich zum ESp8266 Zusein nur ohne wlan halt.

Da ich nicht mehr mit einer Lösung gerechnet habe musste ich mein vorhaben auch wieder auf SCL1 umbauen und damit auskommen.

Die Sensoren konnte ich in zwischen alle zum laufen bekommen.

An dem Umweg einen 2ten Controller zu benutzen habe ich am Anfang auch gedacht.
Das musste ich aber wieder verwerfen weil ich die gesamte Ansteuerung gerne in einen Controller habe und zum 2ten alle Serial Ports (der due hat leider nur 4) schon in Benutzung sind.
Klar hätte ich auch einen esp8266 nutzen können und die daten gleich am IO broker senden können.
Aber mir ist es lieber wenn alles auch mal ohne Internet Fehler frei weiter läuft.

This topic was automatically closed 180 days after the last reply. New replies are no longer allowed.