Download presentation
Presentation is loading. Please wait.
Published byEdith Wilkins Modified over 9 years ago
1
Peripherals and their Control An overview of industrially available “peripheral devices” that use “pulse-width modulation” for information passing. Review for Midterm Quiz. Help for Lab. 2, Part of Lab. 3
2
To be tackled today Analog Output Devices –These could be handled via A/D as we did with an audio signal in Lab. 1. Depends on amplitude and frequency of the signals generated by the devices. Digital Output – modulated pulse width – use GPIO pin –Handle with PF interface as with switches –TSL230R – Light sensor –ADI - TMP03 thermometer –ADXL213 Dual Axis Accelerometer SPI devices – use SPI interface 4lines control many devices –LCD screen using a serial parallel converter –MC33993 Multiple -- Switch Detection Interface –ADIS16003 accelerometer and temperature sensor
3
ADI – TMP03 Serial Digital Output Thermometer GROUND WIRE +5V PF8 connection on Blackfin Interface Use the same ideas to measure light intensity (TSL230R Light Sensor) or acceleration (ADXL213 Dual Axis Accelerometer)
4
Serial Digital Output Signal from TMP03 Say temperatures from minus 40C to plus 100 to be measured Value converted into “pulse length information” – digital signal Transmitted over a single wire to PF8 pin
5
SKIP TMP03 Output characteristics
6
SKIP Block diagram for the TMP03
7
SKIP -- More information on the sigma-delta modulator used to generate TMP03 output
8
ADXL213 Dual Axis Accelerometer Two pulse width modulated signal PF9 PF10
9
MMA6260Q How this acc. works
10
ADXL213 Dual Axis Accelerometer Output PWM signal when used as “tilt sensor” X 50% Y 50% X 50% Y 80% X 50% Y 20%
11
Design problem first part of Lab. 3 Based on “record switches” from Lab. 2 You are to design a digital thermometer based around the ADI TMP03 thermal sensor and using the Blackfin LED block as a temperature bar graph. One of the LED’s must flash at 1 / 8 second intervals to show “normal system operation” To be understood later -- Compare and contrast how you would design the software and configure the hardware for operation with a co-operative scheduler (Lab. 2) and a pre-emptive scheduler
12
Basically five tasks that need designing 1.Initialize interfaces 2.Accurately measure when (at what time) the TMP03 output voltages change 3.Convert those times into T1, T2 measurements and then calculate temperature in degrees 4.Display temperature on LEDs as “bar graph” OFF ON OFF OFF OFF = 8 C 5.Flash LED 6
13
void Task5_FlashLED6(void) Code already done – represents a task whose operation can’t be disrupted by other tasks void Task4_DisplayTemperature(void) Update every 1 / 4 second would be enough Task picks up information from a “global” temperature variable Provided LED interface has been initialized then can use WriteLEDASM( ) to do the display “global” temperature variable
14
void Task3_CalculateTemperature(void) Runs as fast as the display Task Picks up information about T1 and T2 from global variables when these become available Does calculation Places result (temperature) where the display task can find it Test by putting in known value for temperature (20C) and then setting T2 = 200 and calculate T1. Now use those T1 and T2 values to check calculation gives 20C
15
void Task1_HardwareInitialization(void) Run once Already have the code to initialize GPIO flags for input and code to initialize the Flash Memory to control LED Does not look like we have any other hardware to control, but if do, add the necessary code to initialize
16
void Task2_MeasureTimes(void) Using ReadGPIOFlags( ) Needs to accurately measure the precise time when the TMP03 output goes from low to high, high to low, and low to high Once those values are known – then can easily calculate T1 and T2 values and pass those onto CalculateTemperature TASK Attempt #1 – make Task2 into a “waiting task” that looks for the voltage changes in TMP03 output
17
Using a waiting approach StartTimer (Assignment 2) Read PF8 voltage level While PF8 level is low – wait Record time A While PF8 level is high – wait Record time B While PF8 level is low – wait Record time C T1 = TimeB – TimeA, T2 = TimeC - TimeB
18
Problem – we don’t know when we will enter the code and start measuring the voltage levels (Mid term hint) Solution – five loops not three Wait low (discard Time), Wait high (discard Time) Wait low (record A), Wait high (record B), Wait low (record C) Enter code at this time – T1 accurate Enter code at this time – T1 inaccurate – too short A1 B1 C1 A2 B2 C2
19
The voltage measuring code look as if it is 4 tasks that operate one after the other Init hardware In loop –Measure T1 and T2 -- wait loops (slow) –Calculate Temperature -- fast –Display Temperature -- fast Wait loop stops Task 5 (LED FLASH) from working Many possible solutions Co-operative scheduler is one possible
20
Co-operative Scheduler Divide Time into segments “frames” Each task is allotted its own time segment Must guarantee that each task will run to completion in a way that allows all other tasks to start and complete as they need (predictability requirement). T1 runs T2 runs T3 runs T4 runs T5 runs Init Measure Calc Display Flash Timer interrupt every ?? ms XXXX T2 runs T3 runs T4 runs T5 runs Timer interrupt
21
Current T1 and T2 measure task (Task 2) does not satisfy this requirement Uses five wait loops – blocks other tasks –Wait low (discard Time), Wait high (discard Time) –Wait low (record A), Wait high (record B), Wait low (record C) Solution – break the task into smaller tasks that all satisfy this requirement of not blocking any other task
22
Task 2 has 7 states Waiting while low -- STATE_LOW1 Waiting while high -- STATE_HIGH1 Waiting while low -- STATE_LOW2 Record time -- STATE_RECORD1 Wait while high -- STATE_HIGH2 Record time etc Wait while low Record time
23
So we could code some thing like this. Very similar to the Lab. 2. Task 8 static state = STATE_LOW1 switch (state) case STATE_LOW1: if PF8 is low then return else nextState = STATE_HIGH1; break; case STATE_HIGH1: if PF8 is high then return else nextState = STATE_LOW2; break; case STATE_LOW2: if PF8 is low then return else { time{0] = ReadTimer( ); (number of interrupt ticks) nextState = STATE_HIGH2; } break; ETC: end switch state = nextState;
24
Co-operative scheduler No task is blocked Each task runs at a predictable time But we can only measure the transitions between levels “at best” with an accuracy of the +1 or – 1 “timer tick” Is this accurate enough for measuring temperature?
25
Temperature accuracy calculation
26
Final program using co-operative scheduler InitScheduler( ) with adjusted timer interrupt settings AddTask(InitHardware, NO_DELAY, RUN_ONCE) AddTask(Measure, NO_DELAY, 1); AddTask(Calculate, QUARTER_SECOND, QUARTER_SECOND) AddTask(Display, 3/8 seconds, QUARTER_SECOND) AddTask(FlashLED6, NO_DELAY, EIGHTH_SECOND StartScheduler( ) Loop –GotoSleepTillInterrupt –Dispatch Tasks Very easy to be able to add additional tasks and understand changes of system performance
27
Reference Information Pictures are taken from various data sheets available from the Analog Devices and Freescale (Motorola) web sites Proposed use of devices are for concept purposes only and no guarantee is made regarding suitable of circuits suggested Application notes are also available on the website
Similar presentations
© 2025 SlidePlayer.com. Inc.
All rights reserved.