From 3778b1791838f76764760865da87b2dae795733f Mon Sep 17 00:00:00 2001 From: Peter Hinch Date: Sat, 16 Apr 2022 14:07:50 +0100 Subject: [PATCH] ENCODERS.md: minor fixes. --- encoders/ENCODERS.md | 6 ++++-- encoders/synchroniser.png | Bin 0 -> 26375 bytes 2 files changed, 4 insertions(+), 2 deletions(-) create mode 100644 encoders/synchroniser.png diff --git a/encoders/ENCODERS.md b/encoders/ENCODERS.md index 10f0f9a..d760901 100644 --- a/encoders/ENCODERS.md +++ b/encoders/ENCODERS.md @@ -304,6 +304,8 @@ alternative is to use two d-type flip-flops on each channel, clocked using a signal from the host. Typically this might be produced by a PWM channel running continuously. Clock rate depends on the expected worst-case interrupt latency. -This [Wikipedia image](https://en.wikipedia.org/wiki/Incremental_encoder#/media/File:2FF_synchronizer.gif) -illustrates the idea, along with the metastability problem. +This Wikipedia image illustrates the idea, along with the metastability problem +discussed in [the article](https://en.wikipedia.org/wiki/Incremental_encoder). +![Image](./synchroniser.png) +By Lambtron - Own work, CC BY-SA 4.0, https://commons.wikimedia.org/w/index.php?curid=86059204 diff --git a/encoders/synchroniser.png b/encoders/synchroniser.png new file mode 100644 index 0000000000000000000000000000000000000000..72e576a5129406361e1e1683f3672e5facec48b6 GIT binary patch literal 26375 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