Arduino Basics 103: Library, Port Manipulation, Bit Math, Faster PWM/ADC

Поділитися
Вставка
  • Опубліковано 15 кві 2017
  • Support me for more videos: / greatscott
    Previous video: • DIY Soldering Station
    Arduino Basics 101: • Arduino Basics 101: Ha...
    Arduino Basics 102: • Arduino Basics 102: Co...
    Facebook: / greatscottlab
    Twitter: / greatscottlab
    You can get Arduino boards here (affiliate links):
    Aliexpress:
    Arduino Uno: s.click.aliexpress.com/e/_dT2...
    Arduino Nano: s.click.aliexpress.com/e/_dUL...
    Arduino Pro Mini: s.click.aliexpress.com/e/_d62...
    FTDI board: s.click.aliexpress.com/e/_dV4...
    Ebay:
    Arduino Uno: rover.ebay.com/rover/1/711-532...
    Arduino Nano: rover.ebay.com/rover/1/711-532...
    Arduino Pro Mini: rover.ebay.com/rover/1/711-532...
    FTDI board: rover.ebay.com/rover/1/711-532...
    Amazon.de:
    Arduino Uno: amzn.to/2ljDLFL
    Arduino Nano: amzn.to/2ljnq3J
    Arduino Pro Mini: amzn.to/2kMv0ly
    FTDI board: amzn.to/2ljvuRY
    In this third and final epsiode of the Arduino Basics video series I will talk about how to use libraries, how you can use port manipulation to turn a pin on/off faster and how you can modify the registers of the Arduino µC with Bit Math in order to increase the frequency of the PWM Signal or the sampling rate of the ADC.
    Music:
    In the Hall of the Mountain King, Kevin MacLeod
    Killing Time, Kevin MacLeod
    (incompetech.com)
  • Наука та технологія

КОМЕНТАРІ • 413

  • @SireSquish
    @SireSquish 6 років тому +150

    Most arduino tutorials go from basics, like turn off/on a pin, flash a LED etc. and by tutorial 10 you're talking fancy talk like using for loops and so on.
    With Great Scott though, the complexity is exponential. At this rate tutorial 5 will have us manipulating the universal gravity constant through software.

    • @cdurch1
      @cdurch1 3 роки тому +9

      Agreed. He went from 101, to 102, (undergraduate classes) to class 506 (doctorate class). I pride myself in being able to at least follow Great Scott in most of his videos, even if I couldn't necessarily repeat what he said... but in this case, let's just say if he comes out with a 104 class I'm going to pretend i didn't see it! LOL

  • @djtoddles8750
    @djtoddles8750 5 років тому +77

    1:18 "...or a lazy person like me." If this is lazy we're all screwed.

  • @cwill6491
    @cwill6491 5 років тому +91

    Local UA-camr Inincreases his signal frequency to 1MHz using these 2 weird lines. Electricians hate him.
    2:25

  • @robcean
    @robcean 6 років тому +31

    I love the handwriting when you explain!

  • @gautampassi3863
    @gautampassi3863 7 років тому +25

    Thanks for listening to us and continuing the series. :)

  • @UhtredOfBamburgh
    @UhtredOfBamburgh 5 років тому +28

    Once he started playing Xs and Os at 6:00, that was the moment I knew I was destined for a career at Burger King.

    • @jasonking1284
      @jasonking1284 4 роки тому +1

      Well , you got a choice when you include Macdonalds...

  • @rikvdmark
    @rikvdmark 6 років тому +7

    This video series is definitely very useful! I'll be able to do a lot more due to a better understanding. Thanks!

  • @bettorapetto
    @bettorapetto 5 років тому +2

    I really like your videos because they are concise and force you to go deeper to understand the topic.
    Congratulations!

  • @cw41486
    @cw41486 7 років тому +2

    Love this video. Thank you so much for posting and keep them coming. Love watching all your project videos and tutorials. Really helps me come up with ideas for my own personal projects.

  • @Tronex2009
    @Tronex2009 3 роки тому +3

    Although this vid is rather old, I enjoyed watching it. I recently spent a lot of time finding this out on myself and experimenting with it. This knowledge is especially usefull when trying to play 8bit sound samples by utilizing the PWM pins and using the ADC respectively. Because you need to switch on Fast PWM and setup the prescaler correctly, this video is a nice introduction for this scenario. Great, Scott!

  • @danielpiotrowski1681
    @danielpiotrowski1681 7 років тому +1

    I am glad to see more advanced arduino topics. I would love to see more!

  • @dudeskidaddy
    @dudeskidaddy 7 років тому +1

    Inspiring me to go a little deeper into my arduino projects. Thanks!

  • @richardsteen4340
    @richardsteen4340 5 місяців тому

    Definitely like the pace and the details..!! Excellent tutorials..!!

  • @dca24100
    @dca24100 7 років тому

    Thanks for explaining the different registers clearly. I can use this info to improve some of the projects I have done!

  • @BlackDawn
    @BlackDawn 7 років тому +125

    I don't get anything but i still watch

    • @Gamerdu45
      @Gamerdu45 7 років тому +8

      And you feel kinda bad about it dont you. like me.

    • @dieselgeezer18
      @dieselgeezer18 5 років тому +2

      @@Gamerdu45 Me too :(

    • @shetsanjay
      @shetsanjay 4 роки тому

      If you are interested not much will stop you from learning. It is a. fun and useful hobby. So go ahead and get some batteries resistors and LEDs. :)

    • @Mippi12
      @Mippi12 3 роки тому

      @@shetsanjay chill man

    • @Mippi12
      @Mippi12 3 роки тому +1

      @@Gamerdu45 go through datasheet , try to understand it.
      It'll take some time but worth it .
      That is it.

  • @n0t0
    @n0t0 7 років тому

    Thank you Scott! This was very valuable to me - you definitely earned my subscription.

  • @DamaKubu
    @DamaKubu 6 років тому

    Omg I didn't understand a thing back few months but now this is just what I needed. Love ya

  • @AelousFox
    @AelousFox 7 років тому

    Thank you so much Scott! I really need this info for my college assignment

  • @willofirony
    @willofirony 7 років тому +5

    An excellent video. You did cram a lot into 8.22 seconds but it was ALL gold. Other viewers, who found this challenging, might like to view the video again; this time pressing pause at the end of each topic and go back until you have a feel for what Scott is telling you.
    The message to be taken from this presentation is that; while the Arduino IDE/"language" does make things seem a lot simpler, it does so by hiding a lot of code in the background. This is fine for flashing LEDs but a lot of the MCU's awesome power is being hidden from you to. When one comes upon applications that need to control, or interface with, many peripherals, one will find the limitations imposed on you by the IDE, limit the applications one can tackle.
    Well done, Scott, for dipping your toe into the murky world of AVR programming. Be brave, your subscribers will soon realise that it is just new, not "too difficult" and will be so grateful to you for that lesson.

    • @drakoky6894
      @drakoky6894 2 роки тому

      Arduino Is a framework, not an IDE, is different, you can use Arduino framework in many others MCU.

  • @tdtrecordsmusic
    @tdtrecordsmusic 7 років тому

    Yes, we need more of this kind of stuff !!

  • @DerFailer
    @DerFailer 7 років тому

    Thanks I've learned a lot from your video, even after messing around with arduinos for years :)

  • @TurbineResearch
    @TurbineResearch 3 роки тому

    Your handwriting is absolutely amazing

  • @jneirag98
    @jneirag98 7 років тому

    Excellent video! Finally, I can understand the way to change pwm resolution. Thanks you so much!

  • @avejst
    @avejst 7 років тому

    thanks for sharing. Nice to this more geeged way to manipulate the ADC's and PWM output, in a more strait forward way. 👍

  • @salutoitoi
    @salutoitoi 7 років тому +135

    It's interesting how you say that you are lazy and then you explain parts of atmega datasheet.
    Lazy for littles datasheet but ready for Atmega datasheet, like wtf haha :D

    • @UpcycleElectronics
      @UpcycleElectronics 7 років тому +5

      Lazy is a relative term.

    • @UpcycleElectronics
      @UpcycleElectronics 7 років тому +13

      *****
      Who has the patience to read the entire datasheet for less than a 6 figure salary? Would you do it for the wonderful UA-cam comments and around $200 that you get paid over 6 months to a year? ... while working at a full time job?
      Subjecting yourself to YT comments is like working in the customer service industry. You just do your job for a paycheck while a crowd of ignorant imbeciles feels like they have a right to treat you like a verbal punching bag.

    • @UpcycleElectronics
      @UpcycleElectronics 7 років тому +5

      *****​​
      I understand what you mean. When I learned to paint cars it took me forever to wrap my head around estimating time. I finally learned to make an honest assessment of the work, then quadruple it, and I would be right on the money. It's important to learn from both the internal mindset, and for communication with a customer. After being partially disabled, I picked up electronics. Learning those important bits to look for seems quite the challenge without buying a $30k to $50k, 4 year, guided reading program, but I'm probably just slow. I think it takes the right mindset and patience to isolate the necessary details.
      Sometimes it seems 'lazy' is the person unwilling to get up off the couch, other times it's the person that hasn't read the entirety of "The Art of Electronics." We're all wondering along different parts of the path to understanding this stuff.

    • @Northaxe
      @Northaxe 7 років тому

      he probably meant in general

  • @RDarrylR
    @RDarrylR 6 років тому

    Cool! I finally understand the bitwise operations in Arduino code now. Thanks!

  • @marwanahmed317
    @marwanahmed317 7 років тому +371

    holy shit i didn't understand anything

    • @RichardEricCollins
      @RichardEricCollins 7 років тому +5

      There is nothing wrong in that. :) And what is cool you get to have the fun learning what it was he was doing.

    • @Gamerdu45
      @Gamerdu45 7 років тому

      I think about my school if i should quit now and not suffer in other years i study electrotechnics.

    • @iMiilk182
      @iMiilk182 7 років тому +11

      Gamerdu45 if you like to know this stuff, which I presume you do since we are here, don't quit. Electronics seems hard at the beginning but it gets pretty simple once u understand some concepts. I've studied 3 years as eletronical technician (dont know how to name it in english), now heading to second semester in electronic engineering and I was lost too in the first weeks :)

    • @Gamerdu45
      @Gamerdu45 7 років тому

      Thank you i really like this stuff but it is kinda hard for me. But i will try my best.

    • @RichardEricCollins
      @RichardEricCollins 7 років тому +8

      There was a time that I did not know any off it. It takes time to learn but if you keep chipping away you'll get there. I'm no mastermind, just someone who, like you, wanted to learn. Maybe just start with basic logic operators and binary. Once you understand that you'll then will see that all he was doing was flipping some bits on and off.
      Good luck and above all, have fun learning. :) The buzz you get when the penny drops is awesome.

  • @cwgreenley
    @cwgreenley 7 років тому

    Very nicely done!

  • @robertallencad1
    @robertallencad1 5 років тому

    You're super duper smart man I'm going to be really studying your stuff thank you

  • @Tracks777
    @Tracks777 7 років тому +4

    I enjoyed your video :)

  • @aniketakabir1572
    @aniketakabir1572 7 років тому

    awesome as always. Keep up the good content

  • @asadkhan7441
    @asadkhan7441 7 років тому

    And again great job and thanks for the video!

  • @touhvang
    @touhvang 7 років тому +2

    part 4 next week? looking forward to learning everything about Arduino and what I can do with it. great video as always. keep it coming.

  • @electro3976
    @electro3976 7 років тому

    Excellent tutorial as always

  • @tb303wpf1
    @tb303wpf1 Рік тому

    You sir, are the sorcerer supreme. 🧙‍♂️

  • @cr4zypi3t
    @cr4zypi3t 7 років тому

    Really great video again!
    I study Applied Informatics in Germany atm (thats why im already familiar with bitmanipulation etc.) and got my first Arduino when I was 14, but never actually thought increasing the performance through bitmanipulation.
    Man lernt nie aus :)

  • @ConnorWidtfeldt
    @ConnorWidtfeldt 7 років тому

    Your handwriting is phenomenal...

  • @jozef8817
    @jozef8817 7 років тому

    great series keep moving forward

  • @rubikon7648
    @rubikon7648 4 роки тому

    You are great Scott!!

  • @algharyafiable
    @algharyafiable 7 років тому

    Thank you very much for your all video always Learning from you helpful useful
    Thanks

  • @piiumlkj6497
    @piiumlkj6497 5 років тому +1

    Well scott , you're great !

  • @blue_name_warrior
    @blue_name_warrior 5 років тому

    greatscott,油管EE科普界专门负责高三总复习的优秀教师

  • @Maisonier
    @Maisonier 3 роки тому

    Amazing videos !!

  • @Escarii66
    @Escarii66 7 років тому

    Really helpful video, thanks!

  • @MrJason005
    @MrJason005 7 років тому

    That was a good lecture on bit math

  • @aravindrangavel5131
    @aravindrangavel5131 7 років тому +1

    Bit math section was little confusing .Thanks for your effort scott learnt a lot.

    • @brandondaniels9471
      @brandondaniels9471 7 років тому

      Just a little confusing? I had to ice my brain after trying to follow that section.. :-)

  • @viniciusfriasaleite8016
    @viniciusfriasaleite8016 3 роки тому

    What a great video!

  • @RizLazey
    @RizLazey 7 років тому

    ok thanks mr.GreatScott for arduino 103, now i learn much about arduinos ;-)

  • @francescoviscomi4258
    @francescoviscomi4258 3 роки тому

    most useful tutorial ever

  • @vitos1k
    @vitos1k 7 років тому

    This one is very usefull video! Thanks a bunch
    i always wanted to start converting my slow arduino code to fast code via registers

  • @ky-effect2717
    @ky-effect2717 7 років тому

    this is extremely useful Thanks!

  • @greentea5593
    @greentea5593 2 роки тому

    Thanks for a great video

  • @yisussable
    @yisussable 7 років тому

    finally one of his vídeos i do get it completly. just cause i did also read the entire datasheet for a school project 😂

  • @melodeeaaron
    @melodeeaaron 7 років тому

    Very interesting...
    Reminds me of the "Good Old Days" of programming in assembly to speed up subroutines in a C (or BASIC) program. Brought back a lot of old memories. Not all of them good!
    I'd like to see a tutorial on interfacing an Arduino to the Dallas/Maxim 1Wire network.

  • @kulgan96
    @kulgan96 7 років тому

    it sounds really cool it's a lot more complicated but you can do really cool stuff at a lower level.

  • @subclox
    @subclox 7 років тому

    I click the "like" button before view. Because I always like GreatScott!'s videos.

  • @claudiocastillo8235
    @claudiocastillo8235 5 років тому

    un gran vídeo amigo, excelente :)!!!

  • @TrentMurray
    @TrentMurray 7 років тому

    Loving these videos, you have earned a Patreon subscriber!

  • @COCCLASHERZ1
    @COCCLASHERZ1 7 років тому

    Nice Work!

  • @gauravjoshi747
    @gauravjoshi747 7 років тому

    when i learned​ this things in my engineering class i only concentrate just because of my electronics teacher is hot , this time my mind start boiling but great video great Scott

  • @sirmiro2
    @sirmiro2 7 років тому +1

    I love this series! I just hope you can make a dimmer for 220V lighting controlled by a pot or some code. :-P

  • @TheDarknessViper
    @TheDarknessViper 7 років тому

    Thank you very much ! I was using a similar code to that in my multi-level inverter controller
    digitalWrite(outPin, HIGH);
    delayMicroseconds(50);
    but it didn't accept float values , nor variables . I think now i can manipulate your method to make it more accurate

  • @jairogon81
    @jairogon81 6 років тому

    Lazy?!?! I somewhat understood it but I got to practice instead of just watching the video. Your a genius

  • @PeterMedvesek
    @PeterMedvesek 7 років тому +17

    There is two kind of people that watch this video. The ones who want to learn this and, the ones who already know the topic and they just feeling good about that they are able to understand :)

  • @aljazrozic
    @aljazrozic 7 років тому

    great video

  • @thorntontarr2894
    @thorntontarr2894 4 роки тому +2

    It is not surprising that many of those who commented (Marwan Nasr El Din) didn't 'understand anything because 'Great Scott' used an approach that confused rather than clarified how one can manipulate bits in a status register to achieve a goal. Sorry to be so lengthy, hopefully you don't reply TLDR!
    The code to set a 'prescaler' value in 'ADCSRA' was NOT clearly described instead a supposedly 'clever' bit manipulation statement: "byte PS_16 = (1

  • @nomunsheikh1312
    @nomunsheikh1312 5 років тому +7

    Please create a playlists of Arduino tutorial. I love your tutorial. I have completed the basic electronics series. But unable to find Arduino tutorial playlist.
    Thank you.

  • @shahbazkhan-jj7ve
    @shahbazkhan-jj7ve 6 років тому

    relentlessly waiting for ur reply!!!!!!!!

  • @ximos8824
    @ximos8824 7 років тому

    i like your ideas

  • @thangnguyen4207
    @thangnguyen4207 4 роки тому

    i love your projects LoL

  • @softsouls1
    @softsouls1 7 років тому

    you are awesome!

  • @neutrongiron
    @neutrongiron 7 років тому +26

    The "b" in bxxxxxxxx stands for binary I believe.

    • @virkotho5057
      @virkotho5057 7 років тому +8

      quite close, but B0111111 is a #defined value (search for binary.h). A binary value can be written as 0b011111 .

    • @dpneber
      @dpneber 7 років тому +3

      Long story short from above convo. BXXXXXXXX will only work with Arduino IDE. Reason is, the actual syntax of XXXXXXXb isn't supported by all Arduino systems, and you can't use a marco that starts with a number in your #define

    • @bur1t0
      @bur1t0 7 років тому +2

      That's pretty much what I remembered, but on checking (with a compiler), XXXXb is not valid syntax (it is valid MASM/TASM syntax, which I think is where I was remembering it from). 0bXXXX is the correct C syntax for this.
      test.c: In function 'main':
      test.c:5:29: error: invalid suffix "b" on integer constant
      printf("int = %d
      ", (int) 0001b );

    • @cheesecake667
      @cheesecake667 5 років тому +1

      @@virkotho5057 Luckily I new that but I think he should have said it too. Now some people think its the way to write binary numbers

  •  7 років тому +3

    wow! Nice tips, thanks! Now I have to read the 328p datasheet for complementary studying

  • @federicoscozzafava886
    @federicoscozzafava886 7 років тому +1

    It would be nice if you could give some insights on how to write efficient code (in particular interrupts, watchdog timer and low power handling)

  • @whitefields5595
    @whitefields5595 4 роки тому

    Scott. Thanks for doing all this and helping us. It is a bit. Too fast for me though and some of the things you appear to edit out maybe useful after all? It is impossible to get the pace right for everyone, but if you go a bit slower, the bright folk can always increase the speed.

  • @ferdinand5375
    @ferdinand5375 4 роки тому

    I like to call you "King of Arduino".

  • @Alpatecx
    @Alpatecx 6 років тому

    Arduino is awesome!!!

  • @calyodelphi124
    @calyodelphi124 7 років тому

    I'm definitely going to have to rewatch this a few times over to take notes because all of this is a bit over my head. @~@

  • @harysantos
    @harysantos 4 роки тому

    and if you incorporate the goto loop; at the end it will short the off phase as the rising and get faster frequency

  • @iqbalnurfadhillah9455
    @iqbalnurfadhillah9455 7 років тому

    i think you're advanced in arduino..nice info

  • @TheS1l3ntOne
    @TheS1l3ntOne 6 років тому

    It's very very good

  • @avinashbharti505
    @avinashbharti505 4 роки тому

    i am fan of your videos, do you wanna know why ? because its GREAT. Scott.

  • @mnx4me
    @mnx4me 7 років тому

    Thank you

  • @lslakhvirsingh1984
    @lslakhvirsingh1984 6 років тому

    It's interesting video.

  • @MCsCreations
    @MCsCreations 7 років тому

    Really nice. :)

  • @Remy561
    @Remy561 7 років тому

    Great guide, but as I study Embedded Systems I totally get that people never having used bit math or bit masking have no clue what the video is about. I'd definitely like to see if there is even more in depth stuff to learn!

  • @saulobernal3161
    @saulobernal3161 5 років тому

    You do have a EEPROM video tutorial? Your videos are very useful! Thank you so much!

  • @ernievirata2551
    @ernievirata2551 5 років тому

    Great ....interesting

  • @reyhaneheskandari837
    @reyhaneheskandari837 6 років тому +1

    thanks for the video. i am a beginner. i have a question; can we exactly choose the PWM signal frequency in arduino? I am trying to drive a MOSFET in a converter which is controlled by switching frequency not duty cycle so the frequncy of the PWM is important for me. I appreciate you help :)

  • @rkrakib9563
    @rkrakib9563 7 років тому

    thank u sir.

  • @williefleete
    @williefleete 7 років тому

    This will be handy for setting unused pins on a mega2560 to non floating/input with pull up. without a whole bunch of digital write or pin mode commands

  • @JoaoSilva-jr9ez
    @JoaoSilva-jr9ez 7 років тому +5

    If you talk about PORTxn registers, why not explaining PINxn an DDRxn too?
    Also, you can explain the T/C settings/functions/registers a little deeper. Like how to use Output Compare(s) and setup timer ISRs, etc...

  • @greatdaddy4710
    @greatdaddy4710 5 років тому

    GREATSCOTT! YOU SHOULD DEFINITELY MAKE A VIDEO EXPLAINING HOW TO BUILD A CIRCUIT, CODE, APP AND ZERO CROSSING CIRCUIT WHICH CAN CONTROL AT LEAST 5 AC LIGHT BULBS AND BE ABLE TO NOT ONLY TURN THEM ON/OFF BUT DIM EACH ONE OF THEM SEPARATELY VIA BLUETOOTH HC-06 AND ANDROID APP. THAT WILL BE A CHALLENGE!!!

  • @agustinarturoreynososantos1514
    @agustinarturoreynososantos1514 6 років тому

    Hello, do you have a video on the basic usage of that oled display?

  • @macro312
    @macro312 7 років тому

    Question on the last advance example, was all that bit math used to change the sampling rate? What was the need to keep the bits with X's? (Or was the first 6 bytes toggled for something else?)

  • @linearburn8838
    @linearburn8838 7 років тому

    Is there a way to map a digital signal with arduino for instance I want to emulate a NZXT hue+ so what i have in mind is hook a adrino up inline with the hue+ read the digital output for the hue+ led controler and then use the recorded singnal to controle the led's.

  • @DanniieLTorres
    @DanniieLTorres 7 років тому

    Am i able to extend the range of a NodeMcu ESP8266 with a uhf antenna socket, to use a bigger and more powerful antenna?
    Thanks!

  • @makeit525
    @makeit525 7 років тому

    I very like u great scott!

  • @Explore-Gobal
    @Explore-Gobal 3 роки тому

    My project requires 16 or more leds, for a runway chaser sequence with a very small footprint. I'm trying to simulate runway lights on a small aircraft carrier. Maybe three or four leds, the first one at 100%, second at 75%, third @ 50%, and fourth @25% chasing from left to right in a repeating pattern. As soon as the four leds reach midpoint in the travel direction, another set of four leds follows from the start position, so you will have two sets chasing from left to right, and so on. When the first set reaches the end, it starts over again from the beginning, same with the second set. I have looked all over the web and have had nothing that fits all the criteria. Doing it on an UNO will not work as there just isn't enough room in the model for the large board. 555 timers with a shift register won't work as most don't have a way to make the fading effect. Can you help me with a solution? Thank you.

  • @codingwithalfred
    @codingwithalfred 3 роки тому

    So smart :)