Version 15

    Programmable Logic

    Enter Your Electronics & Design Project for a chance to win up to a $200 Shopping Cart of Product!

    Back to The Project14 homepage

    Project14 Home
    Monthly Themes
    Monthly Theme Poll


    Congratulations to avnrdf for PanelDriver: A FPGA based HDMI to FPD-Link converter!  You are the winner of the Grand Prize of a $200 Shopping Cart!


    Congratulations to jomoenginer  for VidorScout - MKR Vidor 4000 Mobile Robotbernhardmayer for bb-cpld - a robotics expansion board for the BeagleBone Black with an Altera MAX II EPM1270 , and dixonselvan  for Display for Traffic Predictor - Cypress PSoC6 BLE Pioneer kit ! You are the First Place winners of the $100 Shopping Cart!


    Since this theme was Programmable Logic, we thought it would be fun to trace the roots of this broad topic to the man who is considered the father of of the programmable logic controller, Richard Morley.  He passed away a few years ago on October 17th, 2017.  Before passing away he was known for hosting Geek Pride picnics at his farm in New Hampshire for fellow inventors and tinkerers. He was a self-schooled engineer who dropped out of M.I.T. (Massachusetts Institute of Technology) and refused to work corporate hours. He often recalled how he was hung over on New Year’s Day in 1968 when he designed a rugged computer that revolutionized factory automation. Prior to his invention, automation had depended on electromechanical relays, thousands of "on/off" switches, to tell machinery what to do. If there was a new or a changed product was introduced, thousands of wires and switches had to be reconfigured by an electrician. The device that Morley introduced was later known as a programmable logic controller, or PLC. On that New Year’s Day, he had to sketch out his concept quickly due to the headache he felt coming on from having celebrated the night before.  The device, which was about the size of a suitcase, allowed electricians to use a simple computer to reprogram machinery controls.  Now adjustments to controls which had previously required months of drudgery, could be completed in hours.  He and associates formed a company called Modicon Inc. to make the PLCs, then sold it to Gould Inc. in 1977. Modicon now is a PLC brand made by Schneider Electric.


    In the 1990s, vendors began developing control devices that integrated logic and I/O with additional capabilities. By 2001, the moniker Programmable Automation Controller (PAC) was given by the ARC advisory board to describe this approach.  PACs include multiple processors to address a variety of functions beyond just basic logic and I/O. These capabilities include digital (e.g. motion control), analog (e.g. process control), and serial (I/O from test equipment, keypads, scanners, etc.) tasks. Because PACs already include these functions, they eliminate the time and effort involved in integrating a PLC with the motion controller, for example. As a result, they’ve grown increasingly popular in discrete manufacturing.  Another control option that delivers even greater levels of flexibility is soft motion enabled by PC. Today’s industrial PCs have been ruggedized, top to bottom, with environmental protection and removal of any moving parts. Hypervisors like VMware allow a single core to be divided into multiple discrete partitions that run independently of one another, right down to the operating system. This enables a motion application to run on a partition with Linux or a robust proprietary real-time operating system (RTOS) while remaining completely isolated from a Windows partition supporting the HMI or a machine vision system.  At the opposite end of the spectrum lies embedded control systems that leverage field programmable gate arrays (FPGAs) to customize performance using hardware rather than software. When unusual requirements can’t be satisfied by conventional control solutions, FPGAs provide a more accessible solution than more expensive and difficult-to-develop application-specific integrated circuit (ASIC). The approach can be used to address one-off, high-performance projects like a segmented telescope with multiple thousands of actuators that can’t be addressed with a conventional PLC/PAC solution. Conversely, FPGAs can be used to offload tasks such as control logic and I/O triggering in highly complex systems, freeing CPU cycles to handle more complex tasks like trajectory generation.



    Without further adieu here are your winners......


    {tabbedtable} Tab LabelTab Content
    The Winners


    The Grand Prize:


    PanelDriver: A FPGA based HDMI to FPD-Link converter by avnrdf:


    This Programmable Logic theme comes about almost a year since avnrdf  first started working with FPGAs. While the project at its current stage it does not make use of the ARM core in the Zynq, he managed to make use of a lot of what he learnt in Path to Programmable.


    You can view avnrdf progress here:


    His entry for this month's Project14 contest is an FPGA based HDMI to FPD-Link converter - a device that takes video from a HDMI source, decodes it, encodes it and sends it to a LCD panel over FPD-Link (commonly referred to as LVDS).  He completed this project around 4 months ago:, but decided to enter it into this month's contest for two reasons: - it's a good example of a project that cannot be done using a microcontroller, and makes good use of FPGA capabilities. - it's got the right mix of Project14 material: a little reverse engineering, pushing hardware to its limits, overcoming obstacles, a mix of hardware & software HDL and the right about of duct tape holding all of this together.


    PanelDriver: A FPGA based HDMI FPD-Link converter


    "This was a great example of using programmable logic to build a complex electronics project.  Nice explanation of the process, problems and solutions along the way." - Community Member Judge

    "It is a very original application of the power of FPGA and it has also a lot of possibilities of evolution. A clean and efficient solution where FPGA covers one of its historical roles: signal conversion and manipulation." - Community Member Judge


    "It's a good example of a project that cannot be done using a microcontroller, and makes good use of FPGA capabilities.". This is one of the main things I expected to find in these projects. In addition, the well developed explanation, and having it split into 2 posts, makes it readable and understandable. It's a little complex for beginner, but with a plain English, brief summary could attract interest of more people." - Community Member Judge

    "A FPGA based HDMI to FPD-Link converter by avnrdf is an interesting and original project derived from Path to Programmable" - Community Member Judge

    "Having built a display test board for my college engineering project, I found this entry very interesting. It was clear that a great amount of effort went into this to deliver a functional project. The detail put into the blogs was quite impressive." - Community Member Judge

    3 First Place Winners:


    VidorScout by  jomoenginer:


    VidorScout is an autonomous mobile robot that uses Sensor Fusion which combines camera vision, Time of Flight Sensor data and IR Sensors to identify objects for both avoidance and for object identification. The camera sensor can also be used for QR code identification to identify that an object has been labeled correctly or as a waypoint with autonomous navigation.  The Arduino MKR Vidor 4000 Development Board is used to take advantage of the on board SAMD Microcontroller and Intel Cyclone 10 FPGA capabilities. A 5MP OV5647 Camera sensor captures real-time images to be output via the Vidor HDMI port as well as for analysis.  A closed Maze is used to demonstrate the functionality of the bot.


    Part of the intent of the VidorScout project is to take advantage of the FPGA code that Arduino has provided and modify it for a particular purpose.  It is unknown at this time whether this is possible since not all of the released FPGA code has been provided by Arduino for the MKR Vidor 4000, so it will be a matter of working with what is available.  However, Arduino recently posted the VidorBitstrem code which has the majority of the FPGA code used in the VidorPeripherials and VidoGraphics examples.  To compile the VidorBitstream code, a few steps are required.  To edit and synthesis the Intel Cyclone 10 LP code for the Vidor 4000, the Intel Quartus Prime (includes Nios II EDS) software needs to be downloaded an installed. Intel provides a Lite 18.1 version that is free to download and use but is a couple of steps behind the latest release. This includes the Intel Quartus Prime development environment, Nios II Embedded Design Suite, ModelSim Starter Edition and much more.


    The VidorScout is a mobile robot that self navigates using Sharp IR sensors and a VL53L0X Time of Flight Distance Sensor When a QR Code is Identified, the bot will stop and a Ref RGB LED on the back of the bot will flash indicating the code was found.  The Base of the VidorScout is made of Expanded PVC board that was obtained from a local Tap Plastics store. The Wheels of the VidorScout are Adfruit Thin White TT Wheels and the motors and OSEPP TT Gear Box motors.  The Motor Controller used is a Adafruit DRV883 with Dual H-Bridge.  The Time of Flgiht sensor is a VL53L0X sensor.




    "Nice robot with lots of sensors.  Good use of FPGA to read the QR codes." - Community Member Judge



    "A lot of great work shown here in the development of a highly capable robot." - Community Member Judge

    "Good example of a scratch built robot with plenty of information on the build and programming aspects. Finished off with a fully functioning robot in demonstration video." - Community Member Judge


    bb-cpld - a robotics expansion board for the BeagleBone Black with an Altera MAX II EPM1270  by bernhardmayer:


    When you build robots you always have to control lots of motors or RC servos. If you use a micro controller as main computing device you are fine because these devices have plenty of PWM outputs to control motors. But when you switch to more powerful controllers like the Raspberry Pi or the BeagleBone Black you have a little problem because these only have two or three PWM outputs and you can't stick your motor drivers directly to them. Then you usually use an additional motor controller board with a micro controller and connect it via serial or SPI to your Raspberry Pi or BeagleBone. Another option is to use a CPLD, connect it to the main CPU via SPI and generate the PWM outputs with this device. bernhardmayer built a board doing just this and describes it in this post.


    bb-cpld - a robotic expansion board for the BeagleBone Black with an Altera MAX II EPM1270

    "Nice implementation of a CPLD based programmable logic project." - Community Member Judge


    "Simple but nice project for introducing the use of the PSOC4 in a distance measurment application. Nice explanation for the background of the application at the start and the limitations at the end." - Community Member Judge

    "BB-CLPD, good project well explained." - Community Member Judge

    Display for Traffic Predictor - Cypress PSoC6 BLE Pioneer kit  by dixonselvan:


    The Programmable Logic competition was a chance to explore 'Programmable Logic' which is usually not explored by hobbyists or makers in the first place. This may be due to the code or hardware complexity. But recently FPGAs and other PLDs have been made easy for beginners to learn and explore. One best example to quote would be Arduino Vidor 4000. So checking his inventory, dixonselvan has the below four boards/ kits that would suit this competition's topic


    Out of these four, this blog will cover a simple project done using the Cypress PSoC6 BLE Pioneer kit. This project may not use the full (programmable) capacity of the PSoC6 rather uses a single programmable GPIO.


    Earlier, dixonselvan had prototyped a traffic predator for the IoT on Wheels Design Challenge . This did not have a display unit rather had an Android mobile application to have the details displayed to the user. Hence he wanted to make a display for my traffic predictor project using the E-Ink Display shield of the Cypress PSoC6 BLE Pioneer kit. Though initially, he had many plans running through my mind, time constraint, unforeseen incident (Breakage of the E-Ink Display Shield) and the fact that he is new to Cypress PSoC family and PSoC Creator, limited the display functionalities to Display the logo initially, Display an alert in case any vehicle in front approaches closer than a limit and Display the real-time temperature of the surrounding.      The display unit would be an extension of the main traffic predictor system (Arduino UNO (replacing ST-Nucleo L476RG board), Ultrasonic Sensor and Servo Motor). Arduino Uno will send a HIGH or a LOW digital signal to the Cypress PSoC6 BLE Pioneer board, instructing when to display the alert in the E-Ink Display Shield and to turn ON/OFF the LED.


    Display for Traffic Predictor

    "The grand prize winner I think it is the traffic predictor. It is an almost well-documented project with the plus that the video proof not only illustrate how the project works but it is also shown it in place. As the PSoC 6 BLE support a lot of sensors, adding some traffic alarm with an ultrasonic range finder is a great idea suggesting a lot of small improvements that can make it a good product." - Community Member Judge


    Runners Up

    Runners Up:


    The following projects received first place votes from the judges....


    Programmaball by Fred27:


    Fred27 has been trying to get into FPGAs, but he’s found it a little hard going. Let's be honest it's not easy. It's the sort of thing that you understand when you read it, you understand when you try it, but you struggle with when you come back to it again. He was excited about the Programmable Logic competition because time-limited projects are always a good way to focus the mind. Having said that, he’s got a lot going on at the moment so there is a fair chance it won't get completed by the Project14 end date.  As long he gets some of it done and learns as he goes then he'll be happy even if he misses the deadline. He has an Arty S7 sitting in front of him (thanks to the very generous kk99 ) and a PmodVGA board that seemed like a good add-on to a recent component order. Generating a VGA signal seems like a nice rite-of-passage for FPGA development so he’s going to go for a simple VGA-based game.  He’s also got some micro:bits that his sons (age 7 and 5) are just starting to get to grips with. It would be really nice to get them involved in creating something. If he could include a micro:bit in a small way then that would be a bonus. Marble madnessPong is a great starter game. It's not that tricky and it really hits the nostalgia button. However, he doesn’t want to do something with a little originality. He’s not much of a gamer, but one game he remember for it's originality back in the day was Marble Madness. Now if you think that he’s capable of recreating that then think again! He just like that sort of idea. He also noticed when helping the boys with the micro:bit that it responds to tilt. Maybe a couple of micro:bits could be the game controllers and a ball could roll around the screen?


    He settles on making it a ball-rolling sort of game controlled by a couple of micro:bits.  He’s hoping his kids will be able to help with the micro:bit side of things.  As the FPGA (a Spartan 7 on an Arty S7 board) will be generating the output VGA signal he started looking into how to generate FPGA. He found an excellent resource on VGA generation at timetoexplore. It describes all the timing required for a 640 x 480 VGA output from a VGA and even started going into generating graphics. He also discovered a different approach by Andy West here on E14. He really wanted to understand what he was doing rather than copy someone else's code so he took inspiration from both. The timing and generation on his version takes a lot from timetoexplore, but he liked the separation of the VGA signal generation from the rendering of element from Andy's solution.  He also decided that he wanted to render the output on the fly rather than writing to an area of RAM to display from there. He felt that he'd learn more from doing it this way. Of course, he stumbled into a few FPGA pitfalls. At one point he managed to (he thinks) get the timing a little too close and half the screen was blanked and he got a smudgy green / purple mess. As a coder, that's not something you'd expect when only dealing with grey and blue. Once you've got timing issue sorted he decided to move on to having something a little more interesting than a square. This got me into the realm of uploaded an image file onto the FPGA. Once again timetoexplore was helpful. Still in his retro vibe and with a PacMan machine at work, he decided that a PacMan ghost would be cool. He ended up hand-entering image data in the form of a 14 x 14 grid of 2-bit binary data to form the image and a 4 colur palette to translate these to a 12-bit colour for display. If you look closely you can just about make out the figure in the image.



    "This is a good use case for an FPGA and Fred27 has started from scratch rather than using already developed code." - Community Member Judge




    Pseudo random generator with Arduino Vidor MKR4000  by kk99:


    Using MKR Vidor 4000 as basic debug architecture


    "A simple, but complete solution using a FPGA as a custom logic device" - Community Member Judge



    Vidor Clock - Powered by FPGA  by vimarsh_:


    vimarsh_  wanted to do something useful with FPGA as he had Adruino MKR Vidor laying around. The Vidor is still not so beginner friendly but its Graphics Library is still awesome. Also, he had almost forgotten it has WiFi and a microcontroller also. So, he wanted to make something which uses all of the microchips and which can be used on a day-to-day basis. So, the direct thought came was to do something with display because the Vidor has an HDMI (micro) port and also a great library.  For the project, he thought of making a digital clock- which shows time in analog format and it will also show the date and other information. This will test out his trigonometry skills as well as it can use the internet. Here's how it works...  The Vidor connects to the internet with the help of its WiFi chip (Esp32) and gets the time in the world via NTP Server. Then the time is stored in the RTC of SAMD21 microcontroller. That time is then displayed in analog format with the date on an HDMI monitor. After the day is over it will automatically sync the time with the NTP Server again and hence it will also remain very accurate. The output on Monitor is done by Intel Cyclone FPGA onboard.


    VIDOR Clock - Powered by FPGA

    "The Vidor clock is sure one of the three. The author (by the voice he seems really young) has put a lot of effort showing in detail how it works. The demo is well done and clear how it works. And the idea sounds nice." - Community Member Judge

    "Effectively demonstrated the use of the Vidor board to produce an internet synchronised time clock" - Community Member Judge

    "Simple project, not the most original but the well structured blog makes it interesting and easy to read from top to bottom. I think this kind of projects/guides are enjoyable for those new to programmable logic devices and programming in general." - Community Member Judge




    PSoC ultrasonic range meter by koudelad:


    Programmable System on Chip (PSoC) is a component that mixes a CPU core (ranging from an 8-bit device to a dual-core 32-bit ARM Cortex-M4) and a configurable mixed-signal array. This way of designing is very powerful – while the CPU is used for computational tasks, peripherals are routed and used without any CPU load.  Internal components of the PSoC can be arranged in a way that the measurement is taken periodically in the background and CPU is used only for the initial components’ setup and a final result collection.  Ultrasonic ranging module HC-SR04 is a very popular module for hobbyists. It provides a fairly easy to use interface – besides from power and ground pins (5V power supply), there are two pins named Trigger and Echo. Trigger accepts a 10 us wide pulse to start the distance measurement. Echo sets the output to a logic high, proportional to the distance of an object to the module.  Trigger controls an ultrasonic transmitter and internally the trigger pulse starts an 8 cycle sonic burst. Waves travel distance from the transmitter to an object (or more object) from which they reflect. These waves travel the same distance back to the receiver that detects them. Finally, Echo pin provides a pulse with the same length as the travel time of the waves (both directions).  In ideal conditions, the speed of sound is about 343 m/s at 20 Centigrade.


    PSoC ultrasonic range meter


    "There are two original aspects of this kind of FPGA application if compared with some commercial range meters. The commercial ones are laser-based and the calculated distance is referred to a specific point instead of a surface or an obstacle. The second element is the wide range covered with good precision. This can be a very powerful improvement for the robotic obstacle detection systems based on the ultrasonic sensor." - Community Member Judge

    "This was a great project to follow that produced a useful working range meter with a great ad hoc case and entertaining demonstration video" - Community Member Judge



    What's Happening Now


    There's always stuff going on in the community and the best ideas always come from you.  Suggest your idea in the Monthly Poll!  and vote on the themes you want to do projects on. Build an electronic toy such as an executive toy, puzzle toy, educational toy, or cuddly toy. Or create a techno toy from an existing toy by adding electronic innards in the Electronic Toys competition.  You can build projects that involve remote monitoring or control of devices that are not easily accessible in the Remote Monitoring & Control competition.


    Electronic ToysRemote Monitoring & Control
    Project14 | Win a SNES Classic Bundle or Shopping Cart for Your Electronic Toys Project! Big Petro Maker Magic: $100 Datalogger That Can Save Millions

    Electronic Toys Remote Monitoring & Control



    Because, we're grateful to the element14 community for allowing us to exist, we wanted to do something extra special for the 10 year anniversary. Milestones are an opportunity to stop for a second and think about where you were 10 years ago and where you are today.  What was important to you yesterday, what's important to you today?  We're giving away some of our favorite boards to help get this conversation started.  Let us know what you couldn't live without 10 years ago, and what couldn't you live without today. We'll be sending swag bags for posting thoughtful, entertaining, interesting, or enlightening responses.  Each package will contain gifts including an Adafruit Feather ESP8266, an Arduino Uno, or an Arduino Nano board!


    10 Years of element14 Community!
    10 Year Challenge | Tell Us What You Can't Live Without for an ESP8266, Arduino Uno, or Arduino Nano!


    Thank you for continued support of Project14 !


    In the comments below:


    Be sure to Congratulate the Winners and Keep Being Awesome!