Twenty Three Hundred Learn Computer Systems by Hacking Hardware
Photo by Arno Senoner on Unsplash

Assignment 1: Light Show

Digital media festivals like Canberra’s Enlighten Festival and Vivid Sydney use huge projectors and LED arrays to create a city-sized light (and sound) show for people to enjoy. Your task in this assignment is to create a micro light show on your micro:bit!

You are going to write an ARM assembly program that uses the LED array on your microbit to create a changing light experience that engages a viewer. The application for your show is an (imaginary) microbit festival where viewers walk past and experience your show for a few minutes.

N.B.: There is a pre-submission task associated with this assignment which is due by the start of your Week 5 lab. This task will help you get started in planning your assignment. See the assignment pre-submission page (link) for the details.

Outline

Specification

Here’s a technical specificiation for your assignment.

Your program:

To limit the scope, here’s some should nots. Your program:

Finally, you program must be accompanied by a design document (maximum: 600 words). The design document must explain:

You must follow the assignment specification for this project (both shoulds and should nots). Our expectation is with the above limitations every student will come up with a unique light show.

Rules and Policies

Marking Criteria

Your assignment will be evaluated on the following criteria:

  1. Sophistication of your design and how it meets the assignment specification. (20%)
  2. Sophistication of your implementation in ARM-v7 assembly language. (50%)
  3. Sophistication of analysis and evaluation of why your implementation is correct and appropriate for your design and what limitations it might have. (20%)
  4. Sophistication of communication and expression. (10%)

Item 2 will be evaluated primarily through your program code. Items 1, 3, and 4 will be evaluated through your design document.

Submission

Submission is through GitLab, the most recently pushed commit of your fork of the assignment template before the deadline is taken to be your assignment submission.

Getting Started

  1. read this assignment page completely
  2. fork and clone the assignment template
  3. complete the presubmission task (see the Assignment Pres-submission page): fill in your design-proposal.md file then commit and push it.
  4. have a look at the “blinky” lab and think about how you can turn the other LEDs on and off
  5. think about how you can add more sophisticated patterns of LEDs within the main loop of your program
  6. try some LED patterns and see what you think is “engaging”
  7. make a mistake or get stuck, then ask a good question on the course forum.

Ideas for Extensions

So you’ve made a basic light show and now you want to take it to the next level? Here’s some ideas for making a sophisticated idea:

These are only a couple of extension ideas, if you have any other great ideas feel free to chat with us on the course forum course forum.

Checklist

FAQ

Do I have to write a design document?

Yes! 50% of the marks for this assignment are evaluated through the design document. If you don’t write one you will get zero for that half of the assignment.

How do I write a design document?

Have a look at the design document page for advice.

Make sure you are answering the questions in the specification and stay within the word limit.

Writing a clear and concise document is a challenge, but we believe in you.

What do you mean by “engaging for at least 30 seconds”?

We don’t mean that you need to have an animation that lasts exactly 30 seconds. We mean that your work has to be interesting for at least 30 seconds. Repeating or looping things can definitely be interesting. This is one you will need to test to know, show a friend and see how long they spend looking at your show. If it’s only 5 seconds then maybe you have some work to do :-)

I’ve done X, is that good enough to get Y marks?

We don’t give out marks before assignments are completed, but it’s fair to wonder “How hard should I work on this?”

Realistically there are ways to complete this assignment with minor modification of what you have done in labs. Those types of submissions will be likely to get in the range of 50-59 indicating “satisfactory” performance, but not what we would call “good”.

Putting in a normal amount of further effort to create a submission that is “good” or “very good” will result in a mark between 60-79. Most students will be in this category. Don’t neglect your design document as explaining your program is worth the same number of marks as the program itself.

Getting higher than 79 requires an “excellent” submission across all marking criteria. This requires sophisticated engagement with the task and probably some kind of extension.

For very high marks (90+): “we know it when we see it”. Only a few students will be in this category and they will have definitely put in a lot of effort to create a sophisticated extension on the basics. They will also have written an impeccable design document.

At the opposite end of the scale, if we see a submission that doesn’t meet the specification (e.g., it’s only a static LED display, or there is a very weak design document), then the mark will be below 50. Hopefully, there are only a few students in this category.

Sorry that we can’t be more specific than that.

My program doesn’t work, can I email you for help?

Sorry, you won’t get help over email or Teams. We provide a course forum which is the only way we are able to help.

Forum posts related to your assignment submission must be “private to instructors” (as for any individual assessment task).

Do I have to use memory? It seems hard.

It’s not required, but we seriously suggest that you do.

We’ve seen a lot of students avoid using memory because it’s slightly more complicated than using registers.

In the context of the course, this is a big mistake. Practicing how to str and ldr in assignment 1 will make a big difference in your ability to complete the later tasks in the course.

Realistically, there’s a very limited number of registers on the microbit and many tasks are made easier by using memory at the appropriate time.

It’s [5 minutes, 60 minutes, 12 hours] before the deadline and my CI Jobs aren’t finishing!

Unfortunately on the day that an assignment is due, when many students are pushing updates at once, the CI servers can’t keep up. You may not see your CI jobs finish before the deadline. You will just have to manually check that your files have been submitted correctly.

If there’s any issues with your git repository after the deadline. Please let us know (after the deadline) through a private piazza post and there may be something we can do.

How do I know my assignment has been submitted?

If:

  1. the files in your fork of the assignment are correct (i.e., the files you intend to submit) when checking on the gitlab website
  2. the time is before the deadline

then your assignment has been submitted (well done!).

Please don’t ask us to “check”, we would be just doing exactly the same thing as the above steps which you can do yourself.