Level Up Your Arduino Code: Registers

Sdílet
Vložit
  • čas přidán 9. 01. 2018
  • Before watching this episode, you’ll want to be familiar with digital logic, which you can read about here: learn.sparkfun.com/tutorials/...
    In this slightly-more-advanced edition of Adventures in Science, we dive into the inner workings of Arduino and microcontrollers. In order to understand how to set up interrupts on microcontrollers, we first need to cover the basics of interacting with registers. We take a simple example--turn an LED on whenever a button is pressed--and rewrite the program to manually read and write to registers on the ATmega328p.
  • Věda a technologie

Komentáře • 185

  • @sparkfun
    @sparkfun  Před 6 lety +20

    The next episode is up! Learn about external interrupts in Arduino: czcams.com/video/J61_PKyWjxU/video.html

  • @jerryocrow1
    @jerryocrow1 Před 5 lety +42

    Your visual props and paper, clear voice and audio, pacing, sequencing, spiriling, and script are SO HELPFUL. You are a really good teacher. Whereever you work, you deserve a raise, promotion, and an assistant. Go get 'em tiger!

  • @S7udio1381
    @S7udio1381 Před 5 lety +31

    This is a great reference. Actually this is the first reference I found is comprehensive enough for me to understand the registers. Great job!

    • @codeman99-dev
      @codeman99-dev Před 4 lety +1

      OOooof. This description is good.
      If you want great instructions, then watch Ben Eater's channel. There he designed an eight bit computer from scratch. He introduces each concept slowly and sometimes will make an intentional "mistake" along the way.

  • @kennycho1682
    @kennycho1682 Před 3 lety +1

    It's amazing to see that what I'm learning in school actually relates to something really fascinating and useful. Well done!

  • @richardsalmon2046
    @richardsalmon2046 Před 6 lety +69

    Awesome video. That was the best explanation I've seen on the matter.

    • @ShawnHymel
      @ShawnHymel Před 6 lety +1

      Thank you! Trying to figure out how to explain registers proved to be quite difficult. Glad to hear it helped!

  • @luwang404
    @luwang404 Před 4 lety +3

    feels like I'm enlightened! expecting more of this kind of videos! really really thankful to you!

  • @gabriellgardin
    @gabriellgardin Před 5 lety +9

    The most wonderful thing I've seen in a long time.

  • @sto2779
    @sto2779 Před 3 lety +2

    It's nice how you saved almost half the flash memory space, that's one nice perk of programming in a lower level language. It's just ridiculous how you did not mention literally that it will run much "faster" than Arduino "overhead". All in all, this is an excellent tutorial with zero confusion and explanation about making use of microcontroller registers using the bitwise operators.

  • @AhmadAsmndr
    @AhmadAsmndr Před 4 lety +1

    one of the most advanced Arduino tut I have ever seen. thank you a lot.

  • @jesusesquibel4181
    @jesusesquibel4181 Před 6 lety +7

    brilliant explanation. I look forward to seeing the follow-up video(s).

  • @mxcollin95
    @mxcollin95 Před 5 lety +2

    Great video!!! Learned a ton from this video! I’ll definitely be downloading and saving this lesson! Thanks for explaining this. 👍

  • @bkriegsman2890
    @bkriegsman2890 Před 6 lety +1

    Nicely done, great example and pretty quick pace.

  • @valerienihsimsion1870
    @valerienihsimsion1870 Před 4 lety +1

    This is the best explanatory bit math lesson i ever followed. Thanks very much Sir.

  • @BorisDessimond
    @BorisDessimond Před 5 lety +5

    GOD. That was so clearly put together. THANKS.

  • @domedom2227
    @domedom2227 Před 6 lety +1

    Awesome Video! Very cool Idea with the Containers to show how to set the bits

  • @jawadtahmeed9854
    @jawadtahmeed9854 Před 5 lety +3

    Long before Arduino came, we MCU programmers had always been doing this. Took quite a while to learn all those bit banging, but it was worth the time spent. Anyway, good tutorial. :)

  • @nderezic
    @nderezic Před 4 lety +2

    This perfectly demonstrates the benefits of more abstract programming languages: they are more readable and less prone to bugs. It also demonstrates benefits of avoiding abstract languages in microcontrollers. Damn! Now I need to rewrite all my code 😉

  • @bascelik91
    @bascelik91 Před 3 lety +2

    This is awesome! Please more tutorials on this topic. If you can,please add some references to books or so, so beginners can catch up on this topic. 👌👌

  • @redboxup
    @redboxup Před 4 lety +5

    very well explained, thank you for putting so much effort!!!

  • @MultsElMesco
    @MultsElMesco Před 5 lety +1

    I finally understood registers. Great video!

  • @rikkardo9359
    @rikkardo9359 Před 4 lety

    I have never ever seen such a positive feedback command section before. It really is an iconic video!

  • @RyanNeufeld
    @RyanNeufeld Před 6 lety +2

    This was fantastic! Thank you. I learned a lot.

  • @randomrandom420
    @randomrandom420 Před 6 lety +2

    That's funny. I'm writing down in my notebook as when I was at school.
    Thanks, professor!

  • @calfee62
    @calfee62 Před 4 lety +1

    Profoundly useful information presented clearly. Thank you!

  • @workethicrecords5901
    @workethicrecords5901 Před 6 lety +2

    Can't wait for part 2!

  • @favesongslist
    @favesongslist Před 4 lety +5

    So good to have machine level programming being taught so well, hopefully this will help understanding of how micros work in reality rather than point and click abstraction it is for most programmers.
    Do you know of a good optimising compiler for Arduino, that can produce this level of optimised coding?

  • @CAXRAMEDIA
    @CAXRAMEDIA Před 3 lety +1

    Useful video. We love it. Thanks SparkFun 🙏

  • @JeremyHongelectronics
    @JeremyHongelectronics Před 6 lety +2

    Excellent video Shawn! Definitely was a good refresher for me. :)

    • @ShawnHymel
      @ShawnHymel Před 6 lety +2

      Most welcome, and glad it helped!

  • @turnerkirk1920
    @turnerkirk1920 Před 4 lety +1

    This is an UNBELIEVABLY AWESOME TUTORIAL!!! thank you thank you thank you thank you!!!

  • @petercorrea
    @petercorrea Před 2 lety

    This is the exact video I’ve been searching for to begin my bare metal journey. I wanna know all the tiny details in every nook and cranny.

  • @buildersmark
    @buildersmark Před 6 lety +2

    Really good tutorial. As I'm new to all of this, it takes a bit to wrap around my head...

    • @beamertech1
      @beamertech1 Před 4 lety

      Builder's Mark newbie here too. I watched and now I’m so confused I’m thinking I need to go back to the basics... wait. Where are the basics?

  • @ColinRichardson
    @ColinRichardson Před 6 lety +3

    Another thing I found amazing, was the SPEED increase from doing multiple digital writes to being able to write multiple pins directly at once (as long as they are on the same port letter). It wasn't just "faster" it was Monumentally faster. When dealing with multiplexing Multiple 7 Segment LEDs, the "off segments went from having a ghost of the previous figures to being very sharp.

    • @ShawnHymel
      @ShawnHymel Před 6 lety +1

      This is true. Manually working with registers saves you clock cycles in addition to program space.

  • @emj-music
    @emj-music Před 2 lety +2

    This is awesome! Thank you for the amazing tutorial.

  • @sathvikswaminathan7933
    @sathvikswaminathan7933 Před 4 lety +4

    @10:40 it is a better practice to manipulate the DDR register value by using the OR logic. For example,
    DDRD = DDRD | B00100000;
    would be a better practice because digital pins 0 and 1 aren't supposed to be meddled with as they're used for serial communication.

  • @ricsanders69
    @ricsanders69 Před 2 lety +1

    Brilliant...nothing against adafruit...but here is the beginning of you not having to depend on another library maker for code! As an an exercise you can look at the low-level libraries that are out there and it would look more like the code in the video...great for learning! :-D

  • @sharingmylittleinsight

    all stuff get simpler with good analogy, thanks a lot sir

  • @TroyFletcherKeyboards
    @TroyFletcherKeyboards Před 4 lety +3

    The 660 page monstrosity is what enthusiasts read and understood before meta languages and corporations made money making things more high level, easier to understand, and also slower and less efficient.
    Now you make videos explaining what a register is.
    Edit: Alright, I was kind of salty. This is a pretty good video that goes into depth and is quite understandable. Have a like.

  • @phoperdox_sore
    @phoperdox_sore Před 6 lety

    Never thought about that, thanks for making this this video!!!

  • @noealves8400
    @noealves8400 Před 6 lety +1

    Awesome video. great work guys.

  • @martingentieu6850
    @martingentieu6850 Před rokem

    As an engineering student, this video was interesting and helpful ! Thank you.

  • @rubikon7648
    @rubikon7648 Před 4 lety +1

    Excellent explanation i had met so far, thank you,

  • @AlexanderBelikov
    @AlexanderBelikov Před 3 lety +1

    If only I could hit Like every time I'm watching this video without dropping my previous one... Thank you!!

  • @sashamuller9743
    @sashamuller9743 Před 4 lety +1

    really good job with all your videos they a treat to watch.

  • @moinshaikh6684
    @moinshaikh6684 Před 3 lety +1

    Excellent tutorial! Thank you sir!

  • @1DR31N
    @1DR31N Před 3 lety +1

    Awesome. A real expert who masters Arduino, and much more for sure.

  • @inferno6012
    @inferno6012 Před 4 lety +4

    this is good like really really good. I NEED MORE

  • @lycankarmah1976
    @lycankarmah1976 Před 4 lety +1

    Very great explanation. Thank you

  • @chibuzordesmond3937
    @chibuzordesmond3937 Před 2 lety

    I watch for two minutes and I try to like only to see I’ve already liked.

  • @SandyNMS
    @SandyNMS Před 4 lety +1

    good at reducing memory usage thanks for the tutorial

  • @chimpspecialist
    @chimpspecialist Před 4 lety

    I can't possibly imagine a better tutorial. Okay, I probably could, but you came pretty darn close!

  • @user-px2nq6rk9i
    @user-px2nq6rk9i Před 6 lety +1

    Thank you !! Thats what i am looking for :)

  • @Electrologia
    @Electrologia Před 2 lety +1

    really great video, thanks a lot!

  • @jude8876
    @jude8876 Před 4 lety +1

    I LOVE THIS, THANK YOU SO MUCH!

  • @embeddedcastle
    @embeddedcastle Před 5 lety +2

    Very nice!
    You don't need to shift to right when reading digital input because any value different to zero is considered as TRUE.

  • @martijnvangorp
    @martijnvangorp Před 4 lety +1

    Very good explanation. Goodjob

  • @AbdulRauf-le1el
    @AbdulRauf-le1el Před 5 lety +1

    excellent lesson.

  • @Abdelhamid_Helal
    @Abdelhamid_Helal Před 4 lety +1

    Great explaination !. but could you explain the analogwrite and analogread funcutions ?

  • @sovatnaphon9384
    @sovatnaphon9384 Před 5 lety +1

    Thank you very much for your episode, but I am still having another trouble while trying to connect two sensor in one raspberry pi board. May you please help, especially changing the address!

  •  Před 4 lety +2

    Thanks for explenation. I have a question: how can we do bitwise operation if the button pin is (let say) pin 12 (PB5), and ledPin is pin 12 (PB4). I mean in digitalRead part. Do we still have to define ledPin as output ? (Because of DDRB =001000, all other pins exept 5, are inputs. )

  • @user-hd2iv8jr6n
    @user-hd2iv8jr6n Před 2 lety +1

    Great video and useful ...

  • @karllaun2427
    @karllaun2427 Před 6 lety +1

    Excellent!

  • @nedvedsimao1253
    @nedvedsimao1253 Před rokem

    very nice video. great work thank you sir

  • @guardiangamer2695
    @guardiangamer2695 Před rokem +1

    It was very nicely done

  • @lucianomaia9460
    @lucianomaia9460 Před 5 měsíci

    amazing content, very well explained

  • @rafaelmarroquin4429
    @rafaelmarroquin4429 Před 6 lety +4

    Really helpfull thnks for share.. best regards

    • @ShawnHymel
      @ShawnHymel Před 6 lety

      Most welcome. Glad it helped!

  • @nurbekhalikulov8867
    @nurbekhalikulov8867 Před 5 lety

    AWESOME! Brilliant!

  • @hirahaisadakeliye
    @hirahaisadakeliye Před 5 lety +2

    Nice video, I had experienced ur course on arduino helped me learn a lot if possible please come with another course on register programming on Udemy thanks for this video

  • @bigbamtv8112
    @bigbamtv8112 Před rokem

    Clear teaching

  • @alexdavidsantiago3955
    @alexdavidsantiago3955 Před 3 lety +1

    The Arduino.h file has the bitRead, bitSet, bitClear, bitToggle, and bitWrite definitions that do all the bit shifting, we just enter the register and the bit

  • @milindmohapatra2745
    @milindmohapatra2745 Před 5 lety +1

    Really helpful video. But I have a doubt. By manipulating registers, how can we generate pwm signals. Basically I am asking for the replacement of the "analogWrite()" function. Thank you for the help.

  • @shafiqalom8408
    @shafiqalom8408 Před 4 lety +1

    Awesome...make video on PWM control and Serial communication in Arduino by using Registers(port manipulation)...Advance Thanks...

  • @gacherumburu9958
    @gacherumburu9958 Před 3 lety

    Thanks for the info..👍

  • @galihtanu
    @galihtanu Před 3 lety

    Bitwise is amazing. 👍

  • @Ghost572
    @Ghost572 Před 3 lety

    Doing it by registers also makes accessing those input pins a lot faster, fairly sure the number I saw was ~56uS for DigitalWrite and using that register method brings it down to 5uS. I will find the name of the video and put it on this comment.

  • @estebanacevedorivillas1799

    I use int sw = PIND & ( 1 > boton; for read a digital port, but if I need Read an analog port witch registers what need to do?

  • @sebastiannicolasgiles3659
    @sebastiannicolasgiles3659 Před 6 lety +99

    title should be: "level down your arduino code"

    • @SantuS021
      @SantuS021 Před 6 lety +11

      With subtitle: "Speed up your code to whole new level"

    • @ShawnHymel
      @ShawnHymel Před 6 lety +1

      LOL that's fantastic. Love it!

    • @sebastiannicolasgiles3659
      @sebastiannicolasgiles3659 Před 6 lety

      you mean "old level" ahaha

    • @galihtanu
      @galihtanu Před 3 lety

      Level up i think ! Because much motlre dificult to trace and understanding.

    • @tybot6224
      @tybot6224 Před 3 lety

      Haha you say old code but the Arduino IDE uses this method for programing the atmega32p board. PinMode() is one of the functions from the arduino IDE. This type of "old code" makes you arduino more efficient and accurate.

  • @taranagnew436
    @taranagnew436 Před 6 lety

    where can i find the pdf for it and can you put the mega register onto a arduino uno?

  • @galihtanu
    @galihtanu Před 3 lety +1

    Please upload more about data register.

  • @TutunSadhukhan
    @TutunSadhukhan Před 3 lety

    fantastic

  • @diehardmetalhead3797
    @diehardmetalhead3797 Před 6 lety +2

    awesome explanation thank you!

  • @robertstrong172
    @robertstrong172 Před 6 lety

    Reminds me of the peek and poke in my old Vic 20

  • @kifahzaidan4505
    @kifahzaidan4505 Před 2 lety

    Hi,
    Thanks a lot, its really greate effort and great knowledge.
    i need to do a project for a preset position linear actuator with a DC motor abd a stepper motor, with Arduino Mega or UNO but i am not able to write the code and the scheme, can you please help.
    Regards

  • @testgearaddicts4607
    @testgearaddicts4607 Před 3 lety

    YT channel 'Joop Brokking' posted this project in 2016. Arduino makes code "human readable", in that it makes sense to beginners. The Arduino IDE is great to get acquainted with embedded, I'm 100% stoked its out there, but to make it to the 'real world project level' you have to manipulate registers without the crazy 'Playground' overhead. If you want to be freed from GitHub, you will have to learn to read the data sheets yourself, and not expect others to do the work for you. Bottom line, an ATMega328 costs less than a buck ($1) and you can get 'Blinky' working for less than 1% of the available space using a better IDE.

  • @TheExvitermini
    @TheExvitermini Před 4 měsíci

    Hello Sir, would it be possible to write a variable (integer for example) to one of the Arduino registers and then reading the register from a PLC using modbus (through RS485 shield)? Or, is it possible to write a variable from Arduino directly into a PLC register using modbus?

  • @taranagnew436
    @taranagnew436 Před 6 lety

    where do you get the arduino base in 8:16?

  • @incxxxx
    @incxxxx Před 4 lety

    What for you wrote >>btn_pin in the first line of the loop at the end of the line:
    int btn= (PIND & (1 btn_pin;
    when we have: const int btn_pin=2 and int btn is already assigned:
    int btn= (PIND & (1

  •  Před 5 lety +1

    Can I write for example 0b10101010 instead of B10101010?

  • @jeffvoight6586
    @jeffvoight6586 Před 5 lety +1

    If you're trying to save space and execution time, just use PORTD = B0010000 & PORTD; Saves two instructions and 3 or 4 clock ticks.

  • @RoyvanLierop
    @RoyvanLierop Před 6 lety

    4m47s
    There are three possible states for a GPIO-pin, not two as told.
    A pin can be digital in, digital out or high impedance.

    • @ShawnHymel
      @ShawnHymel Před 6 lety +1

      You are correct in that I did not mention high impedance mode, so thanks catching that. In AVR, high-Z is accomplished by setting the corresponding bits for DDRx and PORTx to 0, which is the same as setting the pin to input with no pull-up. So, while tri-state does exist for AVR, it's also considered an input mode. See section 1.3 in this excerpt from an AVR Primer book: bit.ly/2r2zZa1

  • @chrisw1462
    @chrisw1462 Před 6 lety +1

    @17:00, you spend a bit of time determining the value of a bit. The AND isolates the bit, but that's as far as you need to go. Since it also ensures every other bit is '0', all you need to do is test for non-zero (usually the second fastest test in a microprocessor). i.e. If The shift you use to test for equal to '1' is unnecessary. "HIGH" and "LOW" are typically macros for non-zero and zero, respectively. If that's how the Arduino library defines them, you woudn't even have to change your If statement.

  • @Korystuwatch42
    @Korystuwatch42 Před 2 lety

    brilliant

  • @jordanmusleh6305
    @jordanmusleh6305 Před 3 lety

    I have a question how can I a 2 robot arm project and a motor vehicle project in one arduino uno is it possible to make it happen..?? I have been working on it for months and no use for it I don’t know if my codes is right or it won’t work ...please help me..!!

  • @shifter65
    @shifter65 Před 5 lety

    What are the little bins usually used for? Or were they made specifically for the purpose of illustrating bits? Can't think of anything that small needing a mini bin.

    • @meepk633
      @meepk633 Před 5 lety

      Pills.

    • @massimookissed1023
      @massimookissed1023 Před 4 lety

      They are often sold as containers for SMD components, although not-removing the components from their tape reel in the first place is a better way of storing them.

  • @mmulisha1022
    @mmulisha1022 Před rokem

    What can be slightly confusing to new users, are when you are using IO pins that are not "inline" with the port Pins. Example IO pins 8 thru 13 are PINB 0 thru 5. So instead of defining the Variable as the IO pin you would want to define them as the PINB pins... So for a button hooked to IO pin 8 you would want variable as such const int bnt_pin = 0; Not const int bnt_pin = 8;

  • @arthasronald2186
    @arthasronald2186 Před 2 lety

    Why the register codes completely doesn't work on my Arduino mega 2560? Is that because of pin issues?

  • @justinindustries2747
    @justinindustries2747 Před měsícem

    Wow, I didn't know you could do this with a arduino! What would be the point of using registers on code when it does the same thing as the normal code? Am I missing something here?

  • @wajdibrahem7617
    @wajdibrahem7617 Před 3 lety

    how can I write in RFM69HCW registers ?

  • @asishreddy7729
    @asishreddy7729 Před 3 lety

    I know this was a wonderful explanation. But I understood nothing. What am I missing and where do I learn it? I don't know how to interpret matter on data sheets and the terminology for starters.

  • @elangblitar369
    @elangblitar369 Před 4 lety

    are the code register worked in esp8266?

  • @sumitthapa001
    @sumitthapa001 Před 4 lety +1

    Can you share the data sheet