Fantastic. It was very good to see just enough detail so that it wasn't overloading my brain. The timing wave diagrams made everything so clear especially the modes. Thank you.
Nice Demo of the programming side. A few notes though: 1.) The AVR hardware SPI "SS" pin is used to turn the AVR into a slave device on a bus. Use any other available I/O pin for Selecting peripheral hardware on the SPI bus. 2.) While I haven't played with the DS3234, I have been goofing around with the DS3231 as I have found them for a good bit cheaper. These RTC's are the best because they are temperature compensated. IIRC There is a small heating element inside the IC that keeps the temperature a few degrees above ambient. The cool part about this is that there is a temperature sensor built into the chip. This temperature sensor reading is available too! There are several different libraries available on the Arduino IDE Lib-Manager that make the temp reading available. I forget which one I used to get the temperature reading working, and I'm not in my main comp ATM, but it does work using one of them. 3.) Temperature compensation makes these RTC's much better than the cheaper DS1302 (which was only designed for charging NiCd batteries with a cheap timer), or the DS1307. These other chips are extremely common with Ardy1 tutorials, but they are really bad at keeping time long term. 4.) Anyone found a better deal on DS3231's or similar than $0.90 each (AliEx) for breakout boards in single/low quantities? I'm more interested in the chip itself instead of BO's but ATM it's cheaper for me to use a BO. -Jake PS On the off chance that Jeremy actually reads this. If you recall from your English classes, "Read" is one of the unusual words in English. Read in the present tense is pronounced like reed, but in the past tense is pronounced "red." It really doesn't matter. I couldn't care less if you change, but if I were on the other side of this, I would want to know ;)
You have made the things I did not understand much clearer and I now do understand more than I ever have before. You are GREAT ! Thank you so much. I am looking forward to seeing more of your hard work. Also, I will be ordering some PCB's from your link.
0:25 dry skin, you should use moisturizing cream... Other than that, great video, as always ! You can also use SPI communication with 8bits shift registers like the 74HC595, that way you can extend the number of output pins if necessary
Great. Description on SPI! I have a number of projects that need SPI but I have been putting off. With this amount of detail I can finally try my hand at this useful protocol. Thanks for another great video! I always look forward to your next. ☑️😋
I'm starting to think GreatScott! can read my mind. I was just searching how to use a SPI Display for my RaspberryPI and he does a video about it. Although he doesn't talk about a SPI Display it helped me to connect the Display anyway. Thank you!
The limitation of SPI is not the Chip select per module. It's the clock accepted by the slaves. That is what limits Clock speed. If you have multiple modules and one accepts say 10MHz and another only 100KHz --- you're stuck at 100KHz for all modules attached to that bus. There are many things missing from this video since it is very focused on the specific slave module in question. SPI also is made of 6 signals: MOSI -Master Out Slave in (master output) MISO - Master in slave out (slave module output master input) CLK - bus Clock. CS - Chip select, one per module attached to the master SPI. DC - Data/Command ---tells the slave module if theMaster is sending data or commands RST - Reset ... resets the slave module. In the limit one may be able to work with only 3 signals on the bus, MOSI or MISO, CLK, and DC, maybe even 2. For example there are simple displays modules that only receive data that only use MOSI and CLK. But the actual bus is made of those 6 signals.
You can get around the slave select limitation by using a decoder or a serial to parallel IC (coincidentally the serial to parallel can be communicated with using SPI).
Watching this makes me feel alot better knowing that people can learn more about serial protocols and have a easier time working with them (if the setup doesn't screw up, if working in ASM or C). Learnt myself a few new things, even if i used SPI before several times (never bothered looking up the concept of modes, since its faster for me to look up the datasheet and see the edge triggering and clock polarity setup of the ics). Keep en coming, GreatScott! Mind if you try handling RS-232 (basically UART with specific voltage levels acting as a COM port) and CAN bus (popular automobile bus system) basics in future videos?
Few notes here: You only need the SS/CS if you're actually using multiple SPI devices, otherwise you can just tie it to ground. Second, while you need more wires the connections are a lot simpler because you don't need to worry about nasty pull-ups. Thirdly, the SS can be both a con and a pro; just consider the case of two I2C devices using the same non-changeable address, you'd need a I2C multiplexer then. Fourthly the addressing in I2C poses a huge overhead and of course I2C is also only half duplex while SPI is full-duplex. There're a lots of things to like... NB: Standard fast-mode I2C operates at 400kHz...
It's been awhile since I was exploring a bunch of different LCD options and looking into their protocols, but IIRC I saw one or two that used chip select for an edge trigger for something. It was probably some other form of Serial communication and not actually SPI. At the time I was just trying to understand all the different options on an OSHW project....so I'm still pretty clueless. I just recall making a mental note that I still need to check a datasheet before assuming I can ground a Slave Select pin... Could be wrong tho ;) -Jake
Connecting the SS pin to GND is not always possible. Some ICs require the rising edge on the SS input to confirm the data transmission. Without the rising edge, the transmitted commands are simply ignored by the slave. -> Depends on which IC you use.
That, plus some SPI slaves have significantly higher power consumption while selected. On the other hand, at least selecting a slave prevents the MISO line from floating which might also increase power consumption.
You have such a great way of explaining things to sound so damn interesting. Some electronics channels on youtube with just background music and sped up video of someone building something obscure and kind of pointless is like a night and day difference when a GS video comes along! May I suggest you look into more RC stuff? Like SBUS/IBUS protocols and how those protocols manage to have such low latency but most importantly how they talk to the flight controller and maybe prototype some sort of simple 5 channel tx/rx with arduino! OR Maybe I'm just overzealous :D
Protip: You can use a small cheap microcontroller like an attiny85 as a gpio expander to set the cs line on multiple spi devices high or low. Then you can just use i2c to tell the attiny85 which device you want to address and you only need to use your spi pins that you were using anyway and 2 pins for i2c on your main microcontroller to address all your spi devices. It is a little bit slower than using the pins on your main boy for chip select, but if you don't mind a switching latency of about 30 microseconds, then it works awesome.
You sure can, and its the simplest way if you want to do it serially. I2C is actually quite slow, SMBus on the other hand can do the job faster, but is still slower then SPI (I2C=100kHz+addressing overhead, SMBus=400kHz+addressing overhead, SPI=+1MHZ+little overhead). SPI is basically automated shiftregister bitbanging, and can get damn fast if used properly, and its way simpler then I2C and SMBus. But its rather limited and if you use alot of SPI devices (masters and slaves), you will end up with alot of wires, less then with parallel connections, but way more compared to the likes of I2C and SMBus including UART variants (LIN protocol comes to mind). This is from my experience with programming in assembler for atleast 3 MSP430 chips (MSP430G2553, MSP430FR4133, MSP430FR6989). Never look one way, seek out multiple alternatives, then you can find your answer easier.
@@Loundre3 yeah, but for displaying something the i2c speed is enough, you can use more i2c devices before being limited by the speed, (10,12bit adc, temperature sensors etc)
That is true, but Ankit is asking how to create a option for serial communication for the 16x2 LCD display. For that, he needs a IO extention chip (the 74HC595 is one for outputs). For I2C, i suggest using the MCP23008. eu.mouser.com/ProductDetail/Microchip-Technology/MCP23008-E-P?qs=8FMarzwez060sofcCmNWdQ%3d%3d For SPI, the 74HC595 (outputs only) will do fine. Which chip do you suggest for use with that display for him from your point of view with I2C?
@@Loundre3 - The chip on the cheap and popular I2C backpack module is the PCF8574. On my Github you can find the Arduino library I made to reuse that module for other purposes (such as driving the Nokia LCD). For a demo see my channel.
OKAY fine Scott I give in! After years of seeing your videos everywhere I just have to know......please tell me which pens and highlighters you are using, they seem to work so well! :D. Thanks for the good videos man
@3:30; when using pinmode() to set an output the low state is default (all PORTx register power-up defaults are 0, or low). So that chip select line is driven low from the pinmode declaration, then driven high again at spi.begin. You can digitalWrite (cs, HIGH) before a pinmode() to ensure it is never driven low incidentally (or write a 1 directly to the PORTB register). To be fair, this is an omission of the Arduino pinmode() reference page that should note the default state.
GreatScott: *"Of course, you cannot use it for as many slave devices as the I square C protocol due to the limited number of chip select lines"* Me with more 74138 decoder chips than any sane human should have and no regard for compact design: *"I have no such weakness!"*
hey Greatest Scott! , yeah i dont know any other Scott so in my book u r the Greatest Scott . Iam having some trouble with my washing machine ; its a fully automatic (it was ) until the ECU on it got fried . so i put in an arduino to do the confusing and it worked like a charm , thanks to your videos and lot of others..................... BUT me being an unqualified engineer and all decided " Its Working perfectely which means it is too simple it need more things so that something or the other will go WRONG" i should have listened to AvE "Dont fix it if it aint Broke" , i didint . so here iam i upgraded from a 4 relay module to an 8 realy added 2 pumps to dispense the soap and the after wash . i thinkits the power supply that is causing the problem .: previously it would blackout the arduino whan the realy energizied , so i put in 1000uF 6.3V Cap in parallel to the relay module supply . seems to work ; but ima having trouble sometimes . so should i change the PS unit or stick in more caps ? or could it be seomthing else ? BTW how do i isolate the relay module powersupply ? is there something like a small module that can do that ? like an optocoupler that can transfer power ? a module that has all the isolation transformers and stuff built in ?
A decoder/demultiplexer may be used to easily handle 2^N devices with N pins. For example using 74HC4515 you may handle 16 spi devices with only 4 microcontroller pins.
Very well done on showing the way this com protocol works. I can see a uses for this for fine measurement reading or output logic then sent to an Arduino Nano or other small form factor Arduino that would use I2C to communicate with another Arduino platform.
Nice little project including a nice introduction to SPI! However, please note, that at approx. 5:00, the shown MISO and MOSI signals are "non-typical". They usually change only once for every SCLK period (rising+falling edge), i.e., have (at most) half of the frequency ("NRZ"). You have shown it with going back to 0 after every bit (RZ), which is not as typical SPI implementations work. Disclaimer: It would still work that way, but it is "non-typical", hence my wording above.
Would love if u can add an example how to use it at the other microcontroller, like ESP32 (which I currently need), etc. Overall this video give me a new knowledge about SPI communication. Thankss!! 👍
at 6:15 I think that you’ve incorrectly identified CPOL = 0 and CPHA = 0 as Mode 0. This should be Mode 1. This is verified at 4:28 where the ds states that only Modes 1 & 3 are supported.
I love the way you explain things, I think it would be awesome if you made a video on CAN as well. I know Arduino does not support it but its another one of those things that seems quite widely used and mysteriously enough there is no good videos about it :/ Keep up the good work :)
The main problem with RTC clock (like DS3231) I had was daylight saving time, which causes timezones issue. So if your project is supposed to work less then half of year - then ok, otherwise you have to implement all timezones and calendar stuff...
Fantastic! 😃 Can I make a suggestion? Try some LoRa modules. It's a long range communications module and 2 of the most popular long range rc modules (TBS Crossfire and FrSky R9) are based in its chipset. 😉
Happy new year everyone (I'm posting this new years eve 2019). Are there any maker geeks out there planning to do a "projects we lost in 2018" in memoriam video?
As usual very informative. However. Can you cover in greater detail how to control two or more SPI devices on one arduino. Example. 2x OLED displays. 1x RTC. 1x SD Card reader.
You wire CLK, MISO and MOSI to all peripheral devices, and then use separate microcontroller digital outputs as separate chip selects (CS0, CS1...), one for each peripheral's CS input.
Also GS pronounces "math" as "mahth", which almost no English accent does these days -- preferring instead the "a" sound in "bag" or "map". Not a big deal but would be more widely understood easily. Even my relatives who pronounce "master" as "mahstah", say "math" like in "map".
Sometimes it's very difficult for foreign speakers to make certain sounds because they don't have the sound in their language, for example, the English W sound doesn't exist in German Things like where the language does something retarded, for example when a verb's past participle looks identical to the present tense but is pronounced different, is something worth noting, as is anything linguistically strange.
Corn Julio It's possible I've worded it badly. I mean where the present tense "I read" is spelt identically to the past tense "I read", where the verb has an identical spelling in either tense yet is pronounced differently, among other weird things that happens in a language.
Nobody mentioned it in the comments, but I've heard you can daisy-chain SPI devices and keep a single CS line this way. If somebody can remind everyone how it works, that would be awesome!
The only time I've seen that is when (ab)using the SPI interface to drive a series of shift registers. I can't imagine any other scenarios when you would connect multiple SPI slaves to the same CS line (but interested to know if there are any).
Don't take the word "abuse" too literally in this context. It's just that often this does not seem like an intended use. As evidenced by the fact that some uCs require shall we say "creative" config register settings to achieve it.
I read an Appnote from Maxim, which describes the daisy-chain method: www.maximintegrated.com/en/app-notes/index.mvp/id/3947 Yeah, you can read/write from each one individually, provided they expect only one byte read/written.
I only understood a little of that but one day I’m sure it will mean more to me. Just trying to get an SD card to read/write on a TFT that came with zero instructions how to plug in the SD side. I’m glad u ended with a shot of the SD card but wish I could’ve seen how it was attached to the bus and arduino Bc that’s the photo I need.
I bought an SD shield from...can't remember where, mabye amazon. And it can accept full sized or mirco size with an adapter sent along to. Its really simple to get started using an arduino. (I used an arduino mega because of the abundance of dedicated communication pins)
sorry for the late comment, in 3:20 you mentioned that you need for each device a pin... well shouldn't a shift register do the job? of corse you'll have then to program an interface for that, but then instead of using n pin for n device you'll use only 3 pins for n device!
Fantastic. It was very good to see just enough detail so that it wasn't overloading my brain. The timing wave diagrams made everything so clear especially the modes. Thank you.
I learned somthing new about spi
@@parisgr i am thinking the same think wtf !!?
You guys should support the channel - Patreon!
@@parisgr how !?
Nice Demo of the programming side.
A few notes though:
1.) The AVR hardware SPI "SS" pin is used to turn the AVR into a slave device on a bus. Use any other available I/O pin for Selecting peripheral hardware on the SPI bus.
2.) While I haven't played with the DS3234, I have been goofing around with the DS3231 as I have found them for a good bit cheaper. These RTC's are the best because they are temperature compensated. IIRC There is a small heating element inside the IC that keeps the temperature a few degrees above ambient. The cool part about this is that there is a temperature sensor built into the chip. This temperature sensor reading is available too! There are several different libraries available on the Arduino IDE Lib-Manager that make the temp reading available. I forget which one I used to get the temperature reading working, and I'm not in my main comp ATM, but it does work using one of them.
3.) Temperature compensation makes these RTC's much better than the cheaper DS1302 (which was only designed for charging NiCd batteries with a cheap timer), or the DS1307. These other chips are extremely common with Ardy1 tutorials, but they are really bad at keeping time long term.
4.) Anyone found a better deal on DS3231's or similar than $0.90 each (AliEx) for breakout boards in single/low quantities? I'm more interested in the chip itself instead of BO's but ATM it's cheaper for me to use a BO.
-Jake
PS On the off chance that Jeremy actually reads this. If you recall from your English classes, "Read" is one of the unusual words in English. Read in the present tense is pronounced like reed, but in the past tense is pronounced "red." It really doesn't matter. I couldn't care less if you change, but if I were on the other side of this, I would want to know ;)
Great info about the chip and thanks for sharing it.
The 3231 has the calendar, alarm and square wave output, too.
Commonly used on Raspberry Pis
I was intending to let him know about the pronunciation of "read", glad I don't have to :)
thank you so much person
*I could care less
That's incredible, everytime I discover a new thing needed for my project, you got a video about the subject :)
You have made the things I did not understand much clearer and I now do understand more than I ever have before. You are GREAT ! Thank you so much. I am looking forward to seeing more of your hard work. Also, I will be ordering some PCB's from your link.
Nicely done Scott, thank you again for your dedication and time spent to share your knowledges, best wishes from Spain 🇪🇸
Hi
And I don't know though Arduino was difficult already.
I should have studied more in High school 45 years ago.
You are scary smart. Thanks Bob
Really you are doing very good job. You are inspiring many minds to be creative. As always stay creative. Thank you Scott
0:25 dry skin, you should use moisturizing cream...
Other than that, great video, as always !
You can also use SPI communication with 8bits shift registers like the 74HC595, that way you can extend the number of output pins if necessary
Great. Description on SPI! I have a number of projects that need SPI but I have been putting off. With this amount of detail I can finally try my hand at this useful protocol. Thanks for another great video! I always look forward to your next. ☑️😋
I'm starting to think GreatScott! can read my mind. I was just searching how to use a SPI Display for my RaspberryPI and he does a video about it. Although he doesn't talk about a SPI Display it helped me to connect the Display anyway. Thank you!
You're welcome
Super high quality explanation. Clear and concise. I loved the way you presented.
Thanks GreatScott! This video helps me a lot to understand how spi works. As always your videos are awesome...
Thank you for another great video. I learn something new every time I watch one of your videos.
Please never stop making videos
sir in India 5 th sem is celebrated as teachers day.
so happy teachers day.
as u become my greatest learning source .thanks
The limitation of SPI is not the Chip select per module. It's the clock accepted by the slaves. That is what limits Clock speed. If you have multiple modules and one accepts say 10MHz and another only 100KHz --- you're stuck at 100KHz for all modules attached to that bus.
There are many things missing from this video since it is very focused on the specific slave module in question.
SPI also is made of 6 signals:
MOSI -Master Out Slave in (master output)
MISO - Master in slave out (slave module output master input)
CLK - bus Clock.
CS - Chip select, one per module attached to the master SPI.
DC - Data/Command ---tells the slave module if theMaster is sending data or commands
RST - Reset ... resets the slave module.
In the limit one may be able to work with only 3 signals on the bus, MOSI or MISO, CLK, and DC, maybe even 2.
For example there are simple displays modules that only receive data that only use MOSI and CLK.
But the actual bus is made of those 6 signals.
scott loved your video.
you made such a vast topic soo easy.
scott, you're one of my heros, i learned so much from your videos.
Glad you like them
You can get around the slave select limitation by using a decoder or a serial to parallel IC (coincidentally the serial to parallel can be communicated with using SPI).
Efforts in your videos are 10/10. Always worth the 7 day wait.
Also a request. Can you do a DIY or BUY for a solar charge controller?
It is on my to do list
Fun fact: SD cards are SPI devices all by themselves, the SD breakout boards just provide some filtering and logic level conversions.
Gosh I love these videos but it's always the programming that holds me up. More videos on programming please!!
Wow, that was really comprehensive. I’ll definitely use this as a reference!
Excellent video. You just came right in time, as I started playing with SPI devices recently. Thanks to you, all is much clearer now :)
Finally got it on sunday .
Waited for your video every week .
Thanks for watching :-)
You are really great, good voice and subject is clear
Watching this makes me feel alot better knowing that people can learn more about serial protocols and have a easier time working with them (if the setup doesn't screw up, if working in ASM or C). Learnt myself a few new things, even if i used SPI before several times (never bothered looking up the concept of modes, since its faster for me to look up the datasheet and see the edge triggering and clock polarity setup of the ics). Keep en coming, GreatScott!
Mind if you try handling RS-232 (basically UART with specific voltage levels acting as a COM port) and CAN bus (popular automobile bus system) basics in future videos?
Few notes here: You only need the SS/CS if you're actually using multiple SPI devices, otherwise you can just tie it to ground. Second, while you need more wires the connections are a lot simpler because you don't need to worry about nasty pull-ups. Thirdly, the SS can be both a con and a pro; just consider the case of two I2C devices using the same non-changeable address, you'd need a I2C multiplexer then. Fourthly the addressing in I2C poses a huge overhead and of course I2C is also only half duplex while SPI is full-duplex. There're a lots of things to like... NB: Standard fast-mode I2C operates at 400kHz...
It's been awhile since I was exploring a bunch of different LCD options and looking into their protocols, but IIRC I saw one or two that used chip select for an edge trigger for something. It was probably some other form of Serial communication and not actually SPI.
At the time I was just trying to understand all the different options on an OSHW project....so I'm still pretty clueless. I just recall making a mental note that I still need to check a datasheet before assuming I can ground a Slave Select pin... Could be wrong tho ;)
-Jake
Connecting the SS pin to GND is not always possible. Some ICs require the rising edge on the SS input to confirm the data transmission. Without the rising edge, the transmitted commands are simply ignored by the slave.
-> Depends on which IC you use.
That, plus some SPI slaves have significantly higher power consumption while selected. On the other hand, at least selecting a slave prevents the MISO line from floating which might also increase power consumption.
You have such a great way of explaining things to sound so damn interesting. Some electronics channels on youtube with just background music and sped up video of someone building something obscure and kind of pointless is like a night and day difference when a GS video comes along! May I suggest you look into more RC stuff? Like SBUS/IBUS protocols and how those protocols manage to have such low latency but most importantly how they talk to the flight controller and maybe prototype some sort of simple 5 channel tx/rx with arduino! OR Maybe I'm just overzealous :D
Basics !!! This is super hit. I am equipped with writing library for SPI devices...lol....
Protip: You can use a small cheap microcontroller like an attiny85 as a gpio expander to set the cs line on multiple spi devices high or low. Then you can just use i2c to tell the attiny85 which device you want to address and you only need to use your spi pins that you were using anyway and 2 pins for i2c on your main microcontroller to address all your spi devices. It is a little bit slower than using the pins on your main boy for chip select, but if you don't mind a switching latency of about 30 microseconds, then it works awesome.
"the datasheet spoiled the surprise"
I just love your humor!
You can communicate to 16x2 LCD using only three wires by spi shift register ic which is 74h595!
There is no point in using SPI since it's a low speed peripheral, you can use the i2c
You sure can, and its the simplest way if you want to do it serially. I2C is actually quite slow, SMBus on the other hand can do the job faster, but is still slower then SPI (I2C=100kHz+addressing overhead, SMBus=400kHz+addressing overhead, SPI=+1MHZ+little overhead).
SPI is basically automated shiftregister bitbanging, and can get damn fast if used properly, and its way simpler then I2C and SMBus. But its rather limited and if you use alot of SPI devices (masters and slaves), you will end up with alot of wires, less then with parallel connections, but way more compared to the likes of I2C and SMBus including UART variants (LIN protocol comes to mind).
This is from my experience with programming in assembler for atleast 3 MSP430 chips (MSP430G2553, MSP430FR4133, MSP430FR6989). Never look one way, seek out multiple alternatives, then you can find your answer easier.
@@Loundre3 yeah, but for displaying something the i2c speed is enough, you can use more i2c devices before being limited by the speed, (10,12bit adc, temperature sensors etc)
That is true, but Ankit is asking how to create a option for serial communication for the 16x2 LCD display. For that, he needs a IO extention chip (the 74HC595 is one for outputs). For I2C, i suggest using the MCP23008.
eu.mouser.com/ProductDetail/Microchip-Technology/MCP23008-E-P?qs=8FMarzwez060sofcCmNWdQ%3d%3d
For SPI, the 74HC595 (outputs only) will do fine.
Which chip do you suggest for use with that display for him from your point of view with I2C?
@@Loundre3 - The chip on the cheap and popular I2C backpack module is the PCF8574. On my Github you can find the Arduino library I made to reuse that module for other purposes (such as driving the Nokia LCD). For a demo see my channel.
OKAY fine Scott I give in! After years of seeing your videos everywhere I just have to know......please tell me which pens and highlighters you are using, they seem to work so well! :D. Thanks for the good videos man
Stabilo point 88😉
Thank you for the jlcpcb Site. This is just amazing
You're welcome
@3:30; when using pinmode() to set an output the low state is default (all PORTx register power-up defaults are 0, or low). So that chip select line is driven low from the pinmode declaration, then driven high again at spi.begin. You can digitalWrite (cs, HIGH) before a pinmode() to ensure it is never driven low incidentally (or write a 1 directly to the PORTB register). To be fair, this is an omission of the Arduino pinmode() reference page that should note the default state.
GreatScott: *"Of course, you cannot use it for as many slave devices as the I square C protocol due to the limited number of chip select lines"*
Me with more 74138 decoder chips than any sane human should have and no regard for compact design: *"I have no such weakness!"*
One thing i have noticed is Great scott and Electronoobs uploads their videos one after the other on the same day
hey Greatest Scott! , yeah i dont know any other Scott so in my book u r the Greatest Scott .
Iam having some trouble with my washing machine ;
its a fully automatic (it was ) until the ECU on it got fried . so i put in an arduino to do the confusing and it worked like a charm , thanks to your videos and lot of others.....................
BUT me being an unqualified engineer and all decided " Its Working perfectely which means it is too simple it need more things so that something or the other will go WRONG"
i should have listened to AvE "Dont fix it if it aint Broke" , i didint . so here iam
i upgraded from a 4 relay module to an 8 realy
added 2 pumps to dispense the soap and the after wash .
i thinkits the power supply that is causing the problem .: previously it would blackout the arduino whan the realy energizied , so i put in 1000uF 6.3V
Cap in parallel to the relay module supply . seems to work ; but ima having trouble sometimes .
so should i change the PS unit or stick in more caps ?
or could it be seomthing else ?
BTW how do i isolate the relay module powersupply ? is there something like a small module that can do that ? like an optocoupler that can transfer power ?
a module that has all the isolation transformers and stuff built in ?
Quality contents, should be mandatory to view before any other video ;)
A decoder/demultiplexer may be used to easily handle 2^N devices with N pins. For example using 74HC4515 you may handle 16 spi devices with only 4 microcontroller pins.
A decoder/demultiplexer can be used for CS or /CS duties and free up pins on the micro.
Very well done on showing the way this com protocol works. I can see a uses for this for fine measurement reading or output logic then sent to an Arduino Nano or other small form factor Arduino that would use I2C to communicate with another Arduino platform.
Love the detail you when into!! More videos like this please!!! Love your videos !!
Nice little project including a nice introduction to SPI! However, please note, that at approx. 5:00, the shown MISO and MOSI signals are "non-typical". They usually change only once for every SCLK period (rising+falling edge), i.e., have (at most) half of the frequency ("NRZ"). You have shown it with going back to 0 after every bit (RZ), which is not as typical SPI implementations work. Disclaimer: It would still work that way, but it is "non-typical", hence my wording above.
Sure but it is easier to understand that way
IMHO its rather adding another point of confusion, but I don't want to argue. :-) Keep up the good work.
I love these types of videos
1:55 just have to say, great soldering
Great led cube intro, make it bass boost
Awesome....!!! SPI register explanation super....looking forward to see many videos on basics....👍👍
Would love if u can add an example how to use it at the other microcontroller, like ESP32 (which I currently need), etc. Overall this video give me a new knowledge about SPI communication. Thankss!! 👍
4:40 Explanation of different modes of the SPI
Thank you for this one!!
I think you could do a whole series of I2C and SPI examples like a cookbook.
You could use shift registers or a demultiplexer for the chip select.
Yep. See my GitHub for an example of doing just this with shift registers: sembazuru.github.io/SPI-shift-register-CS/
Great video! Thank you for sharing!
at 6:15 I think that you’ve incorrectly identified CPOL = 0 and CPHA = 0 as Mode 0. This should be Mode 1.
This is verified at 4:28 where the ds states that only Modes 1 & 3 are supported.
When selecting a part, always check the interface and what libraries exist. You may decide to use a different part!
I love the way you explain things, I think it would be awesome if you made a video on CAN as well. I know Arduino does not support it but its another one of those things that seems quite widely used and mysteriously enough there is no good videos about it :/ Keep up the good work :)
Great Scott,u r always great!!.What an explanation sirji!!🙇😇
I wait for your video.....every Sunday...
I hope they are worth the wait.
shift register is the magic ic! and then you can use as many cs as you want ;)
Great tutorial, very understandable. Which Oscilloscope are you using?
Cheers great video I'm going back to watch i2c .
Always with the best.
Fantastic video
The main problem with RTC clock (like DS3231) I had was daylight saving time, which causes timezones issue. So if your project is supposed to work less then half of year - then ok, otherwise you have to implement all timezones and calendar stuff...
You should try making a wind turbine btw love your videos
Would have loved it if you showed the frame rate difference between the two interfaces on the same/similar display!
Please do a video on i2c communication and one wire communication
many, probably most SPI devices allow chaining, similar to the way shift registers work. then you don't have to worry about lack of CS pins.
Fantastic! 😃
Can I make a suggestion? Try some LoRa modules. It's a long range communications module and 2 of the most popular long range rc modules (TBS Crossfire and FrSky R9) are based in its chipset. 😉
this video is really helpful....
good presentation
Happy new year everyone (I'm posting this new years eve 2019). Are there any maker geeks out there planning to do a "projects we lost in 2018" in memoriam video?
As usual very informative.
However.
Can you cover in greater detail how to control two or more SPI devices on one arduino.
Example.
2x OLED displays.
1x RTC.
1x SD Card reader.
You wire CLK, MISO and MOSI to all peripheral devices, and then use separate microcontroller digital outputs as separate chip selects (CS0, CS1...), one for each peripheral's CS input.
Thank you.
Why don't you make a video for USART and put it with SPI and I2C in one playlist? Your videos are AWESOME!
Very nice video sir.
SPI KIDS.
Why is it i see you comment on every single video i watch?! What black magic is this!
🔥👏
Sounds like some new fashion drug.
Fluke is a madman help us save us!
Nice and Informative session. Thanks
Love your videos!
Oh Also EasyEDA is totally awesome. I found it 6 months ago and love it. I switched from KiCad
Useful video
Please increase the frequency of uploading the new videos. ...I always wait for them.
One video takes 30-60 hours to produce. You can figure out the rest.
Thank you so much. you have simplified the details so much :)
Please also make videos for RS232, RS485,USB, & ETHERNET protocols.
On my to do list
Awesome video, thanks!
Just a quick tip for your pronunciation, when you use _read_ in the past tense it's pronounced like _red_ . Otherwise a very informative video.
Also GS pronounces "math" as "mahth", which almost no English accent does these days -- preferring instead the "a" sound in "bag" or "map". Not a big deal but would be more widely understood easily. Even my relatives who pronounce "master" as "mahstah", say "math" like in "map".
Sometimes it's very difficult for foreign speakers to make certain sounds because they don't have the sound in their language, for example, the English W sound doesn't exist in German
Things like where the language does something retarded, for example when a verb's past participle looks identical to the present tense but is pronounced different, is something worth noting, as is anything linguistically strange.
According to this list, there's only a (small) limited number of past participle verbs? www.englisch-hilfen.de/grammar/unreg_verben1.htm
Corn Julio It's possible I've worded it badly. I mean where the present tense "I read" is spelt identically to the past tense "I read", where the verb has an identical spelling in either tense yet is pronounced differently, among other weird things that happens in a language.
heck, quit pickin' on the english/grammar. His videos are great, and I like the accent.
Nobody mentioned it in the comments, but I've heard you can daisy-chain SPI devices and keep a single CS line this way. If somebody can remind everyone how it works, that would be awesome!
This will only work if your SPI devices don't try to talk back to the µP, and you want all of them to receive the same commands.
The only time I've seen that is when (ab)using the SPI interface to drive a series of shift registers. I can't imagine any other scenarios when you would connect multiple SPI slaves to the same CS line (but interested to know if there are any).
@@jvqn6581 why do u consider that abusing it??
Don't take the word "abuse" too literally in this context. It's just that often this does not seem like an intended use. As evidenced by the fact that some uCs require shall we say "creative" config register settings to achieve it.
I read an Appnote from Maxim, which describes the daisy-chain method:
www.maximintegrated.com/en/app-notes/index.mvp/id/3947
Yeah, you can read/write from each one individually, provided they expect only one byte read/written.
Hey, great video man!
btw which country is jlpcb located in ?
At 7:40 you "convert" 0x60 to B01111000 (or 0x78). Ah, I see, you added RS2 and RS1 for 8kHz.
Thank u Great Scott for another great instructional. Great idea to test the SPI module first by making it output a square wave. Thanks !!
Make a video about gas and electric soldering irons and which is better please.
I can put it on my to do list
@@greatscottlab that would be nice i own a gas soldering iron it sucks i bought it for 15€ i should have bought a better one
Just get a TS100 or the TS80 like everyone else does now!
@@jparky1972 i will take a look at them
I only understood a little of that but one day I’m sure it will mean more to me. Just trying to get an SD card to read/write on a TFT that came with zero instructions how to plug in the SD side. I’m glad u ended with a shot of the SD card but wish I could’ve seen how it was attached to the bus and arduino Bc that’s the photo I need.
I bought an SD shield from...can't remember where, mabye amazon. And it can accept full sized or mirco size with an adapter sent along to. Its really simple to get started using an arduino. (I used an arduino mega because of the abundance of dedicated communication pins)
Thank you for great video. Would it be possible to create a "playlist" for your "Electronic Basics" videos?
Nice video. Any chance you could explain the 4 wire SPI used on TFT displays?
Love your tech tecniqe
Thanks
hi from Turkey
Thanks
sorry for the late comment, in 3:20 you mentioned that you need for each device a pin... well shouldn't a shift register do the job? of corse you'll have then to program an interface for that, but then instead of using n pin for n device you'll use only 3 pins for n device!
Thank you for this video!
Scott - any chance of showing a Forth implementation of both SPI and I2C? Any forth would do...
U R the best