8. Embedded programming

....

8-1. AVR microcontrollers Attiny44

First, I read the datasheet of attiny44 and tried to learn it.
datasheet is here : English, Japanese

It has 14 Pins : PA0~PA7 , PB0~3, VCC, GND
PA0~7 : PortA
PB0~3 : PortB (PB3 is RESET pin)

8-2. how to write program in C for AVR microcontrollers

& : AND //
| : OR //
^ : XOR //
~ : NOT
>> :
<< :
=|, =&,

Sample code : blink.c // It blinks a LED attached to pin PB2

        #include 
        #include 
        #include 

        #define output(directions,pin) (directions |= pin) // set port direction for output
        #define set(port,pin) (port |= pin) // set port pin
        #define clear(port,pin) (port &= (~pin)) // clear port pin
        #define pin_test(pins,pin) (pins & pin) // test for port pin
        #define bit_test(byte,bit) (byte & (1 << bit)) // test for bit set
        #define position_delay() _delay_ms(1000)

        //define pin, I/O, 
        #define LED_port PORTB
        #define LED_direction DDRB
        #define LED_pin (1 << PB2)

        int main(void){
            //clock
            CLKPR = (1 << CLKPCE);
            CLKPR = (0 << CLKPS3) | (0 << CLKPS2) | (0 << CLKPS1) | (0 << CLKPS0);

            //LED 
            output(LED_direction, LED_pin); //Pin OUTPUT指定
            clear(LED_port, LED_pin); //clear pinport LOW 

            //loop
           while(1){
               set(LED_port, LED_pin);
               _delay_ms(2000); //2000ms
               clear(LED_port, LED_pin);
               _delay_ms(500); //500ms
           }
        } 
 

8-4. How to write program in c

1. Connect with FABISP & the board as follows


2. make a folder "program" in my desktop and insert two files: blink.c / blink.make

        PROJECT=blink
        SOURCES=$(PROJECT).c
        MMCU=attiny44
        F_CPU = 20000000

        CFLAGS=-mmcu=$(MMCU) -Wall -Os -DF_CPU=$(F_CPU)

        $(PROJECT).hex: $(PROJECT).out
            avr-objcopy -O ihex $(PROJECT).out $(PROJECT).c.hex;\
            avr-size --mcu=$(MMCU) --format=avr $(PROJECT).out

        $(PROJECT).out: $(SOURCES)
            avr-gcc $(CFLAGS) -I./ -o $(PROJECT).out $(SOURCES)

        program-bsd: $(PROJECT).hex
            avrdude -p t44 -c bsd -U flash:w:$(PROJECT).c.hex

        program-dasa: $(PROJECT).hex
            avrdude -p t44 -P /dev/ttyUSB0 -c dasa -U flash:w:$(PROJECT).c.hex

        program-avrisp2: $(PROJECT).hex
            avrdude -p t44 -P usb -c avrisp2 -U flash:w:$(PROJECT).c.hex

        program-avrisp2-fuses: $(PROJECT).hex
            avrdude -p t44 -P usb -c avrisp2 -U lfuse:w:0x5E:m

        program-usbtiny: $(PROJECT).hex
            avrdude -p t44 -P usb -c usbtiny -U flash:w:$(PROJECT).c.hex

        program-usbtiny-fuses: $(PROJECT).hex
            avrdude -p t44 -P usb -c usbtiny -U lfuse:w:0x5E:m

        program-dragon: $(PROJECT).hex
            avrdude -p t44 -P usb -c dragon_isp -U flash:w:$(PROJECT).c.hex
        

3. open Terminal and type in the following command

        cd ~/Desktop/program
        make -f blink.make
        sudo make -f blink.make program-usbtiny-fuses
        sudo make -f blink.make program-usbtiny
         
 after type these command, appeared like this.