diff --git a/.gitignore b/.gitignore deleted file mode 100644 index 17f1867..0000000 --- a/.gitignore +++ /dev/null @@ -1 +0,0 @@ -NOTES.md \ No newline at end of file diff --git a/.vscode/settings.json b/.vscode/settings.json deleted file mode 100644 index d739a1b..0000000 --- a/.vscode/settings.json +++ /dev/null @@ -1,3 +0,0 @@ -{ - "cmake.configureOnOpen": false -} diff --git a/.vscode/tasks.json b/.vscode/tasks.json deleted file mode 100644 index c12ef37..0000000 --- a/.vscode/tasks.json +++ /dev/null @@ -1,28 +0,0 @@ -{ - "tasks": [ - { - "label": "Compile", - "type": "shell", - "group": "build", - "command": "make", - "problemMatcher": [] - }, - { - "label": "Clean", - "type": "shell", - "group": "build", - "command": "make", - "args": ["clean"], - "problemMatcher": [] - }, - { - "label": "Flash", - "type": "shell", - "group": "build", - "command": "make", - "args": ["flash"], - "problemMatcher": [] - } - ], - "version": "2.0.0" -} diff --git a/Makefile b/Makefile index 6f318b7..fca8e2c 100644 --- a/Makefile +++ b/Makefile @@ -1,16 +1,113 @@ -SRC_FILE = firmware -MCU = t2313 -PROGRAMMER = usbtiny -BUILD_DIR = build +# +# There exist several targets which are by default empty and which can be +# used for execution of your targets. These targets are usually executed +# before and after some main targets. They are: +# +# .build-pre: called before 'build' target +# .build-post: called after 'build' target +# .clean-pre: called before 'clean' target +# .clean-post: called after 'clean' target +# .clobber-pre: called before 'clobber' target +# .clobber-post: called after 'clobber' target +# .all-pre: called before 'all' target +# .all-post: called after 'all' target +# .help-pre: called before 'help' target +# .help-post: called after 'help' target +# +# Targets beginning with '.' are not intended to be called on their own. +# +# Main targets can be executed directly, and they are: +# +# build build a specific configuration +# clean remove built files from a configuration +# clobber remove all built files +# all build all configurations +# help print help mesage +# +# Targets .build-impl, .clean-impl, .clobber-impl, .all-impl, and +# .help-impl are implemented in nbproject/makefile-impl.mk. +# +# Available make variables: +# +# CND_BASEDIR base directory for relative paths +# CND_DISTDIR default top distribution directory (build artifacts) +# CND_BUILDDIR default top build directory (object files, ...) +# CONF name of current configuration +# CND_ARTIFACT_DIR_${CONF} directory of build artifact (current configuration) +# CND_ARTIFACT_NAME_${CONF} name of build artifact (current configuration) +# CND_ARTIFACT_PATH_${CONF} path to build artifact (current configuration) +# CND_PACKAGE_DIR_${CONF} directory of package (current configuration) +# CND_PACKAGE_NAME_${CONF} name of package (current configuration) +# CND_PACKAGE_PATH_${CONF} path to package (current configuration) +# +# NOCDDL -all: build_dir - avrasm2 -fI -W+ie $(SRC_FILE).asm -o ./$(BUILD_DIR)/$(SRC_FILE).hex -l ./$(BUILD_DIR)/$(SRC_FILE).lss -flash: - avrdude -c $(PROGRAMMER) -p $(MCU) -U flash:w:./$(BUILD_DIR)/$(SRC_FILE).hex:i +# Environment +MKDIR=mkdir +CP=cp +CCADMIN=CCadmin +RANLIB=ranlib -clean: - rm -f $(BUILD_DIR)/* -build_dir: - mkdir -p ${BUILD_DIR} \ No newline at end of file +# build +build: .build-post + +.build-pre: +# Add your pre 'build' code here... + +.build-post: .build-impl +# Add your post 'build' code here... + + +# clean +clean: .clean-post + +.clean-pre: +# Add your pre 'clean' code here... +# WARNING: the IDE does not call this target since it takes a long time to +# simply run make. Instead, the IDE removes the configuration directories +# under build and dist directly without calling make. +# This target is left here so people can do a clean when running a clean +# outside the IDE. + +.clean-post: .clean-impl +# Add your post 'clean' code here... + + +# clobber +clobber: .clobber-post + +.clobber-pre: +# Add your pre 'clobber' code here... + +.clobber-post: .clobber-impl +# Add your post 'clobber' code here... + + +# all +all: .all-post + +.all-pre: +# Add your pre 'all' code here... + +.all-post: .all-impl +# Add your post 'all' code here... + + +# help +help: .help-post + +.help-pre: +# Add your pre 'help' code here... + +.help-post: .help-impl +# Add your post 'help' code here... + + + +# include project implementation makefile +include nbproject/Makefile-impl.mk + +# include project make variables +include nbproject/Makefile-variables.mk diff --git a/build/firmware.hex b/build/firmware.hex deleted file mode 100644 index d18cb02..0000000 --- a/build/firmware.hex +++ /dev/null @@ -1,40 +0,0 @@ -:020000020000FC -:0200000060C0DE -:020016003EC0EA -:10001A0000C04F935F930F935FB7409167004530DD -:10002A000CF403C0442740936700403041F493988E -:10003A0094989598929A00916600D6D070D04130E3 -:10004A0041F4929894989598939A00916500CCD02F -:10005A0066D0423041F4929893989598949A009178 -:10006A006400C2D05CD0433041F49298939894983B -:10007A00959A00916300B8D052D043954093670097 -:10008A005FBF0F915F914F9118950F931F932F9315 -:10009A003F930FB716B320916800122736B33093F7 -:1000AA00680012FF03C000C0B29B01960FBF3F91C8 -:1000BA002F911F910F9118950FED0DBF0EE701BB00 -:1000CA0001EC07BB0CE108BB00E20BBF0CE100BD71 -:1000DA0002E000BF05E003BF09E106BF01E009BF76 -:1000EA0011241092670080E090E0789463D0969A89 -:1000FA008AD0969888D0FACFEE24FF1841E1001FE3 -:10010A00111F4A9509F40895EE1CFF1CE21AF30A1E -:10011A0020F4E20EF31E8894F2CF0894F0CF0F93E6 -:10012A000FB800E40EB90BE10DB9769BFDCFC09A6A -:10013A00C0980F910895F89400E00CBD0CE30ABD35 -:10014A0005E408BD03E00EBDB99A08B706FFFDCF66 -:10015A00B99808B705FFFDCF0DD000E00CBD04E348 -:10016A000ABD08B706FFFDCF00270EBD0FEF08BF77 -:10017A0078940895B19B716008951F9313E308E082 -:10018A001F9108950F93F894726000E00CBD01E08E -:10019A000ABD09E008BDB99A08B706FFFDCF90FC71 -:1001AA00B99808B705FFFDCF00270EBD7D7F78946B -:1001BA000F910895F8945F9354E0A3E6B0E080931A -:1001CA0061009093620000916100109162002AE040 -:1001DA0030E092DFED9200936100109362005A952D -:1001EA0091F75F91789408950F931F93ECE4F2E0EE -:1001FA001127E00FF11F04901F910F91089503EB4F -:10020A000A95F1F708950F931F932F9325E01FEF97 -:10021A000FEF0A95F1F71A95D9F72A95C1F72F9199 -:10022A001F910F9108950F931F930FEF1FEF1A95C8 -:10023A00000000000000D9F70A95C1F71F910F913D -:0E024A000895C0F9A4B0999282F880909C00AB -:00000001FF diff --git a/build/firmware.lss b/build/firmware.lss deleted file mode 100644 index 14886be..0000000 --- a/build/firmware.lss +++ /dev/null @@ -1,1385 +0,0 @@ - -AVRASM ver. 2.2.7 firmware.asm Thu Jun 15 23:21:29 2023 - -firmware.asm(14): Including file 'tn2313Adef.inc' -firmware.asm(302): Including file 'div16u.asm' -div16u.asm(22): warning: Register r16 already defined by the .DEF directive -firmware.asm(302): 'div16u.asm' included form here -div16u.asm(23): warning: Register r17 already defined by the .DEF directive -firmware.asm(302): 'div16u.asm' included form here -div16u.asm(24): warning: Register r16 already defined by the .DEF directive -firmware.asm(302): 'div16u.asm' included form here -div16u.asm(25): warning: Register r17 already defined by the .DEF directive -firmware.asm(302): 'div16u.asm' included form here -firmware.asm(303): Including file 'usi.asm' -firmware.asm(14): Including file 'tn2313Adef.inc' -firmware.asm(302): Including file 'div16u.asm' -firmware.asm(303): Including file 'usi.asm' - - - ; Project name: thermostat - ; Description: Electronic thermostat on AVR Microcontroller - ; Source code: https://github.com/sergeyyarkov/attiny2313a_thermostat - ; Device: ATtiny2313A - ; Device Datasheet: http://ww1.microchip.com/downloads/en/DeviceDoc/doc8246.pdf - ; Package: SOIC-20W_7.5x12.8mm_P1.27mm - ; Assembler: AVR macro assembler 2.2.7 - ; Clock frequency: 8 MHz External Crystal Oscillator - ; Fuses: lfuse: 0xCF, hfuse: 0x9F, efuse: 0xFF, lock: 0xFF - ; - ; Written by Sergey Yarkov 22.01.2023 - - .INCLUDE "tn2313Adef.inc" - - ;***** Created: 2011-02-09 12:04 ******* Source: ATtiny2313A.xml ********* - ;************************************************************************* - ;* A P P L I C A T I O N N O T E F O R T H E A V R F A M I L Y - ;* - ;* Number : AVR000 - ;* File Name : "tn2313Adef.inc" - ;* Title : Register/Bit Definitions for the ATtiny2313A - ;* Date : 2011-02-09 - ;* Version : 2.35 - ;* Support E-mail : avr@atmel.com - ;* Target MCU : ATtiny2313A - ;* - ;* DESCRIPTION - ;* When including this file in the assembly program file, all I/O register - ;* names and I/O register bit names appearing in the data book can be used. - ;* In addition, the six registers forming the three data pointers X, Y and - ;* Z have been assigned names XL - ZH. Highest RAM address for Internal - ;* SRAM is also defined - ;* - ;* The Register names are represented by their hexadecimal address. - ;* - ;* The Register Bit names are represented by their bit number (0-7). - ;* - ;* Please observe the difference in using the bit names with instructions - ;* such as "sbr"/"cbr" (set/clear bit in register) and "sbrs"/"sbrc" - ;* (skip if bit in register set/cleared). The following example illustrates - ;* this: - ;* - ;* in r16,PORTB ;read PORTB latch - ;* sbr r16,(1< USI Wire Mode - ; USICS1 <--------------> USI Clock Source Select - ; USICLK <--------------> USI Clock Strobe - ; USITC <--------------> USI Toggle Clock (Enable clock generation) -000098 e10b ldi TEMP_REG_A, (1<= 5 - rjmp _indicate_1 - - _CLR_CURRENT_DIGIT: ; сброс текущего активного разряда в ноль - clr r20 - sts CURRENT_DIGIT, r20 - - _indicate_1: - cpi r20, 0 - brne _indicate_2 - - cbi PORTD, DIGIT_2_PIN - cbi PORTD, DIGIT_3_PIN - cbi PORTD, DIGIT_4_PIN - sbi PORTD, DIGIT_1_PIN - lds TEMP_REG_A, DIGITS+3 - rcall DISPLAY_DECODER - rcall USI_TRANSMIT - - _indicate_2: - cpi r20, 1 - brne _indicate_3 - - cbi PORTD, DIGIT_1_PIN - cbi PORTD, DIGIT_3_PIN - cbi PORTD, DIGIT_4_PIN - sbi PORTD, DIGIT_2_PIN - lds TEMP_REG_A, DIGITS+2 - rcall DISPLAY_DECODER - rcall USI_TRANSMIT - - _indicate_3: - cpi r20, 2 - brne _indicate_4 - - cbi PORTD, DIGIT_1_PIN - cbi PORTD, DIGIT_2_PIN - cbi PORTD, DIGIT_4_PIN - sbi PORTD, DIGIT_3_PIN - lds TEMP_REG_A, DIGITS+1 - rcall DISPLAY_DECODER - rcall USI_TRANSMIT - - _indicate_4: - cpi r20, 3 - brne _indicate_exit - - cbi PORTD, DIGIT_1_PIN - cbi PORTD, DIGIT_2_PIN - cbi PORTD, DIGIT_3_PIN - sbi PORTD, DIGIT_4_PIN - lds TEMP_REG_A, DIGITS - rcall DISPLAY_DECODER - rcall USI_TRANSMIT - - _indicate_exit: - inc r20 - sts CURRENT_DIGIT, r20 - out SREG, r21 - - pop r16 - pop r21 - pop r20 -reti - -; **** ОБРАБОТКА КНОПОК ****************************************** -PCINT0_vect: - push r16 - push r17 - push r18 - push r19 - - in r16, SREG - - in r17, SW_PIN - lds r18, PC_HISTORY - - eor r17, r18 - in r19, SW_PIN - sts PC_HISTORY, r19 - - _SW_PLUS_CHECK: - sbrs r17, SW_PLUS_PIN - rjmp _SW_EXIT - rjmp _SW_PLUS_HANDLER - - _SW_PLUS_HANDLER: - ; rcall DEBOUNCE_SW - sbis SW_PIN, SW_PLUS_PIN - adiw DISP_NUM_L, 1 - ;exit - - - ; sbis PINB, SW_PLUS_PIN - ; rjmp _sw_plus - - ; sbis PINB, SW_MINUS_PIN - ; rjmp _sw_minus - - ; sbis PINB, SW_SET_PIN - ; rjmp _sw_set - - ; rjmp _sw_exit - ; _sw_plus: - ; adiw DISP_NUM_L, 1 - ; rjmp _sw_exit - ; _sw_minus: - ; adiw DISP_NUM_L, 10 - ; rjmp _sw_exit - ; _sw_set: - ; adiw DISP_NUM_L, 63 - ; _sw_exit: - - _SW_EXIT: - out SREG, r16 - pop r19 - pop r18 - pop r17 - pop r16 -reti - -; **** СТАРТ ПРОГРАММЫ ******************************************* -RESET_vect: - ldi TEMP_REG_A, LOW(RAMEND) - out SPL, TEMP_REG_A - -; **** ПРОЦЕСС ИНИЦИАЛИЗАЦИИ МК ********************************** -MCU_INIT: - ; **** ИНИЦИАЛИЗАЦИЯ ПИНОВ ************************************* - outi r16, DDRD, (1< USI Wire Mode - ; USICS1 <--------------> USI Clock Source Select - ; USICLK <--------------> USI Clock Strobe - ; USITC <--------------> USI Toggle Clock (Enable clock generation) -000075 e10b ldi TEMP_REG_A, (1< Warning 009: Include defs not necessary, using internal values! - File: /home/sergeyyarkov/Documents/Projects/Firmwares/AVR/attiny2313a_thermostat/firmware.asm, Line: 14 - Source line: .INCLUDE "tn2313Adef.inc" - 15: .LIST - 16: - 17: .DEF TEMP_REG_A = r16 - 18: .DEF TEMP_REG_B = r17 - 19: .DEF DISP_NUM_L = r24 ; LSB числа которое сейчас на индикаторе - 20: .DEF DISP_NUM_H = r25 ; MSB числа которое сейчас на индикаторе - 21: - 22: .EQU DIGIT_1_PIN = PD2 ; Пин разряда индикатора 1 - 23: .EQU DIGIT_2_PIN = PD3 ; Пин разряда индикатора 2 - 24: .EQU DIGIT_3_PIN = PD4 ; Пин разряда индикатора 3 - 25: .EQU DIGIT_4_PIN = PD5 ; Пин разряда индикатора 4 - 26: - 27: .EQU LED_POWER_PIN = PD6 ; Светодиод, который говорит о том что питание подано - 28: - 29: .EQU ONE_WIRE_LINE = PB1 ; Пин шины 1-Wire - 30: .EQU ONE_WIRE_DDR = DDRB - 31: .EQU ONE_WIRE_PIN = PINB - 32: .DEF ONE_WIRE_FLAGS = r23 ; Флаги состояния для 1-Wire интерфейса - 33: .EQU OWPRF = 0 ; 1-Wire Флаг присутствия - 34: .EQU OWSB = 1 ; Флаг передачи одного бита - 35: - 36: ; **** КОМАНДЫ ДАТЧИКА ***************************************** - 37: .EQU DS18B20_CMD_CONVERTTEMP = 0x44 - 38: .EQU DS18B20_CMD_RSCRATCHPAD = 0xbe - 39: .EQU DS18B20_CMD_WSCRATCHPAD = 0x4e - 40: .EQU DS18B20_CMD_CPYSCRATCHPAD = 0x48 - 41: .EQU DS18B20_CMD_RECEEPROM = 0xb8 - 42: .EQU DS18B20_CMD_RPWRSUPPLY = 0xb4 - 43: .EQU DS18B20_CMD_SEARCHROM = 0xf0 - 44: .EQU DS18B20_CMD_READROM = 0x33 - 45: .EQU DS18B20_CMD_MATCHROM = 0x55 - 46: .EQU DS18B20_CMD_SKIPROM = 0xcc - 47: .EQU DS18B20_CMD_ALARMSEARCH = 0xec - 48: - 49: .EQU USI_LATCH_PIN = PB0 ; ST_CP на 74HC595 - 50: .EQU USI_DO_PIN = PB6 ; DS на 74HC595 - 51: .EQU USI_CLK_PIN = PB7 ; SH_CP на 74HC595 - 52: - 53: .EQU SW_PORT = PORTB - 54: .EQU SW_PIN = PINB - 55: .EQU SW_PLUS_PIN = PB2 ; Кнопка "Минус" - 56: .EQU SW_MINUS_PIN = PB3 ; Кнопка "Плюс" - 57: .EQU SW_SET_PIN = PB4 ; Кнопка "Установить" - 58: - 59: .EQU MCU_STATE_DEFAULT = 0x01 ; Режим измерения температуры и сравнения с заданными параметрами - 60: .EQU MCU_STATE_PROGRAM = 0x02 ; Режим настройки параметров в EEPROM - 61: .EQU MCU_STATE_ERROR = 0x03 ; Режим ошибки, например когда не подключен датчик - 62: - 63: ; **** МАКРОСЫ ************************************************** - 64: .MACRO outi - 65: ldi @0, @2 - 66: out @1, @0 - 67: .ENDMACRO - 68: - 69: .MACRO display_load - 70: ldi DISP_NUM_L, LOW(@0) - 71: ldi DISP_NUM_H, HIGH(@0) - 72: .ENDMACRO - 73: - 74: .MACRO _1_wire_pull - 75: sbi ONE_WIRE_DDR, ONE_WIRE_LINE - 76: .ENDMACRO - 77: - 78: .MACRO _1_wire_release - 79: cbi ONE_WIRE_DDR, ONE_WIRE_LINE - 80: .ENDMACRO - 81: - 82: ; **** СЕГМЕНТ ДАННЫХ ******************************************** - 83: .DSEG - 84: .ORG SRAM_START - 85: - 86: MCU_STATE: .BYTE 1 ; Текущее состояние МК - 87: SRAM_TEMP_1: .BYTE 2 ; Хранения временного 16-бит числа в ячейке - 88: DIGITS: .BYTE 4 ; Ячейки, где хранятся символы, для вывода на индикатор - 89: CURRENT_DIGIT: .BYTE 1 ; Номер разряда индикатора, который сейчас горит - 90: PC_HISTORY: .BYTE 1 ; История изменений состояния кнопок (необходимо для прерываня по изменению состояния пина) - 91: - 92: ; **** СЕГМЕНТ КОДА ********************************************** - 93: .CSEG - 94: - 95: .ORG 0x00 - 96: 000000 C05A rjmp RESET_vect - 97: - 98: .ORG 0x000B - 99: 00000B C03E rjmp PCINT0_vect - 100: - 101: .ORG 0x000D - 102: 00000D C000 rjmp TIMER0_COMPA_vect - 103: - 104: - 105: ; **** ДИНАМИЧЕСКАЯ ИНДИКАЦИЯ ************************************ - 106: TIMER0_COMPA_vect: - 107: 00000E 934F push r20 - 108: 00000F 935F push r21 - 109: 000010 930F push r16 - 110: 000011 B75F in r21, SREG - 111: - 112: 000012 9140 lds r20, CURRENT_DIGIT - 000013 0067 - 113: 000014 3045 cpi r20, 5 - 114: 000015 F40C brge reset_digit_idx - 115: 000016 C003 rjmp _indicate_1 - 116: - 117: reset_digit_idx: - 118: 000017 2744 clr r20 - 119: 000018 9340 sts CURRENT_DIGIT, r20 - 000019 0067 - 120: - 121: _indicate_1: - 122: 00001A 3040 cpi r20, 0 - 123: 00001B F441 brne _indicate_2 - 124: - 125: 00001C 9893 cbi PORTD, DIGIT_2_PIN - 126: 00001D 9894 cbi PORTD, DIGIT_3_PIN - 127: 00001E 9895 cbi PORTD, DIGIT_4_PIN - 128: 00001F 9A92 sbi PORTD, DIGIT_1_PIN - 129: 000020 9100 lds TEMP_REG_A, DIGITS+3 - 000021 0066 - 130: 000022 D0CE rcall DISPLAY_DECODER - 131: 000023 D06A rcall USI_TRANSMIT - 132: - 133: _indicate_2: - 134: 000024 3041 cpi r20, 1 - 135: 000025 F441 brne _indicate_3 - 136: - 137: 000026 9892 cbi PORTD, DIGIT_1_PIN - 138: 000027 9894 cbi PORTD, DIGIT_3_PIN - 139: 000028 9895 cbi PORTD, DIGIT_4_PIN - 140: 000029 9A93 sbi PORTD, DIGIT_2_PIN - 141: 00002A 9100 lds TEMP_REG_A, DIGITS+2 - 00002B 0065 - 142: 00002C D0C4 rcall DISPLAY_DECODER - 143: 00002D D060 rcall USI_TRANSMIT - 144: - 145: _indicate_3: - 146: 00002E 3042 cpi r20, 2 - 147: 00002F F441 brne _indicate_4 - 148: - 149: 000030 9892 cbi PORTD, DIGIT_1_PIN - 150: 000031 9893 cbi PORTD, DIGIT_2_PIN - 151: 000032 9895 cbi PORTD, DIGIT_4_PIN - 152: 000033 9A94 sbi PORTD, DIGIT_3_PIN - 153: 000034 9100 lds TEMP_REG_A, DIGITS+1 - 000035 0064 - 154: 000036 D0BA rcall DISPLAY_DECODER - 155: 000037 D056 rcall USI_TRANSMIT - 156: - 157: _indicate_4: - 158: 000038 3043 cpi r20, 3 - 159: 000039 F441 brne _indicate_exit - 160: - 161: 00003A 9892 cbi PORTD, DIGIT_1_PIN - 162: 00003B 9893 cbi PORTD, DIGIT_2_PIN - 163: 00003C 9894 cbi PORTD, DIGIT_3_PIN - 164: 00003D 9A95 sbi PORTD, DIGIT_4_PIN - 165: 00003E 9100 lds TEMP_REG_A, DIGITS - 00003F 0063 - 166: 000040 D0B0 rcall DISPLAY_DECODER - 167: 000041 D04C rcall USI_TRANSMIT - 168: - 169: _indicate_exit: - 170: 000042 9543 inc r20 - 171: 000043 9340 sts CURRENT_DIGIT, r20 - 000044 0067 - 172: 000045 BF5F out SREG, r21 - 173: - 174: 000046 910F pop r16 - 175: 000047 915F pop r21 - 176: 000048 914F pop r20 - 177: 000049 9518 reti - 178: - 179: ; **** ОБРАБОТКА КНОПОК ****************************************** - 180: PCINT0_vect: - 181: 00004A 930F push r16 - 182: 00004B B70F in r16, SREG - 183: - 184: 00004C 9BB2 sbis PINB, SW_PLUS_PIN - 185: 00004D C005 rjmp _sw_plus - 186: - 187: 00004E 9BB3 sbis PINB, SW_MINUS_PIN - 188: 00004F C005 rjmp _sw_minus - 189: - 190: 000050 9BB4 sbis PINB, SW_SET_PIN - 191: 000051 C005 rjmp _sw_set - 192: - 193: 000052 C005 rjmp _sw_exit - 194: _sw_plus: - 195: 000053 9601 adiw DISP_NUM_L, 1 - 196: 000054 C003 rjmp _sw_exit - 197: _sw_minus: - 198: 000055 960A adiw DISP_NUM_L, 10 - 199: 000056 C001 rjmp _sw_exit - 200: _sw_set: - 201: 000057 96CF adiw DISP_NUM_L, 63 - 202: _sw_exit: - 203: - 204: 000058 BF0F out SREG, r16 - 205: 000059 910F pop r16 - 206: 00005A 9518 reti - 207: - 208: ; **** СТАРТ ПРОГРАММЫ ******************************************* - 209: RESET_vect: - 210: 00005B ED0F ldi TEMP_REG_A, LOW(RAMEND) - 211: 00005C BF0D out SPL, TEMP_REG_A - 212: - 213: ; **** ПРОЦЕСС ИНИЦИАЛИЗАЦИИ МК ********************************** - 214: MCU_INIT: - 215: ; **** ИНИЦИАЛИЗАЦИЯ ПИНОВ ************************************* - 216: outi r16, DDRD, (1< USI Wire Mode - 15: ; USICS1 <--------------> USI Clock Source Select - 16: ; USICLK <--------------> USI Clock Strobe - 17: ; USITC <--------------> USI Toggle Clock (Enable clock generation) - 18: 000092 E10B ldi TEMP_REG_A, (1< Warning 004: Number of bytes on line is odd, added 00 to fit program memory! - File: /home/sergeyyarkov/Documents/Projects/Firmwares/AVR/attiny2313a_thermostat/firmware.asm, Line: 454 - Source line: .DB 0b10011100 ; ° - 000113 009C - 455: - 456: ; **** СЕГМЕНТ EEPROM ******************************************** - 457: ; .ESEG - 458: ; INFO: .DB "AVR Thermostat. Written by Sergey Yarkov 22.01.2023" - -List of symbols: -Type nDef nUsed Decimalval Hexval Name - T 1 1 89 59 ATTINY2313A - L 1 0 96 60 MCU_STATE - L 1 1 97 61 SRAM_TEMP_1 - L 1 6 99 63 DIGITS - L 1 4 103 67 CURRENT_DIGIT - L 1 0 104 68 PC_HISTORY - L 1 2 14 0E TIMER0_COMPA_VECT - L 1 2 23 17 RESET_DIGIT_IDX - L 1 2 26 1A _INDICATE_1 - L 1 2 36 24 _INDICATE_2 - L 1 2 46 2E _INDICATE_3 - L 1 2 56 38 _INDICATE_4 - L 1 2 66 42 _INDICATE_EXIT - L 1 2 74 4A PCINT0_VECT - L 1 2 83 53 _SW_PLUS - L 1 2 85 55 _SW_MINUS - L 1 2 87 57 _SW_SET - L 1 6 88 58 _SW_EXIT - L 1 2 91 5B RESET_VECT - L 1 0 93 5D MCU_INIT - L 1 2 117 75 LOOP - L 1 2 123 7B DIV16U - L 1 4 126 7E D16U_1 - L 1 2 131 83 D16U_2 - L 1 2 140 8C D16U_3 - L 1 8 142 8E USI_TRANSMIT - L 1 2 147 93 _USI_TRANSMIT_LOOP - L 1 0 154 9A _1_WIRE_DETECT_PRESENCE - L 1 2 164 A4 S1 - L 1 2 168 A8 S2 - L 1 2 176 B0 S3 - L 1 2 185 B9 _1_WIRE_CHECK_PRESENCE - L 1 0 188 BC _1_WIRE_SEND_BYTE - L 1 0 191 BF _S_L - L 1 0 193 C1 _1_WIRE_SEND_BIT - L 1 2 203 CB SB_1 - L 1 2 208 D0 SB_2 - L 1 2 217 D9 DISPLAY_UPD_DIGITS - L 1 2 225 E1 DIV_LOOP - L 1 8 241 F1 DISPLAY_DECODER - L 1 0 252 FC DELAY_68US - L 1 2 253 FD _D1_LOOP - L 1 0 256 0100 DELAY - L 1 2 259 0103 _DELAY_1 - L 1 2 260 0104 _DELAY_2 - L 1 2 270 010E DISPLAY_SYMBOLS - R 1 11 16 10 TEMP_REG_A - R 1 2 17 11 TEMP_REG_B - R 1 5 24 18 DISP_NUM_L - R 1 2 25 19 DISP_NUM_H - R 1 5 23 17 ONE_WIRE_FLAGS - R 1 5 14 0E DREM16UL - R 1 5 15 0F DREM16UH - R 1 1 16 10 DRES16UL - R 1 1 17 11 DRES16UH - R 1 2 16 10 DD16UL - R 1 2 17 11 DD16UH - R 1 3 18 12 DV16UL - R 1 3 19 13 DV16UH - R 1 2 20 14 DCNT16U - R 1 1 9 09 TRANSMIT_BIT - C 1 0 23 17 NOW_Y - C 1 0 6 06 NOW_M - C 1 0 14 0E NOW_D - C 1 0 45091 B023 NOW_I - C 1 5 2 02 DIGIT_1_PIN - C 1 5 3 03 DIGIT_2_PIN - C 1 5 4 04 DIGIT_3_PIN - C 1 5 5 05 DIGIT_4_PIN - C 1 1 6 06 LED_POWER_PIN - C 1 5 1 01 ONE_WIRE_LINE - C 1 4 23 17 ONE_WIRE_DDR - C 1 1 22 16 ONE_WIRE_PIN - C 1 3 0 00 OWPRF - C 1 2 1 01 OWSB - C 1 0 68 44 DS18B20_CMD_CONVERTTEMP - C 1 0 190 BE DS18B20_CMD_RSCRATCHPAD - C 1 0 78 4E DS18B20_CMD_WSCRATCHPAD - C 1 0 72 48 DS18B20_CMD_CPYSCRATCHPAD - C 1 0 184 B8 DS18B20_CMD_RECEEPROM - C 1 0 180 B4 DS18B20_CMD_RPWRSUPPLY - C 1 0 240 F0 DS18B20_CMD_SEARCHROM - C 1 1 51 33 DS18B20_CMD_READROM - C 1 0 85 55 DS18B20_CMD_MATCHROM - C 1 0 204 CC DS18B20_CMD_SKIPROM - C 1 0 236 EC DS18B20_CMD_ALARMSEARCH - C 1 3 0 00 USI_LATCH_PIN - C 1 1 6 06 USI_DO_PIN - C 1 1 7 07 USI_CLK_PIN - C 1 0 24 18 SW_PORT - C 1 0 22 16 SW_PIN - C 1 3 2 02 SW_PLUS_PIN - C 1 3 3 03 SW_MINUS_PIN - C 1 3 4 04 SW_SET_PIN - C 1 0 1 01 MCU_STATE_DEFAULT - C 1 0 2 02 MCU_STATE_PROGRAM - C 1 0 3 03 MCU_STATE_ERROR - C 1 6 97 61 DIVIDEND - C 1 2 10 0A DIVISOR - -List of macros: -nLines nUsed nParams Name - 2 18 3 OUTI - 2 1 1 DISPLAY_LOAD - 1 2 0 _1_WIRE_PULL - 1 2 0 _1_WIRE_RELEASE - -Program : 259 words. -Constants : 6 words. -Total program memory: 265 words. -Eeprom space : 0 bytes. -Data segment : 9 bytes. -Compilation completed, no errors. -Compilation ended 14.06.2023, 22:56:32 diff --git a/firmware.pro b/firmware.pro deleted file mode 100644 index a7fb572..0000000 --- a/firmware.pro +++ /dev/null @@ -1,12 +0,0 @@ -/avr_sim_project_file -/home/sergeyyarkov/Documents/Projects/Firmwares/AVR/attiny2313a_thermostat/firmware.asm -mainasm=firmware.asm -file=firmware.lst,345,35,266 -file=firmware.asm,1,1,1 -file=div16u.asm,1,1,1 -file=usi.asm,1,1,1 -clock=8000000 -device-type=ATtiny2313A -device-package=20-pin-PDIP_SOIC -windows=acepSTwz -alert1=0,0,-1,-1,,0,0 diff --git a/macros.asm b/macros.asm new file mode 100644 index 0000000..52eb242 --- /dev/null +++ b/macros.asm @@ -0,0 +1,24 @@ +.MACRO outi + ldi @0, @2 + out @1, @0 +.ENDMACRO + +.MACRO display_load + + ldi DISP_NUM_L, LOW(@0) + ldi DISP_NUM_H, HIGH(@0) +.ENDMACRO + +.MACRO ow_pull + sbi OW_DDR, OW_LINE +.ENDMACRO + +.MACRO ow_release + cbi OW_DDR, OW_LINE +.ENDMACRO + +.MACRO DELAY16 + ldi DELAY_16_r, HIGH(@0*F_CPU/4-2) + ldi DELAY_8_r, LOW(@0*F_CPU/4-2) + rcall DELAY_LOOP_16 +.ENDMACRO \ No newline at end of file diff --git a/main.asm b/main.asm new file mode 100644 index 0000000..b65c5be --- /dev/null +++ b/main.asm @@ -0,0 +1,546 @@ +; +; Project name: thermostat +; Description: Electronic thermostat on AVR Microcontroller +; Source code: https://github.com/sergeyyarkov/attiny2313a_thermostat +; Device: ATtiny2313A +; Device Datasheet: http://ww1.microchip.com/downloads/en/DeviceDoc/doc8246.pdf +; Assembler: AVR macro assembler 2.2.7 +; Clock frequency: 8 MHz External Crystal Oscillator +; Fuses: lfuse: 0xCF, hfuse: 0x9F, efuse: 0xFF, lock: 0xFF +; +; Written by Sergey Yarkov 22.01.2023 + +.LIST + +.INCLUDE "definitions.asm" +.INCLUDE "macros.asm" + + +// +; **** СЕГМЕНТ ДАННЫХ ******************************************** +.DSEG +.ORG SRAM_START + +MCU_STATE: .BYTE 1 ; Текущее состояние МК +SRAM_TEMP_1: .BYTE 2 ; Хранения временного 16-бит числа в ячейке +DIGITS: .BYTE 4 ; Ячейки, где хранятся символы, для вывода на индикатор +CURRENT_DIGIT: .BYTE 1 ; Номер разряда индикатора, который сейчас горит +SW_FLAGS: .BYTE 1 ; Состояние кнопок +HYSTERESIS: .BYTE 1 ; Отклонение температуры от уставки +OW_RECEIVE: .BYTE 1 +;// + + +// +; **** СЕГМЕНТ КОДА ********************************************** +.CSEG + +// +.ORG 0x00 + rjmp RESET_vect + +.ORG 0x000D + rjmp TIMER0_COMPA_vect +// + + +// +; **** ДИНАМИЧЕСКАЯ ИНДИКАЦИЯ ************************************ +TIMER0_COMPA_vect: + push r20 + push r21 + push r16 + in r21, SREG + + lds r20, CURRENT_DIGIT + cpi r20, 5 + brge _CLR_CURRENT_DIGIT ; сброс активного разряда если >= 5 + rjmp _indicate_1 + +_CLR_CURRENT_DIGIT: ; сброс текущего активного разряда в ноль + clr r20 + sts CURRENT_DIGIT, r20 + +_indicate_1: + cpi r20, 0 + brne _indicate_2 + + cbi PORTD, DIGIT_2_PIN + cbi PORTD, DIGIT_3_PIN + cbi PORTD, DIGIT_4_PIN + sbi PORTD, DIGIT_1_PIN + lds TEMP_REG_A, DIGITS+3 + rcall DISPLAY_DECODER + rcall USI_TRANSMIT + +_indicate_2: + cpi r20, 1 + brne _indicate_3 + + cbi PORTD, DIGIT_1_PIN + cbi PORTD, DIGIT_3_PIN + cbi PORTD, DIGIT_4_PIN + sbi PORTD, DIGIT_2_PIN + lds TEMP_REG_A, DIGITS+2 + rcall DISPLAY_DECODER + rcall USI_TRANSMIT + +_indicate_3: + cpi r20, 2 + brne _indicate_4 + + cbi PORTD, DIGIT_1_PIN + cbi PORTD, DIGIT_2_PIN + cbi PORTD, DIGIT_4_PIN + sbi PORTD, DIGIT_3_PIN + lds TEMP_REG_A, DIGITS+1 + rcall DISPLAY_DECODER + rcall USI_TRANSMIT + +_indicate_4: + cpi r20, 3 + brne _indicate_exit + + cbi PORTD, DIGIT_1_PIN + cbi PORTD, DIGIT_2_PIN + cbi PORTD, DIGIT_3_PIN + sbi PORTD, DIGIT_4_PIN + lds TEMP_REG_A, DIGITS + rcall DISPLAY_DECODER + rcall USI_TRANSMIT + +_indicate_exit: + inc r20 + sts CURRENT_DIGIT, r20 + out SREG, r21 + + pop r16 + pop r21 + pop r20 + reti +;// + +; **** СТАРТ ПРОГРАММЫ ******************************************* +RESET_vect: + ldi TEMP_REG_A, LOW(RAMEND) + out SPL, TEMP_REG_A + +// +; **** ПРОЦЕСС ИНИЦИАЛИЗАЦИИ МК ********************************** +MCU_INIT: + ; **** ИНИЦИАЛИЗАЦИЯ ПИНОВ ************************************* + outi r16, DDRD, (1< + +// +; **** ГЛАВНЫЙ ЦИКЛ ********************************************** +LOOP: + ; rcall DISPLAY_UPD_DIGITS + lds r16, MCU_STATE ; получаем текущее состояние МК + +_STATE_DEFAULT: + cpi r16, MCU_STATE_DEFAULT + brne _STATE_PROGRAM + rcall DISPLAY_UPD_DIGITS +; rcall TEMP_RD + sbrc OWFR, OWPRF + sbi PORTD, PD6 + sbrs OWFR, OWPRF + cbi PORTD, PD6 + rcall TEMP_CONV + rcall DEBOUNCE_SW + rcall DEBOUNCE_SW + rcall DEBOUNCE_SW + rcall DEBOUNCE_SW + rcall TEMP_RD + lds r17, OW_RECEIVE + mov DISP_NUM_L, r17 + ldi DISP_NUM_H, 0 + +_STATE_PROGRAM: + cpi r16, MCU_STATE_PROGRAM + brne _STATE_ERROR + rcall DISPLAY_UPD_DIGITS + rcall SW_CHECK_PROCESS +_STATE_ERROR: + cpi r16, MCU_STATE_ERROR + brne LOOP + ldi r17, 11 + sts DIGITS, r17 + sts DIGITS+1, r17 + sts DIGITS+2, r17 + sts DIGITS+3, r17 + nop + + rjmp LOOP +// + + +; **** ПОДПРОГРАММЫ ********************************************** +.INCLUDE "div16u.asm" + +DELAY_LOOP_16: + subi DELAY_8_r, 1 + sbci DELAY_16_r, 0 + brcc DELAY_LOOP_16 + ret + +// +TEMP_RD: + push r16 + cli + + rcall OW_PRESENCE + ldi r16, DS18B20_CMD_SKIPROM + mov OW_CMD_r, r16 + rcall OW_SEND_BYTE + + ldi r16, DS18B20_CMD_RSCRATCHPAD + mov OW_CMD_r, r16 + rcall OW_SEND_BYTE + + rcall OW_RD_BYTE + + sei + pop r16 + ret +; +TEMP_CONV: + push r16 + cli + + rcall OW_PRESENCE + ldi r16, DS18B20_CMD_SKIPROM + mov OW_CMD_r, r16 + rcall OW_SEND_BYTE + + ldi r16, DS18B20_CMD_CONVERTTEMP + mov OW_CMD_r, r16 + rcall OW_SEND_BYTE + + sei + pop r16 + ret +// + + +// +; **** ОТПРАВКА БАЙТА В СДВИГОВЫЙ РЕГИСТР ************************* +USI_TRANSMIT: + push r16 + out USIDR, r0 ; Байт для отправки всегда находится в регистре r0. Помещаем данные в регистр USIDR. + + ; Enable USI Overflow Interrupt Flag (will be 0 if transfer is not compeleted) + ldi TEMP_REG_A, (1< USI Wire Mode + ; USICS1 <--------------> USI Clock Source Select + ; USICLK <--------------> USI Clock Strobe + ; USITC <--------------> USI Toggle Clock (Enable clock generation) + ldi TEMP_REG_A, (1< + + +// +SW_CHECK_PROCESS: + rcall DEBOUNCE_SW + sbis SW_PIN, SW_PLUS_PIN + adiw DISP_NUM_L, 1 + + sbis SW_PIN, SW_MINUS_PIN + sbiw DISP_NUM_L, 1 + ret// + + +// +// +; **** ОПРОС ПРИСУТСТВИЯ УСТРОЙСТВА ****************************** +OW_PRESENCE: + ow_pull + DELAY16 480 + ow_release + DELAY16 70 + rcall OW_CHECK_PRESENCE + DELAY16 410 + ret +// + +// +; **** ПРОВЕРКА НАЛИЧИЯ УСТРОЙСТВА ******************************* +; Если подчиненное устройство притянет шину, то устанавливаем флаг OWPRF в единицу в регистре флагов +; +OW_CHECK_PRESENCE: + sbis OW_PIN, OW_LINE + sbr OWFR, (1< + +// +OW_SEND_BYTE: + push r16 + push r17 + mov r16, OW_CMD_r + ldi r17, 8 +_OW_SEND_BYTE_LOOP: + lsr r16 + brcc _OW_SEND_0 + brcs _OW_SEND_1 +_OW_SEND_0: + ow_pull + DELAY16 60 + ow_release + DELAY16 10 + rjmp _OW_SEND_BYTE_END +_OW_SEND_1: + ow_pull + DELAY16 6 + ow_release + DELAY16 64 +_OW_SEND_BYTE_END: + dec r17 + brne _OW_SEND_BYTE_LOOP + pop r17 + pop r16 + ret +// + +// +OW_RD_BYTE: + push r16 + push r17 + ldi r16, 8 +_OW_RD_BYTE_LP: + ow_pull + DELAY16 6 + ow_release + DELAY16 9 + lds r17, OW_RECEIVE + lsr r17 + sbic OW_PIN, OW_LINE + sbr r17, (1<<7) + sts OW_RECEIVE, r17 + DELAY16 55 + dec r16 + brne _OW_RD_BYTE_LP + pop r17 + pop r16 + ret +// + + +// + + +// +; **** ПОЛУЧЕНИЕ ЦИФР ИЗ 16-ТИ БИТНОГО ЧИСЛА ********************* +; Описание: Перемещает цифры числа в соответствующие ячейки памяти в SRAM +; путем деления этого числа несколько раз +DISPLAY_UPD_DIGITS: + cli + push r21 + ldi r21, 4 ; (4 раза делим) т.к индикатор четырех разрядный + + ; инициализация указателя (за каждый проход цикла будет инкрементироваться) + ldi XL, LOW(DIGITS) + ldi XH, HIGH(DIGITS) + + .equ dividend = SRAM_TEMP_1 ; число которе будем делить + .equ divisor = 10 ; на что делим + + ; загружаем число которое хотим поделить в адрес SRAM делимого + sts dividend, DISP_NUM_L + sts dividend+1, DISP_NUM_H + + ; четыре раза производим деление для получения остатков +DIV_LOOP: + ; заполняем нужные регистры + lds dd16uL, dividend + lds dd16uH, dividend+1 + ldi dv16uL, LOW(divisor) + ldi dv16uH, HIGH(divisor) + + rcall div16u ; делим + + st X+, drem16uL ; сохраняем остаток в ячейку по указателю и увеличиваем его + + ; обновляем делимое + sts dividend, dres16uL + sts dividend+1, dres16uH + + dec r21 ; декрементируем счетчик цикла + brne DIV_LOOP ; делим еще раз если не 0 + pop r21 + sei + ret +// + + +// +; **** ЗАГРУЖАЕТ НУЖНЫЙ АДРЕС СИМВОЛА В R0 *********************** +DISPLAY_DECODER: + push r16 + push r17 + ldi ZL, LOW(2*DISPLAY_SYMBOLS) + ldi ZH, HIGH(2*DISPLAY_SYMBOLS) + + clr TEMP_REG_B + add ZL, TEMP_REG_A + adc ZH, TEMP_REG_B + + lpm r0, Z + pop r17 + pop r16 + ret// + + +// +DEBOUNCE_SW: + push r16 + push r17 + push r18 + + ldi r18, 10 +_loop_2: + ldi r17, 255 +_loop_0: + ldi r16, 255 +_dec_0: + dec r16 + brne _dec_0 +_loop_1: + dec r17 + brne _loop_0 +_loop_3: + dec r18 + brne _loop_2 + + pop r18 + pop r17 + pop r16 + ret// + + +// +DELAY: + push r16 + push r17 + + ldi r16, 255 +_DELAY_1: + ldi r17, 255 +_DELAY_2: + dec r17 + nop + nop + nop + brne _DELAY_2 + + dec r16 + brne _DELAY_1 + + pop r17 + pop r16 + ret // + + +// +DISPLAY_SYMBOLS: + ; HGFEDCBA HGFEDCBA + .DB 0b11000000, 0b11111001 ; 0, 1 + .DB 0b10100100, 0b10110000 ; 2, 3 + .DB 0b10011001, 0b10010010 ; 4, 5 + .DB 0b10000010, 0b11111000 ; 6, 7 + .DB 0b10000000, 0b10010000 ; 8, 9 + .DB 0b10011100, 0b10111111 ; °, -// + +// + +// +; **** СЕГМЕНТ EEPROM ******************************************** +; .ESEG +; INFO: .DB "AVR Thermostat. Written by Sergey Yarkov 22.01.2023" +; diff --git a/main.hex b/main.hex new file mode 100644 index 0000000..5619d00 --- /dev/null +++ b/main.hex @@ -0,0 +1,44 @@ +:020000020000FC +:0200000049C0F5 +:10001A0000C04F935F930F935FB7409167004530DD +:10002A000CF403C0442740936700403041F493988E +:10003A0094989598929A00916600FED087D04130A4 +:10004A0041F4929894989598939A00916500F4D007 +:10005A007DD0423041F4929893989598949A009161 +:10006A006400EAD073D0433041F4929893989498FC +:10007A00959A00916300E0D069D043954093670058 +:10008A005FBF0F915F914F9118950FED0DBF0EE76E +:10009A0001BB01EC07BB0CE108BB02E000BF05E0B5 +:1000AA0003BF09E106BF01E009BF112410926700EE +:1000BA0000E000936000002700936A0080E090E06F +:1000CA00C6D056D00CEC802E66D004E4802E63D0C5 +:1000DA004FD00CEC802E5FD00EEB802E5CD00091BE +:1000EA006A00802F90E000916000003039F48AD0D5 +:1000FA0070FD969A70FF9698AAD0A9D0013011F493 +:10010A0081D030D0023079F71BE01093630010934E +:10011A00640010936500109366000000E4CFEE249B +:10012A00FF1841E1001F111F4A9509F40895EE1CBA +:10013A00FF1CE21AF30A20F4E20EF31E8894F2CFAF +:10014A000894F0CF41503040E8F708950F930FB864 +:10015A0000E40EB90BE10DB9769BFDCFC09AC098A9 +:10016A000F91089574D0B29B0196B39B019708959D +:10017A00B99A33E04EEBE6DFB99830E04AE8E2DFBD +:10018A0004D033E042E3DEDF0895B19B716002C020 +:10019A00B1997E7F08950F931F93082D18E0069555 +:1001AA0008F448F0B99A30E046E7CCDFB99830E075 +:1001BA0042E1C8DF08C0B99A30E04AE0C3DFB99823 +:1001CA0030E04EE7BFDF1A9551F71F910F9108955E +:1001DA000F931F9308E0B99A30E04AE0B3DFB99869 +:1001EA0030E040E1AFDF10916A001695B1991068CE +:1001FA0010936A0030E04CE6A5DF0A9561F71F917B +:10020A000F910895F8945F9354E0A3E6B0E08093C9 +:10021A0061009093620000916100109162002AE0EF +:10022A0030E07DDFED9200936100109362005A95F1 +:10023A0091F75F91789408950F931F93E4E9F2E0A0 +:10024A001127E00FF11F04901F910F9108950F934A +:10025A001F932F932AE01FEF0FEF0A95F1F71A95D4 +:10026A00D9F72A95C1F72F911F910F9108950F93EE +:10027A001F930FEF1FEF1A95000000000000D9F737 +:10028A000A95C1F71F910F910895C0F9A4B09992E8 +:06029A0082F880909CBF79 +:00000001FF diff --git a/nbproject/Makefile-default.mk b/nbproject/Makefile-default.mk new file mode 100644 index 0000000..f5d9673 --- /dev/null +++ b/nbproject/Makefile-default.mk @@ -0,0 +1,171 @@ +# +# Generated Makefile - do not edit! +# +# Edit the Makefile in the project folder instead (../Makefile). Each target +# has a -pre and a -post target defined where you can add customized code. +# +# This makefile implements configuration specific macros and targets. + + +# Include project Makefile +ifeq "${IGNORE_LOCAL}" "TRUE" +# do not include local makefile. User is passing all local related variables already +else +include Makefile +# Include makefile containing local settings +ifeq "$(wildcard nbproject/Makefile-local-default.mk)" "nbproject/Makefile-local-default.mk" +include nbproject/Makefile-local-default.mk +endif +endif + +# Environment +MKDIR=mkdir -p +RM=rm -f +MV=mv +CP=cp + +# Macros +CND_CONF=default +ifeq ($(TYPE_IMAGE), DEBUG_RUN) +IMAGE_TYPE=debug +OUTPUT_SUFFIX=obj +DEBUGGABLE_SUFFIX=obj +FINAL_IMAGE=${DISTDIR}/attiny2313a_thermostat.X.${IMAGE_TYPE}.${OUTPUT_SUFFIX} +else +IMAGE_TYPE=production +OUTPUT_SUFFIX=obj +DEBUGGABLE_SUFFIX=obj +FINAL_IMAGE=${DISTDIR}/attiny2313a_thermostat.X.${IMAGE_TYPE}.${OUTPUT_SUFFIX} +endif + +ifeq ($(COMPARE_BUILD), true) +COMPARISON_BUILD= +else +COMPARISON_BUILD= +endif + +ifdef SUB_IMAGE_ADDRESS + +else +SUB_IMAGE_ADDRESS_COMMAND= +endif + +# Object Directory +OBJECTDIR=build/${CND_CONF}/${IMAGE_TYPE} + +# Distribution Directory +DISTDIR=dist/${CND_CONF}/${IMAGE_TYPE} + +# Source Files Quoted if spaced +SOURCEFILES_QUOTED_IF_SPACED=main.asm div16u.asm definitions.asm macros.asm + +# Object Files Quoted if spaced +OBJECTFILES_QUOTED_IF_SPACED=${OBJECTDIR}/main.obj ${OBJECTDIR}/div16u.obj ${OBJECTDIR}/definitions.obj ${OBJECTDIR}/macros.obj +POSSIBLE_DEPFILES=${OBJECTDIR}/main.obj.d ${OBJECTDIR}/div16u.obj.d ${OBJECTDIR}/definitions.obj.d ${OBJECTDIR}/macros.obj.d + +# Object Files +OBJECTFILES=${OBJECTDIR}/main.obj ${OBJECTDIR}/div16u.obj ${OBJECTDIR}/definitions.obj ${OBJECTDIR}/macros.obj + +# Source Files +SOURCEFILES=main.asm div16u.asm definitions.asm macros.asm + +# Pack Options +PACK_ASSEMBLER_OPTIONS=-I "${DFP_DIR}/avrasm/inc" -i tn2313Adef.inc + + + +CFLAGS= +ASFLAGS= +LDLIBSOPTIONS= + +############# Tool locations ########################################## +# If you copy a project from one host to another, the path where the # +# compiler is installed may be different. # +# If you open this project with MPLAB X in the new host, this # +# makefile will be regenerated and the paths will be corrected. # +####################################################################### +# fixDeps replaces a bunch of sed/cat/printf statements that slow down the build +FIXDEPS=fixDeps + +.build-conf: ${BUILD_SUBPROJECTS} +ifneq ($(INFORMATION_MESSAGE), ) + @echo $(INFORMATION_MESSAGE) +endif + ${MAKE} -f nbproject/Makefile-default.mk ${DISTDIR}/attiny2313a_thermostat.X.${IMAGE_TYPE}.${OUTPUT_SUFFIX} + +# ------------------------------------------------------------------------------------ +# Rules for buildStep: assemble +ifeq ($(TYPE_IMAGE), DEBUG_RUN) +${OBJECTDIR}/main.obj: main.asm nbproject/Makefile-${CND_CONF}.mk + @${MKDIR} ${DISTDIR} + @${MKDIR} "${OBJECTDIR}" + @${RM} ${OBJECTDIR}/main.obj + ${MP_AS} -fI -W+ie ${PACK_ASSEMBLER_OPTIONS} -d ${DISTDIR}/attiny2313a_thermostat.X.${IMAGE_TYPE}.${DEBUGGABLE_SUFFIX} -m ${DISTDIR}/attiny2313a_thermostat.X.${IMAGE_TYPE}.map -S ${DISTDIR}/attiny2313a_thermostat.X.${IMAGE_TYPE}.tmp main.asm +${OBJECTDIR}/div16u.obj: div16u.asm nbproject/Makefile-${CND_CONF}.mk + @${MKDIR} ${DISTDIR} + @${MKDIR} "${OBJECTDIR}" + @${RM} ${OBJECTDIR}/div16u.obj + ${MP_AS} -fI -W+ie ${PACK_ASSEMBLER_OPTIONS} -d ${DISTDIR}/attiny2313a_thermostat.X.${IMAGE_TYPE}.${DEBUGGABLE_SUFFIX} -m ${DISTDIR}/attiny2313a_thermostat.X.${IMAGE_TYPE}.map -S ${DISTDIR}/attiny2313a_thermostat.X.${IMAGE_TYPE}.tmp div16u.asm +${OBJECTDIR}/definitions.obj: definitions.asm nbproject/Makefile-${CND_CONF}.mk + @${MKDIR} ${DISTDIR} + @${MKDIR} "${OBJECTDIR}" + @${RM} ${OBJECTDIR}/definitions.obj + ${MP_AS} -fI -W+ie ${PACK_ASSEMBLER_OPTIONS} -d ${DISTDIR}/attiny2313a_thermostat.X.${IMAGE_TYPE}.${DEBUGGABLE_SUFFIX} -m ${DISTDIR}/attiny2313a_thermostat.X.${IMAGE_TYPE}.map -S ${DISTDIR}/attiny2313a_thermostat.X.${IMAGE_TYPE}.tmp definitions.asm +${OBJECTDIR}/macros.obj: macros.asm nbproject/Makefile-${CND_CONF}.mk + @${MKDIR} ${DISTDIR} + @${MKDIR} "${OBJECTDIR}" + @${RM} ${OBJECTDIR}/macros.obj + ${MP_AS} -fI -W+ie ${PACK_ASSEMBLER_OPTIONS} -d ${DISTDIR}/attiny2313a_thermostat.X.${IMAGE_TYPE}.${DEBUGGABLE_SUFFIX} -m ${DISTDIR}/attiny2313a_thermostat.X.${IMAGE_TYPE}.map -S ${DISTDIR}/attiny2313a_thermostat.X.${IMAGE_TYPE}.tmp macros.asm +else +${OBJECTDIR}/main.obj: main.asm nbproject/Makefile-${CND_CONF}.mk + @${MKDIR} ${DISTDIR} + @${MKDIR} "${OBJECTDIR}" + @${RM} ${OBJECTDIR}/main.obj + ${MP_AS} -fI -W+ie ${PACK_ASSEMBLER_OPTIONS} -d ${DISTDIR}/attiny2313a_thermostat.X.${IMAGE_TYPE}.${DEBUGGABLE_SUFFIX} -S ${DISTDIR}/attiny2313a_thermostat.X.${IMAGE_TYPE}.tmp -o ${DISTDIR}/attiny2313a_thermostat.X.${IMAGE_TYPE}.hex -m ${DISTDIR}/attiny2313a_thermostat.X.${IMAGE_TYPE}.map -l ${DISTDIR}/attiny2313a_thermostat.X.${IMAGE_TYPE}.lss main.asm +${OBJECTDIR}/div16u.obj: div16u.asm nbproject/Makefile-${CND_CONF}.mk + @${MKDIR} ${DISTDIR} + @${MKDIR} "${OBJECTDIR}" + @${RM} ${OBJECTDIR}/div16u.obj + ${MP_AS} -fI -W+ie ${PACK_ASSEMBLER_OPTIONS} -d ${DISTDIR}/attiny2313a_thermostat.X.${IMAGE_TYPE}.${DEBUGGABLE_SUFFIX} -S ${DISTDIR}/attiny2313a_thermostat.X.${IMAGE_TYPE}.tmp -o ${DISTDIR}/attiny2313a_thermostat.X.${IMAGE_TYPE}.hex -m ${DISTDIR}/attiny2313a_thermostat.X.${IMAGE_TYPE}.map -l ${DISTDIR}/attiny2313a_thermostat.X.${IMAGE_TYPE}.lss div16u.asm +${OBJECTDIR}/definitions.obj: definitions.asm nbproject/Makefile-${CND_CONF}.mk + @${MKDIR} ${DISTDIR} + @${MKDIR} "${OBJECTDIR}" + @${RM} ${OBJECTDIR}/definitions.obj + ${MP_AS} -fI -W+ie ${PACK_ASSEMBLER_OPTIONS} -d ${DISTDIR}/attiny2313a_thermostat.X.${IMAGE_TYPE}.${DEBUGGABLE_SUFFIX} -S ${DISTDIR}/attiny2313a_thermostat.X.${IMAGE_TYPE}.tmp -o ${DISTDIR}/attiny2313a_thermostat.X.${IMAGE_TYPE}.hex -m ${DISTDIR}/attiny2313a_thermostat.X.${IMAGE_TYPE}.map -l ${DISTDIR}/attiny2313a_thermostat.X.${IMAGE_TYPE}.lss definitions.asm +${OBJECTDIR}/macros.obj: macros.asm nbproject/Makefile-${CND_CONF}.mk + @${MKDIR} ${DISTDIR} + @${MKDIR} "${OBJECTDIR}" + @${RM} ${OBJECTDIR}/macros.obj + ${MP_AS} -fI -W+ie ${PACK_ASSEMBLER_OPTIONS} -d ${DISTDIR}/attiny2313a_thermostat.X.${IMAGE_TYPE}.${DEBUGGABLE_SUFFIX} -S ${DISTDIR}/attiny2313a_thermostat.X.${IMAGE_TYPE}.tmp -o ${DISTDIR}/attiny2313a_thermostat.X.${IMAGE_TYPE}.hex -m ${DISTDIR}/attiny2313a_thermostat.X.${IMAGE_TYPE}.map -l ${DISTDIR}/attiny2313a_thermostat.X.${IMAGE_TYPE}.lss macros.asm +endif + +# ------------------------------------------------------------------------------------ +# Rules for buildStep: link +ifeq ($(TYPE_IMAGE), DEBUG_RUN) +${DISTDIR}/attiny2313a_thermostat.X.${IMAGE_TYPE}.${OUTPUT_SUFFIX}: ${OBJECTFILES} nbproject/Makefile-${CND_CONF}.mk + +else +${DISTDIR}/attiny2313a_thermostat.X.${IMAGE_TYPE}.${OUTPUT_SUFFIX}: ${OBJECTFILES} nbproject/Makefile-${CND_CONF}.mk + +endif + + +# Subprojects +.build-subprojects: + + +# Subprojects +.clean-subprojects: + +# Clean Targets +.clean-conf: ${CLEAN_SUBPROJECTS} + ${RM} -r ${OBJECTDIR} + ${RM} -r ${DISTDIR} + +# Enable dependency checking +.dep.inc: .depcheck-impl + +DEPFILES=$(shell "${PATH_TO_IDE_BIN}"mplabwildcard ${POSSIBLE_DEPFILES}) +ifneq (${DEPFILES},) +include ${DEPFILES} +endif diff --git a/nbproject/Makefile-genesis.properties b/nbproject/Makefile-genesis.properties new file mode 100644 index 0000000..1a33137 --- /dev/null +++ b/nbproject/Makefile-genesis.properties @@ -0,0 +1,14 @@ +# +#Mon Jun 19 12:50:04 MSK 2023 +default.languagetoolchain.version=2.2.7 +default.Pack.dfplocation=/home/sergeyyarkov/.mchp_packs/Microchip/ATtiny_DFP/3.0.151 +default.com-microchip-mplab-mdbcore-simulator-Simulator.md5=19e4dc0f223322f74cda227c3c12c71c +conf.ids=default +default.languagetoolchain.dir=/usr/bin +host.id=1707-dsfu-bg +configurations-xml=d50925b65bb9625a2bd338eb6fa64d60 +default.com-microchip-mplab-nbide-toolchain-avrasm-AVRASMLanguageToolchain.md5=0e94da8ed93e9650ffef50929833a79f +com-microchip-mplab-nbide-embedded-makeproject-MakeProject.md5=6e02ca5e9f5042ffd365b42ab82d3a9b +user-defined-mime-resolver-xml=none +proj.dir=/home/sergeyyarkov/Documents/Projects/Firmwares/AVR/attiny2313a_thermostat.X +host.platform=linux diff --git a/nbproject/Makefile-impl.mk b/nbproject/Makefile-impl.mk new file mode 100644 index 0000000..101db18 --- /dev/null +++ b/nbproject/Makefile-impl.mk @@ -0,0 +1,69 @@ +# +# Generated Makefile - do not edit! +# +# Edit the Makefile in the project folder instead (../Makefile). Each target +# has a pre- and a post- target defined where you can add customization code. +# +# This makefile implements macros and targets common to all configurations. +# +# NOCDDL + + +# Building and Cleaning subprojects are done by default, but can be controlled with the SUB +# macro. If SUB=no, subprojects will not be built or cleaned. The following macro +# statements set BUILD_SUB-CONF and CLEAN_SUB-CONF to .build-reqprojects-conf +# and .clean-reqprojects-conf unless SUB has the value 'no' +SUB_no=NO +SUBPROJECTS=${SUB_${SUB}} +BUILD_SUBPROJECTS_=.build-subprojects +BUILD_SUBPROJECTS_NO= +BUILD_SUBPROJECTS=${BUILD_SUBPROJECTS_${SUBPROJECTS}} +CLEAN_SUBPROJECTS_=.clean-subprojects +CLEAN_SUBPROJECTS_NO= +CLEAN_SUBPROJECTS=${CLEAN_SUBPROJECTS_${SUBPROJECTS}} + + +# Project Name +PROJECTNAME=attiny2313a_thermostat.X + +# Active Configuration +DEFAULTCONF=default +CONF=${DEFAULTCONF} + +# All Configurations +ALLCONFS=default + + +# build +.build-impl: .build-pre + ${MAKE} -f nbproject/Makefile-${CONF}.mk SUBPROJECTS=${SUBPROJECTS} .build-conf + + +# clean +.clean-impl: .clean-pre + ${MAKE} -f nbproject/Makefile-${CONF}.mk SUBPROJECTS=${SUBPROJECTS} .clean-conf + +# clobber +.clobber-impl: .clobber-pre .depcheck-impl + ${MAKE} SUBPROJECTS=${SUBPROJECTS} CONF=default clean + + + +# all +.all-impl: .all-pre .depcheck-impl + ${MAKE} SUBPROJECTS=${SUBPROJECTS} CONF=default build + + + +# dependency checking support +.depcheck-impl: +# @echo "# This code depends on make tool being used" >.dep.inc +# @if [ -n "${MAKE_VERSION}" ]; then \ +# echo "DEPFILES=\$$(wildcard \$$(addsuffix .d, \$${OBJECTFILES}))" >>.dep.inc; \ +# echo "ifneq (\$${DEPFILES},)" >>.dep.inc; \ +# echo "include \$${DEPFILES}" >>.dep.inc; \ +# echo "endif" >>.dep.inc; \ +# else \ +# echo ".KEEP_STATE:" >>.dep.inc; \ +# echo ".KEEP_STATE_FILE:.make.state.\$${CONF}" >>.dep.inc; \ +# fi diff --git a/nbproject/Makefile-local-default.mk b/nbproject/Makefile-local-default.mk new file mode 100644 index 0000000..cf8bf09 --- /dev/null +++ b/nbproject/Makefile-local-default.mk @@ -0,0 +1,37 @@ +# +# Generated Makefile - do not edit! +# +# +# This file contains information about the location of compilers and other tools. +# If you commmit this file into your revision control server, you will be able to +# to checkout the project and build it from the command line with make. However, +# if more than one person works on the same project, then this file might show +# conflicts since different users are bound to have compilers in different places. +# In that case you might choose to not commit this file and let MPLAB X recreate this file +# for each user. The disadvantage of not commiting this file is that you must run MPLAB X at +# least once so the file gets created and the project can be built. Finally, you can also +# avoid using this file at all if you are only building from the command line with make. +# You can invoke make with the values of the macros: +# $ makeMP_CC="/opt/microchip/mplabc30/v3.30c/bin/pic30-gcc" ... +# +PATH_TO_IDE_BIN=/opt/microchip/mplabx/v6.00/mplab_platform/platform/../mplab_ide/modules/../../bin/ +# Adding MPLAB X bin directory to path. +PATH:=/opt/microchip/mplabx/v6.00/mplab_platform/platform/../mplab_ide/modules/../../bin/:$(PATH) +# Path to java used to run MPLAB X when this makefile was created +MP_JAVA_PATH="/opt/microchip/mplabx/v6.00/sys/java/zulu8.54.0.21-ca-fx-jre8.0.292-linux_x64/bin/" +OS_CURRENT="$(shell uname -s)" +# MP_CC is not defined +# MP_CPPC is not defined +# MP_BC is not defined +MP_AS="/usr/bin/avrasm2" +# MP_LD is not defined +# MP_AR is not defined +DEP_GEN=${MP_JAVA_PATH}java -jar "/opt/microchip/mplabx/v6.00/mplab_platform/platform/../mplab_ide/modules/../../bin/extractobjectdependencies.jar" +# MP_CC_DIR is not defined +# MP_CPPC_DIR is not defined +# MP_BC_DIR is not defined +MP_AS_DIR="/usr/bin" +# MP_LD_DIR is not defined +# MP_AR_DIR is not defined +# MP_BC_DIR is not defined +DFP_DIR=/home/sergeyyarkov/.mchp_packs/Microchip/ATtiny_DFP/3.0.151 diff --git a/nbproject/Makefile-variables.mk b/nbproject/Makefile-variables.mk new file mode 100644 index 0000000..d800016 --- /dev/null +++ b/nbproject/Makefile-variables.mk @@ -0,0 +1,10 @@ +# +# Generated - do not edit! +# +# NOCDDL +# +CND_BASEDIR=`pwd` +# default configuration +CND_ARTIFACT_DIR_default=dist/default/production +CND_ARTIFACT_NAME_default=attiny2313a_thermostat.X.production.obj +CND_ARTIFACT_PATH_default=dist/default/production/attiny2313a_thermostat.X.production.obj diff --git a/nbproject/configurations.xml b/nbproject/configurations.xml new file mode 100644 index 0000000..ecadafa --- /dev/null +++ b/nbproject/configurations.xml @@ -0,0 +1,1026 @@ + + + + + + + + + main.asm + div16u.asm + definitions.asm + macros.asm + + + Makefile + + + Makefile + + + + localhost + ATtiny2313A + + + Simulator + AVRASM + 2.2.7 + 2 + + + + + + + + + + + + + + + false + false + + + + + + + false + false + + false + + false + false + false + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/nbproject/private/configurations.xml b/nbproject/private/configurations.xml new file mode 100644 index 0000000..91b0ab4 --- /dev/null +++ b/nbproject/private/configurations.xml @@ -0,0 +1,25 @@ + + + Makefile + 0 + + + + /usr/bin + + place holder 1 + place holder 2 + + + + + true + 0 + 0 + 0 + + + + + + diff --git a/nbproject/private/private.xml b/nbproject/private/private.xml new file mode 100644 index 0000000..af26a1b --- /dev/null +++ b/nbproject/private/private.xml @@ -0,0 +1,11 @@ + + + + + + file:/home/sergeyyarkov/Documents/Projects/Firmwares/AVR/attiny2313a_thermostat.X/main.asm + file:/home/sergeyyarkov/Documents/Projects/Firmwares/AVR/attiny2313a_thermostat.X/macros.asm + file:/home/sergeyyarkov/Documents/Projects/Firmwares/AVR/attiny2313a_thermostat.X/definitions.asm + + + diff --git a/nbproject/project.xml b/nbproject/project.xml new file mode 100644 index 0000000..b75824b --- /dev/null +++ b/nbproject/project.xml @@ -0,0 +1,27 @@ + + + com.microchip.mplab.nbide.embedded.makeproject + + + attiny2313a_thermostat + f831f251-bb28-4667-8cff-9eb37aa84fa6 + 0 + + + + + UTF-8 + + + + + default + 2 + + + + false + + + + diff --git a/tn2313Adef.inc b/tn2313Adef.inc deleted file mode 100644 index c159ba1..0000000 --- a/tn2313Adef.inc +++ /dev/null @@ -1,698 +0,0 @@ -;***** THIS IS A MACHINE GENERATED FILE - DO NOT EDIT ******************** -;***** Created: 2011-02-09 12:04 ******* Source: ATtiny2313A.xml ********* -;************************************************************************* -;* A P P L I C A T I O N N O T E F O R T H E A V R F A M I L Y -;* -;* Number : AVR000 -;* File Name : "tn2313Adef.inc" -;* Title : Register/Bit Definitions for the ATtiny2313A -;* Date : 2011-02-09 -;* Version : 2.35 -;* Support E-mail : avr@atmel.com -;* Target MCU : ATtiny2313A -;* -;* DESCRIPTION -;* When including this file in the assembly program file, all I/O register -;* names and I/O register bit names appearing in the data book can be used. -;* In addition, the six registers forming the three data pointers X, Y and -;* Z have been assigned names XL - ZH. Highest RAM address for Internal -;* SRAM is also defined -;* -;* The Register names are represented by their hexadecimal address. -;* -;* The Register Bit names are represented by their bit number (0-7). -;* -;* Please observe the difference in using the bit names with instructions -;* such as "sbr"/"cbr" (set/clear bit in register) and "sbrs"/"sbrc" -;* (skip if bit in register set/cleared). The following example illustrates -;* this: -;* -;* in r16,PORTB ;read PORTB latch -;* sbr r16,(1< USI Wire Mode - ; USICS1 <--------------> USI Clock Source Select - ; USICLK <--------------> USI Clock Strobe - ; USITC <--------------> USI Toggle Clock (Enable clock generation) - ldi TEMP_REG_A, (1<