Implementation of an instruction pipeline is a common technique used when working with microprocessors. Pipelining improves operation and processing time. Microprocessors such as the Microchip® PIC32MX460F512L on the chipKIT Pro MX4 board use this technology to provide efficient processing and instruction execution. Though the process is sophisticated, it is actually quite simple in concept. In my explanation of instruction pipelines, I’ll specifically refer to the Microchip PIC32 microprocessor.
LEDs are one of the coolest electronic components. They can brighten up any circuits project and turn it in to an eye-catching bonanza of blinking lights. Okay, corny imagery aside, they’re pretty cool. But have you ever thought of how they actually work? You likely already know that LED stands for light emitting diode. Where does the light emit from, though? There are no bulbs or filaments in an LED. So what’s going on in there that produces the glow that we love to have in all of our circuits?
This week happens to be National Library week, and although Digilent is not a library, we certainly use them! I’m not referring to public libraries, though (although I am personally a fan of them); rather, I’m talking about the C++ libraries that are widely used with our microcontrollers. Although C++ libraries are not quite the same as an IP for FPGAs, they serve a similar purpose. These libraries include a set of predefined functions that perform a specific task, such as sending and receiving a set of data over SPI, that the user can use without having to define what they do.
Back in March, we released a blog post announcing the ZYBOt. There was a set of Instructables and a video showing what the ZYBOt is all about. If you check those out, you can see that the ZYBOt is remote-controlled and has a video feed that can be displayed to a computer. The ZYBOt is a great project for people that want to dive into working with FPGAs and Linux.
Originally, this blog post was going to be about how Linux works with its kernel and everything. That turned out to be extremely dry, and it was a jumbled mess to try to fit everything into a blog post. Just check out the Linux wiki page for all that stuff. Instead this post is going to be more about parts of Linux that people should know about. Linux is used widely for developing software and embedded systems. One example is the Zybot, partially developed by Kaitlyn and me!
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)!
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.
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.
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.
So what exactly is LabVIEW? LabVIEW is National Instruments’ program development environment. The name is short for “laboratory virtual instrument engineering workbench”. NI created LabVIEW to enable domain experts to focus on building systems by abstracting the hardware and software. For example, their hardware and software allows a chemist to focus on chemistry and not get bogged down with analog signal conditioning for thermal couples or advanced programming techniques.
Pulse-width modulation (PWM) is a technique that takes advantage an electronic device’s capability to rapidly “pulse” one of its digital pins between logic high and logic low voltage states. The idea is that the switching between the two voltage states in a desired pattern will produce an “average” voltage somewhere between the high and low voltage inputs. If, within a given period, the pin is at a high voltage level more often than a low one, an overall higher voltage (but less than the full strength input voltage) will be observed.