Week 09

Embedded Programming


Group assignment

Individual assignment

Learning outcomes:

Have you:

Week workflow


Tools used


Software Used


Introduction

Read the Datasheet

A few thoughts about it:

One a more serious note, I really think this assignment is one of the hardest I m stuck because of this datasheet.

Will jump to programing and use it to consult only. While I do will detach important sections bellow:

ATTINY44A pin configurations


Programing

Because I was a bit confuse on how to do it I decided to list all steps in detail and have some sort of template for my next projects. With what is applicable I fill the gaps after each step and do while documenting it, and that is what follows bellow:

  1. Burn bootloader

    1. identify programer
    2. - avrdude or Atmel Studio 7 (windows only)

    3. identify bootloader and makefile
    4. - for that I start by pointing I want to program a ATTINY44A

      - Download makefile

      - Bootloader is not going to be used here since there is no USB

    5. download bootloader
    6. - not applicable

    7. identify commands to burn bootloader
    8. - nope

    9. burn bootloader
    10. - nope


  2. Burn firmware

    1. identify example code:
    2. - There is this code from Prof. Neil

    3. identify commands to compile and burn firmware
    4. - with all files prior downloaded on one directory, in linux I rename the file to makefile and run the script to create the firmware (this step I will repeat every time I want to modify the code:

      mv hello.ftdi.44.echo.c.make makefile
      make

      renaming to makefile and compiling

    5. compile source code
    6. - done in previous step

    7. Adapting makefile to work with my programer
    8. I had to edit the makefile file to work with my programmer. That was done by replacing the entry usbtiny with usbasp 2 times, one when burning the firmware the other when burning the fuses

    9. burn firmware
    10. run:

      make program-usbtiny

      renaming to makefile and compiling

    11. identify what fuses to burn
    12. - that was done already in the makefile

    13. burn fuses
    14. run:

      make program-usbasp-fuses

      burning fuses


Programing with Arduino IDE

I decided to try Arduino IDE as well to program my board.

In order to do it there are a few steps that should work regardless of the os

  1. Add additional board to the boards manager:
  2. Paste the following into (Preferences)-(Additional Boards Manage URLs:)

    https://raw.githubusercontent.com/damellis/attiny/ide-1.6.x-boards-manager/package_damellis_attiny_index.json

  3. Chose your new added board, in my case ATtiny44
  4. Chose your processor, same as before
  5. select clock, because I am using an external 20Mhz oscillator, I chose "External 20 MHZ"
  6. Because I want to do some serial monitoring on this board I chose the best mach for my FTDI wich is "/dev/cu.usbserial-A7032T9C
  7. The last step before compiling and burning was to select the programmer, in my case "USBasp"

First test

Burning Neil's code "hello.ftdi.44.echo.c"

Here instead of using terminal and avrdude, I used the Arduino IDE as it has a built-in serial monitor.

The results are as follows in the video


Program something else

Now I will try to program it to blink as I press the button.

  1. determine the pin where switch is connected
  2. after looking into the PCB schematics I determined the button is connected to pin 10

  3. determine the pin where LED is connected
  4. after looking into the PCB schematics I determined the LED is connected to pin 6

  5. Code
  6. In human language I want something like this:

    1. wait for button
    2. if button pressed blink LED 3 times
    3. if not go back to begining

the problem is I never really coded from scratch only changed code, so that will be a challenge...


1st iteration

how did I do it

I Tried first to customise the blink code from Arduino IDE with my pin numbers, That did not work

I realise after trial and error that the pin number on the data sheet does not correspond to the arduino pin number.

So after empirically finding the right pin number I programmed the board and got it to blink!

Next I wanted the LED to react when pressing the button, so I searched for attiny44 arduino pin. With the right pin number in hand I replaced the pins in the code and it worked!

now I inverted when the LED turns on and off.


Side activity

I was a bit annoyed my board would not advise me when powered so I decide to solder a red LED and a 22 Ohms resistor and a resistor so if I got the connections wrong I would know and switch it.

Thats the before and after

Before

After

After