Microwave Oven Controller
Embed Size (px)
description
Transcript of Microwave Oven Controller

Microwave Oven Controller
University Of Central OklahomaENGR 3613
Dr. Yuhao JiangApril 23rd, 2012

Group Members
Baker, Andrew
Galloway, John

OBJECTIVE
Design code for the Dragon12+ development board that will act as a microwave oven controller. Must accept user input Must be able to count down from a given
time Must provide graphical feedback Must have multiple functions

INTRODUCTION
We broke the project down into several different steps: Displaying current time on 7-segment
display▪ Utilizing the on-board Real Time Clock (RTC)
Reading in user input and calculating the appropriate time needed to complete function
Timer functions

EQUIPMENT
Freescale Code Warrior IDE software Dragon12+ USB Development Board
On-board LCD screen On-board 7-segment displays On-board Real Time Clock On-board USB to TTL converter

Real Time Clock
The Dragon12+ board has a built in DS1307 Real Time Clock. This chip utilizes the I2C bus to communicate
with the HCS12 microcontroller▪ The chip can be programmed as well as read on
the same bus, but uses 2 different bus addresses for this function
Since we hadn’t covered I2C is class, we decided to use a “soft I2C” instead, which isn’t as flexible as the hardware I2C, but would work for our applications.

Soft I2C
The firmware was adapted from our senior design project (which heavily uses I2C)
This code “acts” as a hardware I2C except some functions such as interrupts, clock stretching, and bus collision avoidance aren’t implemented.

I2C Timing Diagrams
Images taken from NXP PCA8575 Datasheet

DS1307 Data Packet Formatting
Images taken from DS1307 Datasheet

Code to get time from RTC
The process to get the I2C data is quite simple when it is broken down into different functions. This process is called roughly every second to keep the display updated to +/- 1 second time.
START i2c_start() i2c_ tx(0xD0)
i2c_ tx(0x01)i2c_stop()i2c_start()
i2c_ tx(0xD1) i2c_ rx(1) i2c_ rx(0)
i2c_stop()END
1 2
345
6 7 8
9

Reading User Input
The on-board keypad was used for user input. We had previously written a function (for a lab) that could be called that would return what key, if any, was pressed. We had to modify this slightly to prevent the processor from taking multiple readings from a single key press, though this was simple to overcome by putting a hold in the code until all keys were released.

Reading User InputStart
A is Pressed B is Pressed D is PressedC is Pressed
Sends 01:00 toTimer Function
LCD Displays"Popcorn"
Converts weightinto time and
sends XX:XX toTimer Function
LCD Displays "Beef Weight"
User Enters 4Digit Number
Converts weightinto time and
sends XX:XX toTimer Function
LCD Displays"ChickenWeight"
User Enters 4Digit Number
Sends time inXX:XX format toTimer Function
User Enters 4Digit Number
LCD Displays"Cooking
Time"

Reading User Input
The function that was built also corrects for the difference in silkscreen printed on the Dragon12+ board vs numbering the keys from zero starting in the upper left hand corner. If a letter key or special function key (* or #) were pressed, a number was returned outside of the range of the keypad numbers, for example 10 would be returned if A was pressed, 11 returned if B was pressed, etc.
StartCall to functionto get button
info
Is thereturnedvalue -1?
Store the returnedvalue (corrected to
silkscreen numbers)
Yes
No
Call to functionto get button
info
Is thereturnedvalue -1?
Yes
No

Countdown Code
Convert Secondsto Array and
Display on LED
Display Timeand Wait
End For Loopand Clear LCD
subtractsecond each
second
converts toseconds and
uses as length offor loop
Time Input in4 element
array
Start

RESULTS
Program successfully performs as a human interface to control a microwave oven. It can accept multiple inputs (Popcorn,
Beef, Chicken, User defined time) It counts down the time and displays
remaining time as required It shows the current time when not in
use

DISCUSSION
Problems encountered: The first attempt at the I2C firmware
was unsuccessful▪ We had to directly change the registers to
change pin states rather than try and automate the process
Most of the code was taken from our previous labs for microprocessors We were able to do this since we always
tried to write the code in the most general case

Questions?