Skip to content

9. Embedded programming


individual assignment:
read a microcontroller data sheet
program your board to do something,
with as many different programming languages
and programming environments as possible

group assignment:

compare the performance and development workflows
for other architectures

Learning outcomes

Identify relevant information in a microcontroller data sheet.
Implement programming protocols

Have you?

Documented what you learned from reading a microcontroller datasheet.
What questions do you have? What would you like to learn more about?
Programmed your board
Described the programming process/es you used
Included your code

What we have done

FabAcademy2019-FabLab Kannai lab site

What I have done

Read ATTiny 44 datasheet

This week’s first assignment was to read a microcontroller data sheet. I choose ATTiny44 for my board, so I read about it.

ATTiny 44 datasheet

- ATTiny 44 is working in 8bits
- Rewritable for 10000 times
- There are two PWM Channels, Each
- Operating Voltage:1.8 – 5.5V. This means I can use this with at least 2 AAA battery.
- PIN assignment

Here’s pin assignment. This is very useful because pin number is defferent beween microcontroller and Arduino.

There was the explanation about how each pins work. Before I read it I knew only about which pin was used for PWM, etc from the image above.
In this, there were explanation about more low-level mechanizm.

Each port pin consists of three register bits: DDxn, PORTxn, and PINxn.
DDxn control the directions: 1 means output, 0 means input.
PORTxn manages pull-up activation: 1 means activated, 0 means not activated
PINxn turns PORTxn to opposite when it has 1. For example, when PORTxn has 1 and PINxn has 1, PORTxn turns to 0.

Here’s default value of each pins

Writing C code

This time I wrote C code intended to make LED on the board blink regularly.

I added this in hello.ftdi.44.echo.c.make

#define led_pin (1<<PA7)
#define led_port PORTA
#define led_direction DDRA

void blink(){
    set(led_port, led_pin);
    clear(led_port, led_pin);

Saved it as “hello.ftdi.44.echo.blink.c” and rewrote line 1 in make file as following.

And wrote it with FabISP.

I run the codes below on Terminal.

make -f hello.ftdi.44.echo.blink.c.make

sudo make -f hello.ftdi.44.echo.blink.c.make program-usbtiny-fuses

sudo make -f hello.ftdi.44.echo.blink.c.make program-usbtiny

Run and type several charactors.
python /dev/cu.usbserial-A105MN36 115200

However, LED on the board never blinked. From my experience, I suspected delay length was too short. So I changed it from 100ms to 1000ms and repeat the writing procedure above.

#define led_pin (1<<PA7)
#define led_port PORTA
#define led_direction DDRA

void blink(){
    set(led_port, led_pin);
    clear(led_port, led_pin);

Now it’s working. During I run, when I type something on keyboard, LED on the board blinks.

Writing Arduino code

Then I wrote code with Arduino. This code intended to turn on LED when you push button on the board.

And I write it on the board through Arduino ISP
You can set it up from Tools > Programmer > Arduino ISP

Writing with Arduino

Arduino pins should be connected attiny pins as follows

Arduino ATtiny44
13 SCK
10 RST

Here’s the code I wrote on Arduino.

const int LED = 7;     
const int Button = 8;    

void setup() {     
  // put your setup code here, to run once:     

void loop() {    
  int button;     

  button = digitalRead(Button);    

  if(button == LOW){ 
    digitalWrite(LED, HIGH);    
    digitalWrite(LED, LOW);    


Arduino file hello.ftdi.44.echo.blink.c hello.ftdi.44.echo.blink.c.make