Inter-integrated-circuit, more commonly known as I²C (generally pronounced I-squared-C), is a communication style originally developed by Phillips Semiconductor (now NXP Semiconductor). Its design allows multiple components to be able to talk to each other on the same data line, making it widely used in a variety of systems, including Pmods. As a fan of Pmods, I’m in favor of learning how you can communicate with them and get them what you want to do. Let’s find out more.
Welcome back to the Digilent Blog! When we were working in C, we learned about the data structure called a “linked list”. Now, we’re going to go over two new data structures — stacks and queues. In this post, we’re going to make classes for stacks and queues to help show some of the capabilities of OOP (object-oriented programming)!
Robots that run around on motors are pretty sweet. These motors traditionally tend to be DC motors that are controlled through the use of an H-Bridge, which can change the flow of current so that the motor is able to run forwards or backwards. H-bridge modules, such as Digilent’s PmodHB3 or PmodHB5, also tend to have two pins labeled as Sensor A and Sensor B that measure which direction the motor is rotating. The two sensors, A and B, will be wired to the outputs of components known as Hall effect sensors. Unsurprisingly, these measure the Hall effect. But rather than having the “word in the definition” problem, let’s learn some of the practical details.
For those of you that have been coding for awhile, you likely have heard about both interrupts and polling. These are both techniques that can be used to alert your system board, such as a chipKIT microcontroller, when an input has occurred. But what is the difference between these two methods? Is one better than the other? Let’s find out.
If you’ve been keeping up with Digilent over that last couple of years, you may have heard about our merger with National Instruments. We’ve collaborated to create new products, and we’ve expanded our capabilities to work with more of NI’s products. One of those products is Multisim, a full-function testing and simulation environment for analog, digital, and power electronics designs.
Welcome back to the Digilent Blog! Today we’re going to go over recursion! Recursion is when a function calls itself directly, or through another function. Sometimes we can’t solve a problem using loops (iteration), so we have to use recursion. Recursion is slower than iteration, difficult to debug, and it uses up more of the stack. But recursion can also have simpler code, so in some cases, the benefits outweigh the problems.
Take a look at a circuit board and chances are you’re going to find a resistor or two. Most boards today use surface-mount device (SMD) technology, so the components are almost too small to see sometimes, but they are on there, I promise. How do engineers decide which resistors to use in the design? Sometimes it depends on how you want that portion of the circuit to perform, as in the case of an op-amp. Other times it’s to prevent too much current from passing through a given point in a circuit, which is why they are often called current-limiting resistors. Maybe you want a simple way to divide the voltage or current. The reality is that there are numerous ways to use resistors, and oftentimes, the defining the resistor value is up to you.
The acronym IP probably means a lot of things to a lot of different people. But to those of us in the world of FPGAs, it’s something special. IP stands for intellectual property. Intellectual property can be a lot of things, but when I say intellectual property I’m talking about the libraries of HDL (hardware design language) modules that are available for your use. Users and companies build IPs for use, so that designs are easier and faster to build.
If you’ve been around electronics for a while, you’ve probably noticed that components like resistors, capacitors, zener diodes and inductors come in some odd values. Looking at the chart above, there seems to be no clear rationale behind the values, but there is a pattern. 47kΩ resistors and 22μF capacitors are everywhere, but not 40kΩ or 50kΩ resistors, or 20μF or 30μF capacitors. So what’s the deal? It all has to do with preferred numbers.
As you probably know, one of Digilent’s major focuses is producing FPGA (field programmable gate array) boards and educating the public on FPGA design. One of the classes I was in last semester focused on FGPA design. This class is EE324 at WSU, which is taught by Digilent’s own Clint Cole. He gave a background lecture on the History of FPGA chips. Not only was it an extremely interesting lecture, but it also helped me understand the huge leaps in logic design that have been made since the 1960s. This is the history that led to the development of FPGA chips. The chips are the parts that Xilinx makes that we use on our FPGA boards.
Today, we are going to learn about number systems. A “number system” is defined here as “any notation for the representation of numerals or numbers.” We naturally use the decimal (base 10) system, meaning we use the numbers 0-9 to represent all the other numbers. The three types of number systems that we are going to talk about today are decimal, binary, and hexadecimal, but there are many more!
True! Boolean is a data type. However, it’s also a term that gets thrown around in the electronics world by programmers presuming that everybody else knows what they are talking about; I can personally attest that this is not always the case. In light of this, let’s go over some of the data types that are commonly used in programming.
This blog post will cover the basics of pointers, a programming tool that is used in languages like C and C++. In this post, we will be using C as our primary language. Pointers are variables that contain a memory address (a concept used to access the computer’s primary storage memory). Variables normally contain a value such as 1 or ‘a’, but pointers contain an address of the value. When we reference a variable through pointers, this is called indirection. Each link goes to a text file of C code. This code can be run as is and will help show us the power of pointers!
A huge part of FPGA design is using logic blocks in design. With logic blocks, you can compartmentalize your design, rather than trying implement everything in one shot. Designing without smaller blocks would be like trying to design a car without subsystems like the braking system or engine. About half of the way through the course there is a project that covers a variety of basic logic blocks, including multiplexers (muxes) and demultiplexers (demuxes). So what are muxes and demuxes?
The other day I decided to program my chipKIT PRO MX4 board using MPIDE. Long story short, it wasn’t working and I couldn’t figure out why. So I posted my question to the forum and waited for somebody else to find the answer. I got impatient because the answer didn’t come within the next hour, so like a good boy, I started digging into the reference manuals. Come to find out, if you use the chipKIT boards with MPLAB X, the bootloader will be overwritten and must be reloaded if you want to use the board with MPIDE. Since I had done some programming with MPLAB X in assembly language, that was clearly my problem. Should be a simple fix, right? Well, it is.