Shift Register Modes, Use, Advantages & Disadvantages

So in this article, we will look at a piece of hardware called the shift register and their modes of operation. But we wont stop there. Because we will also look at their use case, advantages & disadvantages.

So if you are new to computer hardware or learning about what goes inside a microprocessor, then brace yourself. As this is going to be an eye opener for you on how computer works!

So are you ready? Great! Then let us go!

To start with, let us ask ourselves the basic question – What is a shift register? Because only when we know what it is, does it make sense to learn about shift register modes of operation. Right? Let us answer that first!

What Is A Shift Register?

A shift register is a piece of circuit that you will find inside a microprocessor. It is used to store and modify data. Now this is one of the simplest explanation I can give for a 2nd grade student.

But if you are some one who is studying about computers, this is just not sufficient. So I will have to explain it in a bit more detail. Alright? I will be getting a bit technical here. But it is how you will get a solid understanding of shift register. So you will have to bare it. Okay?

Technical Explanation

Technically, a shift register is made up of a bunch of Flip Flops. So as you know, a flip flop is a circuit that can store information. It can store data that is in one of the two states – 0 or 1. Right? So what happens when you connect a bunch of these flip flops together? You get a “register“.

So a register is a circuit made up of a bunch of flip flops that can store data having values in 0s or 1s. Now, if that is the definition of a register, then what is a shift register?

A shift register is a type of register where data is shifted from one flip flop to another within the register. But this shift of data does not happen by itself. Instead, it needs a clock signal to do so. So for every input clock cycle, the data get shifted from one flip flop to another. Hence the name “Shift Registers”. Aha! That name now makes so much sense. Right?

How Shift Register Works
How Shift Register Works

The above pic shows how it works. So as you can see here, for every clock cycle, a new input bit enters Bit0. But at the same time, existing Bit0 value shifts to Bit1, Bit1 to Bit2 and so on. But what happens to current value of Bit7? The register will just throw it out! Removed forever!

Now there is one thing for you to notice in the above pic. It is that the bit value here is shifting left. Right? Because of this, we call it a “Left Shift Register“.

But does that mean we also have a “Right Shift Register”? You bet! We do have a right shift register where input is fed to Bit7 & Bit0 will thrown out for every clock cycle!

Where Do We Use A Shift Register?

So now that we know how a Shift register works, let us see where we can use it.

Using Shift Register For Multiplication

When you shift bits in a byte to the left, the value of the byte is multiplied by 2! So we can use a left shift register whenever we want to multiply a byte by 2.

Using Shift Register For Division

When you shift a byte to the right, you are dividing it’s value by 2. So we can use a right shift register whenever we want to divide a byte by 2!

So with that, let us now look at the different modes of operation of a shift register.

Shift Register Modes Of Operation

A shift register will work in one these four modes:

  • Serial In Serial Out (SISO) Mode
  • Serial In Parallel Out (SIPO) Mode
  • Parallel In Serial Out (PISO) Mode
  • Parallel In Parallel Out (PIPO) Mode

So let us take a look at each of these modes one by one. Alright? Here we go!

Serial In Serial Out (SISO) Mode

In this mode of operation, the data is fed into the shift register serially for every clock cycle. That is, for every clock cycle, the data is shifted either to the right or left serially. The output is also taken out one bit at a time. So both inputs and outputs are serial here. Hence the name SISO. So then how does the Flip Flop connection look like? Take a look at it below:

SISO Mode Of Operation
Shift Register In SISO Mode Of Operation

Serial In Parallel Out (SIPO) Mode

When we use the shift register in SIPO mode, we feed the input data serially but take the output data out in parallel. But again, this happens at every clock cycle. So how does that look like? Take a look at it yourself!

SIPO Mode Of Operation
Shift Register In SIPO Mode Of Operation

So as you can see here, we are still feeding the input data serially. But the output is no more serial. We are taking all the output bits at the same time, in parallel. So what this means is that we will get full 4 bit output every clock cycle!

Parallel In Serial Out (PISO) Mode

In the case of shift register in PISO mode, we feed the input data in parallel but take the output data serially. So what this means is that we will be feeding multiple data bits as inputs for every clock cycle. But will be taking only one output bit for each clock cycle.

So then what will happen to the output of each flip flop? Well, even that will be fed as an input! So, we will be feeding two inputs after multiplexing them together. So how does that connection look like? Take a look at it below:

PISO Mode Of Operation
Shift Register In PISO Mode Of Operation

Parallel In Parallel Out (PIPO) Mode

And finally, we have the shift register working in PISO mode. So can you guess what in this mode? Yes. In this mode of operation, you have both input and output data running in parallel. So how does that work? Take a look at it first!

Shift Register In PIPO Mode Of Operation
Shift Register In PIPO Mode Of Operation

So as you can see above, there is a major change in the way we connect the flip flops. In that, you do not see them connected to each other at all. So each input bit goes to a flip flop and it’s output is directly taken out. The only connection that is common to all these flip flops are the clock and clear signal!

So there you have it. Those are the different modes in which we can design a shift register to work. In the next section let us take a look at different types of shift registers that we can use.

Types Of Shift Registers

Based on the way the data is shifted, we have 5 different types of shift registers. They are:

  • Left Shift Registers
  • Right Shift Registers
  • Bidirectional Shift Registers
  • Circular Shift Registers &
  • Linear Feedback Shift Registers

Now let explain what each of these registers work like:

Left Shift Registers

We have already talked about the left shift register. So I think you are familiar with it by now. If not, let me re-iterate. So in the case of a left shift register, the data is shifted to the left on each clock cycle.

Right Shift Registers

This is just like the left shift register. But here it is shifting the data to the right on each clock cycle.

Bidirectional Shift Registers

In the case of a bidirectional shift register, we can shift the data in both the directions. So you can shift the data either to it’s left or right!

Circular Shift Registers

In the case of a circular shift register, the last output is connected back as input. So your data will not be thrown out. Instead, will be shifted either left or right in a circular fashion!

Linear Feedback Shift Registers

In this type of shift register, the input of one flip flop will be linear output value of the previous flip flop.

Advantages & Disadvantages Of A Shift Register

It is now time to talk about the advantages & disadvantages of using a shift register. So what are they?

Advantages Of A Shift Register

  • They are very fast to use.
  • Very quick when you want to convert data from serial to parallel or vice versa. They are faster than normal serial to parallel converter circuits.
  • They are very simple in design. So you can easily rig up a circuit to create a shift register.
  • We can use them to encrypt or decrypt the data.
  • We can use them to a delay signal.
  • It is used in CDMA to generate Pseudo Noise Sequence Number.
  • We can use them to track our data!

Disadvantages Of A Shift Register

While we could see that it has major advantages, shift register has one major disadvantage. That is:

  • The strength of the output current coming from a shift register is not so strong!

So there you have it. Those where some of the advantages & disadvantages of using a shift register.

And with that, I will end this article now. But if you have any doubts, do let me know. Because I will be more than happy to answer them! Alright? So see you and take care until next time! 🙂


What Are Hexadecimal Numbers & Why Do We Use It?

So in this article, we will take a look at what Hexadecimal numbers are. But we wont stop just there. We will also learn why we need to use them. We will take a look at few examples of hexadecimal numbers to know it better.

So does that sound like something you want to know more about? Great! Then strap yourself to your seat and read along. Because you are in for a treat with a world of numbers!

So first thing first, let us answer the basic question we have.

What Are Hexadecimal Numbers?

So to answer this, we first need to ask ourselves what a decimal number is. Alright? Because the numbers we use in our daily lives are based on decimal number system. So looking at hexadecimal numbers after analyzing decimal number will be so much easier. Right?

Alright then.

Decimal numbers

They are the number system that has the digits 0 to 9. Right? But what do we do when we want to go beyond the number 9?

What Are Hexadecimal Numbers?
What Are Hexadecimal Numbers?

We use 2 digits to represent the next number. And these digits will now start with a 1 followed by another digit between 0 to 9.

So the next set of numbers will be 10, 11, 12, 13, 14 …… Correct? But what happens when we reach the number 19? We again start with our next number 2 and repeat the process again.

So it will now be 20, 21, 22, 23 ….

So what we see here is that we can only use digits between 0 to 9. But they can be grouped together in to multiple digits to count any number we want. Right?

Alright. I can now hear you asking me what does this have to do with Hexadecimal number?

Well this concept is very much related to hexadecimal numbers as well. How, you ask? Let me explain!

Hexadecimal Numbers

So just like we have digits between 0 to 9 for decimal, we use digits between 0 to F in hexadecimal system!

What? So how does the digits look like? They look like below:

0, 1, 2, 3, 4, 5, 6, 7, 8, 9, A, B, C, D, E & F

These are the digits we use in a hexadecimal number system!

So as you can see, the numbers between 0 & 9 are the same as decimal system. However after that, 10 is represented by A. 11 by B, 12 by C and so on. This goes on until the letter F which is used to represent the number 15.

So in hexadecimal system, we have symbols to count from 0 to 15!

Why Do We Use Hexadecimal System?

Now that we know what hexadecimal system is, let us learn why we need it.

If you take a look at a computer, we know that it works in binary right? So the only numbers it can understand is 1s & 0s. Because of this, a large number like 10 is represented in binary as 1010b right?

But as you can see, it is not so readable. Correct? So there is a very good chance that we can read or write a binary number wrong! So to avoid that, we use hexadecimal numbers when working with computers!

Hexadecimal Number Examples

Decimal NumberHexadecimal Number

Example Of Hexadecimal Numbers

So you can see few examples of hexadecimal numbers in the above table. Right? But did you notice something? We have prefixed hexadecimal numbers with “0x”. Why? Because that is a convention that will tell anyone to treat it as a hexadecimal number!


Difference Between Screen Tearing & Ghosting

In this article, we will learn the difference between screen tearing and ghosting. But I think before we do that, we should look at what each of these terms even means. Why it happens and how we can fix it. Because knowing what is happening at the fundamental level is how we can really fix things. Right? So in short, we are applying the first principle method here!

So are you ready to learn all there is to know about screen tearing and ghosting? Great! Then let’s get started!

Screen Tearing & Ghosting

What is Ghosting?

So let us start with Ghosting. What is it? Ghosting is a phenomenon in display screens. It happens when a part of the screen is not updated in time, or the color of the part is not consistent with the rest of the screen.

An example of Ghosting & Screen tearing
An example of Ghosting & Screen tearing

Because of this, a fast-moving object will leave a trail of its previous position on the display. So in other words, you can say that it happens when a single image is displayed for a long time. Sounds good?

Why Ghosting occurs?

But why does ghosting even happen? Well, there are many reasons for ghosting, such as the refresh rate of the screen is too low, the quality of the screen is bad, the angle of the screen is too large, the color of the screen is not consistent with the color of the back light.

So in general, it happens whenever a device is unable to render a fast-moving image properly.

But the most common cause of Ghosting is due to the wrong choice of display parameters, such as the refresh rate is too high, or the response time is too long.

How to fix ghosting?

So how can we fix it? To answer that, we need to first know this – Display ghosting is caused by the human eye’s persistence of vision, and the longer the display time, the more likely the ghosting will occur.

So in other words, if we look at something for a long time, we tend to retain its shape and size in our eyes as an imprint. So the easy way out of this is to change the things we see at a rapid pace!

The ghosting can be reduced by increasing the refresh rate of the display, or by reducing the brightness of the screen.

What Is A Screen Refresh Rate?

Wait, we talked about screen refresh rate in the previous paragraph. But what does that even mean?

The screen refresh rate is the number of times in one second that a display screen can completely redraw the image. The screen refresh rate is measured in Hertz (Hz). So higher the screen refresh rate, the more smoothly animations and movements appear. And as we read earlier, this also means we will not see ghosting anymore!

That kind of makes sense then right? But then comes my next question.

What should be the minimum screen refresh rate for smooth output?

So I went around looking for a decent value at which I should set my screen’s refresh rate. And guess what? The recommended screen refresh rate for smooth output is 60Hz. So this begs the next question for me.

What is the screen refresh rate of an LED TV?

The refresh rate of an LED TV is usually 120Hz. So this is what I found after looking at many latest LED TV specifications!

Is screen refresh rate of 120Hz good?

So then which refresh rate is really good for me? Should I set it at 60 Hz or 120Hz? Any guess?

Now if you said 120Hz, then you are right! But why? Read on to know the reason behind it!

At 120Hz, The frames are drawn at 120 frames per second. This is a huge improvement from 60Hz where only 60 frames are drawn per second. So a screen refresh rate of 120Hz is really good, as it can make the screen look very smooth and it is not easy to see the screen is flickering.

Okay then! 120Hz it is!

But here is the thing. As I continued to browse around the topic of refresh rate, I came across this other phenomenon called screen tearing! What even is this now?!

What is screen tearing?

As I looked around to find what it is, I learnt this:

Screen tearing is a graphical artifact in video games and computer graphics. It occurs when the frame rate of a video display does not match the rate of display updates from the computer graphics card.

Alright, very well! So now I have two things to worry about when displaying things on a screen. And here comes my next question – ladies and gentlemen!

What is the difference between screen tearing & ghosting?

Screen tearing is a phenomenon that occurs when the monitor is not in sync with the graphics card. Hmm…so it is not a problem with the display, but a problem with the way the graphics card is outputting the image.

But on the other hand, ghosting is a problem with the display itself. So they are indeed two different problems. But of course, the difference is very subtle from an end user’s point of view! Right?

How to fix screen tearing & ghosting?

So the bottom line is, both screen tearing and ghosting happens due to bad refresh rate of the display. But this refresh rate goes bad at both the display frame buffer side as well as the GPU side. So by fixing this refresh rate, things must get back to normal!

Aha! What an elegant solution to each of these problems!

But where do we see ghosting & screen sharing?

Well the answer is, pretty much on every mobile phone! Be it a gaming smartphone like Asus ROG Phone 3 or your granny’s old feature phone. This is a problem that can happen on any device with a screen and capable of drawing graphics on it!


Buy Arduino Nano Online At A Low Price

In this article, we will learn how you can buy an Arduino Nano online. We will learn how to buy it online in India at a low price. But before we do that, let us first learn what an Arduino Nano is in the first place. So are you ready to dive in? Then let us go!

What Is An Arduino Nano Board?

If you are still a beginner in the embedded world, chances are you may have not heard about Arduino Nano until now. So what is it?

Well, the Arduino Nano is a small computer board that one can buy to learn more about computers. It is a computer on a single PCB board that contains all the circuitry needed to run the software code on it.

Oh wait a second here! So we are learning that it is a single board computer, right? Cool! But then you may be wondering how does this Arduino Nano look like?

I am glad you asked this question! Here is a picture of an Arduino Nano board I will share with you for your pleasure. Take a look at it.

Arduino Nano Board Available To Buy Online
Arduino Nano Board You Can Buy Online

Woah! That is one weird looking single board computer out there! But what are all those pins coming out of it?! Looks scary isn’t it?

But don’t worry. Even though the Arduino Nano board looks like that, it is actually easy to use. There are many tutorials we have that will teach how to use it. So learning how to work with it will never be a problem at all.

So with this introduction to Arduino Nano, it is time for us to move on to know how we can buy it online.

How To Buy Arduino Nano Online?

There are many sellers who are selling the Arduino Nano hardware board. They are selling these Arduino Nano boards in online stores as well as in the offline stores. However, when you try to buy the Arduino Nano board, you will realize that the price differs a lot from one seller to another!

Now this is happening because there they are all not original Arduino boards. You see, the thing is Arduino boards are all launched as open source hardware boards. So, their circuit as well as their board designs are all available for free for anyone to use.

So, what happened because of this is that there are many Arduino Nano clones as well. Since these Arduino clones are coming from China, they will be of cheaper cost.

So in that case, who is the original manufacturer of Arduino Nano?

Arduino is the company that designs and manufactures the original Arduino boards. But as this company is from Italy, the products it makes are costlier than their clones.

So now this begs us with our next question which is:

Who manufactures the Arduino clones?

Most of the Arduino clones manufacturers are from China. So since the manufacturing cost of these boards are cheaper in China as compared to Italy, the clones are always cheaper.

So here is the real reason then! This clearly tells us why we see so much difference in the price for the same Arduino Nano boards across different online websites!

So depending on how much you can spend, decide which Arduino Nano board you want to go for.

What is the difference between an original Arduino Nano Vs a Nano clone?

Now as I told earlier, both the original and the cloned Nano boards use the same circuit design. So nothing is different over here. But there is one difference between the two. And this difference is in terms of the quality of components used.

So if you want a higher quality board, you pay more and go for original Nano module. But on the other hand, if you want to spend less, just go for a Nano clone. It really doesn’t matter at all. Trust me!

What Is The Price Of Arduino Nano Online In India?

If you are from India, you can buy the original Arduino Nano online at a low price of Rs.1449. But if you are OK to buy a cheap Arduino Nano clone, you can buy it at a low cost of Rs.200!

What Is The Price Of Arduino Nano Online In The US?

In the US, you can buy an original Arduino Nano at a cost of $22.00. But on the other hand, a cloned Arduino Nano will only cost you around $9! It’s as cheap as that!

What Is The Online Price Of Arduino Nano In The UK?

But if you are in the UK, you can buy the Nano board at just GBP20!

Have you looked at the new Arduino Portenta?


So there you have it. We just looked into the price of an Arduino Nano in 3 different regions. I also explained to you why its price changes so much when you want to buy it online. It is because of the clones that has reduced the price of these boards.

I hope you have got what you were looking for in this article. If you still have any more questions on it, ask me right away and I will answer you.

I hope you will have fun working with them. These are the best things you can work on to gain good knowledge. It is also one the best hobby that will keep you busy for some time! So enjoy with your new toys! Until next time, ciao! 🙂


Arduino Portenta Technical Specification & Price

In this article, we will take a look at the technical specification of Arduino Portenta. But along with this, we will also learn about its price during its release date.

Just today, Arduino launched its new product called “Arduino Portenta” at CES 2020 show in Las Vegas. So far from what I have learnt, it is an IoT device. Which means that you can use it to connect things in your house to the internet!

But not just that! The company is also claiming that we can use Arduino Portenta even in industrial applications.

Ok, all this is fine. But why do we even need this device in the first place? To answer this question, we first need to discuss the technical details of Arduino Portenta. So let us first do that!

Arduino Portenta H7 Technical Specification

Arduino Portenta H7 Processor

The Arduino Portenta H7 is driven by the ST Microelectronics’ STM32H747XI low power processor. This processor is made up of dual ARM Cortex cores.

The first ARM core present in it is a Cortex-M7 running at 480 MHz. On the other hand, the second ARM core is made up of Cortex-M4 and running at 240 MHz. So with these two cores together, this ARM processor is able to run Arduino code, Python and Javascript code as well!

Now this is very interesting! Since it can run Javascript, many of the web developers will be able to work on it!

What OS does the Portenta H7 run?

We got to know that Portenta H7 is running on Arm’s Mbed OS! This is amazing! Being able to run an embedded operating system will mean we can make use of all the resources efficiently!

What type of connectivity does the Portenta H7 have?

Arduino mentioned that they support all the standard connectivity we can expect. So that means it has support for Bluetooth Low Energy, WiFi and LTE as well!

UPDATE On The Radio Module Of Arduino Portenta

We just got to know that the Arduino Portenta features a Murata 1DX dual WiFi 802.11 chipset. This chipset also has support for Bluetooth 5.1 BR/EDR/LE!

Arduino Portenta H7 with Technical Specification and release date
Arduino Portenta H7 IoT Module

What GPU Type Can We Find In Arduino Portenta H7?

The technical specification of the Arduino Portenta H7 mentions that it features a Chrom-ART graphical hardware accelerator.

What does the technical specification say about Timers in Arduino Portenta H7?

Alright guys. We know that in order for us to work with any time sensitive operation we need support of timers. So how does we score here? Well luckily on the timer front, the board has a total of 22 watchdogs and general purpose timers in it. So we have all the room to take its advantages!

But what about the UART ports in Portenta H7?

Ofcourse even though we have moved towards wireless connectivity, we still need good old UART ports for many reasons. So how do we fare on this front? Well the Arduino Portenta H7 strikes back once again! It is exposing a total of 4 UART Ports. And among these 4 ports, two of the UART ports have support for flow control.

How many connectors are exposed on the Arduino Portenta H7 board?

The Arduino Portenta H7 board exposes a total of 160 pin connectors. These connectors are grouped into two 80 pin sets and will expose all the peripherals present in the Portenta H7 board.

What type of USB does Arduino Portenta H7 support?

On the USB front, Arduino Portenta H7 exposes a USB Type C connector. This USB-C connector has support for host/device, displayPort out. It can operate at high speed or full speed USB protocol configuration. The Portenta H7 USB-C also supports Power delivery.

What is the operating temperature range of Arduino Portenta H7?

Arduino Portenta H7 can operate at a temperature range lying between -40 °C to +85 °C when running without the wireless module. But with the wireless module, Portenta H7 can operate in the temperature zone of  -10 °C to +55 °C.

What is the operating voltage of Arduino Portenta H7 acccording to its technical specification?

Arduino Portenta H7 works at 3.3 Volts.

What type of battery does Portenta H7 support?

The Arduino Portenta H7 runs on a Li-Po battery. This battery has an operating voltage of 3.7 Volts and a discharge rating of 7000mAh.

Does Arduino Portenta H7 support an SD Card?

Yes it does! The Portenta board has an SD card interface support. However, this SD Card interface is available only through an expansion port. So that is a bit of a bummer! 🙁

But now that we know the Arduino Portenta H7 technical specification, when will it Release?

I know I know. No matter how good the device is, we cannot take advantage of it until it gets in our hands, right? So we can understand when you are eager to know when this module is going to be released.

So from what we got to know, Arduino Portenta H7 is already made availale for beta testers. But it is going to become available for everyone by February 2020! Guys, that means we are just a month away from getting hold of it in our hands!

Now that we went through it’s technical specification, What will be the price of Arduino Portenta H7?

Cool! So now that we know we can get hold of Portenta by next month, our next question is obviously this.

How much it is going to cost?

Unfortunately at this point in time, I could not find an answer (Look for update at the end of this article for pricing information) for this. So I will continue to look out for this information. Once I find it, I will revisit this article and update it with the latest price. But until then, I can only leave you guessing about it.

But on the other hand, if you have any idea about it, let me know in the comments below. And not just that, if you have any other information about Portenta H7 in general that I have missed here, do let me know. In this way, I can update this article in the future for others to benefit out of it.

So there you have it. I have shared all the information I had about Arduino Portenta H7 here. While for me this device is something I am eagerly looking forward to, I wish it had a better name. Somehow for me, the name Portenta H7 is becoming difficult to remember. But may be it is just me I guess.

So any case, I will end this article at this point. So see you guys again in the next article. Until then, take care! 🙂

Latest Update On Arduino Portenta Price

We just got to know that Arduino Portenta will cost USD 99.90 + Tax.

So the cost of Arduino Portenta in the US will be $100 + taxes

The cost of Arduino Portenta in the UK will be around GBP 77 + taxes

The cost of Arduino Portenta in the European countries will be around 90 + taxes Euros

And finally the cost of Arduino Portenta in India will be around Rs.7200 + taxes


Blinking An LED Connected To GPIO Pin Of Raspberry Pi Using Python


If you are just getting started with Raspberry Pi, connecting a simple LED to one of the GPIO pins of a Raspberry Pi and controlling it using software program that you write will give you a very good grasp of how a computer hardware and its program works internally. You will realize how you can control various aspects of a computer hardware using software, how a computer works at the bit level, how to write Python programs to control hardware and more.

In summary, working on getting an led connected to a GPIO pin of your Raspberry Pi will help you in understanding the fundamentals of a computer architecture and computer science in general.

Raspberry Pi 3B

What You Will Learn From This Project?

Connecting an LED to the GPIO pins of a Raspberry Pi to control it is a simple Beginner Raspberry Pi Project that lets you learn more about:

  • Raspberry Pi hardware internals
  • General Purpose Input/Output (GPIO) pins of a Raspberry Pi
  • Raspberry Pi Register Set
  • Ohm’s Law
  • Python Programming
  • Python Library – Raspberry Pi GPIO library
  • The working of an Light Emitting Diode (LED)

What Hardware Is Required To Set Up A Blinking LED Project?

This a very simple, beginner friendly Raspberry Pi project that can be set up by anyone with minimal hardware or software knowledge. The hardware components required to set up this blinking LED project is also quite minimal. You need the following hardware components available with you to get it going:

  • Raspberry Pi Module
  • Solderless Breadboard
  • Keyboard
  • Monitor
  • Raspberry Pi Power Supply
  • SD Card with working Raspbian OS
  • Jumper wires for rigging up the circuit
  • LED
  • Resistor (1K Ohm)
  • Multimeter

Theory Behind How The Raspberry Pi Blinking LED Project Work

When you look at the Raspberry Pi board, you will see a bunch of pins protruding out. Among these, there is a row of 40 pins located on one side of the board as shown in the image below.

If you look closely enough in the above image, you will notice the label “GPIO” written right under it. These pins are called the GPIO pins or General Purpose Input Output pins. What the name GPIO implies is that these pins do not have any fixed functionality within the board and hence can be used for general purposes. It means that we can connect our LED into one of these pins and can turn it ON or OFF using these pins. But how?

How to control the Raspberry Pi GPIO pins programmatically?

Raspberry Pi 3 board runs on Broadcom’s ARM CPU chipset BCM2837. Among many other things, this processor chipset has a built in GPIO controller aka General Purpose Input Output controller. The 40 GPIO pins header shown in figure 1 is connected to 40 controllable pins of the GPIO controller. Now, we can control each of these pins individually by programming the appropriate registers inside this GPIO controller.

To understand how to program each of these pins using GPIO controller, we need to look into the Technical Reference Manual or datasheet of the Broadcom ARM chipset BCM2837.

In the BCM2837 SOC (System On Chip aka CPU) datasheet linked above, if we jump into page 89 we come across a dedicated chapter talking about General Purpose Input Output (GPIO). If we go through this chapter, we can learn about all the GPIO registers available and figure out the GPIO registers we need to program to turn ON or OFF the LED we are going to connect to the Raspberry Pi 3 GPIO pins.

As the name implies, GPIO pins can be configured as either an Input pin or an Output pin. When we configure a GPIO pin as an input pin, we are sending data bit (either 0 or 1) into the Raspberry Pi BCM2837 SOC i.e. data signal is sent from outside the board to inside the board (hence the name input). On the other hand, if we configure the Raspberry Pi GPIO pin as an output pin, the board will send the data bit signal (either 0 or 1) from inside the board to the outer world where any device connected to it will receive this signal.

So, if we want to control an LED that is connected to one of the Raspberry Pi’s GPIO pin, we need to configure that pin as a GPIO OUT pin (aka output pin) so that we can send an electrical signal from the Raspberry Pi board to the external LED connected to this pin.

The configuration of a GPIO pin to be an INPUT or OUTPUT pin is controlled by programming the GPIO Controller Register called GPIO Function Select Register (GPFSELn) where n is the pin number.

So for example, if we choose to use the GPIO8 pin to control the LED, i.e. we connect our LED to GPIO 8 pin, we need to program the GPFSEL register for the GPIO 8 pin and configure it as an Output pin. When we check the datasheet at page 91 and 92, we notice that GPIO pin is configured by setting the bits 26 to 24 in the GPFSEL register (that is field name FSEL8). And from the datasheet, we also find that to set the pin as an output pin, we need to set its value as 001 i.e. bit 26 is set to 0, bit 25 is set to 0 and bit 24 is set to 1.

So, if we can somehow set these values in the GPFSEL register using a programming language such as Python, we will be able to start controlling the LED connect to this pin!

If this is all overwhelming to you, do not worry. We will not have to scratch our head a lot for now as we can simply make use of Raspberry Pi’s GPIO Python library that helps us in making most of this work for us. But I just wanted to explain to you as to what this GPIO Python library is doing under the hood.

How To Connect An LED To Raspberry Pi GPIO?

Designing The Circuit

In order to connect an LED to GPIO pin 8 of Raspberry Pi, we need to first design and understand how the circuit is going to work.

Can we connect an LED directly to a Raspberry Pi GPIO pin without a resistor?

The answer is No. Raspberry Pi provides 3.3 Volts of power on its GPIO output pin according to Raspberry Pi datasheet specification. However, if we take a look at a standard LED, we notice that it normally operates at a much lower voltage. If we look at an LED specification, we notice that a typical LED usually operates at just 1.7 Volts and draws 20 mA. So, if we need to connect this LED to the GPIO pin of our Raspberry Pi, we need to bring down the voltage delivered by the pin to our LED to operate at or under 1.7V. How to do that? We connect a resistor in series with our LED so that the 3.3 Volts GPIO output of Raspberry Pi gets split between the resistor and our LED. By choosing a right value of the resistor such that it consumes 1.6 Voltage, we can ensure that LED finally gets only 1.7 Volts.

Calculating the resistor value to connect with LED and Raspberry Pi GPIO

In order to calculate the value of resistor that we should be using, we make use of the Ohm’s Law.

Ohm’s Law is defined using the equation:

V = I/R where V is the voltage, I is the current and R is the resistor value.

So, if we want to have V=1.6 Volts consumed by our resistor so that the current coming from GPIO pin is at I=20 mA, we need to connect a resistor whose value is:

1.6 = (20 mA)/R

or R = 80 Ohms (or approx 100 Ohms)

So, we choose a resistor of value 100 Ohms connected in series with our resistor to ensure that we only get 1.7 Volts and 20 mA of current, the optimum operating values as required by our LED.

A 100 Ohm resistor is identified by the color bands: Brown, Black & Brown.

Hook up the led through 100 Ohm resistor to GPIO 8 pin of Raspberry Pi as shown in the figure below:

Note that when you are hooking up the LED, the terminal pin that is longer is positive. Once you have connected as shown in the figure, it is now time to program the Raspberry Pi GPIO controller to start controlling the LED to turn ON or OFF.

We will be using Python to program our Raspberry Pi GPIO controller. Now, the simplest way to program this is by making use of the Python GPIO library.

To install the Python Raspberry Pi GPIO module, open up your linux terminal and type the following command.

sudo apt-get install python-rpi.gpio python3-rpi.gpio

Now the above command will install the required Python GPIO library module onto our Linux development machine. Once successfully installed, It is now time to start programming the Raspberry Pi GPIO controller.

We will be toggling our GPIO pins at 1 second intervals such that our LED will turn ON and OFF forever until the Python program we write will be terminated i.e., we will be running the code to perform infinite loop of toggling the GPIO 8 pin ON and OFF.

Create a new file on your computer by typing the following command in the terminal:


This should create our new program file called

Open up this file using nano editor by typing the following command in the terminal:


Now that the file is opened, it is time to start writing our program to control the GPIO Pin 8 using Python GPIO library module.

First thing first, we will import the Python GPIO library module using command:

import RPi.GPIO as GPIO

Next, we will import python time library to perform 1 sec sleep operation between each GPIO toggle

from time import sleep

Next, we need to configure our GPIO library to use our GPIO physical pin numbering as seen on the Raspberry Pi board physically:


This ensures that when we say GPIO pin 8 in the program, it actually maps to the GPIO Pin 8 seen on the Raspberry Pi board.

Next, configure GPIO pin 8 to be a GPIO Out pin and set its initial output value to be low:

GPIO.setup(8, GPIO.OUT, initial=GPIO.LOW)

Finally we will start an infinite loop in Python such that we turn ON the GPIO 8 (by setting it HIGH) or turn it OFF (by setting it LOW) after every 1 second delay. This is achieved using the program below:

while True: # Infinite loop
    GPIO.output(8, GPIO.HIGH) # Turn GPIO 8 pin on
    sleep(1)                  # Delay for 1 second
    GPIO.output(8, GPIO.LOW)  # Turn GPIO 8 pin off
    sleep(1)                  # Delay for 1 second

That’s it, this should be all the program that we need to type in our file and run it using the command:


This should start turning your LED ON and OFF every second!

Here is the full code for your reference:

import RPi.GPIO as GPIO
from time import sleep

GPIO.setup(8, GPIO.OUT, initial=GPIO.LOW)

while True: # Infinite loop
    GPIO.output(8, GPIO.HIGH) # Turn GPIO 8 pin on
    sleep(1)                  # Delay for 1 second
    GPIO.output(8, GPIO.LOW)  # Turn GPIO 8 pin off
    sleep(1)                  # Delay for 1 second

This should conclude our tutorial on how to get a simple LED connected to a General Purpose Input/Output (GPIO) pin turning ON and OFF using a Python program that makes use of Python Raspberry Pi GPIO library. There can be many variants to this such as using other GPIO pins, connecting more than one LEDs to multiple GPIO pins and controlling them all in different ways to display interesting patterns on the LEDs. If we are even more curious, we can also figure out a way to control the BUILT-IN LEDs that are already present on our Raspberry Pi boards to bypass their current usage and be used for by own programs for our purposes.

We will dwell into these and many other interesting ways to make use of our Raspberry Pis to understand and learn more about the computer hardware, its architecture and much more in our future articles.


What Is Jmtpfs In Linux & How To Use It? Explained

Jmtpfs is a combination of FUSE (Userspace Filesystem) and MTP (Media Transfer Protocol) stack integrated together to form a filesystem tool. The jmtpfs tool is then used to mount your smartphones or other handheld devices onto your Linux computer so that you can browse the content of your smartphone or handheld device directly from your computer.

Jmtpfs filesystem stack in a Linux computer

What Is A FUSE Filesystem?

FUSE filesystem stands for Userspace Filesystem. In general cases, when you need to create your own filesystems, you need to have knowledge of the Operating System (OS) kernel and block storage device drivers. This would restrict the development of new filesystems to only kernel developers.

In Linux, in order to overcome this, a new type of filesystem model was introduced called the FUSE file system. In a FUSE filesystem, you will make use of a pre-written generic FUSE Linux kernel module, which you as a userspace developer need not have to modify. In addition to this, you will also make use of a pre-written FUSE userspace library that would provide the required API interfaces to the FUSE kernel modules form the userspace.

Using these two modules, it is now possible for the userspace developers to write their own filesystems by inserting the FUSE kernel module into their machine’s operating system and then writing their own filesystem with the help of FUSE library modules.

Such developed FUSE filesystems will place the files and directories exposed by the filesystem in the userspace region of the OS which is accessible by even non privileged users.

What Is Media Transfer Protocol (MTP)?

Media Transfer Protocol (MTP) is a type of protocol used to transfer media files such as audio files, videos files or image files at the file level rather than at the storage level. This protocol became a USB standard to transfer media files between a computer and a USB device.

The main reason why we would use an MTP protocol instead of the USB standard Mass Storage protocol is that when you use a Media Transfer Protocol (MTP) to transfer file, the whole file is transferred from the device to the computer or vice versa. So, the entire transfer of file happens as a single unit, hence transactional. In this way, both the device and host can continue to access the same file simultaneously, which is not possible when using a USB Mass Storage Device Class (MSC) protocol.

In case of an USB MSC protocol, when a USB mass storage device such as a music player is mounted on to a computer, the music player loses control over the files which is stored within itself and is taken over by the host computer’s filesystem. In this situation, the host computer can modify the content of the files and the USB device has no way to prevent it. This may lead to host computer corrupting the files of the USB mass storage device! But this situation is not at all possible when we use an MTP protocol due to its transactional file transfer nature. Hence MTP protocol is preferred over a USB MSC protocol.

JMPTFS tool makes use of both FUSE filesystem and the USB MTP protocol to mount the content of your smartphone onto a local directory on your computer, thereby giving access to the file contents of your smartphone even when you are a non privileged user.

How To Use Jmtpfs tool To Transfer Files From Your Smartphone

In order to use jmtpfs, you first need to create a local directory such as ‘myPhone’ in your computer. Next, you connect your Android or any other smartphone to your computer using an USB cable. Then by issuing the console command ‘jmtpfs myPhone’ you can mount the content of your smartphone onto your mount directory ‘myPhone’. In other words, after issuing the command, you will be able to browse the content of your smartphone within the mount directory ‘myPhone’ just like any other files and folders of your computer.

> mkdir ~/myPhone
> jmtpfs ~/myPhone
> ls myPhone
  Internal storage/

At the end, in order to unmount your smartphone filesystem from your computer, you need to issue another command:

> fusermount -u ~/myPhone

This should unmount your smartphone’s filesystem safely without corrupting any part of the filesystem on your smartphone.


What Is USB Type C? Explained In Simple Terms

USB Type C aka USB-C is a new type of USB connector that is getting popular these days in both smartphones and laptops for their high transfer speeds and easy connectivity (You can connect it in any direction you want and it will still work!). In this article, we will try to explain to you what a USB Type C connector and cable is and why everyone are moving to them.

USB-C is a set of new form of USB connectors that comes in two forms namely:

USB Type C Receptacle

USB Type C Receptacle


USB Type C Plug

USB Type C Plug

Usually, the USB-C Receptacles are found in devices such as laptops while USB-C Plugs are found in smartphones. We will then use a USB Type C cable to connect our smartphone to the laptop.

Why do we need to use a USB-C over micro-USB?

A USB device such as a USB mouse, USB keyboard, USB Pen drives etc all talk to our computers or smartphones using a special language called USB protocol. This USB protocol is designed by an organization called USB Implementers Forum or USB IF for short.

The USB protocol has been evolving over the years and its latest protocol was designed and revealed by USB IF recently. This new protocol called USB 3.0 has increased the speed at which data gets transferred between the computer and USB devices (like smartphones, USB stick) from 480 Mbps in the earlier USB 2.0 specification to 5 Gbps in USB 3.0 specification! This is a huge increase in speed of data transfer between the devices and hence using USB 3.0 was a major upgrade over USB 2.0

USB Type-C is a new type of USB connector that was released almost at the same time as when the new USB 3.0 specification was released. So almost all the USB device manufacturers who wanted to use USB 3.0 specification also adopted USB Type-C connector instead of the usual micro USB connectors used with USB 2.0

Hence, USB-C connector has recently become synonymous to USB 3.0, although you will still be able to find devices with USB-C connector still following USB 2.0 specification.

This has also given raise to a myriad of problems and confusions in terms of choosing the appropriate USB 3.0 cables which we will address and explain how to identify them in the future articles.

How exactly is USB 3.0 connector different from micro USB connector?

A simple micro USB connector which we have all been using all these years simply had 5 pins within itself where two pins were used to power the device (Vcc, Gnd), two more pins where used to transfer the data (D+ and D-) and a final pin was used to detect the device type (Mode Detect).

However, in case of a USB Type-C connector, we have 24 pins in total, each of which had a unique role to play in the data exchange and charging of devices. So in simple terms, USB Type-C connector increased the pin numbers within each connector from 5 pins earlier in micro USB to 24 pins now in USB Type-C connector!

In the upcoming articles, we will go in detail to understand how USB 3.0 protocol works with the new USB-C or USB Type-C connector and how it achieves the extra-ordinary speed of 5 Gbps data transfers, but for now, this should give you enough idea on the USB-C connector type and its difference from the earlier micro USB connector.