In this video, we're dipping our toes into the world of DSP, and learning about how to interpret the output of the worlds most important algorithm: The fast fourier transform. By building an understanding of all the component parts, we can understand exactly how this...
In this video, we're dipping our toes into the world of DSP, and learning about how to interpret the output of the worlds most important algorithm: The fast fourier transform.
By building an understanding of all the component parts, we can understand exactly how this mathematical tool can be used to create these wild drawings, based solely on circles of different sizes rotating around one another.
=[ 🔗 Links 🔗 ]=
🗣 Discord: https://discord.gg/FPWaVgk
⭐️ Patreon: https://www.patreon.com/lowleveljavascript
💻 Github Repo: https://github.com/lowbyteproductions/the-worlds-most-convoluted-spirograph
In this video, we're learning about fixed-point: A different method for doing non-integer arithmetic without floats! Floating point is a ubiquitous standard that works everywhere, but it needs specialised hardware to have any chance of running fast. This can make calculations...
In this video, we're learning about fixed-point: A different method for doing non-integer arithmetic without floats!
Floating point is a ubiquitous standard that works everywhere, but it needs specialised hardware to have any chance of running fast. This can make calculations on low-powered microcontrollers extremely expensive. Fixed-point solves, giving us a method for cheaply computing fractional results with flexible precision!
00:00:00 Intro
00:03:46 Floating point vs fixed point
00:10:07 Fixed point bit representation
00:17:10 Code: Fixed point defines
00:21:30 Getting to the integer and fractional parts
00:24:24 Sign function and representing ints in fixed point
00:32:14 Converting to and from floating point
00:36:23 Addition and subtraction
00:38:27 Multiplication
00:42:20 Division
00:48:52 Rounding operations
00:50:14 Absolute value
00:54:50 Floor
00:58:57 Getting the fractional part
01:02:38 Ceiling
01:05:37 Round
01:14:14 Motivating example: Analog to digital converter readings
01:30:10 Next time: Sines and cosines
=[ 🔗 Links 🔗 ]=
⭐️ Become a patron and get bonus videos! https://www.patreon.com/lowleveljavascript
🗣 Discord: https://discord.gg/FPWaVgk
💻 Github Repo: https://github.com/lowbyteproductions/fixed-point-math
In this video, we're learning how to draw on an oscilloscope. By utilising the X-Y mode of the scope, combined with some clever firmware to generate the right signals, and a sprinkle of DIY digital-to-analog conversion, we can render animated 3D graphics on a scope in real...
In this video, we're learning how to draw on an oscilloscope. By utilising the X-Y mode of the scope, combined with some clever firmware to generate the right signals, and a sprinkle of DIY digital-to-analog conversion, we can render animated 3D graphics on a scope in real time!
00:00:00 3D Animated Demo
00:01:36 Understanding X-Y Mode
00:05:00 Firmware Architecture Overview
00:09:52 PWM Digital-to-Analog Conversion
00:14:48 Manually creating images
00:21:57 Visualizing the signals
00:25:03 Writing the static image firmware
00:48:30 PWM signals on the scope
00:51:14 Building the low-pass filters
00:58:42 First 3D image
01:03:30 Reading the 3D renderer firmware code
01:17:15 Final demo
=[ 🔗 Links 🔗 ]=
⭐️ Become a patron and get bonus videos! https://www.patreon.com/lowleveljavascript
🗣 Discord: https://discord.gg/FPWaVgk
💻 Github Repo: https://github.com/lowbyteproductions/3d-oscilloscope-renderer
In this video, we're looking at a technique for precisely analyzing signals from firmware when all you can do is blink a LED. By writing to an LED as if it were a typical GPIO, and building a surprisingly simple receiver, we can probe signals with an oscilloscope without even...
In this video, we're looking at a technique for precisely analyzing signals from firmware when all you can do is blink a LED. By writing to an LED as if it were a typical GPIO, and building a surprisingly simple receiver, we can probe signals with an oscilloscope without even touching the board!
=[ 🔗 Links 🔗 ]=
🗣 Discord: https://discord.gg/FPWaVgk
⭐️ Patreon: https://www.patreon.com/lowleveljavascript
In this video, we examine the WS2812B RGB LED device, and write a bit-banged driver from scratch for an STM32 microcontroller. Chapters 00:00 What is a WS2812 / NeoPixel 02:33 Hardware overview 06:00 What is a "device driver"? 08:35 The signalling protocol 15:00 Reviewing the...
In this video, we examine the WS2812B RGB LED device, and write a bit-banged driver from scratch for an STM32 microcontroller.
Chapters
00:00 What is a WS2812 / NeoPixel
02:33 Hardware overview
06:00 What is a "device driver"?
08:35 The signalling protocol
15:00 Reviewing the datasheet
22:00 Figuring out the GPIO timing
49:32 First LED test
53:36 Implementing the driver interface
=[ 🔗 Links 🔗 ]=
🎥 Bare metal playlist: https://www.youtube.com/playlist?list=PLP29wDx6QmW7HaCrRydOnxcy8QmW0SNdQ
🗣 Discord: https://discord.gg/FPWaVgk
⭐️ Patreon: https://www.patreon.com/lowleveljavascript
💻 Github Repo: https://github.com/lowbyteproductions/stm32-ws2812b
The letters are distorted because the outside of a circle spins faster than the inside. There is currently no syncing to the frequency of rotation, which is why the text processes.
The letters are distorted because the outside of a circle spins faster than the inside. There is currently no syncing to the frequency of rotation, which is why the text processes.
In this video, we learn how we can read memory belonging to other processes by building a memory dumper from scratch. One of the key components is the /proc file system: an interface that the kernel provides for introspecting processes. Combined with ptrace, a system call...
In this video, we learn how we can read memory belonging to other processes by building a memory dumper from scratch.
One of the key components is the /proc file system: an interface that the kernel provides for introspecting processes. Combined with ptrace, a system call that allows attaching to and taking control of another process, we write a program to automate extracting information that would otherwise be completely hidden to us!
=[ 🔗 Links 🔗 ]=
https://j3s.sh/thought/recover-lost-text-by-coredumping-firefox.html
🗣 Discord: https://discord.gg/FPWaVgk
⭐️ Patreon: https://www.patreon.com/lowleveljavascript
💻 Github Repo: https://github.com/lowbyteproductions/memory-dumper
In this installment of //Source Dive//, we're back in xv6, learning how address translation works with the virtual memory subsystem. =[ 🔗 Links 🔗 ]= more in depth talk: https://youtu.be/dFIqNZ8VbRY?si=ZGKcZRex96AUtwlT 🐋 RISC-V Docker Image:...
In this installment of //Source Dive//, we're back in xv6, learning how address translation works with the virtual memory subsystem.
=[ 🔗 Links 🔗 ]=
more in depth talk: https://youtu.be/dFIqNZ8VbRY?si=ZGKcZRex96AUtwlT
🐋 RISC-V Docker Image: https://github.com/francisrstokes/rv-toolchain-docker/pkgs/container/rv-toolchain-docker
🎥 Series Playlist:
🗣 Discord: https://discord.gg/FPWaVgk
⭐️ Patreon: https://www.patreon.com/lowleveljavascript
💻 Github Repo: https://github.com/mit-pdos/xv6-riscv
In this video, we're building an awesome graphical effect, where an image is processed into a series of animated waves. The math behind the technique is fascinating, and will lead us into to how sine waves work, the magic of linear interpolation, and signal processing...
In this video, we're building an awesome graphical effect, where an image is processed into a series of animated waves. The math behind the technique is fascinating, and will lead us into to how sine waves work, the magic of linear interpolation, and signal processing techniques like amplitude modulation!
=[ 🔗 Links 🔗 ]=
🗣 Discord: https://discord.gg/FPWaVgk
⭐️ Patreon: https://www.patreon.com/lowleveljavascript
💻 Github Repo: https://github.com/lowbyteproductions/Turning-Pixels-Into-Waves
In this installment of //Source Dive//, we're deep in the xv6 operating system, trying to understand how physical memory of the system is tracked, distributed, and returned to the kernel. It's a fascinatingly simple algorithm, which can be paradoxically kind of hard to...
In this installment of //Source Dive//, we're deep in the xv6 operating system, trying to understand how physical memory of the system is tracked, distributed, and returned to the kernel. It's a fascinatingly simple algorithm, which can be paradoxically kind of hard to understand!
=[ 🔗 Links 🔗 ]=
🐋 RISC-V Docker Image: https://github.com/francisrstokes/rv-toolchain-docker/pkgs/container/rv-toolchain-docker
🎥 Series Playlist:
🗣 Discord: https://discord.gg/FPWaVgk
⭐️ Patreon: https://www.patreon.com/lowleveljavascript
💻 Github Repo: https://github.com/mit-pdos/xv6-riscv
In this installment of //Source Dive//, we're back in xv6, looking at how the operating system layers abstractions. The "console" is a great example, with a low-level driver rooted in the hardware, to an abstract console, to the printf function that eventually outputs...
In this installment of //Source Dive//, we're back in xv6, looking at how the operating system layers abstractions. The "console" is a great example, with a low-level driver rooted in the hardware, to an abstract console, to the printf function that eventually outputs characters to the screen.
=[ 🔗 Links 🔗 ]=
🐋 RISC-V Docker Image: https://github.com/francisrstokes/rv-toolchain-docker/pkgs/container/rv-toolchain-docker
🎥 Series Playlist:
🗣 Discord: https://discord.gg/FPWaVgk
⭐️ Patreon: https://www.patreon.com/lowleveljavascript
💻 Github Repo: https://github.com/mit-pdos/xv6-riscv
In this video, we're drawing generative art in the form of flow fields! Flow fields are mathematical structures where every point of a space is associated with an angle, and by carefully choosing those angles, we can trace out the path of particles moving across the field,...
In this video, we're drawing generative art in the form of flow fields! Flow fields are mathematical structures where every point of a space is associated with an angle, and by carefully choosing those angles, we can trace out the path of particles moving across the field, creating some beautiful images.
=[ 🔗 Links 🔗 ]=
🗣 Discord: https://discord.gg/FPWaVgk
⭐️ Patreon: https://www.patreon.com/lowleveljavascript
💻 Github Repo: https://github.com/lowbyteproductions/flow-fields
In this installment of //Source Dive//, we're back in the xv6 OS codebase, exploring timers, the early boot process, and a very useful concurrency primitive: The Spinlock! =[ 🔗 Links 🔗 ]= 🐋 RISC-V Docker Image:...
In this installment of //Source Dive//, we're back in the xv6 OS codebase, exploring timers, the early boot process, and a very useful concurrency primitive: The Spinlock!
=[ 🔗 Links 🔗 ]=
🐋 RISC-V Docker Image: https://github.com/francisrstokes/rv-toolchain-docker/pkgs/container/rv-toolchain-docker
🎥 Series Playlist:
🗣 Discord: https://discord.gg/FPWaVgk
⭐️ Patreon: https://www.patreon.com/lowleveljavascript
💻 Github Repo: https://github.com/mit-pdos/xv6-riscv
In this installment of //Source Dive//, we're learning about the xv6 Operating System; Specifically the low-level boot code that gets the CPU in the correct state to run the OS! =[ 🔗 Links 🔗 ]= 🐋 RISC-V Docker Image:...
In this installment of //Source Dive//, we're learning about the xv6 Operating System; Specifically the low-level boot code that gets the CPU in the correct state to run the OS!
=[ 🔗 Links 🔗 ]=
🐋 RISC-V Docker Image: https://github.com/francisrstokes/rv-toolchain-docker/pkgs/container/rv-toolchain-docker
🎥 Series Playlist:
🗣 Discord: https://discord.gg/FPWaVgk
⭐️ Patreon: https://www.patreon.com/lowleveljavascript
💻 Github Repo: https://github.com/mit-pdos/xv6-riscv