Manchester code (phase encoding) library.

Dependents:   Manchester_Transmitter Manchester_Receiver

Manchester code (phase encoding) library

It implements Manchester code according to both IEEE 802.3 and G.E. Thomas' conventions.

  • A '0' is expressed by a high-to-low transition, a '1' by low-to-high transition in the IEEE 802.3 convention. The reverse is true in the G.E. Thomas' convention.
  • The transitions which signify '0' or '1' occur at the midpoint of a period.
  • Transitions at the start of a period are overhead and don't signify data.
  • Least significant bit is sent first
  • There are synchronization pulses (the number can be set) at the begin of transmission

    Select a convention to be used by commenting or uncommenting the line below in the Manchester.h header file.

Manchester.h

#define G_E_THOMAS 1

The IEEE 802.3 convention is used by default.

A Manchester encoded message (using G.E. Thomas' convention), with one sync pulse in the preamble, carrying four bytes:

/media/uploads/hudakz/manchester01.png

ACKNOWLEDGEMENT: The code in this library was based on this article published by Robert Guastella.

Import programManchester_Transmitter

Manchester transmitter demo.


Import programManchester_Receiver

Manchester receiver demo.

NOTE: To perform a simple test (without radio modules) connect the txPin on transmitter board to the rxPin on the receiver board and make sure that grounds are also connected one another.

Revision:
6:7454ad91f714
Parent:
5:3b2c7e9fda3f
Child:
7:afd0ee36dcd1
--- a/Manchester.cpp	Sun May 21 19:17:28 2017 +0000
+++ b/Manchester.cpp	Mon May 22 09:35:26 2017 +0000
@@ -3,7 +3,7 @@
  * @file    Manchester.cpp
  * @author  Zoltan Hudak
  * @version
- * @date    16-May-2017
+ * @date    2017-May-16
  * @brief   Manchester code for mbed
  ******************************************************************************
  * @attention
@@ -28,10 +28,10 @@
 
 /*
    This library implements Manchester code according to both IEEE 802.3 
-   and G.E. Thomas' convention. 
+   and G.E. Thomas' conventions. 
    • A '0' is expressed by a high-to-low transition, a '1' by low-to-high transition 
      in the IEEE 802.3 convention. The reverse is true in the G.E. Thomas' convention.
-   • The transitions which signify 0 or 1 occur at the midpoint of a period. 
+   • The transitions which signify '0' or '1' occur at the midpoint of a period. 
    • Transitions at the start of a period are overhead and don't signify data. 
    • Least significant bit is sent first 
    • There is one synchronization pulse at the begin of transmission 
@@ -55,10 +55,10 @@
  */
 Manchester::Manchester
     (
-        PinName txPin, 
-        PinName rxPin, 
-        uint32_t speed, /* = 1200 bps */ 
-        uint8_t tol     /* = (+/-)25% */ 
+        PinName     txPin, 
+        PinName     rxPin, 
+        uint32_t    speed, /* = 1200 bps */ 
+        uint8_t     tol    /* = (+/-)25% */ 
     ) : 
     _tx(txPin), 
     _rx(rxPin) {
@@ -83,19 +83,18 @@
  * @retval
  */
 void Manchester::transmit(ManchesterMsg& msg) {
-    bool    txComplete;
+    bool    txFinished;
 
     _data = msg.data;
     _len = msg.len;
     _state = SYNCH_START;
     _txTicker.attach_us(callback(this, &Manchester::transmission), _midBitTime);
 
-    do
-    {
+    do {
         core_util_critical_section_enter();
-        txComplete = (_state == IDLE);
+        txFinished = (_state == IDLE);
         core_util_critical_section_exit();
-    } while(!txComplete);
+    } while(!txFinished);
 
     _txTicker.detach();
 }
@@ -206,7 +205,6 @@
  */
 bool Manchester::receive(ManchesterMsg& msg) {
     bool        rxFinished;
-    uint32_t    now = us_ticker_read();
 
     _data = msg.data;
     _maxLen = msg.maxLen();
@@ -216,8 +214,7 @@
     _rx.enable_irq();
     core_util_critical_section_exit();
 
-    do
-    {
+    do {
         core_util_critical_section_enter();
         rxFinished = ((_state == IDLE) || (_state == ERROR));
         core_util_critical_section_exit();
@@ -337,3 +334,4 @@
         _state = ERROR; // Incomplete transmission
 }
 
+