As part of the assessment for this course, you are required to undertake an assignment which will test you against some of the more practical learning objectives of the course. The assignment will enable you to demonstrate your understanding of
- C programming
- C programming for the AVR
- The Microchip Studio environment.
You are required to modify a program in order to implement additional features. The program is a basic template of the board game ‘Snakes and Ladders’ (a description is given on page 3).
For IN students: the AVR ATmega324A microcontroller runs the program and receives input from a number of sources and outputs a display to an LED matrix, with additional information being output to a serial terminal and – to be implemented as part of this assignment – a seven segment display and other devices.
For EX students: the AVR ATmega328P microcontroller runs the program and receives input from a number of sources and outputs a display to a serial terminal and – to be implemented as part of this assignment – a seven segment display and other devices.
The version of Snakes and Ladders provided to you has very basic functionality – it will present a start screen upon launch, respond to button presses or a terminal input ‘s’ to start the game, then display the board for the game Snakes and Ladders with a player cursor that flashes on and off along with the starting square, end square and the snakes and ladders. You can add features such as moving the player, the snake and ladder functionality, dice rolling, timing, pausing, sound effects, etc. The different features have different levels of difficulty and will be worth different numbers of marks. Note that marks are awarded based on demonstrated functionality only.
You have been provided with approximately 2000 lines of code to start with – many of which are comments. Whilst this code may seem confusing, you don’t need to understand all of it. The code provided does a lot of the hard work for you, e.g., interacting with the serial port and the LED display/serial terminal. To start with, you should read the header (.h) files provided along with game.c and project.c. You may need to look at the AVR C Library documentation to understand some of the functions used. Intro/getting started videos are available on blackboard, along with a video demonstrating some of the expected functionality to be implemented.
Academic Merit, Plagiarism, Collusion and Other Misconduct
You should read and understand the statement on academic merit, plagiarism, collusion and other misconduct contained within the course profile and the document referenced in that course profile.
You must not show your code to or share your code with any other student under any circumstances. You must not post your code to public discussion forums or save your code in publicly accessible repositories. You must not look at or copy code from any other student.
All submitted files will be subject to electronic plagiarism detection and misconduct proceedings will be instituted against students where plagiarism or collusion is suspected.
The electronic plagiarism detection can detect similarities in code structure even if comments,variable names, formatting etc. are modified. If you copy code, you will be caught.
As described in the course profile, if you do not score at least 10% on this assignment (before any late penalty) then your course grade will be capped at a 3 (i.e. you will fail the course). If you do not obtain at least 50% on this assignment (before any late penalty), then your course grade will be capped at a 5. Your assignment mark (after any late penalty) will count 20% towards your final course grade.
The program you will be provided with has several C files which contain groups of related functions. The files provided are described below. The corresponding .h files (except for project.c) list the functions that are intended to be accessible from other files. You may modify any of the provided files. You must submit ALL files used to build your project, even if you have not modified some provided files. Many files make assumptions about which AVR ports are used to connect to various IO devices. You are encouraged not to change these.
- project.c – this is the main file that contains the event loop and examples of how timebased events are implemented. You should read and understand this file.
- game.h/game.c – this file contains the implementation of the board used to store the state of the game and the position of the player cursor. You should read this file and understand what representation is used for the board state and the cursor position. You will need to modify this file to add required functionality.
- display.h/display.c – this file contains the implementation for displaying the current state of the board. This file contains useful functions for displaying the board to the LED matrix (internal students) or the terminal display (external students). This file contains the same functions for IN and EX students but with significantly different implementations.
- buttons.h/buttons.c – this contains the code which deals with the push buttons. It sets up pin change interrupts on those pins and records rising edges (buttons being pushed). For EX students this code also handles button debouncing.
- ledmatrix.h/ledmatrix.c (IN students only) – this contains functions which give easier access to the services provided by the LED matrix. It makes use of the SPI routines implemented in spi.c
- pixel_colour.h (IN students only) – this file contains definitions of some useful colours.
Colours are defined in terminalio.h for EX students.
- serialio.h/serialio.c – this file is responsible for handling serial input and output using interrupts. It also maps the C standard IO routines (e.g. printf() and fgetc()) to use the serial interface so you are able to use printf() etc for debugging purposes if you wish. You should not need to look in this file, but you may be interested in how it works and the buffer sizes used for input and output (and what happens when the buffers fill up).
- spi.h/spi.c (IN Students only) – this file encapsulates all SPI communication. Note that by default, all SPI communication uses busy waiting (i.e. polling) – the “send” routine returns only when the data is sent. If you need the CPU cycles for other activities, you may wish to consider converting this to interrupt based IO, similar to the way that serial IO is handled.
- terminalio.h/terminalio.c – this encapsulates the sending of various escape sequences which enable some control over terminal appearance and text placement – you can call these functions (declared in terminalio.h) instead of remembering various escape sequences. Additional information about terminal IO will be provided on the course Blackboard site.
- timer0.h/timer0.c – sets up a timer that is used to generate an interrupt every millisecond and update a global time value that is used to time various game events.
Snakes and Ladders Description
This assignment involves creating a replica of the board game ‘Snakes and Ladders’. Snakes and Ladders is a turn-based game played on a board between two or more players, however the template provided initially supports only one player. Each player takes their turn by rolling a (6-sided) dice to determine how many spaces to move their token forward. The board in the supplied base code features various snakes and ladders, which can either move a player closer to or further away from the end of the map. The winner is the first player to reach the final square.
The board is arranged as below in an 8 column by 16 row layout (displayed on the LED matrix (IN) or serial terminal (EX)). Player’s move across each row, alternating direction each row.
Players start at the square (0, 0) and begin by moving towards the right.