Differential signaling is used in many communication schemes including HDMI, USB, DVI, CAN, LVDS, and more. Differential signaling uses two wires and therefore two signals accomplish transmitting a series of bits from one point to another. In the figure below, the first image demonstrates single-ended signaling, which uses a single wire and pulses 0s and […]
Containerization and how it differs from Virtual Machines
A Virtual Machine (VM) is a machine that runs on another machine. Virtual machines can be used to run several different operating systems on the same computer hardware. For example, a computer (“machine”) running Linux can have a VM installed on it that is running Windows and for all intents and purposes, the Windows machine […]
Need more GPIO on your MCU? Try the Serial Peripheral Interface (SPI)
SPI is a simple serial communication interface that was originally developed by Motorola in the 1980s for use over short distances of a few feet.[i] SPI can move up to several Mbps, is flexible enough to stream raw data in full duplex with little overhead, and is pretty flexible to work with. SPI supports standard […]
Debouncing switches in hardware and software
A switch can be wired to a digital input on a microcontroller (MCU), but the switch contacts can mechanically bounce together and apart a few times within milliseconds before finally closing. It’s also common on relays and solenoids that pull heavier current than PCB-mounted electronics and is sometimes called “chatter” because you can hear the […]
What is I2C a.k.a. “I-squared-C”?
I2C stands for “Inter-integrated circuit,” or “inter-IC,” and is a simple, 8-bit, serial communication bus protocol that uses just two bus wires; a serial data wire (SDA) and a serial clock wire (SCL). I2C is integrated into many ICs and allows devices to communicate directly with each other, avoiding CPU cycles. I2C operates on a […]
The Internal Processor Bus: data, address, and control bus
A bus is a pathway for digital signals to rapidly move data. There are three internal buses associated with processors: the data bus, address bus, and control bus. Together, these three make up the “system bus.” The system bus is an internal bus, intended to connect the processor with internal hardware devices, and is also […]
What is an In-Circuit Emulator?
Embedded systems tend to lack a display, keyboard, and mouse with which to manipulate the microcontroller that you’re trying to program. So a host computer is used for this function, and typically communicates over a serial cable or more recently, Wi-Fi. Once you create, edit, and compile code for your embedded system on a host […]
What is machine learning?
Machine learning, as a type of Artificial Intelligence, is typically used to create models with which to analyze data. Machine learning is a programming process whereby instead of coding a program as with traditional computer architectures, the computer is fed from dozens to thousands of sample data sets that demonstrate what will and will not […]
Writing Efficient C code for Embedded Systems: The cost of unnatural data sizes
Different architectures have different “natural” data sizes. Most MCUs have the same CPU width as data bus width, which makes sense. Some MCUs might have memory that is not consistent with their available data bus width, however. In other words, for some MCUs, there can be a difference between the CPU’s “natural” word length and […]
Avoiding stack overflow in embedded processors
A stack is like a special buffer, or working memory, where processes are tracked. The stack is where processes or tasks “keep notes” on what they need to do the next time the processor becomes available. The stack works “last in, first out,” and tracks local variables as they get pushed onto and popped off […]