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 theManchester.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:
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.
Diff: Manchester.cpp
- Revision:
- 3:03109c995123
- Parent:
- 2:de778df5892c
- Child:
- 4:f2c392191c74
--- a/Manchester.cpp Wed May 17 21:02:49 2017 +0000 +++ b/Manchester.cpp Thu May 18 10:20:55 2017 +0000 @@ -34,11 +34,17 @@ * @param txPin Pin name of transmitter line * rxPin Pin name of receiver line * speed Communication bit rate in bits per second - * tol Pulse width tolerance in % + * tol Pulse width tolerance in % * @retval */ -Manchester::Manchester(PinName txPin, PinName rxPin, uint32_t speed /* = 1200 bps */, uint8_t tol /* = 20% */ ) : - _tx(txPin), +Manchester::Manchester + ( + PinName txPin, + PinName rxPin, + uint32_t speed /* = 1200 bps */, + uint8_t tol /* = 20% */ + ) : + _tx(txPin), _rx(rxPin) { _state = IDLE; _midBitTime = 1000000 / speed / 2; // mid-bit time [us] @@ -75,7 +81,7 @@ /** * @brief ISR handling transmission - * @note Called by the rxTicker + * @note Called by _txTicker * @param * @retval */ @@ -216,7 +222,7 @@ if(_rx == 0) _state = SYNCH_START; else - _state = ERROR; + _state = ERROR; // It isn't a synch pulse => error break; case SYNCH_START: @@ -263,7 +269,7 @@ /** * @brief ISR handling 'receive timeout' - * @note Called when receiver line rxPin is idle longer than limit. + * @note Called when receiver line is idle longer than limit. * Signals 'end of transmission' by setting state to IDLE * or 'timeout error' by setting state to ERROR. * @param None