All changes up to now
This commit is contained in:
parent
7a5c425fa8
commit
f1db875521
|
|
@ -30,7 +30,7 @@ Here's an example of the output from the `dshot300` example sketch:
|
||||||
|
|
||||||
## How it Works
|
## How it Works
|
||||||
|
|
||||||
The library is architected around a single C++ class, `DShotRMT`. It abstracts the ESP32's RMT (Remote Control) peripheral, which is a hardware timer peripheral capable of generating and receiving precisely timed signals.
|
The library is architected around a single C++ class, `DShotRMT`. It abstracts the ESP32's RMT (Remote Control) peripheral, which is a hardware timer peripheral capable of generating and receiving precisely timed signals. For a more detailed explanation of the DShot protocol, refer to this excellent article: [DShot and Bidirectional DShot](https://brushlesswhoop.com/dshot-and-bidirectional-dshot/).
|
||||||
|
|
||||||
1. **Signal Generation (TX):** The library uses an RMT 'bytes_encoder'. This encoder is configured with the specific pulse durations for DShot '0' and '1' bits based on the selected speed (e.g., DSHOT300, DSHOT600). When a user calls `sendThrottle()`, the library constructs a 16-bit DShot frame (11-bit throttle, 1-bit telemetry request, 4-bit CRC) and hands it to the RMT encoder. The RMT hardware then autonomously generates the correct electrical signal on the specified GPIO pin.
|
1. **Signal Generation (TX):** The library uses an RMT 'bytes_encoder'. This encoder is configured with the specific pulse durations for DShot '0' and '1' bits based on the selected speed (e.g., DSHOT300, DSHOT600). When a user calls `sendThrottle()`, the library constructs a 16-bit DShot frame (11-bit throttle, 1-bit telemetry request, 4-bit CRC) and hands it to the RMT encoder. The RMT hardware then autonomously generates the correct electrical signal on the specified GPIO pin.
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -1,5 +1,5 @@
|
||||||
name=DShotRMT
|
name=DShotRMT
|
||||||
version=0.9.1
|
version=0.9.2
|
||||||
author=Wastl Kraus <wir-sind-die-matrix.de>
|
author=Wastl Kraus <wir-sind-die-matrix.de>
|
||||||
maintainer=Wastl Kraus <wir-sind-die-matrix.de>
|
maintainer=Wastl Kraus <wir-sind-die-matrix.de>
|
||||||
license=MIT
|
license=MIT
|
||||||
|
|
|
||||||
|
|
@ -401,8 +401,7 @@ dshot_result_t DShotRMT::_sendPacket(const dshot_packet_t &packet)
|
||||||
// The DShot frame is 16 bits, which is 2 bytes
|
// The DShot frame is 16 bits, which is 2 bytes
|
||||||
size_t tx_size_bytes = sizeof(swapped_value);
|
size_t tx_size_bytes = sizeof(swapped_value);
|
||||||
|
|
||||||
rmt_transmit_config_t tx_config = {}; // Initialize all members to zero
|
rmt_transmit_config_t tx_config = { .loop_count = 0 }; // No automatic loops - real-time calculation
|
||||||
tx_config.loop_count = 0; // No automatic loops - real-time calculation
|
|
||||||
|
|
||||||
// In bidirectional mode, the RMT RX channel must be disabled before transmitting.
|
// In bidirectional mode, the RMT RX channel must be disabled before transmitting.
|
||||||
// This is to prevent the receiver from picking up the transmitted signal, which would cause a loopback issue.
|
// This is to prevent the receiver from picking up the transmitted signal, which would cause a loopback issue.
|
||||||
|
|
|
||||||
|
|
@ -18,9 +18,10 @@
|
||||||
#include "dshot_definitions.h"
|
#include "dshot_definitions.h"
|
||||||
#include "dshot_init.h"
|
#include "dshot_init.h"
|
||||||
|
|
||||||
// Forward declaration for the RMT receive callback
|
// DShotRMT Library Version
|
||||||
class DShotRMT;
|
static constexpr uint8_t DSHOTRMT_MAJOR_VERSION = 0;
|
||||||
void IRAM_ATTR rmt_rx_done_callback(rmt_channel_handle_t rx_chan, const rmt_rx_done_event_data_t *edata, void *user_data);
|
static constexpr uint8_t DSHOTRMT_MINOR_VERSION = 9;
|
||||||
|
static constexpr uint8_t DSHOTRMT_PATCH_VERSION = 2;
|
||||||
|
|
||||||
// DShot Protocol Constants
|
// DShot Protocol Constants
|
||||||
static constexpr auto DSHOT_THROTTLE_FAILSAFE = 0;
|
static constexpr auto DSHOT_THROTTLE_FAILSAFE = 0;
|
||||||
|
|
@ -132,3 +133,5 @@ private:
|
||||||
};
|
};
|
||||||
|
|
||||||
#include "dshot_utils.h" // Include for helper functions
|
#include "dshot_utils.h" // Include for helper functions
|
||||||
|
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -10,9 +10,7 @@
|
||||||
|
|
||||||
#include <Arduino.h>
|
#include <Arduino.h>
|
||||||
#include "dshot_definitions.h"
|
#include "dshot_definitions.h"
|
||||||
|
#include "DShotRMT.h"
|
||||||
// Forward declaration of the DShotRMT class to break circular dependency
|
|
||||||
class DShotRMT;
|
|
||||||
|
|
||||||
// Error Messages
|
// Error Messages
|
||||||
static constexpr char NONE[] = "";
|
static constexpr char NONE[] = "";
|
||||||
|
|
@ -137,6 +135,7 @@ inline void printDShotResult(dshot_result_t &result, Stream &output = Serial)
|
||||||
inline void printDShotInfo(const DShotRMT &dshot_rmt, Stream &output = Serial)
|
inline void printDShotInfo(const DShotRMT &dshot_rmt, Stream &output = Serial)
|
||||||
{
|
{
|
||||||
output.println("\n === DShot Signal Info === ");
|
output.println("\n === DShot Signal Info === ");
|
||||||
|
output.printf("Library Version: %d.%d.%d\n", DSHOTRMT_MAJOR_VERSION, DSHOTRMT_MINOR_VERSION, DSHOTRMT_PATCH_VERSION);
|
||||||
output.printf("Current Mode: %s\n", get_dshot_mode_str(dshot_rmt.getMode()));
|
output.printf("Current Mode: %s\n", get_dshot_mode_str(dshot_rmt.getMode()));
|
||||||
output.printf("Bidirectional: %s\n", dshot_rmt.isBidirectional() ? "YES" : "NO");
|
output.printf("Bidirectional: %s\n", dshot_rmt.isBidirectional() ? "YES" : "NO");
|
||||||
output.printf("Current Packet: ");
|
output.printf("Current Packet: ");
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue