diff --git a/build/firmware.hex b/build/firmware.hex index 89bdf3f..7437412 100644 --- a/build/firmware.hex +++ b/build/firmware.hex @@ -1,27 +1,33 @@ :020000020000FC -:0200000049C0F5 -:020016003CC0EC -:10001A0000C04F935F935FB74091670045300CF47F -:10002A0003C0442740936700403041F49398949862 -:10003A009598929A009166007ED05DD0413041F445 -:10004A00929894989598939A0091650074D053D099 -:10005A00423041F4929893989598949A009164004A -:10006A006AD049D0433041F4929893989498959ADB -:10007A000091630060D03FD04395409367005FBF13 -:10008A005F914F911895019618950FED0DBF0CE7EA -:10009A0001BB01EC07BB0CE108BB00E20BBF0CE1A2 -:1000AA0000BD02E000BF05E003BF09E106BF01E0B1 -:1000BA0009BF11241092670080E090E0789425D05F -:1000CA004FD040D03FD03ED03DD03CD03BD0F7CFF0 -:1000DA00EE24FF1841E1001F111F4A9509F4089503 -:1000EA00EE1CFF1CE21AF30A20F4E20EF31E8894B7 -:1000FA00F2CF0894F0CF0FB800E40EB90BE10DB9B6 -:10010A00769BFDCFC09AC098089554E0A3E6B0E06C -:10011A0080936100909362000091610010916200E7 -:10012A002AE030E0D5DFED9200936100109362007F -:10013A005A9591F70895ECE7F1E01127E00FF11FC6 -:10014A00049008950F931F930FEF1FEF1A95000065 -:10015A0000000000D9F70A95C1F71F910F91089581 -:10016A000F931F9300E412B3102712BB1F910F9134 -:0E017A000895C0F9A4B0999282F880909C007C +:020000005AC0E4 +:020016003EC0EA +:10001A0000C04F935F930F935FB7409167004530DD +:10002A000CF403C0442740936700403041F493988E +:10003A0094989598929A00916600AAD06BD0413014 +:10004A0041F4929894989598939A00916500A0D05B +:10005A0061D0423041F4929893989598949A00917D +:10006A00640096D057D0433041F49298939894986C +:10007A00959A009163008CD04DD0439540936700C8 +:10008A005FBF0F915F914F9118950F930FB7B29B76 +:10009A0005C0B39B05C0B49B05C005C0019603C04B +:1000AA000A9601C0CF960FBF0F9118950FED0DBF9D +:1000BA000EE701BB01EC07BB0CE108BB00E20BBF7A +:1000CA000CE100BD02E000BF05E003BF09E106BF85 +:1000DA0001E009BF11241092670080E090E026D069 +:1000EA0078943ED070FD969A70FF9698FACFEE24D7 +:1000FA00FF1841E1001F111F4A9509F40895EE1CEB +:10010A00FF1CE21AF30A20F4E20EF31E8894F2CFDF +:10011A000894F0CF0F930FB800E40EB90BE10DB9B4 +:10012A00769BFDCFC09AC0980F91089503E80CBD45 +:10013A0001EC0ABD09EC08BD03E00EBDB99A08B787 +:10014A0006FFFCCFB99808B705FFFDCF03D00027FB +:10015A000EBD0895B19B02C07E7F01C071600895F3 +:10016A005F9354E0A3E6B0E080936100909362004D +:10017A0000916100109162002AE030E0B8DFED9250 +:10018A0000936100109362005A9591F75F91089568 +:10019A000F931F93E4EDF1E01127E00FF11F049094 +:1001AA001F910F91089503EB0A95F1F708950F93A4 +:1001BA001F930FEF1FEF1A95000000000000D9F7F8 +:1001CA000A95C1F71F910F910895C0F9A4B09992A9 +:0601DA0082F880909C00F9 :00000001FF diff --git a/build/firmware.lss b/build/firmware.lss index f1d9c0c..09d94f8 100644 --- a/build/firmware.lss +++ b/build/firmware.lss @@ -1,20 +1,20 @@ -AVRASM ver. 2.2.7 firmware.asm Mon Apr 24 00:59:18 2023 +AVRASM ver. 2.2.7 firmware.asm Sat Apr 29 03:25:47 2023 firmware.asm(14): Including file 'tn2313Adef.inc' -firmware.asm(191): Including file 'div16u.asm' +firmware.asm(257): Including file 'div16u.asm' div16u.asm(22): warning: Register r16 already defined by the .DEF directive -firmware.asm(191): 'div16u.asm' included form here +firmware.asm(257): 'div16u.asm' included form here div16u.asm(23): warning: Register r17 already defined by the .DEF directive -firmware.asm(191): 'div16u.asm' included form here +firmware.asm(257): 'div16u.asm' included form here div16u.asm(24): warning: Register r16 already defined by the .DEF directive -firmware.asm(191): 'div16u.asm' included form here +firmware.asm(257): 'div16u.asm' included form here div16u.asm(25): warning: Register r17 already defined by the .DEF directive -firmware.asm(191): 'div16u.asm' included form here -firmware.asm(192): Including file 'usi.asm' +firmware.asm(257): 'div16u.asm' included form here +firmware.asm(258): Including file 'usi.asm' firmware.asm(14): Including file 'tn2313Adef.inc' -firmware.asm(191): Including file 'div16u.asm' -firmware.asm(192): Including file 'usi.asm' +firmware.asm(257): Including file 'div16u.asm' +firmware.asm(258): Including file 'usi.asm' ; Project name: thermostat @@ -732,6 +732,7 @@ firmware.asm(192): Including file 'usi.asm' .DEF TEMP_REG_A = r16 .DEF TEMP_REG_B = r17 + .DEF ONE_WIRE_FLAGS = r23 ; Флаги состояния для 1-Wire интерфейса .DEF DISP_NUM_L = r24 ; LSB числа которое сейчас на индикаторе .DEF DISP_NUM_H = r25 ; MSB числа которое сейчас на индикаторе @@ -742,13 +743,18 @@ firmware.asm(192): Including file 'usi.asm' .EQU LED_POWER_PIN = PD6 ; Светодиод, который говорит о том что питание подано + .EQU ONE_WIRE_LINE = PB1 ; Пин шины 1-Wire + .EQU ONE_WIRE_DDR = DDRB + .EQU ONE_WIRE_PIN = PINB + .EQU OWPRF = 0 ; 1-Wire Флаг присутствия + .EQU USI_LATCH_PIN = PB0 ; ST_CP на 74HC595 .EQU USI_DO_PIN = PB6 ; DS на 74HC595 .EQU USI_CLK_PIN = PB7 ; SH_CP на 74HC595 - .EQU SW_PLUS_PIN = PB2 ; Кнопка "Минус" - .EQU SW_MINUS_PIN = PB3 ; Кнопка "Плюс" - .EQU SW_SET_PIN = PB4 ; Кнопка "Установить" + .EQU SW_PLUS_PIN = PB2 ; Кнопка "Минус" + .EQU SW_MINUS_PIN = PB3 ; Кнопка "Плюс" + .EQU SW_SET_PIN = PB4 ; Кнопка "Установить" .EQU MCU_STATE_DEFAULT = 0x01 ; Режим измерения температуры и сравнения с заданными параметрами .EQU MCU_STATE_PROGRAM = 0x02 ; Режим настройки параметров в EEPROM @@ -765,6 +771,14 @@ firmware.asm(192): Including file 'usi.asm' ldi DISP_NUM_H, HIGH(@0) .ENDMACRO + .MACRO _1_wire_pull + sbi ONE_WIRE_DDR, ONE_WIRE_LINE + .ENDMACRO + + .MACRO _1_wire_release + cbi ONE_WIRE_DDR, ONE_WIRE_LINE + .ENDMACRO + ; **** СЕГМЕНТ ДАННЫХ ******************************************** .DSEG .ORG SRAM_START @@ -778,10 +792,10 @@ firmware.asm(192): Including file 'usi.asm' .CSEG .ORG 0x00 -000000 c049 rjmp RESET_vect +000000 c05a rjmp RESET_vect .ORG 0x000B -00000b c03c rjmp PCINT0_vect +00000b c03e rjmp PCINT0_vect .ORG 0x000D 00000d c000 rjmp TIMER0_COMPA_vect @@ -791,127 +805,179 @@ firmware.asm(192): Including file 'usi.asm' TIMER0_COMPA_vect: 00000e 934f push r20 00000f 935f push r21 -000010 b75f in r21, SREG -000011 9140 0067 lds r20, CURRENT_DIGIT -000013 3045 cpi r20, 5 -000014 f40c brge reset_digit_idx -000015 c003 rjmp _indicate_1 +000010 930f push r16 +000011 b75f in r21, SREG + +000012 9140 0067 lds r20, CURRENT_DIGIT +000014 3045 cpi r20, 5 +000015 f40c brge reset_digit_idx +000016 c003 rjmp _indicate_1 reset_digit_idx: -000016 2744 clr r20 -000017 9340 0067 sts CURRENT_DIGIT, r20 +000017 2744 clr r20 +000018 9340 0067 sts CURRENT_DIGIT, r20 _indicate_1: -000019 3040 cpi r20, 0 -00001a f441 brne _indicate_2 +00001a 3040 cpi r20, 0 +00001b f441 brne _indicate_2 -00001b 9893 cbi PORTD, DIGIT_2_PIN -00001c 9894 cbi PORTD, DIGIT_3_PIN -00001d 9895 cbi PORTD, DIGIT_4_PIN -00001e 9a92 sbi PORTD, DIGIT_1_PIN -00001f 9100 0066 lds TEMP_REG_A, DIGITS+3 -000021 d07e rcall DISPLAY_DECODER -000022 d05d rcall USI_TRANSMIT +00001c 9893 cbi PORTD, DIGIT_2_PIN +00001d 9894 cbi PORTD, DIGIT_3_PIN +00001e 9895 cbi PORTD, DIGIT_4_PIN +00001f 9a92 sbi PORTD, DIGIT_1_PIN +000020 9100 0066 lds TEMP_REG_A, DIGITS+3 +000022 d0aa rcall DISPLAY_DECODER +000023 d06b rcall USI_TRANSMIT _indicate_2: -000023 3041 cpi r20, 1 -000024 f441 brne _indicate_3 +000024 3041 cpi r20, 1 +000025 f441 brne _indicate_3 -000025 9892 cbi PORTD, DIGIT_1_PIN -000026 9894 cbi PORTD, DIGIT_3_PIN -000027 9895 cbi PORTD, DIGIT_4_PIN -000028 9a93 sbi PORTD, DIGIT_2_PIN -000029 9100 0065 lds TEMP_REG_A, DIGITS+2 -00002b d074 rcall DISPLAY_DECODER -00002c d053 rcall USI_TRANSMIT +000026 9892 cbi PORTD, DIGIT_1_PIN +000027 9894 cbi PORTD, DIGIT_3_PIN +000028 9895 cbi PORTD, DIGIT_4_PIN +000029 9a93 sbi PORTD, DIGIT_2_PIN +00002a 9100 0065 lds TEMP_REG_A, DIGITS+2 +00002c d0a0 rcall DISPLAY_DECODER +00002d d061 rcall USI_TRANSMIT _indicate_3: -00002d 3042 cpi r20, 2 -00002e f441 brne _indicate_4 +00002e 3042 cpi r20, 2 +00002f f441 brne _indicate_4 -00002f 9892 cbi PORTD, DIGIT_1_PIN -000030 9893 cbi PORTD, DIGIT_2_PIN -000031 9895 cbi PORTD, DIGIT_4_PIN -000032 9a94 sbi PORTD, DIGIT_3_PIN -000033 9100 0064 lds TEMP_REG_A, DIGITS+1 -000035 d06a rcall DISPLAY_DECODER -000036 d049 rcall USI_TRANSMIT +000030 9892 cbi PORTD, DIGIT_1_PIN +000031 9893 cbi PORTD, DIGIT_2_PIN +000032 9895 cbi PORTD, DIGIT_4_PIN +000033 9a94 sbi PORTD, DIGIT_3_PIN +000034 9100 0064 lds TEMP_REG_A, DIGITS+1 +000036 d096 rcall DISPLAY_DECODER +000037 d057 rcall USI_TRANSMIT _indicate_4: -000037 3043 cpi r20, 3 -000038 f441 brne _indicate_exit +000038 3043 cpi r20, 3 +000039 f441 brne _indicate_exit -000039 9892 cbi PORTD, DIGIT_1_PIN -00003a 9893 cbi PORTD, DIGIT_2_PIN -00003b 9894 cbi PORTD, DIGIT_3_PIN -00003c 9a95 sbi PORTD, DIGIT_4_PIN -00003d 9100 0063 lds TEMP_REG_A, DIGITS -00003f d060 rcall DISPLAY_DECODER -000040 d03f rcall USI_TRANSMIT +00003a 9892 cbi PORTD, DIGIT_1_PIN +00003b 9893 cbi PORTD, DIGIT_2_PIN +00003c 9894 cbi PORTD, DIGIT_3_PIN +00003d 9a95 sbi PORTD, DIGIT_4_PIN +00003e 9100 0063 lds TEMP_REG_A, DIGITS +000040 d08c rcall DISPLAY_DECODER +000041 d04d rcall USI_TRANSMIT _indicate_exit: -000041 9543 inc r20 -000042 9340 0067 sts CURRENT_DIGIT, r20 -000044 bf5f out SREG, r21 -000045 915f pop r21 -000046 914f pop r20 -000047 9518 reti +000042 9543 inc r20 +000043 9340 0067 sts CURRENT_DIGIT, r20 +000045 bf5f out SREG, r21 + +000046 910f pop r16 +000047 915f pop r21 +000048 914f pop r20 +000049 9518 reti ; **** ОБРАБОТКА КНОПОК ****************************************** PCINT0_vect: -000048 9601 adiw DISP_NUM_L, 1 -000049 9518 reti +00004a 930f push r16 +00004b b70f in r16, SREG + +00004c 9bb2 sbis PINB, SW_PLUS_PIN +00004d c005 rjmp _sw_plus + +00004e 9bb3 sbis PINB, SW_MINUS_PIN +00004f c005 rjmp _sw_minus + +000050 9bb4 sbis PINB, SW_SET_PIN +000051 c005 rjmp _sw_set + +000052 c005 rjmp _sw_exit + _sw_plus: +000053 9601 adiw DISP_NUM_L, 1 +000054 c003 rjmp _sw_exit + _sw_minus: +000055 960a adiw DISP_NUM_L, 10 +000056 c001 rjmp _sw_exit + _sw_set: +000057 96cf adiw DISP_NUM_L, 63 + _sw_exit: + +000058 bf0f out SREG, r16 +000059 910f pop r16 +00005a 9518 reti ; **** СТАРТ ПРОГРАММЫ ******************************************* RESET_vect: -00004a ed0f ldi TEMP_REG_A, LOW(RAMEND) -00004b bf0d out SPL, TEMP_REG_A +00005b ed0f ldi TEMP_REG_A, LOW(RAMEND) +00005c bf0d out SPL, TEMP_REG_A ; **** ПРОЦЕСС ИНИЦИАЛИЗАЦИИ МК ********************************** MCU_INIT: ; **** ИНИЦИАЛИЗАЦИЯ ПИНОВ ************************************* -00004c e70c -00004d bb01 outi r16, DDRD, (1< USI Clock Source Select ; USICLK <--------------> USI Clock Strobe ; USITC <--------------> USI Toggle Clock (Enable clock generation) -000083 e10b ldi TEMP_REG_A, (1< USI Wire Mode - 14: ; USICS1 <--------------> USI Clock Source Select - 15: ; USICLK <--------------> USI Clock Strobe - 16: ; USITC <--------------> USI Toggle Clock (Enable clock generation) - 17: 000075 E10B ldi TEMP_REG_A, (1< USI Wire Mode + 15: ; USICS1 <--------------> USI Clock Source Select + 16: ; USICLK <--------------> USI Clock Strobe + 17: ; USITC <--------------> USI Toggle Clock (Enable clock generation) + 18: 0000AB 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: 273 + File: /home/sergeyyarkov/Documents/Projects/Firmwares/AVR/attiny2313a_thermostat/firmware.asm, Line: 370 Source line: .DB 0b10011100 ; ° - 0000B8 009C - 274: - 275: ; **** СЕГМЕНТ EEPROM ******************************************** - 276: ; .ESEG - 277: ; INFO: .DB "AVR Thermostat. Written by Sergey Yarkov 22.01.2023" + 0000EF 009C + 371: + 372: ; **** СЕГМЕНТ EEPROM ******************************************** + 373: ; .ESEG + 374: ; INFO: .DB "AVR Thermostat. Written by Sergey Yarkov 22.01.2023" List of symbols: Type nDef nUsed Decimalval Hexval Name @@ -422,33 +537,43 @@ Type nDef nUsed Decimalval Hexval Name L 1 6 99 63 DIGITS L 1 4 103 67 CURRENT_DIGIT L 1 2 14 0E TIMER0_COMPA_VECT - L 1 2 20 14 RESET_DIGIT_IDX - L 1 2 23 17 _INDICATE_1 - L 1 2 33 21 _INDICATE_2 - L 1 2 43 2B _INDICATE_3 - L 1 2 53 35 _INDICATE_4 - L 1 2 63 3F _INDICATE_EXIT - L 1 2 68 44 RESET_VECT - L 1 0 70 46 MCU_INIT - L 1 2 90 5A LOOP - L 1 2 95 5F DIV16U - L 1 4 98 62 D16U_1 - L 1 2 103 67 D16U_2 - L 1 2 112 70 D16U_3 - L 1 8 114 72 USI_TRANSMIT - L 1 2 118 76 _USI_TRANSMIT_LOOP - L 1 2 124 7C DISPLAY_UPD_DIGITS - L 1 2 131 83 DIV_LOOP - L 1 8 146 92 DISPLAY_DECODER - L 1 2 153 99 DELAY - L 1 2 156 9C _L_1 - L 1 2 157 9D _DEC_1 - L 1 2 170 AA TOGGLE_POWER_LED - L 1 4 179 B3 DISPLAY_SYMBOLS + 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 0 116 74 ONE_WIRE_RESET + L 1 2 127 7F D1 + L 1 2 132 84 LOOP + L 1 2 148 94 DIV16U + L 1 4 151 97 D16U_1 + L 1 2 156 9C D16U_2 + L 1 2 165 A5 D16U_3 + L 1 8 167 A7 USI_TRANSMIT + L 1 2 172 AC _USI_TRANSMIT_LOOP + L 1 2 179 B3 OCF1A_OCCURED + L 1 2 181 B5 DISPLAY_UPD_DIGITS + L 1 2 189 BD DIV_LOOP + L 1 8 205 CD DISPLAY_DECODER + L 1 0 216 D8 DELAY_68US + L 1 2 217 D9 _D1_LOOP + L 1 24 220 DC DELAY + L 1 2 223 DF _DELAY_1 + L 1 2 224 E0 _DELAY_2 + L 1 2 234 EA DISPLAY_SYMBOLS R 1 11 16 10 TEMP_REG_A R 1 2 17 11 TEMP_REG_B - R 1 2 22 16 DISP_NUM_L - R 1 1 23 17 DISP_NUM_H + R 1 5 24 18 DISP_NUM_L + R 1 2 25 19 DISP_NUM_H + R 1 0 10 0A ONE_WIRE_FLAGS R 1 5 14 0E DREM16UL R 1 5 15 0F DREM16UH R 1 1 16 10 DRES16UL @@ -460,16 +585,22 @@ Type nDef nUsed Decimalval Hexval Name R 1 2 20 14 DCNT16U C 1 0 23 17 NOW_Y C 1 0 4 04 NOW_M - C 1 0 23 17 NOW_D - C 1 0 45039 AFEF NOW_I + C 1 0 27 1B NOW_D + C 1 0 45043 AFF3 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 2 6 06 LED_POWER_PIN + C 1 1 6 06 LED_POWER_PIN + C 1 2 1 01 ONE_WIRE_LINE + C 1 2 23 17 ONE_WIRE_DDR + C 1 0 22 16 ONE_WIRE_PIN 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 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 @@ -478,13 +609,13 @@ Type nDef nUsed Decimalval Hexval Name List of macros: nLines nUsed nParams Name - 2 6 3 OUTI + 2 14 3 OUTI 2 1 1 DISPLAY_LOAD -Program : 167 words. +Program : 223 words. Constants : 6 words. -Total program memory: 173 words. +Total program memory: 229 words. Eeprom space : 0 bytes. Data segment : 8 bytes. Compilation completed, no errors. -Compilation ended 23.04.2023, 20:09:24 +Compilation ended 27.04.2023, 17:17:06 diff --git a/firmware.pro b/firmware.pro index 80291f8..ba2e556 100644 --- a/firmware.pro +++ b/firmware.pro @@ -1,12 +1,12 @@ /avr_sim_project_file /home/sergeyyarkov/Documents/Projects/Firmwares/AVR/attiny2313a_thermostat/firmware.asm mainasm=firmware.asm -file=firmware.lst,349,62,73 +file=firmware.lst,265,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 +windows=acePSTwz alert1=0,0,-1,-1,,0,0 diff --git a/usi.asm b/usi.asm index 2b57b71..bcb2964 100644 --- a/usi.asm +++ b/usi.asm @@ -1,6 +1,7 @@ ; **** ОТПРАВКА БАЙТА В СДВИГОВЫЙ РЕГИСТР ************************* USI_TRANSMIT: - out USIDR, r0 ; Move byte from temp register to USI Data Register + 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<