From ee5d4ed163846cd7cc7e4dd7d518b9b76cb512d8 Mon Sep 17 00:00:00 2001 From: Sergey Yarkov Date: Wed, 29 Sep 2021 21:47:58 +0300 Subject: [PATCH] feat: init ports & effect_1 of leds --- .gitignore | 4 ++ Makefile | 13 +++++ README.md | 15 ++++++ firmware.asm | 135 +++++++++++++++++++++++++++++++++++++++++++++++++++ firmware.hex | 12 +++++ 5 files changed, 179 insertions(+) create mode 100644 .gitignore create mode 100644 Makefile create mode 100644 README.md create mode 100644 firmware.asm create mode 100644 firmware.hex diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..9b02fdc --- /dev/null +++ b/.gitignore @@ -0,0 +1,4 @@ +.vscode +firmware.asm~ +firmware.pro +firmware.lst \ No newline at end of file diff --git a/Makefile b/Makefile new file mode 100644 index 0000000..7fba996 --- /dev/null +++ b/Makefile @@ -0,0 +1,13 @@ +MCU = t24 +SRCFILE = firmware +TARGET = usbasp +DEVICE = usb + +build: $(SRCFILE).asm + gavrasm $(SRCFILE) + +flash: + avrdude -p $(MCU) -c $(TARGET) -P $(DEVICE) -U flash:w:$(SRCFILE).hex:a + +clean: + rm -f $(SRCFILE).asm~ $(SRCFILE).hex $(SRCFILE).obj $(SRCFILE).lst $(SRCFILE).cof \ No newline at end of file diff --git a/README.md b/README.md new file mode 100644 index 0000000..859a976 --- /dev/null +++ b/README.md @@ -0,0 +1,15 @@ +# Memory Led Game + +**Device**: ATtiny24A + +**Package**: 14-pin-PDIP_SOIC + +**Assembler**: gavrasm v5.0 + +**Clock frequency**: 8MHz with CKDIV8 + +**Fuses**: lfuse: 0x42, hfuse: 0xDF, efuse: 0xFF, lock:0xFF + +**Schematic**: + +- diff --git a/firmware.asm b/firmware.asm new file mode 100644 index 0000000..58b47c7 --- /dev/null +++ b/firmware.asm @@ -0,0 +1,135 @@ +; +; Project name: memory-led-game +; Description: Simple memory game using leds +; Source code: https://github.com/sergeyyarkov/attiny24a_memory-led-game +; Device: ATtiny24A +; Package: 14-pin-PDIP_SOIC +; Assembler: gavrasm v5.0 +; Clock frequency: 8MHz with CKDIV8 +; Fuses: lfuse: 0x42, hfuse: 0xDF, efuse: 0xFF, lock:0xFF +; +; Written by Sergey Yarkov 27.09.2021 + +.device ATtiny24A ; Setup device name +.list ; Enable listing + +; +; LEDS constants +.equ LED_DIR = DDRA +.equ LED_PORT = PORTA +.equ LED_PIN_0 = PINA0 +.equ LED_PIN_1 = PINA1 +.equ LED_PIN_2 = PINA2 +.equ LED_PIN_3 = PINA3 + +; +; Buttons constants +.equ BTN_DIR = DDRA +.equ BTN_PORT = PORTA +.equ BTN_PIN_4 = PINA4 +.equ BTN_PIN_5 = PINA5 +.equ BTN_PIN_6 = PINA6 +.equ BTN_PIN_7 = PINA7 + +; +; Buzzer constants +.equ BUZZ_DIR = DDRB +.equ BUZZ_PORT = PORTB +.equ BUZZ_PIN = PINB2 + +.macro init_stack_p ; Setup stack pointer + ldi @0, low(@1) + out SPL, @0 +.endm + +.org 0x00 ; Start program at 0x00 +.cseg ; Code segment + +main: ; Start up program + init_stack_p r16, RAMEND + rcall init_ports ; Initialize MCU ports + +loop: ; Program loop + rcall effect_1 + rjmp loop + +effect_1: + push r17 + push r18 + push r19 + + ; + ; Set first led to high + ldi r17, 0xf1 + out LED_PORT, r17 + rcall delay_100ms + + ; + ; Shift remaining bits + ldi r17, 0x01 + + ; + ; Loop counter + ldi r19, 3 + + effect_1_loop: + ldi r18, 0xf0 + lsl r17 + add r18, r17 + out LED_PORT, r18 + rcall delay_100ms + dec r19 + brne effect_1_loop + + pop r17 + pop r18 + pop r19 +ret + +init_ports: ; Init MCU ports + ; Setup PORTA + ldi r16, 0x0f + out DDRA, r16 ; Set directions of leds and buttons + swap r16 + out PORTA, r16 ; Set low signal on leds and pull-up on buttons + + ; Setup PORTB + sbi DDRB, BUZZ_PIN ; Set direction of buzzer pin to output + cbi PORTB, BUZZ_PIN ; Set low signal on buzzer + clr r16 +ret + +delay_1s: ; For 1MHz frequency +.equ outer_count = 100 +.equ inner_count = 2499 + +ldi r18, outer_count + _reset_d_1s: + ldi r24, low(inner_count) + ldi r25, high(inner_count) + _loop_d_1s: + sbiw r24, 1 + brne _loop_d_1s + + dec r18 + brne _reset_d_1s + ldi r18, outer_count +ret + +delay_100ms: +push r18 +push r19 + +ldi r18, 130 ; 1c +ldi r19, 222 ; 1c + _loop_d_100ms: + dec r19 ; 1c + brne _loop_d_100ms ; 2 or 1c = 665c + dec r18 ; 1c + brne _loop_d_100ms ; 2 or 1c + nop +pop r19 +pop r18 +ret + +info: .db "Memory led game. Written by Sergey Yarkov 27.09.2021" diff --git a/firmware.hex b/firmware.hex new file mode 100644 index 0000000..a26a0d7 --- /dev/null +++ b/firmware.hex @@ -0,0 +1,12 @@ +:020000020000FC +:100000000FED0DBF15D001D0FECF1F932F933F935F +:1000100011EF1BBB1ED011E033E020EF110F210FB9 +:100020002BBB17D03A95C9F71F912F913F91089597 +:100030000FE00ABB02950BBBBA9AC298002708953D +:1000400024E683EC99E00197F1F72A95D1F724E6AD +:1000500008952F933F9322E83EED3A95F1F72A95C4 +:10006000E1F700003F912F9108954D656D6F727912 +:10007000206C65642067616D652E20577269747409 +:10008000656E2062792053657267657920596172C7 +:0E0090006B6F762032372E30392E32303231FF +:00000001FF