Serielle 1-Wire-Kommunikation zu seriellen Standard-RX/TX-Ports in Mikrocontrollern

Ich möchte nur damit beginnen, dass ich relativ neu in der Elektrotechnik im Allgemeinen bin. Wenn ich also absolut zurückgeblieben klinge, haben Sie bitte Geduld mit mir.

Als Teil eines Lernprojekts arbeite ich mit einigen Farbsensoren, insbesondere dem ColorPAL 28380 von Parallax , und ich habe sowohl einen Arduino Uno als auch einen Arduino Mega 2560 herumliegen, um Daten von ihnen abzurufen. Ich habe mit den Besonderheiten für dieses Projekt bei der Arduino SE herumgespieltaber ich nehme an, diese Frage könnte für jeden Mikrocontroller im Allgemeinen gelten. Diese Sensoren verwenden eine als 1-Wire/MicroLAN bekannte Kommunikationsmethode, bei der sie nur einen Pin für Übertragung und Empfang verwenden, abhängig vom Zustand des Pins, an dem sie angebracht sind, neben einigen anderen Besonderheiten. Jetzt habe ich drei davon, und mein Endziel ist es, in der Lage zu sein, wiederholt Daten von allen zum selben Zeitpunkt abzurufen, damit ich die Daten an ein anderes Programm senden kann, das ich schreibe, um einen Algorithmus auszuführen . Das Problem ist, dass das verwendete Beispiel auf einer emulierten seriellen Schnittstelle auf dem Arduino basiert, die nicht gerne mit mehreren Instanzen arbeitet.

Jetzt hat der Mega 2560 drei Sätze für die serielle Kommunikation eingebettet, was perfekt wäre ... nur wenn ich RX und TX von 1-Wire trennen könnte. Ein Benutzer bei Arduino SE schlug vor, einen Transistor zu verwenden, um ihn zu trennen. Nennen Sie mich albern, aber ich habe keine Ersatzteile in der Nähe, also werde ich es bald testen, sobald ich zu einem nahe gelegenen Elektronikgeschäft gehen kann. Bei der Suche im Internet habe ich jedoch gelesen, dass 1-Wires niemals mit nativen seriellen Ports verbunden werden sollten, da sie mit Zuständen arbeiten.

Können 1-Wire-Sensoren zusammenfassend mit nativen seriellen Ports in Mikrocontrollern kommunizieren, wenn ich eine Schaltung zum Aufteilen der Signale herstelle? Und wenn dies möglich ist, was sind die Besonderheiten hinter einer solchen Schaltung?

Antworten (1)

  • Mit etwas Softwareaufwand können Sie alle drei Sensoren über dieselbe Leitung auslesen: 1-Wire-Peripheriegeräte haben eine eindeutige ID.

  • Dallas 1-Wire ist ein spezielles Kommunikationsprotokoll, und die Verwendung von UART-Hardware zur Kommunikation mit einem 1-Wire-Gerät ist, nun, wie die Verwendung einer Kettensäge zum Drehen einer Schraube? Suchen Sie besser nach einer 1-Wire-Bibliothek, die das Protokoll einfach bit-bangt. Es gibt bestimmt viele solcher Bibliotheken, entweder für den Arduino oder für einen bloßen Mega 2560.

  • Wenn Sie die eine (UART) -Leitung wirklich wirklich "aufteilen" möchten, können Sie einen analogen Multiplexer verwenden.

Okay, also ist es irgendwie albern, sie mit dem nativen UART zu fahren. Ich konnte einen einzelnen Sensor mit einer Bibliothek ansteuern, sodass ich diesen Teil verstehen kann. In Bezug auf Ihren ersten Punkt sagen Sie mir also, dass ich die Sensoren einfach alle auf einmal über denselben Draht zurücksetzen, den Pin-Status auf Eingang umschalten und IDs mit Interrupts/unter Verwendung einer Zustandsmaschine durchlaufen kann die Eingänge einzeln lesen können?
Informieren Sie sich über das 1-Wire-Protokoll, es sollte im Datenblatt Ihrer Sensoren erklärt werden. Es gibt Befehle, die auf ein bestimmtes Peripheriegerät abzielen (identifiziert durch seine ID).
Nachdem ich das Datenblatt etwas länger analysiert habe, werde ich versuchen, einige der Befehle direkt dort zu verwenden und mit Ihrem Vorschlag herumzuspielen. Ich werde erweitern, wenn ich etwas anderes finde, aber ich denke, dass der Befehl + nn im Fall des 28380 von Nutzen sein kann, obwohl im Datenblatt etwas anderes angegeben ist. Ich werde auf die Besonderheiten beim Arduino SE eingehen, wenn ich es zum Laufen bekomme.