Ich habe mit einigen 1-Wire-Komponenten herumgespielt und diese Fragen bekommen
Simulieren Sie diese Schaltung – Mit CircuitLab erstellter Schaltplan
Stieß auf eine Adafruit-Lib, die 10 k verwendete, aber das Wechseln zwischen den beiden Widerständen (4,7 k und 10 k) schien die Anzeige nicht zu beeinflussen. Aber ist es die Bibliothek, die definiert, welche Widerstandsgröße ich verwenden soll, oder sollte es nur zwischen einem Intervall liegen?
Ich bin ein Neuling in Sachen Elektronik und im Moment lerne ich einfach. Das Lesen der Theorie dahinter hilft mir nicht so sehr, da ich die Hälfte der verwendeten Begriffe nicht verstehe.
1) "Kann ich etwas kaputt machen, wenn ich den 4,7 k-Widerstand vergesse?"
Nein. Sie könnten das externe Gerät beschädigen, wenn Sie den Arduino-Ausgang aktiv HIGH statt hochohmig treiben. In der Regel übernehmen dies die Bibliotheken.
digitalWrite( 1 , HIGH ); pinMode( 1 , OUTPUT ); // Bad, active HIGH
digitalWrite( 1 , LOW ); pinMode( 1 , INPUT ); // Good, high impedance.
2) "Muss es 4,7k sein"?
Nein. Einzelheiten und Überlegungen finden Sie im Datenblatt. Abhängig von Geschwindigkeit und Leistungsanforderungen variieren Pull-up-Widerstände normalerweise von 1 kΩ bis 100 kΩ. Dein 4k7 ist ungefähr so gut wie meine üblichen 10kΩ.
1-Wire-Geräte haben Open-Drain-Ausgänge, sodass der Pullup erforderlich ist, um eine logische „1“ aufrechtzuerhalten, wenn der Bus nicht angesteuert wird, genau wie bei I2C. Der Grund für die Verwendung von Open-Drain-Ausgängen ist auch derselbe wie bei I2C: um mehrere Geräte auf demselben Bus zuzulassen (siehe auch diese Frage ).
Der Wert von 4,7K wird am ehesten gewählt, um bei üblichen Kabellängen eine ausreichend kleine Anstiegszeit zu gewährleisten. Der eigentliche Parameter, der den maximal zulässigen Widerstandswert bestimmt, ist die Anstiegszeit des Signals, die durch den Buswiderstand und die Kapazität bestimmt wird.
Sie werden nichts braten, wenn Sie den Widerstand vergessen (solange Sie den Bus nicht von Ihrem Master-Gerät hoch treiben), aber Ihr 1-Draht-Bus wird nur aus Versehen funktionieren.
All dies ist ausführlich in der Maxim-Literatur dokumentiert, einschließlich Datenblättern und App-Hinweisen .
Wenn Sie den Widerstand durch einen Kurzschluss ersetzen, können Sie möglicherweise D1 beschädigen, wenn er jemals versucht, "0" auszugeben. Wenn Sie den Widerstand überhaupt nicht haben, gibt es keine Stromversorgung für das 1-Wire-Gerät.
Es ist ein "Pullup"-Widerstand . Der genaue Wert ist nicht wichtig, es gibt wahrscheinlich einen breiten Bereich, in dem es funktioniert.
Nein, es müssen nicht 4,7k sein, die ursprüngliche Spezifikation sagte "ungefähr 5k", 4,7k ist nur ein allgemein verfügbarer Wert in diesem Bereich. Es gibt einen Artikel über das Ansteuern von 1-Draht-Temperatursensoren nur mit dem internen Widerstand des Arduino (und ich kann bestätigen, dass es auch mit dem 1,8-kΩ-Widerstand eines Pi funktioniert).
Grundsätzlich zieht der Master (Mikrocontroller) den Draht nach unten, um ein Slave-Gerät zu bitten, eine Anzeige zu geben. Der Slave wartet eine vorbestimmte Zeitdauer, nachdem der Master die Leitung auf Low gezogen hat, um zu antworten, indem er die Leitung ebenfalls auf Low zieht. Der Master überprüft dann die Spannung auf der Leitung, um 0 oder 1 zu bestimmen.
Dies gibt uns die Obergrenze für den Widerstand, der funktioniert. Angesichts der Kapazität der Drähte und der angeschlossenen Sensoren muss sie niedrig genug sein, um die Spannung auf der Leitung hoch zu bringen, bevor der Host den Wert überprüft. Für ein einzelnes Gerät und eine kurze Kabellänge sind 100.000 wahrscheinlich niedrig genug, 50.000 sind niedrig genug für 3 Geräte und einen Meter Kabel (oder so ungefähr) oder 1 Gerät und 10 m Kabel. Außerdem kannst du im Pull-Up-Modus schummeln und einen zweiten Pin anbringen, wenn du mehr Power Delivery benötigst.
Das setzt voraus, dass Sie eine dedizierte Stromleitung betreiben. Wenn Sie es im parasitären Leistungsmodus verwenden, müssen Sie die Leistungsaufnahme des Geräts am anderen Ende berücksichtigen, was einen Blick auf die entsprechenden Datenblätter erfordert.
Was die untere Grenze betrifft, so gibt es keine zum Wiederherstellen des hohen Signals. In dem Moment, in dem die Leitung ruhig ist, ist es sicher, sie hoch zu fahren. Das Problem tritt auf, wenn Sie es hoch treiben, während eines der Slave-Geräte versucht zu "sprechen". Die Verstärker, die Sie über Ihren Pull-up-Widerstand einspeisen, müssen vom Slave abgelassen werden, abhängig vom Innenwiderstand des Slaves, während er zieht die Leitung niedrig und ihre thermischen Grenzen, wird sie entweder den Slave kochen oder das Signal nicht niedrig ziehen. Welchen Fehlermodus Sie erhalten und wie hoch der sichere Mindestwiderstand ist, können Sie normalerweise dem Datenblatt des Slave-Geräts entnehmen. Als allgemeine Regel versuche ich normalerweise, diese Art von Komponenten im Bereich von <10 mA zu halten (vorausgesetzt, sie haben einen Innenwiderstand von 0, während sie die Leitung niedrig ziehen). Dies bedeutet, dass der Mindestwiderstand, den Sie für Ihren Pull-up benötigen (unter der Annahme einer 5-V-Ansteuerung), 500 Ω beträgt. Es ist wahrscheinlich einigermaßen sicher, je nach Umgebungstemperatur und wie oft der Slave "spricht", etwas höher zu gehen, aber bei Temperatursensoren verzerren Sie Ihren Messwert, wenn Sie genügend Strom durch den Sensor leiten, damit er sich erwärmt.
Wenn Sie es weglassen und den internen Widerstand verwenden, werden Sie mit einer Handvoll Komponenten auf einer kleinen Schaltung zufrieden sein. Wenn Sie es weglassen und die Leitung direkt hoch treiben, erhalten Sie keine 0 Ω, aber Sie erhalten einen Widerstand, der niedrig genug ist, dass Sie die Dinge zumindest aufheizen (der Master, wenn er die Leitung niedrig zieht, und welche Sklaven versuchen zu antworten). Dies wird mit ziemlicher Sicherheit die Lebensdauer Ihrer Komponenten verkürzen. Wenn Sie es weglassen und nichts anschließen, um die Spannung hochzuziehen, funktioniert die Schaltung einfach nicht.
Es ist möglich, One-Wire-Geräte ohne dedizierte Stromleitung zu verwenden. Nur Signal und Masse. Dazu muss die Signalleitung so lange hochgehalten werden, dass die angeschlossenen Geräte die internen Kondensatoren füllen können, damit sie für kurze Zeiträume funktionieren können, wenn die Datenleitung auf Low gezogen wird. Dies belastet natürlich die Datenleitung und zieht sie tiefer, je mehr Geräte parasitäre Energie verbrauchen. Sie können dies kompensieren, indem Sie einen niedrigeren Nennwiderstand verwenden. Sie können die Leitung auch ohne den Widerstand hoch treiben, indem Sie den Kommunikations-Pin des Masters in den Spannungsausgabemodus versetzen. Per Spezifikation nur die Slavessprechen, nachdem der Meister zu ihnen gesprochen hat, und nur für eine sehr kurze Dauer. Dies bedeutet, dass der Master sicher vom Ausgangsmodus am Signal-Pin in den Eingangsmodus wechseln und ihn auf Low ziehen kann, um einem Slave mitzuteilen, dass er antworten soll. Dann stellt der Pull-up-Widerstand die Spannung auf der Datenleitung wieder her und der Slave wird sie als Antwort entweder herunterziehen oder nicht. Der Master muss warten, bis alle Slaves fertig gesprochen haben, bevor er die Leitung erneut hochtreibt. Das bringt Sie nicht davon ab, etwas für einen Pull-up-Widerstand zu brauchen, da etwas die Leitung hochziehen muss, während der Slave spricht. (Nun, du könntesttreiben Sie die Leitung vom Master hoch, indem Sie sie pulsieren, wenn die Taktrate des Mikrocontrollers und die Kapazität des Schaltkreises hoch genug sind, aber ich vermute, es wäre unglaublich zerbrechlich mit einem schrecklichen Fehlermodus).
Schießen, vergessen, den Link zu dem oben genannten Artikel einzufügen: https://wp.josh.com/2014/06/23/no-external-pull-up-needed-for-ds18b20-temp-sensor/
0
, aber über ihrer 1
. Durch Verbinden von Pin 9 mit Pin 10 kann die Spannung auf 0,7 gezogen werden, was niedrig genug ist, um den Slaves ein Signal zu geben. YMMVIch habe vor einiger Zeit ein Drahtprotokoll implementiert, indem ich das 1-Draht-Protokoll mit einem GPIO-Pin gebissen habe. Ich kann mich nicht an den genauen Wert des verwendeten Widerstands erinnern, aber er verwendet einen Widerstand, wahrscheinlich 4,7 kΩ, um die Spannung auf 5 V hochzuziehen, da der Bus mit parasitärer Leistung arbeitet. Alle Slave-Geräte arbeiten mit parasitärer Leistung, die vom 1-Draht-Bus bezogen wird wenn sie es brauchen. Wenn Sie den Widerstand nicht verwenden, wäre der Bus logisch niedrig. Selbst wenn Sie einen falschen Wert des Widerstands verwenden, kann mit nur einer 5-V-Stromversorgung, die Sie von der Platine verwenden, nichts passieren. Das einzige Ergebnis scheint, dass der Bus an wäre ein niedrigerer Pegel als 5 V, was für den Master oder einen Slave wahrscheinlich nicht ausreicht, um zu interpretieren, dass der Bus im Leerlauf ist. Ein 5-V-Pegel auf dem Bus bedeutet, dass der Bus im Leerlauf ist. Die Pins der MCU befinden sich im Open-Drain-Modus, weshalb Sie einen Pull-up-Widerstand benötigen, um den Bus immer auf 5 V zu halten, außer wenn die MCU oder ein Slave den Bus steuert. Lesen Sie mehr über Open-Drain- und Push-Pull-Modi von GPIO-Pins Ihrer MCU.
Jippie