UPC EETAC Bachelor's Degree in Telecommunications Systems and in Network Engineering EEL

P8

P9: Introducing the microcontroller (μC), digital I/O

P10


Resources in lectures and labs: L9, Lab9


Example project: 1-digit BCD adder

1. Specifications

- The aim of this project is to solve a combinational circuit 1-digit BCD adder (Adder_BCD_1digit) using a microcontroller μC. This goal implies:

1) Getting in touch with a commercial device from Microchip, for instance the PIC18F4520, learning how to compile C language code and simulate the project using Proteus. And also:

2) Study how C code is organised in CSD, configure digital inputs and outputs and connect program variables to pins using bitwise operations (OR, AND, etc.)

sYMBOL

Fig 1. The symbol (visio) of the 1-digit BCD adder indicating where to connect the input and output ports.

Solve the truth table of this device which is very similar to the classic chip MC14560  represented in Fig. 2.

You may wonder why an error signal is required in this chip.

MC560
truth tablevar
Fig 2. The classic chip MC14560 that we try to recreate as a way to learn on digital inputs and outputs and code organisation in a microcontroller. This chip is not new for you because it could have been proposed in P3 as another arithmetic circuit, thus we'll concentrate our efforts in the new μC technology to implement it.

Other similar projects: Dual_MUX_4, Arduino platform is another microcontroller (ATmega328P) that has become famous, so that you can program it using "*.ino" source files and its development environment, or instead using "*.c" files and Microchip IDE. Remember that at the EETAC we have the academic cloud license to simulate Arduino boards and applications in Proteus. Hence, you are invited to try your own projects. This is a sample.

 

2. Planning

The design flow (Visio) is explained in Fig. 3 below.

Design flow
Fig 3. Design flow using microcontroller technology

Project locations and file names:

<hard disk>/CSD/P9/Adder_BCD_1digit/(files)

Our CSD style is reflected in the new conceptual tool for representing how to put into practice our design ideas: hardware-software diagram, as representied in Fig. 4. The key point is to define RAM variables (char, int, double int, etc.) that will allow the processing of the algorithms without regarding the way the PORT pins have been read or written. Thus, the kernel of the code (in this case truth_table() function) is hardware independent. Pay attention on hardware-dependent functions (input, output and system initialisation) and software (or platform independent) functions (the truth table) drawn using different colours.

hardware-software
Fig 4. The new conceptual representation tool: hardware-software diagram. 

1) Hardware. Draw your circuit in a sheet of paper and discuss where to connect: Reset (CD), crystall oscillator and digital I/O.

Circuit
Fig 5. Hardware schematic.  

2) Software. Organise the source code as in Fig. 6 using program flowcharts: Init_system(), read_inputs(), truth_table() (which is the algorithm or data processing)  and write_outputs().

software
Fig. 6.  Software organisation flowchart. 

 

RAM variables.

variables

Fig. 5.  Example of some convenient variables "Var" that will allow the processing of information in truth_table() independently of the microcontroller hardware. 

Program variables will be stored in RAM memory addresses and so, they are volatile.

 

When we initialise the system, we configure microcontroller bi-directional port-pins to be unidirectional: only inputs or only outputs. Here, we'll consider all unused port pins outputs as default.

Init system
Fig. 7.  init_system() function details. 

 

Read inputs. How to capture and transfer input voltages into RAM variables

read_inputs
Fig. 8.  read_inputs() function.

 

Write outputs. How transfer RAM variables into port pin digital voltages.

hardware
Fig. 9.  write_outputs() function.

 

Behavioural plan B for translating a truth table into a flowchart and C language.

truth table
Fig. 10.  truth_table() function flowchart.

Plan a sequence for building and debugging the application: the idea is "plan & develop & test" step by step introducing a few lines of code at a time. For instance:

1) Solve the code for reading only the Cin pin, compile, run and test the Var_Cin variable using the watch window.

2) Add the code for reading only the operant A, run, test and watch Var_A, etc.

 

NOTE: You may also consider several design phases. For instance:

Phase#1. Solve the circuit using only switches, buttons and LED as represented in Fig. 5. And only when the system is working correctly,

Phase#2.  Add the extra RAM variables and modify the hardware and software to interface the 7-segment display.

 

3. Development

1) Hardware. Draw the schematic of the application in Proteus copying an example or tutorial which already contains the microcontroller that you have to use.

Development
Child Sheet

Fig. 11. The Adder_BCD_1digit symbol and electrical connections as captured in Proteus. Below you can see the internal architecture (child sheet) based on the PIC18F4520 where only some connections are completed.

2) Software. Run the microcontroller's IDE to develop and compile the C code copying and adapting an example code. NOTE: If your project was created in a previous session and you like to continue working with it, simply click Open project and select the folder.

Do it step by step according to your plan, testing if it works before adding new code. For example, as indicated in the planning above, complete the operations for watching the Var_Cin variable; then repeat it all for watching the variable Var_A, and so on. Use tutorial examples to copy and adapt the C source file. Remember that, as usual, C code is not valid unless you are translating a flow chart which is at the same time the translation of some algorithm.

 

4. Testing 

Run the Proteus simulator. Do it in step by step mode while watching variables and placing break points..

Test
Fig. 12.  The circuit in "run" mode while monitoring the variables in the "watch" window.

5. Report

Having solved this introductory project, also means that you are able to answer most of the questions listed here.

Do you become fully aware now on how designing an example also means learning the "theory" ?:

Having solved the project in paper, you are always in time to publish (as an option) your project report using a word processor: scanned figures, file listings, docx , pptx, or any other resources.  

Remember that in class you'll be required to explain any section of your project individually or in group.

 

6. Prototyping

You're invited to download the application to a given training board an verify that it works as expected and the same as in the simulator.