How to use rotary encoders

แชร์
ฝัง
  • เผยแพร่เมื่อ 5 พ.ค. 2024
  • Electronic knobs are everywhere, and today we will learn how they work and how you can use them with a microcontroller. We will even build our own rotary encoder at home. Thanks for watching, and let me know in the comments if you have any questions!
    Companion article: www.friendlywire.com/tutorials...
    If you enjoy these videos, consider supporting FriendlyWire on Patreon:
    / friendlywire
    Email list: www.friendlywire.com/email
    Website: www.friendlywire.com
    Twitter: / friendlywire
    Reddit: / friendlywire
    Facebook: / friendlywire
    Instagram: / friendlywire
    Timestamps:
    00:00 Introduction
    00:47 How do rotary encoders work, and what is Gray code?
    02:57 Inside a rotary encoder
    04:22 Homemade rotary encoder
    04:58 Idea for schematic
    05:34 What you need to build this circuit yourself
    05:59 Final schematic
    06:43 Construction on the breadboard
    08:25 Writing the program for the PIC16F1455
    08:49 Writing the program: main ideas
    12:39 Flashing the .hex-file onto the PIC16F1455
    13:39 Using the homemade rotary encoder
    13:52 Final thoughts

ความคิดเห็น • 101

  • @0mdshuvo0
    @0mdshuvo0 5 หลายเดือนก่อน +15

    This channel deserves wayyyy more subscribers

    • @FriendlyWire
      @FriendlyWire  5 หลายเดือนก่อน +1

      Thank you for your kind words, I am so glad you like the videos! :)

    • @kalvo-no7oq
      @kalvo-no7oq 5 หลายเดือนก่อน +2

      Yes this channel really deserves so more subscribers ❤🎉

    • @FriendlyWire
      @FriendlyWire  5 หลายเดือนก่อน

      @@kalvo-no7oq Thank you, too :)

  • @orides5976
    @orides5976 9 หลายเดือนก่อน +3

    Thank you for using PICs! I´m not feeling so alone anymore! 🙂

    • @FriendlyWire
      @FriendlyWire  9 หลายเดือนก่อน +1

      Ha, I'm glad you like them, too :) Which ones do you use?

    • @orides5976
      @orides5976 9 หลายเดือนก่อน +1

      @@FriendlyWire Currently i have been using the 16F1829 and 16F1824.

    • @FriendlyWire
      @FriendlyWire  9 หลายเดือนก่อน +1

      @@orides5976 I see! Any particular reason you like these chips? I quite like the PIC16F1455/59 because of their nice peripherals (as well as the internal 48MHz clock).

  • @sebastienvaillancourt9399
    @sebastienvaillancourt9399 หลายเดือนก่อน +3

    I love your demonstrations, they are very helpful for understanding!

    • @FriendlyWire
      @FriendlyWire  หลายเดือนก่อน

      Thank you so much, Sebastien, much appreciated :)

  • @ihadadream-itsgonenow
    @ihadadream-itsgonenow วันที่ผ่านมา +1

    1st electronic "article" I looked at in 18 years. Immediately I new I was listening to a good lecturer. Thanks ! Well done.
    What I was looking for is a digital readout 0 to 360 degrees. The knob had to be attached to a pointer on a compass rose. I guess one needs to add BCD for 3.5 segment display. Can that pic do it ?

    • @FriendlyWire
      @FriendlyWire  วันที่ผ่านมา

      Thank you, I am glad you liked the video! If you want to resolve the position in an absolute way then you need an "absolute" rotary encoder. These have more outputs than just A and B, of course, because they need to resolve the whole angular span.
      But I am not sure if that is always necessary: if you don't need the full 360 degrees, you could also use a potentiometer and measure the voltage at the wiper with a good analog-to-digital converter. Alternatively, you could use a gear with a 2:1 reduction to map 360 degrees to 180 degrees on the potentiometer.
      What is your target resolution for this project?

  • @mirkogiglioli1682
    @mirkogiglioli1682 หลายเดือนก่อน +1

    Clever management of unexpected A&B status. As always, smart filters are the success key. Thanks

    • @FriendlyWire
      @FriendlyWire  หลายเดือนก่อน

      I would love to claim that I came up with the algorithm, but I did some research and found the one I presented in the video online :)

  • @audiofreq
    @audiofreq 7 หลายเดือนก่อน +1

    This was very helpful and I’ve learned a lot. Thank you!

    • @FriendlyWire
      @FriendlyWire  7 หลายเดือนก่อน

      Thank you so much, I am glad you liked the video!

  • @usdigitalencoders
    @usdigitalencoders 6 หลายเดือนก่อน +6

    Great information. Your animations and style is also very fun and entertaining. Keep up the good work!

    • @FriendlyWire
      @FriendlyWire  6 หลายเดือนก่อน +1

      Thank you, glad you liked it! And your user name even has "digital encoders" in it, so it means a lot :)

  • @jerril42
    @jerril42 11 หลายเดือนก่อน +4

    Thanks Jens. That was interesting. I really liked your supersized implementation of the encoder, I think that demonstrated the behaviour better than any I've seen. Take care.

    • @FriendlyWire
      @FriendlyWire  11 หลายเดือนก่อน +1

      Thank you, Jerry, glad you like it! :)

    • @user-vw5vq4oe2f
      @user-vw5vq4oe2f 11 หลายเดือนก่อน +2

      @@FriendlyWire Thank you so much for your hard work! thanks to your videos, I wrote my own library for displaying messages on the LED matrix running MAX7219 and it was your video that helped me in this, it was the most detailed and informative, thanks from Russia

    • @FriendlyWire
      @FriendlyWire  11 หลายเดือนก่อน +1

      @@user-vw5vq4oe2f Fantastic, I am glad you find the video helpful! :)

  • @Adhithya2003
    @Adhithya2003 6 หลายเดือนก่อน +1

    Brilliant video, extremely useful information for my projects❤

    • @FriendlyWire
      @FriendlyWire  6 หลายเดือนก่อน

      Thank you, Adhithya, glad you find the video useful! :)

  • @davitberishvili8062
    @davitberishvili8062 2 หลายเดือนก่อน +1

    This is nice explanation. Thank you for this video

    • @FriendlyWire
      @FriendlyWire  หลายเดือนก่อน +1

      Thank you for your nice comment, I am glad you found the video helpful! :)

  • @maxheadrom3088
    @maxheadrom3088 หลายเดือนก่อน +2

    Beautiful wiring on those breadboards, man!

    • @FriendlyWire
      @FriendlyWire  หลายเดือนก่อน

      Thank you, glad you like it! It's a bit of a puzzle for me for every video to try and make it look neat, and I do enjoy the challenge, but ultimately I hope that it can make the videos more fun and easy to follow :) Have a great weekend!

  • @DigitGarage
    @DigitGarage 10 หลายเดือนก่อน +2

    4:06 Thank You!!!
    A friend of mine has had this trick up their sleeve for a while…
    When I asked about it originally, they said it’s not worth putting the time and effort into.
    I completely forgot about it until now… though It all makes sense, they probably removed that copper spring. Once it’s gone though, the clicky steps can still be desired. THe realization at that point just replacing with a new one is probably the best option because the spring is long gone in the trash 😂

    • @FriendlyWire
      @FriendlyWire  9 หลายเดือนก่อน

      Haha yeah that spring wears out quickly on the cheaper encoders, and there is indeed some residual "bumpiness" that you can feel with the spring removed.

  • @markgreco1962
    @markgreco1962 11 หลายเดือนก่อน +2

    Nice work

    • @FriendlyWire
      @FriendlyWire  11 หลายเดือนก่อน

      Thank you, Mark!

  • @ponsaravanan
    @ponsaravanan 10 หลายเดือนก่อน +1

    Well explained.

    • @FriendlyWire
      @FriendlyWire  9 หลายเดือนก่อน

      Thank you, glad you like the video! Have a great day :)

  • @ivuvu4065
    @ivuvu4065 10 หลายเดือนก่อน +1

    Super cool video! Thanks! :)

    • @FriendlyWire
      @FriendlyWire  10 หลายเดือนก่อน

      Thank you, glad you like it! :)

  • @jintopjoy9406
    @jintopjoy9406 11 หลายเดือนก่อน +1

    Superb bro,explanation very well.❤

    • @FriendlyWire
      @FriendlyWire  11 หลายเดือนก่อน

      Thank you, glad you like it! :)

  • @Sarahbuildsstepsequencers
    @Sarahbuildsstepsequencers 11 หลายเดือนก่อน +2

    Hi Jens(?). I have a question. I’m wondering if you might consider breadboarding some sound projects? But with discreet components; no coding. I’d enjoy seeing other discrete component circuit projects.
    You’re doing a great job. So friendly and professional. You’re quite educated!

    • @FriendlyWire
      @FriendlyWire  11 หลายเดือนก่อน

      Thank you, Sarah, this is a great suggestion. I enjoy projects with discrete components (like the code lock) but they can get rather complex quickly. Do you have a good suggestion for a sound project? I don't know that much about it! (And thank you for your kind words!)

  • @cornjulio4033
    @cornjulio4033 9 หลายเดือนก่อน +1

    Grandioses Video! Hab endlich effektiv und präzise den Background dazu erlernt. Vielen Dank.
    PS: Ich schaue seit 15 Jahren solche Videos und hab noch nie diese "flimmernden" Leitungen gesehen (als Hervorhebung). Dafür müsstest Du eine Medallie bekommen !
    Ich werde dieses Video als "Mahnung" verlinken, sobald ich von jemand anderem ein Video sehe wo z.B. aus einer schwarzen eine dunkelblaue Leitung wird (gleiche dicke, ohne Animation)......

    • @FriendlyWire
      @FriendlyWire  9 หลายเดือนก่อน

      Vielen Dank fuer Deine netten Worte, es freut mich sehr, dass Dir der Stil meiner Videos gefaellt. Es dauert relativ lange, diese Animationen zu zeichnen und dann zu animieren, aber ich glaube, dass es den Inhalt verstaendlicher machen kann. Viele Gruesse aus den USA!

  • @tanjiro3285
    @tanjiro3285 7 หลายเดือนก่อน +1

    neat explaination !!! instantly SUBSCRIBEEED ....
    nowadays more and more companies are switching to ARM based controllers so can u make some vids on stm32 with various sensors

    • @FriendlyWire
      @FriendlyWire  7 หลายเดือนก่อน +1

      Thank you so much, glad you liked the video! I may stick with PIC microcontrollers for a bit more, but I am curious about others, too, so: you never know, I may cover them at some point :)

    • @tanjiro3285
      @tanjiro3285 7 หลายเดือนก่อน +1

      @@FriendlyWire 👍

  • @maxpenfold8699
    @maxpenfold8699 7 หลายเดือนก่อน +2

    Sehr gutes Video

    • @FriendlyWire
      @FriendlyWire  7 หลายเดือนก่อน

      Vielen Dank! :)

  • @mohsenk5985
    @mohsenk5985 4 หลายเดือนก่อน +1

    Merci à vous excellent...

    • @FriendlyWire
      @FriendlyWire  4 หลายเดือนก่อน

      Merci beaucoup! :)

  • @kalvo-no7oq
    @kalvo-no7oq 5 หลายเดือนก่อน +1

    Thanx for this informative video ...
    Please can you make a video on hx710b pressure sensor 😅

    • @FriendlyWire
      @FriendlyWire  5 หลายเดือนก่อน

      Thank you for your feedback, I will look into the sensor you mentioned. :)

  • @jozefsoucik3115
    @jozefsoucik3115 23 วันที่ผ่านมา +1

    10:55 part about decoding direction deserves slower and more repetitions ...because it is the most important part of not understanding principle. But overall great video

    • @FriendlyWire
      @FriendlyWire  18 วันที่ผ่านมา +1

      Thank you for your feedback! :) Yes, it could use more time, I agree with you. Sometimes it's hard to decide for me how much detail to put in the video. For this reason I always write a companion article to each video, which usually has more details. You can check it out here: www.friendlywire.com/tutorials/rotary-encoder/#ch7 Let me know if it makes sense or if you have questions, I am happy to help!

  • @gartmorn
    @gartmorn 5 หลายเดือนก่อน +1

    Great videos! Are you planning any new content? Your explanations are very user friendly! Hope for some new projects soon!

    • @FriendlyWire
      @FriendlyWire  5 หลายเดือนก่อน

      Actually, yes, there is a new video coming net weekend! :) And thank you so much!

  • @maze4045
    @maze4045 6 หลายเดือนก่อน +1

    What Program are you using to create the schematics?

    • @FriendlyWire
      @FriendlyWire  6 หลายเดือนก่อน

      I use Eagle for the schematics, it's free to use, but perhaps not the most user-friendly. I just kind of like the aesthetics :)

  • @zame2476
    @zame2476 หลายเดือนก่อน +1

    Würde sowas auch ohne MCU funktionieren?
    Mittels Decoder IC der so

    • @FriendlyWire
      @FriendlyWire  หลายเดือนก่อน +1

      Ja, das sollte auch funktionieren, ein paar Flip Flops sollten reichen :)

  • @delta-a17
    @delta-a17 4 หลายเดือนก่อน +1

    I don't know what the ISR is used for if this implementation is polling the rotary encoder at rest. Isn't an ISR usually called in response to input?

    • @FriendlyWire
      @FriendlyWire  4 หลายเดือนก่อน

      Good question! Lots of things can trigger the interrupt, in this case it's the overflowing timer. This makes sure it's polled at a consistent rate.

    • @delta-a17
      @delta-a17 4 หลายเดือนก่อน +1

      So the hardware timer hits it's maximum count value 3906 times a second? (I had to look up what an overflowing timer was haha) That must be counting extremely fast! Thanks for the response!@@FriendlyWire

    • @FriendlyWire
      @FriendlyWire  4 หลายเดือนก่อน

      @@delta-a17 Yes, you got it! I can break it down for you in some more detail. The code runs at 4 MHz, but due to the PIC architecture it means it can only process 1 million instructions per second. The timer is 8 bit wide, which means it can count from 0 to 255. If you divide 1,000,000 by 256 you get 3906. This means that an 8 bit timer, when driven at 1MHz, "flows over" around 3906 times per second :)

    • @delta-a17
      @delta-a17 4 หลายเดือนก่อน +1

      That makes perfect sense, thanks!@@FriendlyWire

    • @FriendlyWire
      @FriendlyWire  4 หลายเดือนก่อน +1

      ​@@delta-a17Glad I could help! :)

  • @irgski
    @irgski 4 หลายเดือนก่อน +1

    Does a rotary encoder need to be concerned about switch bounce?

    • @FriendlyWire
      @FriendlyWire  3 หลายเดือนก่อน

      I talk a little bit about it in the video, but the short answer is: no, because it uses Gray code, so the worst that can ever happen during a bounce is that you are "off by 1" but never more than that.

  • @tze-ven
    @tze-ven 5 หลายเดือนก่อน +1

    My advice is not to use MCLR pin as the input for rotary encoder SW. Instead use other free pin. The reason is because when programming the PIC, a high voltage (because you must have disabled LVP to allow MCLR as input) is delivered to MCLR and if you accidentally pressed the SW, it will be shorted to GND and might damage the PICKit3 MCLR output driver.

    • @FriendlyWire
      @FriendlyWire  5 หลายเดือนก่อน

      Good point! The MCLR pin is the only one left with an internal pullup resistor, which is why I used it. Since it's connected to the pushbutton, chances that it's pressed while being programmed are almost zero. But if you want to add external pullups you can use other pins too, of course.

    • @tze-ven
      @tze-ven 5 หลายเดือนก่อน

      ​@@FriendlyWire In that case I suggest putting a 600 Ohms resistor in between the PICKit3's MCLR connection and the rotary encoder's SW. This value is big enough to limit the current (~15mA max) if it is accidentally shorted when programming and is small enough for PIC to detect a low (

  • @technixbul
    @technixbul 11 หลายเดือนก่อน +2

    I want to see 24bit shift register contolling 2x22 leds with 2 grids for stereo VU meter, where each grid correspond ti its analog input.

    • @FriendlyWire
      @FriendlyWire  11 หลายเดือนก่อน +1

      I have not used 24bit shift registers, but you could also use 3x8bit registers, like the TLC5916, for which I do have a tutorial on this channel :)

    • @technixbul
      @technixbul 11 หลายเดือนก่อน +1

      @@FriendlyWire Yup i did the same, I used (for testing) 3x CD4094 in daisy chain mode but I'm havng problems with timings on grids, can't fgure it out. If i manually set output bytes they apear proper but when i add the part with analog inputs, everything is flickering and shows garbage. Both parts work separate, when i use ports directly, analog part works perfect, and when the part with shift registers is alone. The problem comes when i have to send AN0 and AN1 variables through shift registers along with GRID positions. I am sure that many people would like to build a device like this. ;)

    • @FriendlyWire
      @FriendlyWire  11 หลายเดือนก่อน +1

      @@technixbulI am not sure why anything would flicker in this way, it shouldn't. Can you send me your code? My email is at the bottom of www.friendlywire.com :)

    • @technixbul
      @technixbul 11 หลายเดือนก่อน +1

      @@FriendlyWire I will, but firstly i need to gather all in one place, the functionality was expanded a lot and need to add comments.

    • @FriendlyWire
      @FriendlyWire  11 หลายเดือนก่อน

      @@technixbul Sounds like a plan! :)

  • @kogstig
    @kogstig 11 หลายเดือนก่อน +3

    Thank you for your videos and work from Russia!

    • @FriendlyWire
      @FriendlyWire  11 หลายเดือนก่อน

      Thank you for your kind words, Konstantin :)

    • @somedudewithakeyboard
      @somedudewithakeyboard 11 หลายเดือนก่อน

      @@FriendlyWire #russiaisaterroriststate BTW, thank them again. They just blew up a big hydroelectric power plant in Ukraine, causing a huge disaster - tens of thousands (!) of people will loose everything, some of them will drown or become MIA.

  • @engineershorts6954
    @engineershorts6954 6 หลายเดือนก่อน +1

    Bro my rotary encoder give at both pin high at once cut time than for next cut time it's low why this please give

    • @FriendlyWire
      @FriendlyWire  6 หลายเดือนก่อน

      That is strange! So the outputs are either 00 or 11? That is definitely not Gray code. Do you have a link to that encoder? I would suspect that it may be broken.

  • @digital_madness-pp8cw
    @digital_madness-pp8cw 11 หลายเดือนก่อน +1

    I send you an email, no reply

    • @FriendlyWire
      @FriendlyWire  11 หลายเดือนก่อน

      I am sorry about that, I must have missed it. When did you send it? Unfortunately I get a lot of spam mail, and your message may have gone unnoticed.

    • @digital_madness-pp8cw
      @digital_madness-pp8cw 11 หลายเดือนก่อน +1

      @@FriendlyWire The title of the message was: "Help /627A"

    • @FriendlyWire
      @FriendlyWire  11 หลายเดือนก่อน +1

      @@digital_madness-pp8cw Saw the message, it was from 2 days ago. To answer your question: yes, you can change the code so that an input value of 0-5V can be sent to the computer via RS232. But writing such a program from scratch takes time. What kind of timing/resolution requirements do you have?

    • @digital_madness-pp8cw
      @digital_madness-pp8cw 11 หลายเดือนก่อน +1

      @@FriendlyWire The higher the resolution, the better. Please send if you have time, i already gave you my email.

    • @FriendlyWire
      @FriendlyWire  11 หลายเดือนก่อน +1

      @@digital_madness-pp8cw I am sorry, but I still don't understand exactly what you need. Can you explain it in more detail? And what kind of resolution do you need, both in voltage and in time? Some numbers would be good! :)

  • @myshticaanimo2169
    @myshticaanimo2169 หลายเดือนก่อน +2

    Nothing have to say❤️🔥 thanks🥲❣️
    Sir you cleared all confusion

    • @FriendlyWire
      @FriendlyWire  หลายเดือนก่อน +1

      Thank you so much, I am glad you liked the video! :)

  • @LabSkaterPussies
    @LabSkaterPussies 2 หลายเดือนก่อน +1

    How do you know how many stops a rotary encoder has? Is this information on the part's data sheet somewhere? Do they come with different numbers of stops?

    • @LabSkaterPussies
      @LabSkaterPussies 2 หลายเดือนก่อน +1

      Never mind its called detents

    • @FriendlyWire
      @FriendlyWire  หลายเดือนก่อน

      Yeah they go by different names, and for cheap ones that don't have datasheets it's a bit of a guess, unfortunately. But commonly the situation with the detents/stops is similar to what is shown in the video.