Serielle Kommunikation über 1 Pin?

Okay Leute, ich stecke hier etwas in der Klemme. Ich habe folgende Schaltung:

Schema

Wie Sie sehen können, ist Pin 3 mein einziger Ausgang. Ich habe dieses Board eigentlich schon drucken lassen, also gibt es nicht viel Raum für Änderungen. Ich lese von einem analogen Drucksensor ab, mache eine A / D-Wandlung und möchte diesen Wert dann an ein Arduino senden. Gibt es eine Möglichkeit, dies nur über Pin 3 zu senden? Wenn das so ist, wie? Wenn nicht, kann mir jemand ein schnelles SPI- oder Bit Bang-Codebeispiel geben? Ich verwende einen PIC12F675.

Bearbeiten: Hier ist ein Link zum Bild in voller Größe.

Warum kann der Drucksensor nicht direkt an das Arduino angeschlossen werden? Würde das Leben leichter machen.
Nun, der Arduino wird einige andere Dinge parallel erledigen, daher war es einfacher, ihn in zwei separate Anwendungen aufzuteilen.
Benötigen Sie eine bidirektionale Kommunikation? Wenn Sie nur Daten in eine Richtung senden müssen, würde das UART-Setup funktionieren
Ja. Ich muss nur Daten von der Sensorplatine an das Arduino senden. Kannst du mir dazu eine Referenz verlinken?
@WillemEllis - Ich frage mich immer noch, warum Sie den Sensor nicht wie von Dean vorgeschlagen an den Arduino anschließen konnten. Das direkte Lesen des Sensors könnte weniger Aufwand erfordern als das Lesen von Daten über den Sensor von irgendeiner Art von Kommunikationsschema. Es könnte vollständig unterbrechungsgesteuert und automatisch ausgelöst werden oder nur ausgelöst werden, wenn Sie einen Messwert benötigen. In jedem Fall ist die Verwendung von UART (TX vom PIC zu RX auf dem Arduino) das Beste, was man sich für eine einfache 1-Draht-Kommunikation vorstellen kann, wie AngelAtLarge in seiner Antwort hervorhebt. Ich weiß nichts über PIC und verwende Arduino nicht, daher kann ich mit dem Code nicht helfen.
Wenn Sie gerne "blind" senden, dann ist asynchrone Serie "einfach". Schlagen Sie nach, was ein UART tut und erwartet. Kann mit Software gesendet werden, solange Sie auf irgendeine Weise Bit-Timing erzeugen können. ODER Sie können den Wert als % High in einer PWM-Wellenform anwenden und diesen ablesen - entweder als digitalen Hi / Low-Eingang am anderen Ende oder auf DC filtern und den DC-Wert lesen. UART gibt so viel Genauigkeit wie nötig. Die analoge Version ist beispielsweise bei 4 Bit einfach und bei 8 Bit ist etwas Arbeit erforderlich, um Genauigkeit zu erzielen.

Antworten (1)

Ich bin keine PIC-Person, aber normalerweise benötigen Sie für den seriellen Standard drei Zeilen:

  • Senden (TX)
  • Empfangen (RX)
  • Masse (GND)

Da Sie RX nicht benötigen, können Sie die Schaltungsmasse und Pin 3 für TX verwenden, wenn Ihr Arduino und Ihr PIC die Baudrate und andere Parameter im Zusammenhang mit der seriellen Kommunikation (Stoppbits, Paritätsbits usw.) vereinbaren. Dies könnte theoretisch eine serielle Standardkommunikation sein, wenn Sie Ihren PIC dazu bringen können.

SPI wird nicht möglich sein, da SPI eine unabhängige Taktleitung benötigt.

Eine andere zu berücksichtigende Sache wäre das Dallas 1-Wire- Protokoll, aber in der Praxis wird es schwieriger zu implementieren sein als entweder echte oder gehackte serielle.

Danke dafür! Ich habe gelesen, dass es möglich ist, seriell zu verwenden. Werde updaten wie es weitergeht
Ich wünschte, ich könnte eine -1 machen, weil ich keine PIC-Person bin, aber das wäre nicht fair, also habe ich stattdessen positiv gestimmt;)
Das ist also eigentlich die Antwort. Ich habe es mit UART Bit Banging gemacht. Meinen Code findest du hier . Es ist ziemlich selbsterklärend. Da ich nur Tx brauchte, brauchte ich nur eine Leitung.