Forum: Mikrocontroller und Digitale Elektronik Arduino ESP32 delayMicroseconds für Manchester Signal


von Stefan S. (energizer)


Angehängte Dateien:

Lesenswert?

Hallo,

ich versuche mit einem ESP32 C3 ein Manchester-codiertes Datenpaket zu 
senden. Bitrate ist 1000 bit/s, ein Datenpaket hat 34 Bits (1 Startbit, 
32 Datenbits, 1 Stopbit). Dazu schalte ich den TX Pin in einer Schleife 
entsprechend:
1
void sendBit(bool val) {
2
    digitalWrite(1, val);
3
    delayMicroseconds(500);
4
    digitalWrite(1, !val);
5
    delayMicroseconds(500);
6
}

Die Funktion delayMicroseconds aus esp32-hal-misc.c scheint aber 
insbesonders bei stärkerer WiFi Auslastung kein stabiles Timing zu 
liefern, siehe Anhang. In der oberen Hälfte ist alles in Ordnung, unten 
sind einige Bitzeiten zu lang, so dass das Datenframe ungültig wird. 
Kennt jemand eine zuverlässige andere Möglichkeit die Daten sauber zu 
senden?

Schöne Grüße
Stefan

von Fritz G. (fritz65)


Lesenswert?

Da hauen vermutlich immer wieder Interrupts dazwischen und bringen das 
Timing durcheinander. Ich würde es mal mit SPI probieren: 1 Manchester- 
bit entspricht 2SPI bits, 01 bzw 10.

von J. S. (jojos)


Lesenswert?

Oder mit dem RMT Device, das wird auch für die WS28xx LED in FastLED 
verwendet.

von Stefan S. (energizer)


Lesenswert?

Das rmt sieht vielversprechend aus, Danke für den Tip, werde ich testen. 
Ich habe inzwischen auch mal Versuche mit einem Timerinterrupt gemacht, 
das scheint auch zu klappen.

Schöne Grüße
Stefan

von Motopick (motopick)


Lesenswert?

Stefan S. schrieb:
> Hallo,
>
> ich versuche mit einem ESP32 C3 ein Manchester-codiertes Datenpaket zu
> senden. Bitrate ist 1000 bit/s, ein Datenpaket hat 34 Bits (1 Startbit,
> 32 Datenbits, 1 Stopbit).

Ein Manchestercode braucht kein Start- oder Stopbit. Das Bittiming kann
aus dem letzten Taktwechsel abgeleitet werden.
Ueblich ist hingegen eine "Praeambel", die denn Beginn eines Datenblocks
anzeigt und auch Auskunft ueber die generelle Phasenlage des Signals 
gibt.

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.