Technical Concepts in Computer Engineering - Embedded Systems Development

Through last year, I got questions from a lot of people both through social media and in the Computer Engineering department about one specific thing: What the topics of more technical courses in a Computer Engineering degree are like, and how to deal with them.

Therefore, I have created these series of blog posts to help people get familiar with Computer Engineering, and also answer the questions in people’s minds related to the courses in such a degree. Thus, I will slightly go through the courses that I find the most important by giving some insights about how I felt during the course and what I had learned.

Now, let us begin with Embedded Systems Development.

The objective of this course is to design and implement software for embedded systems, starting with the assembly language and concluding with C. Before taking such a course, I could have never imagined that being so close to hardware could have been this fun!

At the beginning

At the beginning of the course, I felt a little overwhelmed about the things that we will do in the course, let’s see why:

  • Before this course, I had never programmed in assembly from scratch.
  • The slides of the course were like they had been written in a language that I had never spoken.
  • The data sheet of the PIC18F8722 microcontroller that will be used throughout the course for the programming homeworks, labs and the exams had more than 400 pages.
  • Also, I did not quite know what a microcontroller is, and how a microcontroller board works. Yet, there I was trying to figure out how to test the board in order to confirm that it works correctly in the very first week of the semester:


What did we do through the scope of this course?

The course was really entertaining since we had a lot of programming homeworks to have hands-on experience with embedded systems development.

For example, the aim of one of our homeworks was to design and implement a simple version of the well-known pong game by using interrupts and timers. I re-named it as “Pic-Pong” since the name of the microcontroller that we used during the course was PIC. At the end, we built something like this:


Another homework was about implementing and application for a product called “very safe” which is a steel safe protected through an electronic lock. It took me 12 hours straight in the laboratory looking at the computer and the embedded development board, but eventually, I made it! The results were amazing:


To give more insights about the video above, the thing that I control using the stick is called a “potentiometer”. In this basic application, it helps the user to select a 4-digit password by turning it. When the user turns it to left or right a new voltage value is assigned. These voltage values are read by the program to map them to digits in a range of 0 to 9.

How did I achieve?

  • Since I wasn’t familiar with the topics taught in the course, I worked regularly after each class to not forget what I had learned that day.
  • I did a lot of hands-on practice with the embedded development board, especially before the laboratory exam which consists of writing three different programs for the embedded development board in 4 hours.
  • I always tried to learn the logic behind the things that I was learning, and did not quit when I thought that I failed. If I ever thought that I failed, I worked on another topic for some time and came back later.


What I had learned?

I learned…

  • A lot of things about microcontrollers, and the embedded development board. For the ones who don’t know, microcontroller is a control device which incorporates a microprocessor, and microprocessor is an integrated circuit that contains all the functions of a CPU (Central Processing Unit) of a computer.
  • About different architectures such as Harvard and Von-Neumann. I also learned about two different instruction sets named RISC (Reduced Instruction Set Computer) and CISC (Complex Instruction Set Computer). For the case of PIC18, it uses the first ones respectively. Yet, Intel x86 architecture that is commonly used nowadays has CISC architecture.
  • How to read such an assembly instruction:

      ADDWF 0x059, W
    
  • About the Ports and Registers, and how to use them for purposes like input and output
  • About interrupts, their priorities and the flags associated with them
  • Timers and Analog to Digital Converters
  • Also, a little bit about the Real Time Operating Systems

That’s all about the Embedded Systems Development course. I hope this article gave you some insights about the courses in a Computer Engineering degree!