Hello, dear friend, you can consult us at any time if you have any questions, add WeChat: THEend8_
ECE6483 EXAM
Instructions:
This is a take home exam that is open book and open notes. You are not permitted to plagiarize any
book or website and you are not permitted to post questions or solutions to any media site. You are not
permitted to collaborate. Any indication of plagiarism or collaboration in any form will result in a zero
score on this test.
This exam requires you to submit code. The code should be inline along with any other responses in a
single PDF. Only 1 PDF file should be submitted with the answers to all questions (including necessary
code, diagrams etc.)
1. Assembly Code and C
There are several sensor chips capable of measuring complex impedance. This is often achieved by
providing 2 electrodes cable of sourcing (or sinking) current while measuring electrical potential of the
electrode pair. For this exercise, assume that the code already exists to interface the sensor and the
driver gives you access to the measurements.
The following function is available for you to use:
void GetData(short* ReIm, int nCount)
// ReIm is an array of shorts of size 2 * nCount. nCount is the number of measurements.
// Data returned in ReIm[] is stored as [Re1, Im1, Re2, Im2,…RenCount, ImnCount]
//Re1=Real part of first measurement, Im1=Imaginary part of first measurement
Write a main.cpp file that:
a. Defines the necessary array to hold 10 measurements made by the GetData function.
b. Defines an array of size nCount called Mags[] used to store the magnitude of each
measurement
c. Imports an assembly function GetMags, as defined in d.
d. Calls an assembly function called GetMags that you pass in 3 parameters. The first is a
pointer to the ReIm array, the second is a pointer to Mags array, and the third is the
nCount. The assembly function calculates the magnitude of each of the nCount
impedance measurements. No return value required.
e. Prints the magnitudes of each measurement to the terminal window.
Write an assembly file implementing the GetMags function including comments on each line. Be sure to
include any requirements necessary to interact with your C program.
2. GPIO, ATSAMD21 (ARM Cortex M0+)
The first section of the “Peripherals” lecture focusses on GPIO specifically for the M0+ microcontroller.
Suppose you would like to design your own dev board for this microcontroller with access to all the
GPIO pins on the “E” package. See the datasheet attached, section 5.5. You will notice that this chip
only gives access to PORT A, pins [0-11,14-19,22-25,27,28,30,31].
Review carefully section 23 of the datasheet.
The goal of this assignment is to avoid using any framework (like EMBED) to perform basic GPIO
functions. That means we can not rely on DigitalIn, DigitalOut, digitalRead etc.
Write 2 functions in C that ONLY manipulate the following parameters (meaning they read and write
these i/o mapped registers) for the selected GPIO pin and performs the specified functions as described
below:
.
a. Function 1:
char digitalRead(int PinOnPortA, int pullEnable), where PinOnPortA is the pin on PORT A that
you wish to read. The parameter pullEnable is a 0 = no pull, 1 = pull up, 2=pull down). The
return value is a 1 or 0.
b. Function 2:
void digitalWrite(int PinOnPortA, char val), where PinOnPortA is the pin on PORT A that you
wish to write “val”, which is a 1 or a 0.
3. ADC and Timers
For this exercise, you can use MBED implementations for ADCs and Timers like we did in our recitations.
That is, you may use the class AnalogIn, Timer, Ticker etc. The objective here is to design a carbon
monoxide detector that outputs to the terminal a status of “OK” or “BAD” every 1 second based on the
MQ-7 CO detector, which outputs an analog signal in the range of 0 to 5V. Keep in mind your ADC has a
Vmax = 3.3V
Based on experimentation, you conclude that a reading of 2.5V or higher is the criteria for declaring
“BAD”, while < 2.5V is considered “OK”.
a. Assuming the MQ-7 has 3 pins, Vin, GND, and Vout, sketch a schematic of how you will
connect this to your board. Clearly show which analog channel you are using and show
any circuitry if required.
b. Write code required to setup the analog channel defined in a.
c. Write the timing code required to read the sensor every 1 second.
d. Write the math logic that determines “OK” or “BAD” and outputs it to the terminal.