I2C Hardware & PCB Design - Phil's Lab #132
34:50
How To Read A Datasheet - Phil's Lab #123
21:50
Series Termination Basics - Phil's Lab #121
22:35
Parallel Termination Basics - Phil's Lab #119
22:15
RC Low-Pass Filter Deep-Dive - Phil's Lab #118
45:40
PCB Traces 101 - Phil's Lab #112
30:19
10 місяців тому
PCB High-Speed Delay Matching - Phil's Lab #110
19:17
КОМЕНТАРІ
@okaytree7711
@okaytree7711 Годину тому
My Footprint Editor library does not have the USBL footprint in it...why? IF you change the pins on a symbol, do you have to change the pad numbering in the footprint editor as well?
@Narindersingh-ss7pb
@Narindersingh-ss7pb 23 години тому
Har har Mahadev
@exeu67
@exeu67 День тому
Your videos are an inspiration and well done. It would be so nice of you at least for some pcbs you go back to use kicad instead of altium. Altium is nice but not affordable for most of the hobbyists watching your videos. Other than that: keep it up.
@ZoltanHatos-vy1xe
@ZoltanHatos-vy1xe День тому
Phil - Fantastic series - The attention to detail, tips and design considerations are highly beneficial !!
@gino3286
@gino3286 День тому
sorry at a couple hundreds from where ? i see more like 600USD
@JoelCranmer
@JoelCranmer День тому
Great video! Just curious why you chose C34/35 to be 220nF as opposed to the value shown in section 16 of the datasheet of 104 (which corresponds to 100nF).
@PhilsLab
@PhilsLab День тому
Thanks! That's for BoM consolidation. I needed a specific 220n cap for a pin of the magnetometer, but the actual decoupling value for the rest of these parts is not a precise, required quantity.
@AngryMosfet
@AngryMosfet 2 дні тому
Hey Phil, your symbols are looking clean! Could you go over your current libraries in Altium? How you structure them, how you put text in the center of the symbol aka caps, res, ic, and any other useful tips you believe are worth mentioning. Thank you!
@mwafakaljabi9611
@mwafakaljabi9611 2 дні тому
Hey Phil, is there actually a part 2? Thank you
@sergiohiguera306
@sergiohiguera306 2 дні тому
This tutorial is excellent! I had always wanted to feel comfortable using a tool like KiCAD and had never found a video describing the features/functions so well, from the view of an experienced professional like you. Thank you!! I wanted to ask, when you place the Vias to jump over other traces, you said you make the Vias a bit larger; what size do you usually make them, as well as the ones next to the large Ground pads, which are also larger than the rest?
@tgirard123
@tgirard123 2 дні тому
These videos are so darn good! I don't mind having to go through them multiple times. There is so much to learn. Just subscribed And became a patreon.
@PhilsLab
@PhilsLab День тому
Thank you very much for your support, I really appreciate it!
@d1zz3l
@d1zz3l 3 дні тому
Best guide how to control adressed leds
@PhilsLab
@PhilsLab 2 дні тому
Thank you!
@kargausa553
@kargausa553 3 дні тому
Great demonstration and details, thank you!
@ruilianglin
@ruilianglin 3 дні тому
Great video as usual! I tried your implementation and found a quirk When running at a slower clock speed (64MHz) where the driver didn't work properly. After sending the PWM data frame once, *_SK6805_DMA_COMPLETE_FLAG_* would get stuck at 0 forever. Turned out, when the clock speed is low, *_HAL_TIM_PWM_Start_DMA_* would finish transfering PWM data to the timer so quickly that *_SK6805_Callback()_* is called BEFORE the code enters *_if (halStatus == HAL_OK)_* in order to clear *_SK6805_DMA_COMPLETE_FLAG_*. Basically, *_HAL_TIM_PWM_Start_DMA_* is called, then *_SK6805_DMA_COMPLETE_FLAG_* is set to 1 by *_SK6805_Callback()_***, but immediatly after ***_SK6805_DMA_COMPLETE_FLAG_* is set to 0 when we finally run *_if (halStatus == HAL_OK)_*. My quick and dirty solution is to ditch *_if (halStatus == HAL_OK)_* and clear *_SK6805_DMA_COMPLETE_FLAG_* before *_HAL_TIM_PWM_Start_DMA_*. There's for sure a more elegant solution.
@PhilsLab
@PhilsLab 3 дні тому
That's very interesting - thanks for sharing! Oddly enough, I haven't come across that myself (even on a G0 MCU running at 64MHz). Another (not particularly elegant) approach would be to check the complete flag in the while(1) loop in main.
@sigmaxi7822
@sigmaxi7822 4 дні тому
The STM32U5 seems to handle the DMA/TIM transfer quite differently than other STM32s. I once implemented a WS2812B driver with 4 channels of 128+ LEDs each on an STM32F30, using the same principle. The key to making it work there was to 1) trigger DMA transfers via the TIM CC event (not at the end of the period) and 2) enable AutoReload preload, such that the new value is written to the register before the end of the PWM period. Otherwise it would output each bit value twice because the AR value was not updated fast enough. In this video for the STM32U5, it seems that DMA (or the HAL?) appropriately times the transfer such that there is a new AR value ready for each PWM period, without having to enable AR preload.
@PhilsLab
@PhilsLab 3 дні тому
Interesting to hear that that's the case for that MCU, thanks!
@ianlee6416
@ianlee6416 4 дні тому
I prefer the sk9822 led using the spi peripheral or simply bit-bang it. Just takes one more pin.
@rallymax2
@rallymax2 4 дні тому
Nice job, especially going through the schematic, which a lot of people struggle with.
@PhilsLab
@PhilsLab 3 дні тому
Thank you!
@chadkrause6574
@chadkrause6574 4 дні тому
Love your videos! How do you figure this stuff out in the first place? Keep up the good work!
@PhilsLab
@PhilsLab 4 дні тому
Thank you! Mainly via the datasheet, past experience/knowing the peripherals, looking at open-source implementations, etc..
@FRANCISCOPEREZ-eh5xs
@FRANCISCOPEREZ-eh5xs 4 дні тому
Amazing video
@PhilsLab
@PhilsLab 4 дні тому
Thanks!
@ksbs2036
@ksbs2036 5 днів тому
Really nice presentation. Thanks
@PhilsLab
@PhilsLab 4 дні тому
Thank you!
@alaeddinekh3716
@alaeddinekh3716 5 днів тому
very nice video as usual. a little question, how can i detect if there are some abnormalities concerning the functionality of the rgb led (e.g. LED Strip ) Danke.
@PhilsLab
@PhilsLab 4 дні тому
Thank you! Not that I'm aware of with a single-wire implementation.
@Jonathan-ru9zl
@Jonathan-ru9zl 5 днів тому
Notice that you can go with one partition approach (boot partition) because rootfs is copied to image.ub. There are pros and cons to this approach.
@triplebig
@triplebig 5 днів тому
I'll never understand why Altium sponsors a hobby channel but doesn't offer a hobby license -_-
@tgirard123
@tgirard123 2 дні тому
It's really sad. I guess they really think that all these hobbyists are going to love their tools so much that they'll pay. Good luck with that. I'll just stay with KiCad thank you...
@christiankoch4627
@christiankoch4627 5 днів тому
Due to the nested for loop the set function is really slow.. Not suitable for fast led driving
@PhilsLab
@PhilsLab 5 днів тому
Can be yes, but for my needs in this case this is sufficient and for a tutorial this is a simple demo to get the basics across.
@smaroukis
@smaroukis 5 днів тому
Perfect timing! I was just wondering how to use DMA to update PWM/brightness levels for a custom seven segment video display wall I'm building. Good concise demo. I'm guessing this is how libraries like SmartLED (nee SmartMatrix) work under the hood?
@PhilsLab
@PhilsLab 5 днів тому
Thank you, hope it's useful! From what I've seen, many openly available libraries have a very similar foundation to this. There are however a number of improvements that could be made (memory requirements, speed, ..).
@werelwolf
@werelwolf 5 днів тому
These videos are SO good, thank you for producing them!
@PhilsLab
@PhilsLab 5 днів тому
Thank you, I'm glad to hear that!
@robby091000
@robby091000 5 днів тому
I was literally looking into how to do this for a set of leds last week and finally figure out how to configurate the DMA with the timer after not being able to find a good guide that use the GPDMA!!! Now im looking into options that allow me to do a similar function with simpler microcontrollers without DMA to Peripheral interfaces that dont rely on CPU nop instructions to delays pulses
@PhilsLab
@PhilsLab 5 днів тому
Yeah I haven't found a good guide on setting up GPDMA either :(
@mwafakaljabi9611
@mwafakaljabi9611 5 днів тому
Thank you for the great Video as always. Is it professionally ok to always use HAL libraries instead of writing our own bare metal code?
@PhilsLab
@PhilsLab 5 днів тому
Thank you! Sure, I've seen HALs used in development for many products.
@sundinmikael
@sundinmikael 5 днів тому
If you want you can optimize the color DMA update byt using a lookup table of 16x32bits values (LED 4bits). Then you only need 6 writes for RGB values. This works due to you using 1byte for the PWM.
@mrdiv8418
@mrdiv8418 5 днів тому
Thank you! I've learned a lot. Hopefully, one day, I will be so qualified!
@PhilsLab
@PhilsLab 5 днів тому
Thanks a lot for watching!
@tamaseduard5145
@tamaseduard5145 5 днів тому
👍🙏❤️
@SmashCatRandom
@SmashCatRandom 5 днів тому
I used the WS28xx LEDs in a previous project, and just used DMA=>SPI peripheral; expanding out the bits in a frame-buffer in RAM so that a high bit = 110, and a low bit = 100 in the stream from the MOSI port (CLK not used). Those LEDs don't really need precise timing, so it was reliable and pretty simple to implement really - although a little bit wasteful of RAM, as it obviously needed 9 bytes for each 24bit colour value. 😁
@szymon4602
@szymon4602 5 днів тому
By additionally using a down count timer in capture mode and directing the MOSI and MISO data to a port (preferably a port that has only the least significant two bits, PORTF - in many MCUs), and using one more DMA channel from overflow, this can be done completely in hardware, using only as many bits (RAM) as SPI needs for such sending.
@bencemarta5222
@bencemarta5222 5 днів тому
I love these kind of elegant solutions. At work, I always take the time to write libraries that take advantage of the hardware on this level. One thing I don't really like though is the fact that each bit needs a byte of buffer space to be sent out. This may limit the capabilities of lower end microcontrollers with less memory (And I love the G0 series from ST). I have recently given some thought about using the SPI peripheral with DMA and a timer with some minimal external hardware so that I can control a lot of these LEDs basically without any CPU and memory overhead. It didn't get far but I figured that by using 2 timer channels to generate low and high pulses selecting the right one using MOSI and resetting the timer using the SPI clock, it can be achieved by purely using the SPI peripheral in DMA mode. It would of course be a trade-off but in projects where memory is a constraint, it could be useful. I will certainly do it during summer.
@PhilsLab
@PhilsLab 5 днів тому
That's very true regarding the space needed for the DMA buffer. Interesting idea you have there with SPI + the two timer channels - looking forward to hearing about the results!
@javaguru7141
@javaguru7141 5 днів тому
Wow, that sounds awesome. I would love to see a reference implementation!
@blanchehermine
@blanchehermine 5 днів тому
HAL is hideous.
@casualnoises2808
@casualnoises2808 5 днів тому
This is a very elegant solution!!! Thanks for the detailed explanation Phil!!!
@PhilsLab
@PhilsLab 5 днів тому
Thank you!
@cakeforcat
@cakeforcat 5 днів тому
Nicely put together! What's your opinion on hijacking the SPI peripheral for this purpose? (sorry if this is mentioned in the video, can't watch it right now)
@PhilsLab
@PhilsLab 5 днів тому
Thank you! Haven't actually tried with SPI yet, but my first thought is that would by default enable more pins than needed on the MCU. Question is how to repurposes the unused SPI lines (CLK) if needed. The timer approach is quite straightforwardy (also peripheral/pinning-wise), so I don't really see a reason to not use it - unless free timers aren't available.
@hippie-io7225
@hippie-io7225 5 днів тому
Thanks. I really enjoyed how you abstracted your code from low-level (hardware) to high-level (firmware). I have not used a STM IDE since 2010. Any opinions on this current IDE and a beginners (for the IDE) learning curve?
@PhilsLab
@PhilsLab 5 днів тому
Thank you! Despite some occasional bugs, CubeIDE is my favourite (Eclipse-based) IDE. The whole pin-out, peripheral, clock, etc.. config makes set-up far more straightforward than many other system, in my eyes. Plus there's a large community behind all of this.
@hippie-io7225
@hippie-io7225 5 днів тому
@@PhilsLab Thanks!
@emielv7677
@emielv7677 5 днів тому
The protocol is very simple but getting the timing right without sacrificing a lot of processing time is quite difficult in my experience 😅
@GaborGubicza
@GaborGubicza 5 днів тому
Thanks Phil, I'm just working on my first Addressable LED project: 50+ LEDs per row.
@PhilsLab
@PhilsLab 5 днів тому
Very cool, good luck with your project!
@thomasyunghans1876
@thomasyunghans1876 5 днів тому
Hi Phil, At 14:45 you used the Altium layer stack manager to determine the width of a 50 ohm trace to be 0.3mm. I thought that sounded pretty large for the dielectric thicknesses you typically usually use in your projects. Looking in detail at the layer stack manager, it looks like you selected a 0.075mm (3mils) dielectric thickness between layers 1 and 2, which seemed reasonable, but it looks like you used a dielectric constant of "1" for that dielectric, which is the dielectric constant for air! You got the 50ohm trace you wanted from a simulation perspective, but that seemed like a strange way to do it.
@ankurnaidu
@ankurnaidu 5 днів тому
great video there Phil! May i ask from where did you learn Embedded Coding and Firmware coding since your codes are immaculate.
@PhilsLab
@PhilsLab 5 днів тому
Thank you, Ankur! Mainly by working on various projects (personal and for work). It's predominantly self-taught via online resources, books, example code, etc..
@jakep8484
@jakep8484 6 днів тому
Very cool! I'm pretty new to dsp designs so I'll have to watch your other videos, thanks.
@thomasyunghans1876
@thomasyunghans1876 6 днів тому
Well done! I was also surprised (like a few others who commented), at the amount of manual labor that seemed to be involved. I was expecting a lot more automation. I did notice a small thing at about 4:12. You said that for a 2 layer board you would go from step 2 (board cutting) directly to step 9 (Image the outer layers). I think you should have said to go from step 2 directly to step 7 (drilling the PCB). I would assume that a 2 layer board still needs to be drilled and the holes electroless plated. Thanks for the video, it was very informative.
@kesaramalinda7591
@kesaramalinda7591 6 днів тому
As an intern, these 101 videos are GOLD . Thank you for these videos.
@sherahstevens2585
@sherahstevens2585 7 днів тому
Where can I get this Board just the way it is.
@unixux
@unixux 7 днів тому
Are you selling those ? I suffer from debilitating board hoarding and would most definitely love to snipe one
@xinox73
@xinox73 7 днів тому
Ni hao
@mr.shredder5430
@mr.shredder5430 7 днів тому
amazing
@ROY-yz9lb
@ROY-yz9lb 7 днів тому
video no 90 ukposts.info/have/v-deo/saiGk4GuaZqWkWw.htmlsi=Ircdvo6562YIWOen
@L2-Lagrange
@L2-Lagrange 7 днів тому
Bookmark
@jaimans
@jaimans 8 днів тому
Great tutorial, Phil! I subscribed immediately... I cannot find the link to the reference files. Can you please share them again?