Forum: Mikrocontroller und Digitale Elektronik Arduino I²C-Bus, mehrere Instanzen


von Nabu T. (nabuthot)


Lesenswert?

Hallo Gemeinde,

ich hätte da mal ne Frage: Ich möchte an einem Arduino/etc. 2 Instanzen 
von Wire.h initialisieren. Die erste Instanz soll einen Bus betreiben, 
der diverse Arduinos verbindet, hier wäre der einzelne Arduino Slave 
(abgesehen von einer zentralen Instanz, die dann Master ist).
Eine zweite Instanz soll I2C-typische End/Zwischengeräte verwalten 
(Shifter, Sensoren, Aktoren...), dh. hier ist der jeweilige Arduino 
immer Master.

Problemstellung hier ist bis dato: Bei 2 aufgerufenen Instanzen ist 
praktisch immer nur die zuletzt initialisierte aktiv (ließ sich leider 
auch durch xyz.listen() nicht ändern). Ist es also möglich zwei 
I²C-Instanzen zu initialisieren, von denen eine im Master- und die 
andere im Slave-Betrieb funktioniert?

Grüße, Nabu T.

von Karl M. (Gast)


Lesenswert?

Ja wenn man zwei I2C Busse hat kann man das natürlich auch 
programmieren, wenn man das nicht hat, muss man sich eine andere Lösung 
suchen.

von Nabu T. (nabuthot)


Lesenswert?

Hallo Karl,

Das war ja gerade die Frage: … eine andere Lösung …

Ist denn der Arduino überhaupt in der Lage per Wire.h mehrere 
verschieden konfigurierte Instanzen zu betreiben?


Grüße, Nabu T.

von K. S. (the_yrr)


Lesenswert?

Moin,

meinst du mit Arduino einen Atmega328?
der hat nur einen Hardware IIC, den zweiten müsstest du in Software 
machen, also nicht mit wire.h. eine Alternative wäre vllt. den Bus 
zwischen den Arduinos mit UART zu machen. Für IIC über mehr als ein paar 
10cm gehts sowieso nur mit viel Glück ohne weiteres, da musst du messen 
und anpassen/Pullup ändern/Kabel ordentlich verlegen/Geschwindigkeit 
reduzieren...

Wie hast du das ganze verkabelt, oder ist das bis jetzt nur Theorie? und 
was soll es werden wenns dann mal läuft?

von Karl M. (Gast)


Lesenswert?

Hast du denn zwei Hardware Einheiten, die I2C Master sein können?
Was ist wire.h? Kann man das sich ansehen?
Wenn ja, dann findet man dort die Antwort.

von Peter D. (peda)


Lesenswert?

Der ATmega328PB hat 2 HW-I2C.
Man kann aber auch ein HW-I2C als Interrupt benutzen und ein SW-I2C per 
Bit-Banging.

: Bearbeitet durch User
von K. S. (the_yrr)


Lesenswert?

Karl M. schrieb:
> Hast du denn zwei Hardware Einheiten, die I2C Master sein können?
kommt drauf an welchen "Arduino" er hat, der gängige mit Atmega328p hat 
nur eine, nur der "Due" hat zwei (der hat auch nen Cortex-M3).

> Was ist wire.h?
eine Arduino Library, findest du im Internet, z.B. hier
https://www.arduino.cc/en/reference/wire

Wenn zwischen den Arduinos mehr als 10-20 cm liegen (in summe ca. <50cm) 
ist IIC sowieso nicht des erste mittel der Wahl, dann kann man UARt 
nehmen und wenns dann mal 10m werden sollen nen Bus Treiber und muss 
keine Software ändern.

: Bearbeitet durch User
von Sebastian S. (amateur)


Lesenswert?

Wie bereits meine Vorposter gesagt haben: Ohne zweiten IIC geht da gar 
nichts.
Ob Deine Bibliothek überhaupt mehrere Ports unterstützt ist eine weitere 
Frage.

Bleiben nur noch:
1. Eine Tüte voller Gatter, die zwischen zwei Schnittstellen
   umschalten können. Hier gibt es eventuell fertige Lösungen.
   Schau mal z.B. bei Maxim nach.
2. Eine Softwarelösung, die aber leicht zum Full-Time-Job für
   Computy werden kann.
3. Ein µP der von Haus aus zwei Schnittstellen unterstützt und
   eventuell auch zugehörige Bibliotheken besitzt.
4. Eine Erweiterung, die in Hardware (Extrachip) realisiert
   werden kann.

von Nabu T. (nabuthot)


Lesenswert?

Hallo K.S.

Kurze Vorgeschichte zu unserem Kleinkunstprojekt: Innerhalb eines 
mobilen Gehäuses werden interaktionsabhängige Abläufe strukturiert. 
Diverse Aktoren (Pümpchen, Motörchen, Dimmer, Anzeigen...) nehmen 
programmgesteuerte Zustände ein. Diverse Sensoren (Schalter, Taster, 
RFID's, Potis...) werden Einfluß auf diesen Programmablauf haben (im 
Prinzip 'ne größere Spielbox)

Grundidee hier war halt die Trennung des zentralen Programmablaufs von 
der Peripheriesteuerung. Wir hätten da den zentralen yC (hier wegen WLAN 
höchstwahrscheinlich einen NodeMCU/ESP8266), dieser wird per MQTT 
globale Variablen managen (funktioniert bereits). An diesen wollen wir 
per Bus 1 separate yC's hängen, diese leisten dann die ganze 
Aktoren/Sensoren-Arbeit (dies wiederum dann über den Bus 2). Verwendung 
werden hier ArduinoNano/ATMega328P und/oder ebenfalls NodeMCU/ESP8266 
finden (schlicht eine Baugrößenfrage). Das ganze findet innerhalb eines 
Kubikmeters statt (abgesehen von MQTT), es sollten also keine 
Leitungsprobleme auftreten.

Die meisten Sensorenkonfigurationen sind standalone bereits getestet, 
nun kommt hier also das Zusammenspiel zum Zuge. Jeder Bus für sich 
funktioniert als Prototyp bereits ebenfalls.


Kliffhanger sind hier zur Zeit:

- das parallele Betreiben zweier I²C-Busse an einem yC

- das wäre dann eine nächste Anfrage: Multi-RFID-Reader


Grüße, Nabu T.

von Stefan F. (Gast)


Lesenswert?

Da haben mal wieder lauter Leute halbgar geantwortet, die sich mit 
Arduino weder auskennen noch nachgeschaut haben.

Wenn man keine Ahnung, soll man einfach mal ...

In den Dateien wire.h/wire.cpp befindet sich Arduinos Implementierung 
der I²C Schnittstelle. Die Klasse heisst TwoWire. Wenn man sich deren 
Quelltext anschaut sieht man sehr deutlich, dass es nur eine Instanz 
geben kann.

Hier haben die Arduino Macher das Konzept der Objektorientierung völlig 
falsch umgesetzt und sind obendrein einfach davon ausgegangen, dass alle 
Mikrocontroller maximal eine I²C Schnittstelle haben. Ein schönes Indiz 
für die Qualität der Arduino Software.

Du brauchst eine alternative Soft-I²C Library für deinen 
Mikrocontroller. Die wire.h vom ESP8266 Core ist Soft-I²C und 
unterstützt mehrere Instanzen.

So sollte es gehen:
1
TwoWire wire1 = TwoWire();
2
TwoWire wire2 = TwoWire();
3
4
setup()
5
{
6
  wire1.begin(4,5);
7
  wire2.begin(12,13);
8
}

von Nabu T. (nabuthot)


Lesenswert?

Hallo Stefanus,

das sieht schon mal nach einem Weg aus (TwiWire). Werde mal ein paar 
Tests machen, melde mich dann...


Grüße Nabu T.

von Stefan F. (Gast)


Lesenswert?

Der Slave Modus ist zumindest in der ESP8266 Version 2.3.0 gar nicht 
implementiert.

Für ATmega könnte diese Alternative helfen: 
https://playground.arduino.cc/Main/SoftwareI2CLibrary

von Einer K. (Gast)


Lesenswert?

Stefanus F. schrieb:
> In den Dateien wire.h/wire.cpp befindet sich Arduinos Implementierung
> der I²C Schnittstelle. Die Klasse heisst TwoWire. Wenn man sich deren
> Quelltext anschaut sieht man sehr deutlich, dass es nur eine Instanz
> geben kann.

Wenn du meinst, dass die meisten Arduinos nur eine Wire Instanz 
benötigen, da sie nur eine TW Hardware haben, dann ja.

Gegenbeispiel: Der Arduino DUE mit 2 TWI, der kennt Wire und Wire1
Und das sind ganz sicher ZWEI Instanzen.

Also: Der Spruch ist damit als Lüge entlarvt!

Stefanus F. schrieb:
> Hier haben die Arduino Macher das Konzept der Objektorientierung völlig
> falsch umgesetzt und sind obendrein einfach davon ausgegangen, dass alle
> Mikrocontroller maximal eine I²C Schnittstelle haben. Ein schönes Indiz
> für die Qualität der Arduino Software.

Auch das ist als Lüge entlarvt.


Wahr ist natürlich:
Eine Instanz pro vorhandener Hardware TWI Einheit.
Mehr geht auch nicht!
Eine ISR pro Hardwareeinheit.

------------

Stefanus F. schrieb:
> Da haben mal wieder lauter Leute halbgar geantwortet, die sich mit
> Arduino weder auskennen noch nachgeschaut haben.
Schaue bitte in den Spiegeln. bevor du nächstes mal auf den Arduino 
bashing Zug aufspringst.

-----------

Nabu T. schrieb:
> Ist es also möglich zwei
> I²C-Instanzen zu initialisieren, von denen eine im Master- und die
> andere im Slave-Betrieb funktioniert?
Warum nicht nur eine Instanz, wenn der µC nur eine Instanz kann?
Denn diese eine Instanz kann sowohl Master, als auch Slave spielen.


-------------

Stefanus F. schrieb:
> Du brauchst eine alternative Soft-I²C Library für deinen
> Mikrocontroller. Die wire.h vom ESP8266 Core ist Soft-I²C und
> unterstützt mehrere Instanzen.

Ist klar, voll die Ahnung!
Die ESP8266 Wire Implementierung kann nur Master.
Nicht Slave.
Dein Vorschlag entspricht also in keinster Weise den Anforderungen:
Master UND Slave.

von Stefan F. (Gast)


Lesenswert?

Arduino Fanboy D. schrieb:
> Lüge, Lüge, entlarvt

Ganz toll, wisch Dir mal den Schaum vorm Mund weg. Geht es Dir jetzt 
besser?

Er will auf einem zentralen ESP8266 mehrere Master-Instanzen und dann 
auf vielen ATmega oder ESP8266 jeweils eine Slave Instanz.

Dass er auf dem ESP8266 keinen Slave machen kann, habe ich geschrieben. 
Aber schön, dass Du diese Einschränkung gerade auch nochmal neu entdeckt 
hast. Man kann ja nicht oft genug darauf hinweisen, nicht wahr?

von Einer K. (Gast)


Lesenswert?

Du bist mal wieder beim lügen erwischt worden...
Da kannst du dich winden und wenden wie ein Pillewurm.

von Nabu T. (nabuthot)


Lesenswert?

Hallo...

sorry, wurde wohl missverstanden.

Auf dem zentralen/"oberen" yC eine I²C-Master-Instanz, um nach "unten" 
zu telefonieren.

Auf den "unteren" yC's jeweils eine I²C-Slave-Instanz, für Telefonate 
von "oben" und eine I²C-Master-Instanz für die Ansteuerung der 
Peripherie.

Grüße.

von Einer K. (Gast)


Lesenswert?

Nabu T. schrieb:
> sorry, wurde wohl missverstanden.

Um wie viele Geräte dreht es sich?

Warum nicht alle an einen Bus?

Warum die Fixierung auf I2C, für alles?

von Stefan F. (Gast)


Lesenswert?

> sorry, wurde wohl missverstanden...

Sag ich doch. Soviel zum Thema "lügen". Mit solchen Anschuldigungen 
solltest du (Arduino Fanboy) etwas vorsichtiger sein - auch bei anderen. 
Dein Auftreten ist in den letzten Tagen extrem aggressiv.

Bedenke, dass die meisten falschen Infos ihre Ursache in falschem 
Kenntnisstand haben. Ich gehe davon aus, dass hier niemand absichtlich 
andere in die Irre führt. Und wenn schon, dann handelt es sich in der 
Regel im Ironie, nicht um Lügen.

von K. S. (the_yrr)


Lesenswert?

Nabu T. schrieb:
> sorry, wurde wohl missverstanden.

also ich habs schon so verstanden, den Rest einfach ignorieren, dass ist 
hier leider normal.
und immer dran denken, don't feed the trolls

Die software IIC library von Stefanus wird wohl das beste für dich sein, 
abhängig davon wie viel Geschwindigkeit du brauchst, 100kHz sollten 
locker drin sein, 1MHz eher nicht. Davon abhängig dann halt den Master 
oder Slave in Software machen.

von Stefan F. (Gast)


Lesenswert?

K. S. schrieb:
> Die software IIC library von Stefanus

naja, von mir ist die nicht. Aber wir haben Dich verstanden.

von Einer K. (Gast)


Lesenswert?

Stefanus F. schrieb:
> Mit solchen Anschuldigungen
> solltest du (Arduino Fanboy) etwas vorsichtiger sein

Lies dir deinen eigenen Beitrag nochmal durch.
Gespickt mit Arduinobashing und Unwahrheiten.

Und da du offensichtlich genügend Kompetenz besitzt, um die 
Angelegenheit objektiv zu beurteilen, sind das nicht nur Unwahrheiten, 
zumindest keine Versehentlichen, sondern ehr Lügen.

Eine nach der anderen habe ich dir widerlegt.


Aber schön, dass du dich auch mal auskotzen konntest...
Vielleicht gehts dir ja jetzt besser.


Bemerke:
Wenn du Wahr sprichst, stimme ich dir zu!
Verhältst du dich wie ein Arschloch, dann gibt es Kontra.

So war es bisher, und so wird es bleiben.

von Peter D. (peda)


Lesenswert?

Nabu T. schrieb:
> Problemstellung hier ist bis dato: Bei 2 aufgerufenen Instanzen ist
> praktisch immer nur die zuletzt initialisierte aktiv

Und was ist daran ein Problem?
Probleme gibt es nur dann, wenn beide Instanzen echt parallel arbeiten 
müssen, d.h. eine im Interrupthandler, die andere im Main.
Ansonsten einfach vor jedem Transfer (Start,Daten,Stop-Sequenz) die 
entsprechende Instanz initialisieren.

von Roth (Gast)


Lesenswert?

Arduino Fanboy D. schrieb:
> Eine nach der anderen habe ich dir widerlegt.
>
>
> Aber schön, dass du dich auch mal auskotzen konntest...
> Vielleicht gehts dir ja jetzt besser.
>
>
> Bemerke:
> Wenn du Wahr sprichst, stimme ich dir zu!
> Verhältst du dich wie ein Arschloch, dann gibt es Kontra.
>
> So war es bisher, und so wird es bleiben.

Kann nicht einer mal mit diesem wirklichen Arschloch Dummbatzboy 
aufräumen?

Habt ihr keinen Mumm in den Knochen?

Ich bin nur gelegentlich hier. Ihr seit fast jeden Tag anwesend. Und 
lasst euch von diesem komischen Dummbatzboy jeden Tag neu frech sein. 
Ich kann euch nicht verstehen.

von Stefan F. (Gast)


Lesenswert?

Roth schrieb:
> Ihr seit fast jeden Tag anwesend. Und
> lasst euch von diesem komischen Dummbatzboy jeden Tag neu frech sein.
> Ich kann euch nicht verstehen.

Weise gesprochen. Es fällt mir jedoch nicht leicht, still zu bleiben, 
wenn ich geschickt plausibel als Lügner oder anderer Bösewicht 
dargestellt werde. Denn was will ich ganz sicher nicht sein. Diese 
Störenfriede sind teilweise sehr redegewandt, die nageln einen mit 
Worten an die Wand, wenn man nicht aufpasst.

Sicher, gar nicht reagieren ist oft vernünftiger. Aber wenn man derart 
angegriffen wird, dann wirken Hormone statt Vernunft. Ich möchte Lernen, 
diese Abwehr-Reflexe zu kontrollieren.

von avr (Gast)


Lesenswert?

Roth schrieb:
> Kann nicht einer mal mit diesem wirklichen Arschloch Dummbatzboy
> aufräumen?

Du hast hier bisher auch eher Beratungsresistenz als Kompetenz gezeigt. 
Da kommt von unserem fanboy bedeutend mehr.

Sein Auftreten ist unpassend, allerdings hat er in dem Punkt Recht, dass 
Stefanus erstmal sagst "wer keine Ahnung hat, soll nichts schreiben" und 
dann selbst unwissentlich falsche Behauptungen aufstellst.

@Arduino-fanboy
Das ändert nichts an der schlechten Qualität der Arduino-Bibliothek. 
Nicht nur für eine C++-Bibliothek ist die vergleichsweise schlecht 
geschrieben.

von Roth (Gast)


Lesenswert?

avr schrieb:

> Du hast hier bisher auch eher Beratungsresistenz als Kompetenz gezeigt.
> Da kommt von unserem fanboy bedeutend mehr.

Sorry, aber ich nicht "beratungsresistent", sondern war schlicht und 
einfach in C/C++ ANFÄNGER. Was man aus meinen Kommentaren auch zig fach 
entnehmen konnte. Wenn man denn wollte. Vielleicht schreibt hier noch 
jemand unter meinem Alias, das weiß ich nicht, aber ich habe bestimmt 
keinen Speck gemacht. Noch nie.

Wenn man mit "beratungsresistent" allerdings meint, dass ein Anfänger 
sich von einem professionellen "Arschloch" und "Lügner" nennen lassen 
MUSS, ohne sich dagegen wehren zu dürfen, dann habt ihr recht. Dann bin 
ich wirklich beratungsresistent. Aber ganz bestimmt nicht in C/C++. dort 
lerne ich gerne dazu und bedanke mich bei jedem. Einfach meine Kommis 
lesen und du siehst, dass es so ist.

von Einer K. (Gast)


Lesenswert?

avr schrieb:
> @Arduino-fanboy
> Das ändert nichts an der schlechten Qualität der Arduino-Bibliothek.
> Nicht nur für eine C++-Bibliothek ist die vergleichsweise schlecht
> geschrieben.
Der Versuch ist nett, aber ich kann mich nicht für die Arbeit anderer 
Rechtfertigen. Und schon gar nicht die Verantwortung übernehmen.

Merke:
Es gibt nicht "die Arduino-Bibliothek", sondern Tausende.
Erarbeitet von tausenden(?) Programmierern.
Für Dutzende von Plattformen.
Und da sind sehr wohl hochwertige Libs bei.

Dein Rundumschlag ist also wenig angemessen.
Polemik: Bist du auch ein Arduino Basher?

Natürlich gibt es Defizite.
Dinge, welche nicht optimal gelöst sind.

Aber es ist ein offenes System.
Jeder, auch du, kannst dort deine Änderungen einbringen.

Kritik, auf den Punkt gebracht, ist gut.
Verbesserungen wären wichtiger.
Rundumschläge, alles in einen Topf werfen, ist mindestens ungerecht.

> Die Kritik an anderen hat noch keinem die eigene Leistung erspart.
> Quelle: Noël Coward


----------------------
Stefanus F. schrieb:
> Weise gesprochen.
Mit dem Roth möchtest du dich, gegen mich, verbrüdern?
Interessant!

Stefanus F. schrieb:
> plausibel als Lügner
Sehr gut erkannt!

Aber anstatt zuzugeben, dass du erwischt wurdest, versuchst (auch) du 
dem Boten das Übel ans Hemd zu kleben.
(total menschlich, aber völlig unreflektiert)

Du tust mir leid.
Saugst dir Dinge aus den Fingern, stellst sie als Wahrheit hin, und 
wirst erwischt.
Dumm gelaufen.

Stefanus F. schrieb:
> Denn was will ich ganz sicher nicht sein.
Fein!
Das glaube ich dir!

Die Frage ist:
Warum tust du das dann?
Warum verhältst du dich dann so?
(einen Teil der Antwort kann ich dir liefern, für den Rest bist du 
selber zuständig)


Stefanus F. schrieb:
> Ich möchte Lernen,
> diese Abwehr-Reflexe zu kontrollieren.
Vielleicht kann ich dir auch dabei helfen.
Zumindest stehe ich dir als Sparringspartner zur Verfügung.

Das folgende gilt wohl für alle Menschen (also auch für mich), auch wenn 
ich es hier jetzt deutlich auf "DU" münze.

Deine Kompetenz ist begrenzt.
Deine Sinne sind begrenzt.
Du bist nicht in der Lage die vollständige Realität wahrzunehmen.

Dein Verhalten, Lücken im Wissen mit Fantasiegebilden auszumalen, ist 
voll menschlich. Denn es erlaubt dir, auch mit unvollständigem Wissen zu 
überleben. Insbesondere in Notlagen.

Deine unbezweifelbare Kompetenz, auf manchen Gebieten verschafft dir 
eine gute und berechtigte Basis für eine gehörige Portion 
Selbstvertrauen. Dummer weise überträgst du dieses Selbstvertrauen auch 
auf Teilgebiete, wo du nicht so sattelfest bist. Dadurch verwandeln sich 
deine Meinungen und (Vor)Urteile in Behauptungen und leicht widerlegbare 
Unwahrheiten, welche du selber nicht mehr bezweifelst.

Wie sich an unseren vorherigen Streitigkeiten belegen lässt, bist du in 
einem solchen Fall, mit freundlichen Worten darauf hingewiesen, nicht 
bereit Einsicht zu zeigen. Sondern fühlst dich angegriffen, und gehst 
schnell zu Gegenangriffen über.
Leider vergisst du dabei, dass solche Attacken keinesfalls deiner 
Position mehr Wahrheitsgehalt verleihen.
Als "Gegner" hat man dann im Grunde nur zwei Möglichkeiten, Rückzug(was 
deinen Irrtum dann unterstützen würde), oder sich auf die 
Eskalationsspirale einzulassen.

Die Haltung "Ich mag Arduino nicht" kann ich problemlos respektieren. 
Aber dass du daraus ableitest, dass Arduino grundsätzlich Mist ist, und 
das bei jeder möglichen Gelegenheit raus posaunst, ist wenigstens 
lästig.
Aber der Versuch von dir, das dann mit irrationalen/falschen Argumenten 
zu untermauern ist jämmerlich, und so wie hier geschehen leicht zu 
widerlegen.

Das würde sich alles deutlich milder gestalten, wenn du besser zwischen 
Wissen und Behauptung/Fantasie unterscheiden würdest.

Merke:
Verallgemeinerungen/Behauptungen sind falsch, wenn sich Gegenbelege 
finden lassen.
Verallgemeinerungen/Behauptungen sind unglaublich hilfreich, da sie das 
Leben/Entscheidungsfindungen stark vereinfachen.

Folgender Effekt zeigt sich bei dir: Projektion!
Wie schon gesagt: Du bist nicht in der Lage die vollständige Realität 
wahrzunehmen.
Du hast dir ein Bild von der Welt gemacht.
Dieses Bild existiert NUR in deinem Kopf.

Wie ein Diaprojektor projizierst du dein Bild der Welt, auf die Welt.
Und das ist genau das was du siehst!
Dein eigenes Bild von der Realität auf der Realität abgebildet.

Und jetzt kommt so ein "Arschloch" wie ich daher, und möchte sich nicht 
deiner Projektion anpassen. Dann klatscht es in deiner Projektion, sie 
bekommt Sprünge.
Plötzlich zeigt sich, das Realität und Projektion nicht übereinander 
passen.

Wer ist daran schuld?
Ich, der dir sagt: So gehts nicht?
Die Realität? Die keine Alternativen zulässt!

Wäre es in solchen Fällen nicht ehrenhaft, einen Irrtum einzugestehen, 
und die Projektion anzupassen?


Dank deiner Unzugänglichkeit, bei solchen Projektionssprüngen, gehe ich 
dich jetzt härter an. Sonst ist es offensichtlich nicht möglich deine 
Merkschwelle zu überschreiten.
Und dann ist es an dir, dich dazu zu entscheiden, entweder mich dafür zu 
verurteilen (den Boten töten), oder deine Projektion anzupassen und 
damit gleichzeitig deine Kompetenz zu steigern.

Folgendes ist passiert:
Dein gründlich versauter Beitrag, voller Arduino Verachtung und 
Unwahrheiten, weckt im gleichen Maße bei mir Verachtung für den Autor, 
also für dich.
Ist das ungerecht?
Diese Verachtung schütte ich dann in Kübeln zurück.
Ein wenig, wie ein Spiegel.

Ja, es wäre mir sehr recht, wenn dir solche Blamagen in Zukunft erspart 
bleiben würden!

Tipp:
> Du musst dein Ändern leben.

----------

Roth schrieb:
> Vielleicht schreibt hier noch
> jemand unter meinem Alias,
Melde dich vernünftig an!
Und poste dann NUR mit diesem Alias.
Dann dürfte sich das Problem erledigt haben.

von Stefan F. (Gast)


Lesenswert?

Nabu T. schrieb:
> Hallo Stefanus,
> das sieht schon mal nach einem Weg aus (TwiWire). Werde mal ein paar
> Tests machen, melde mich dann...
> Grüße Nabu T.

Was kam dabei heraus?

von Roth (Gast)


Angehängte Dateien:

Lesenswert?

Arduino Fanboy D. schrieb:
> blablablablablubblub ... (1012 Wörter (drei A4 Seiten)).

Ich würde gerne wissen, was dir passiert ist. Ehrlich, meine Abneigung 
ist weg. Ich habe nur noch Mitleid

von Mw E. (Firma: fritzler-avr.de) (fritzler)


Lesenswert?

Arduino Fanboy D. schrieb:
> Merke:
> Es gibt nicht "die Arduino-Bibliothek", sondern Tausende.
> Erarbeitet von tausenden(?) Programmierern.
> Für Dutzende von Plattformen.
> Und da sind sehr wohl hochwertige Libs bei.

Einstellige Prozentzahlen?

von Ralf D. (doeblitz)


Lesenswert?

Arduino Fanboy D. schrieb:
> avr schrieb:
>> @Arduino-fanboy
>> Das ändert nichts an der schlechten Qualität der Arduino-Bibliothek.
>> Nicht nur für eine C++-Bibliothek ist die vergleichsweise schlecht
>> geschrieben.
> Der Versuch ist nett, aber ich kann mich nicht für die Arbeit anderer
> Rechtfertigen. Und schon gar nicht die Verantwortung übernehmen.
>
> Merke:
> Es gibt nicht "die Arduino-Bibliothek", sondern Tausende.
> Erarbeitet von tausenden(?) Programmierern.
> Für Dutzende von Plattformen.
> Und da sind sehr wohl hochwertige Libs bei.

Es geht hier um I2C und die Arduino-Wire-Library. Und deren Qualität ist 
halt nicht so prall. AFAICS hat das niemand hier auf alle Arduino-Libs 
verallgemeinern wollen.

Wenn man ordentlich objektorientiert entwickelt, dann sollte man 
problemlos mehrere Instanzen einer Klasse instanziieren können - oder 
die Klasse sollte besser als Singleton implementiert (und dokumentiert!) 
sein.

von Einer K. (Gast)


Lesenswert?

Ralf D. schrieb:
> dann sollte man
> problemlos mehrere Instanzen einer Klasse instanziieren können

Ja, mag sein...
Geht aber nur, wenn auch wenn min. 2 TWI Hardware Einheiten vorhanden 
sind und so wird es auch gemacht.
2 Instanzen für 1 TWI Einheit machen keinen Sinn und werden auch nicht 
funktionieren.

Gilt auch für SPI, Serial EEPROM, und vergleichbare.
Deren Instanziierung wird in den Libs vorgenommen.
Eine Instanziierung durch den User ist nicht vorgesehen und konsequenter 
Weise nirgendwo dokumentiert.

Ralf D. schrieb:
> sollte besser als Singleton implementiert
Das hat den doofen Nachteil, dass solche Instanzen per new erzeugt 
werden müssen und damit der Speicherverbrauch, welcher am Ende der 
Kompilierung angezeigt wird, je mehr Singeltons eingesetzt werden, um so 
weniger stimmt.
Auf dem PC mag das nicht sonderlich ins Gewicht fallen.


Ich kann mit dem Verzicht auf new (meist) recht gut leben.
Auch wenn mich die Instanziierung, in den Libs selber, schon manchmal 
stört.

Ist es wirklich so, dass eine Library automatisch dadurch schlecht ist, 
wenn nicht alle C++ Features bis zur Grenze ausgeschöpft werden?
OK, wenn dir dieses "Qualitätsmerkmal" für ein vernichtendes Urteil 
reicht, dann muss das wohl so sein.

von avr (Gast)


Lesenswert?

Arduino Fanboy D. schrieb:
> Es gibt nicht "die Arduino-Bibliothek", sondern Tausende.
> Erarbeitet von tausenden(?) Programmierern.
> Für Dutzende von Plattformen.
> Und da sind sehr wohl hochwertige Libs bei.

Ich setze Arduino tatsächlich zum prototyping ein. In größeren Projekten 
dagegen eigentlich nie. Das liegt an hauptsächlich 2 Gründen:

a) das Konzept, also der strukturelle Aufbau gefällt mir nicht. Dazu 
gehört auch der strikte Verzicht auf Templates, welche die Peripherie 
gut abbilden hätten können.
-Z.B. SPIMaster<SPI2>, wäre ein Konzept, dass ich aus C++ Sicht sinnvoll 
fände.
-Der IO-Zugriff wäre über Templates ebenfalls kein Flaschenhals.
-da ich fast immer eigene Hardware verwende, bringt das Pin numbering 
Konzept keinen Vorteil, im Gegenteil man benötigt mehr Zeit. 
Plattformunabhängigkeit sehe ich hier nicht, weil man bei einer neuen 
Hardware, die Pins auch wieder neu zuordnen muss (außer man verwendet 
die shields, die oftmals schaltungs- und layouttechnisch bescheiden 
sind).
b) ich verwende häufig Peripherie, die nicht von Bibliotheken 
unterstützt wird. Dann schreibe ich lieber meine eigenes HAL, die bei 
größeren Projekten soweit abstrahiert, dass ich die eigentliche Software 
auch am PC entwickeln und debuggen kann. Getestet wird in dieser Phase 
nur was nur auf der Hardware getestet werden kann. Abgesehen davon 
werden viele Mikrocontroller die ich nutze unterstützt. Eine andere 
Struktur der library hätte komplette Mikrocontrollerfamilien 
unterstützen können. So muss jeder Typ manuell hinzugefügt werden.

Die Änderungen würden die Bibliothek nicht unbedingt komplizierter 
machen, aber anfängergeeignet wäre sie nicht mehr. Aber genau aus diesem 
Grund gibt es konzeptionelle Defizite die sich durch die ganze 
Bibliothek ziehen.

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.