From 54571b0e23f50330325d941ffeecc69b748642fe Mon Sep 17 00:00:00 2001 From: sergeyyarkov Date: Mon, 26 Jun 2023 09:44:05 +0300 Subject: [PATCH] cooling & heating modes compare --- definitions.asm | 4 +- .../attiny2313a_thermostat.X.production.hex | 109 +-- .../attiny2313a_thermostat.X.production.lss | 723 +++++++++--------- .../attiny2313a_thermostat.X.production.map | 101 ++- .../attiny2313a_thermostat.X.production.obj | Bin 5752 -> 5824 bytes .../attiny2313a_thermostat.X.production.tmp | 91 ++- main.asm | 29 +- nbproject/private/private.xml | 3 + 8 files changed, 534 insertions(+), 526 deletions(-) diff --git a/definitions.asm b/definitions.asm index 5c0717e..da92917 100644 --- a/definitions.asm +++ b/definitions.asm @@ -63,8 +63,8 @@ ; **** СТАНДАРТНЫЕ ПАРАМЕТРЫ *********************************** ; Отдельно задается целая и дробная часть в точности до десятых -.EQU DEFAULT_TEMP = 150 ; 30.5 градусов -.EQU DEFAULT_HYST = 8 ; 1.2 градуса гистерезис +.EQU DEFAULT_TEMP = 300 ; 30 градусов +.EQU DEFAULT_HYST = 5 ; 0.5 градусов гистерезис .EQU HEAT_MODE = 1 .EQU COOLING_MODE = 0 diff --git a/dist/default/production/attiny2313a_thermostat.X.production.hex b/dist/default/production/attiny2313a_thermostat.X.production.hex index 4e8ef8d..4e1ffa5 100644 --- a/dist/default/production/attiny2313a_thermostat.X.production.hex +++ b/dist/default/production/attiny2313a_thermostat.X.production.hex @@ -7,22 +7,22 @@ :10004A000F931F935FB74091670045300CF403C0CC :10005A00442740936700403081F493989498959888 :10006A000EF002C00BE002C000916500002311F0FF -:10007A00929A01C09298F0D16BD1413081F4929852 +:10007A00929A01C09298F8D173D1413081F4929842 :10008A00949895980091640030916500032B11F0C3 -:10009A00939A01C0939800916400DED159D14230FD -:1000AA0059F4929893989598949A00916300D4D1B0 -:1000BA00002D0F77002E4CD1433041F4929893983B -:1000CA009498959A00916B00C7D142D14395409379 +:10009A00939A01C0939800916400E6D161D14230ED +:1000AA0059F4929893989598949A00916300DCD1A8 +:1000BA00002D0F77002E54D1433041F49298939833 +:1000CA009498959A00916B00CFD14AD14395409369 :1000DA0067005FBF1F910F915F914F9118950FEDC8 :1000EA000DBF0FE701BB01EE07BB0CE108BB02E045 :1000FA0000BF05E003BF09E106BF00E20BBF0CE148 -:10010A0000BD11241092670000E00093600006E928 -:10011A0000936D0000E000936C0008E000936E000D +:10010A0000BD11241092670000E0009360000CE229 +:10011A0000936D0001E000936C0005E000936E000F :10012A0001E000936F0000270093690000936A00C2 -:10013A0000EF00936B00AED000917000083209F412 -:10014A0005C012E01093600096D101C090D180E002 -:10015A0090E000916000003031F4969863D187D026 -:10016A0001E009BF39D0013019F496985BD1FCD06F +:10013A0000EF00936B00B6D000917000083209F40A +:10014A0005C012E0109360009ED101C098D180E0F2 +:10015A0090E000916000003031F496986BD18FD016 +:10016A0001E009BF39D0013019F4969863D104D15E :10017A00023079F7969AEDCFEE24FF1841E1001F7D :10018A00111F4A9509F40895EE1CFF1CE21AF30A9E :10019A0020F4E20EF31E8894F2CF0894F0CFFF18F1 @@ -36,47 +36,48 @@ :10021A0050916C0060916E004F935F937727461B55 :10022A00570BB42EA52E5F914F917727460F571F74 :10023A00D42EC52E0EF004C0009510950F5F1F4FE7 -:10024A0040916F00442301F4B016A10624F40D1561 -:10025A001C051CF403C0909A01C090987F916F917D -:10026A005F914F913F912F911F910F9108951F9385 -:10027A0065D05CE034E34DEF19D15CE034E34DEF37 -:10028A0015D112D010916900812F10916A00912F17 -:10029A001F9108950F9376D003E3802E88D0A0E7AC -:1002AA00B0E0A6D00F9108950F931F932F933F9319 -:1002BA004F9368D00CEC802E7AD00EEB802E77D03C -:1002CA00A9E6B0E095D0AAE6B0E092D01091690014 -:1002DA0020916A002F93287F283F11F0E89409C0E3 -:1002EA002F9168941095209531E0130F30E0231F69 -:1002FA0001C02F912695179526951795269517953E -:10030A0026951795309169000EF43195432F3F7069 -:10031A00432F330F330F330F440F340F369536956F -:10032A00369536951093690020936A0030936B00D6 -:10033A004F913F912F911F910F9108950F9322D0C2 -:10034A000CEC802E34D004E4802E31D00F91089525 -:10035A000F930FB800E40EB90BE10DB9769BFDCFF0 -:10036A00C09AC0980F9108950F938CD0B29B0196B2 -:10037A00B39B0197B49B01C003C000E000936000E7 -:10038A000F910895F894B99A33E04EEB8BD0B9984F -:10039A0030E04AE887D005D033E042E383D078944E -:1003AA000895B19B716002C0B1997E7F08950F9341 -:1003BA001F93082D18E0069508F458F0F894B99A96 -:1003CA0030E046E76FD0B99830E042E16BD07894DC -:1003DA000AC0F894B99A30E04AE064D0B99830E09B -:1003EA004EE760D078941A9531F71F910F910895CE -:1003FA000F931F93002718E0F8940695B99A30E0F6 -:10040A004AE050D0B99830E040E14CD0B199006848 -:10041A0030E04CE647D01A9581F70C9378941F91F7 -:10042A000F910895F8945F9354E0A3E6B0E08093A7 -:10043A0061009093620000916100109162002AE0CD -:10044A0030E09ADEED9200936100109362005A95B3 -:10045A0091F75F91789408950F931F93E0EEF4E07B -:10046A001127E00FF11F04901F910F910895C59A6B -:10047A0022D0C5980895C59A1ED01DD01CD01BD075 -:10048A00C59808950F931F932F932AE01FEF0FEF3C -:10049A000A95F1F71A95D9F72A95C1F72F911F9165 -:1004AA000F91089541503040E8F708954150304087 -:1004BA005040E0F708950F931F932F9326E00FEF14 -:1004CA001FEF1A95F1F70A95D9F72A95C1F72F91D7 -:1004DA001F910F910895C0F9A4B0999282F8809063 -:0204EA009CBFB5 +:10024A00B016A10624F40D151C054CF40FC04091FC +:10025A006F00442311F4909801C0909A07C040910E +:10026A006F00442311F4909A01C090987F916F9186 +:10027A005F914F913F912F911F910F9108951F9375 +:10028A0065D05CE034E34DEF19D15CE034E34DEF27 +:10029A0015D112D010916900812F10916A00912F07 +:1002AA001F9108950F9376D003E3802E88D0A0E79C +:1002BA00B0E0A6D00F9108950F931F932F933F9309 +:1002CA004F9368D00CEC802E7AD00EEB802E77D02C +:1002DA00A9E6B0E095D0AAE6B0E092D01091690004 +:1002EA0020916A002F93287F283F11F0E89409C0D3 +:1002FA002F9168941095209531E0130F30E0231F59 +:10030A0001C02F912695179526951795269517952D +:10031A0026951795309169000EF43195432F3F7059 +:10032A00432F330F330F330F440F340F369536955F +:10033A00369536951093690020936A0030936B00C6 +:10034A004F913F912F911F910F9108950F9322D0B2 +:10035A000CEC802E34D004E4802E31D00F91089515 +:10036A000F930FB800E40EB90BE10DB9769BFDCFE0 +:10037A00C09AC0980F9108950F938CD0B29B0196A2 +:10038A00B39B0197B49B01C003C000E000936000D7 +:10039A000F910895F894B99A33E04EEB8BD0B9983F +:1003AA0030E04AE887D005D033E042E383D078943E +:1003BA000895B19B716002C0B1997E7F08950F9331 +:1003CA001F93082D18E0069508F458F0F894B99A86 +:1003DA0030E046E76FD0B99830E042E16BD07894CC +:1003EA000AC0F894B99A30E04AE064D0B99830E08B +:1003FA004EE760D078941A9531F71F910F910895BE +:10040A000F931F93002718E0F8940695B99A30E0E5 +:10041A004AE050D0B99830E040E14CD0B199006838 +:10042A0030E04CE647D01A9581F70C9378941F91E7 +:10043A000F910895F8945F9354E0A3E6B0E0809397 +:10044A0061009093620000916100109162002AE0BD +:10045A0030E092DEED9200936100109362005A95AB +:10046A0091F75F91789408950F931F93E0EFF4E06A +:10047A001127E00FF11F04901F910F910895C59A5B +:10048A0022D0C5980895C59A1ED01DD01CD01BD065 +:10049A00C59808950F931F932F932AE01FEF0FEF2C +:1004AA000A95F1F71A95D9F72A95C1F72F911F9155 +:1004BA000F91089541503040E8F708954150304077 +:1004CA005040E0F708950F931F932F9326E00FEF04 +:1004DA001FEF1A95F1F70A95D9F72A95C1F72F91C7 +:1004EA001F910F910895C0F9A4B0999282F8809053 +:0204FA009CBFA5 :00000001FF diff --git a/dist/default/production/attiny2313a_thermostat.X.production.lss b/dist/default/production/attiny2313a_thermostat.X.production.lss index 22a6bd2..f764186 100644 --- a/dist/default/production/attiny2313a_thermostat.X.production.lss +++ b/dist/default/production/attiny2313a_thermostat.X.production.lss @@ -1,5 +1,5 @@ -AVRASM ver. 2.2.7 main.asm Sun Jun 25 23:20:09 2023 +AVRASM ver. 2.2.7 main.asm Mon Jun 26 09:43:03 2023 [builtin](2): Including file '/home/sergeyyarkov/.mchp_packs/Microchip/ATtiny_DFP/3.0.151/avrasm/inc\tn2313Adef.inc' main.asm(15): Including file 'definitions.asm' @@ -833,8 +833,8 @@ main.asm(296): Including file 'mpy16u.asm' ; **** СТАНДАРТНЫЕ ПАРАМЕТРЫ *********************************** ; Отдельно задается целая и дробная часть в точности до десятых - .EQU DEFAULT_TEMP = 150 ; 30.5 градусов - .EQU DEFAULT_HYST = 8 ; 1.2 градуса гистерезис + .EQU DEFAULT_TEMP = 300 ; 30 градусов + .EQU DEFAULT_HYST = 5 ; 0.5 градусов гистерезис .EQU HEAT_MODE = 1 .EQU COOLING_MODE = 0 @@ -995,8 +995,8 @@ main.asm(296): Including file 'mpy16u.asm' 00003d 9a92 sbi PORTD, DIGIT_1_PIN 00003e c001 rjmp PC+2 00003f 9892 cbi PORTD, DIGIT_1_PIN -000040 d1f0 rcall DISPLAY_DECODER -000041 d16b rcall USI_TRANSMIT +000040 d1f8 rcall DISPLAY_DECODER +000041 d173 rcall USI_TRANSMIT _indicate_2: 000042 3041 cpi r20, 1 @@ -1013,8 +1013,8 @@ main.asm(296): Including file 'mpy16u.asm' 00004e c001 rjmp PC+2 00004f 9893 cbi PORTD, DIGIT_2_PIN 000050 9100 0064 lds TEMP_REG_A, DIGITS+1 -000052 d1de rcall DISPLAY_DECODER -000053 d159 rcall USI_TRANSMIT +000052 d1e6 rcall DISPLAY_DECODER +000053 d161 rcall USI_TRANSMIT _indicate_3: 000054 3042 cpi r20, 2 @@ -1025,12 +1025,12 @@ main.asm(296): Including file 'mpy16u.asm' 000058 9895 cbi PORTD, DIGIT_4_PIN 000059 9a94 sbi PORTD, DIGIT_3_PIN 00005a 9100 0063 lds TEMP_REG_A, DIGITS -00005c d1d4 rcall DISPLAY_DECODER +00005c d1dc rcall DISPLAY_DECODER ; зажигаем точку 00005d 2d00 mov r16, r0 00005e 770f cbr r16, (1<<7) 00005f 2e00 mov r0, r16 -000060 d14c rcall USI_TRANSMIT +000060 d154 rcall USI_TRANSMIT _indicate_4: 000061 3043 cpi r20, 3 @@ -1041,8 +1041,8 @@ main.asm(296): Including file 'mpy16u.asm' 000065 9894 cbi PORTD, DIGIT_3_PIN 000066 9a95 sbi PORTD, DIGIT_4_PIN 000067 9100 006b lds TEMP_REG_A, TEMP_F -000069 d1c7 rcall DISPLAY_DECODER -00006a d142 rcall USI_TRANSMIT +000069 d1cf rcall DISPLAY_DECODER +00006a d14a rcall USI_TRANSMIT _indicate_exit: 00006b 9543 inc r20 @@ -1100,13 +1100,13 @@ main.asm(296): Including file 'mpy16u.asm' 00008a 9300 0060 sts MCU_STATE, r16 ; переводим МК сразу в режим измерения температуры ; настройка параметров -00008c e906 ldi r16, DEFAULT_SETTING_TEMP_L +00008c e20c ldi r16, DEFAULT_SETTING_TEMP_L 00008d 9300 006d sts SETTING_TEMP_L, r16 ; уставка LOW -00008f e000 ldi r16, DEFAULT_SETTING_TEMP_H +00008f e001 ldi r16, DEFAULT_SETTING_TEMP_H 000090 9300 006c sts SETTING_TEMP_H, r16 ; уставка HIGH -000092 e008 ldi r16, DEFAULT_SETTING_HYST +000092 e005 ldi r16, DEFAULT_SETTING_HYST 000093 9300 006e sts SETTING_HYST, r16 ; гистерезис 000095 e001 ldi r16, DEFAULT_SETTING_MODE @@ -1120,7 +1120,7 @@ main.asm(296): Including file 'mpy16u.asm' ; **** СТАРТУЕМ ************************************************ -0000a0 d0ae rcall RD_F_CODE ; проверяем что датчик есть на шине +0000a0 d0b6 rcall RD_F_CODE ; проверяем что датчик есть на шине 0000a1 9100 0070 lds r16, DEVICE_FAMILY_CODE 0000a3 3208 cpi r16, 0x28 ; код семейства для DS18B20 = 0x28 @@ -1130,10 +1130,10 @@ main.asm(296): Including file 'mpy16u.asm' ERR_FAMILY_CODE: 0000a6 e012 ldi r17, MCU_STATE_ERROR 0000a7 9310 0060 sts MCU_STATE, r17 -0000a9 d196 rcall BEEP_LONG +0000a9 d19e rcall BEEP_LONG 0000aa c001 rjmp PC+2 START_PROGRAM: -0000ab d190 rcall BEEP_SHORT +0000ab d198 rcall BEEP_SHORT 0000ac e080 0000ad e090 display_load 0 @@ -1150,8 +1150,8 @@ main.asm(296): Including file 'mpy16u.asm' 0000b0 3000 cpi r16, MCU_STATE_DEFAULT 0000b1 f431 brne _STATE_PROGRAM 0000b2 9896 cbi LED_ERR_PORT, LED_ERR_PIN -0000b3 d163 rcall DISPLAY_UPD_DIGITS -0000b4 d087 rcall TEMP_UPD +0000b3 d16b rcall DISPLAY_UPD_DIGITS +0000b4 d08f rcall TEMP_UPD 0000b5 e001 0000b6 bf09 outi r16, TIMSK, (1<= TOP -00012f c003 rjmp _COMPARSION_EXIT - _HEATING_ON: -000130 9a90 relay_on -000131 c001 rjmp _COMPARSION_EXIT - _HEATING_OFF: -000132 9890 relay_off +000128 150d cp temp_r_l, max_r_trhd_l +000129 051c cpc temp_r_h, max_r_trhd_h +00012a f44c brge _MAX_THRESHOLD ; TEMP >= TOP +00012b c00f rjmp _COMPARSION_EXIT + _MIN_THRESHOLD: + ; определяем режим работы +00012c 9140 006f lds r20, SETTING_MODE +00012e 2344 tst r20 +00012f f411 brne PC+3 +000130 9890 relay_off +000131 c001 rjmp PC+2 +000132 9a90 relay_on +000133 c007 rjmp _COMPARSION_EXIT + _MAX_THRESHOLD: +000134 9140 006f lds r20, SETTING_MODE +000136 2344 tst r20 +000137 f411 brne PC+3 +000138 9a90 relay_on +000139 c001 rjmp PC+2 +00013a 9890 relay_off _COMPARSION_EXIT: -000133 917f pop r23 -000134 916f pop r22 -000135 915f pop r21 -000136 914f pop r20 -000137 913f pop r19 -000138 912f pop r18 -000139 911f pop r17 -00013a 910f pop r16 -00013b 9508 ret +00013b 917f pop r23 +00013c 916f pop r22 +00013d 915f pop r21 +00013e 914f pop r20 +00013f 913f pop r19 +000140 912f pop r18 +000141 911f pop r17 +000142 910f pop r16 +000143 9508 ret // TEMP_UPD: -00013c 931f push r17 -00013d d065 rcall TEMP_CONV -00013e e05c -00013f e334 -000140 ef4d -000141 d119 DELAY24 500000 -000142 e05c -000143 e334 -000144 ef4d -000145 d115 DELAY24 500000 -000146 d012 rcall TEMP_RD +000144 931f push r17 +000145 d065 rcall TEMP_CONV +000146 e05c +000147 e334 +000148 ef4d +000149 d119 DELAY24 500000 +00014a e05c +00014b e334 +00014c ef4d +00014d d115 DELAY24 500000 +00014e d012 rcall TEMP_RD ; обновляем данные в ячейках -000147 9110 0069 lds r17, TEMP_L -000149 2f81 mov DISP_NUM_L, r17 -00014a 9110 006a lds r17, TEMP_H -00014c 2f91 mov DISP_NUM_H, r17 -00014d 911f pop r17 -00014e 9508 ret +00014f 9110 0069 lds r17, TEMP_L +000151 2f81 mov DISP_NUM_L, r17 +000152 9110 006a lds r17, TEMP_H +000154 2f91 mov DISP_NUM_H, r17 +000155 911f pop r17 +000156 9508 ret // // RD_F_CODE: -00014f 930f push r16 +000157 930f push r16 -000150 d076 rcall OW_PRESENCE -000151 e303 ldi r16, DS18B20_CMD_READROM -000152 2e80 mov OW_CMD_r, r16 -000153 d088 rcall OW_SEND_BYTE +000158 d076 rcall OW_PRESENCE +000159 e303 ldi r16, DS18B20_CMD_READROM +00015a 2e80 mov OW_CMD_r, r16 +00015b d088 rcall OW_SEND_BYTE -000154 e7a0 ldi XL, LOW(DEVICE_FAMILY_CODE) -000155 e0b0 ldi XH, HIGH(DEVICE_FAMILY_CODE) -000156 d0a6 rcall OW_RD_BYTE +00015c e7a0 ldi XL, LOW(DEVICE_FAMILY_CODE) +00015d e0b0 ldi XH, HIGH(DEVICE_FAMILY_CODE) +00015e d0a6 rcall OW_RD_BYTE -000157 910f pop r16 -000158 9508 ret// +00015f 910f pop r16 +000160 9508 ret// // TEMP_RD: -000159 930f push r16 -00015a 931f push r17 -00015b 932f push r18 -00015c 933f push r19 -00015d 934f push r20 +000161 930f push r16 +000162 931f push r17 +000163 932f push r18 +000164 933f push r19 +000165 934f push r20 ; cli -00015e d068 rcall OW_PRESENCE -00015f ec0c ldi r16, DS18B20_CMD_SKIPROM -000160 2e80 mov OW_CMD_r, r16 -000161 d07a rcall OW_SEND_BYTE +000166 d068 rcall OW_PRESENCE +000167 ec0c ldi r16, DS18B20_CMD_SKIPROM +000168 2e80 mov OW_CMD_r, r16 +000169 d07a rcall OW_SEND_BYTE -000162 eb0e ldi r16, DS18B20_CMD_RSCRATCHPAD -000163 2e80 mov OW_CMD_r, r16 -000164 d077 rcall OW_SEND_BYTE +00016a eb0e ldi r16, DS18B20_CMD_RSCRATCHPAD +00016b 2e80 mov OW_CMD_r, r16 +00016c d077 rcall OW_SEND_BYTE -000165 e6a9 ldi XL, LOW(TEMP_L) -000166 e0b0 ldi XH, HIGH(TEMP_L) -000167 d095 rcall OW_RD_BYTE +00016d e6a9 ldi XL, LOW(TEMP_L) +00016e e0b0 ldi XH, HIGH(TEMP_L) +00016f d095 rcall OW_RD_BYTE -000168 e6aa ldi XL, LOW(TEMP_H) -000169 e0b0 ldi XH, HIGH(TEMP_H) -00016a d092 rcall OW_RD_BYTE +000170 e6aa ldi XL, LOW(TEMP_H) +000171 e0b0 ldi XH, HIGH(TEMP_H) +000172 d092 rcall OW_RD_BYTE -00016b 9110 0069 lds r17, TEMP_L -00016d 9120 006a lds r18, TEMP_H +000173 9110 0069 lds r17, TEMP_L +000175 9120 006a lds r18, TEMP_H -00016f 932f push r18 -000170 7f28 cbr r18, (1<<0) | (1<<1) | (1<<2) ; убираем ненужные биты на время (интересуют последних битов в TEMP_H) -000171 3f28 cpi r18, 0xf8 ; проверяется является ли число минусовой -000172 f011 breq _TEMP_RD_TO_UNSIGNED ; если да то конвертируем в беззнаковое число -000173 94e8 clt -000174 c009 rjmp _TEMP_RD_CONTINUE ; если нет то преобразуем значение АЦП в температуру (делим на 16) +000177 932f push r18 +000178 7f28 cbr r18, (1<<0) | (1<<1) | (1<<2) ; убираем ненужные биты на время (интересуют последних битов в TEMP_H) +000179 3f28 cpi r18, 0xf8 ; проверяется является ли число минусовой +00017a f011 breq _TEMP_RD_TO_UNSIGNED ; если да то конвертируем в беззнаковое число +00017b 94e8 clt +00017c c009 rjmp _TEMP_RD_CONTINUE ; если нет то преобразуем значение АЦП в температуру (делим на 16) _TEMP_RD_TO_UNSIGNED: -000175 912f pop r18 -000176 9468 set -000177 9510 com r17 -000178 9520 com r18 -000179 e031 ldi r19, 1 -00017a 0f13 add r17, r19 -00017b e030 ldi r19, 0 -00017c 1f23 adc r18, r19 -00017d c001 rjmp PC+2 +00017d 912f pop r18 +00017e 9468 set +00017f 9510 com r17 +000180 9520 com r18 +000181 e031 ldi r19, 1 +000182 0f13 add r17, r19 +000183 e030 ldi r19, 0 +000184 1f23 adc r18, r19 +000185 c001 rjmp PC+2 _TEMP_RD_CONTINUE: ; Температура = Число с АЦП / 16 (сдвиг вправо 4) -00017e 912f pop r18 -00017f 9526 lsr r18 -000180 9517 ror r17 -000181 9526 lsr r18 -000182 9517 ror r17 -000183 9526 lsr r18 -000184 9517 ror r17 -000185 9526 lsr r18 -000186 9517 ror r17 +000186 912f pop r18 +000187 9526 lsr r18 +000188 9517 ror r17 +000189 9526 lsr r18 +00018a 9517 ror r17 +00018b 9526 lsr r18 +00018c 9517 ror r17 +00018d 9526 lsr r18 +00018e 9517 ror r17 _TEMP_RD_END: -000187 9130 0069 lds r19, TEMP_L -000189 f40e brtc PC+2 -00018a 9531 neg r19 ; переводим в беззнаковое число если минус +00018f 9130 0069 lds r19, TEMP_L +000191 f40e brtc PC+2 +000192 9531 neg r19 ; переводим в беззнаковое число если минус ; далее происходит такое для получения дробной части: ; ((n<<3) + (n<<1))>>4 или (n*10)/16 -00018b 2f43 mov r20, r19 -00018c 703f andi r19, 0x0f -00018d 2f43 mov r20, r19 -00018e 0f33 lsl r19 -00018f 0f33 lsl r19 -000190 0f33 lsl r19 +000193 2f43 mov r20, r19 +000194 703f andi r19, 0x0f +000195 2f43 mov r20, r19 +000196 0f33 lsl r19 +000197 0f33 lsl r19 +000198 0f33 lsl r19 -000191 0f44 lsl r20 +000199 0f44 lsl r20 -000192 0f34 add r19, r20 +00019a 0f34 add r19, r20 -000193 9536 lsr r19 -000194 9536 lsr r19 -000195 9536 lsr r19 -000196 9536 lsr r19 +00019b 9536 lsr r19 +00019c 9536 lsr r19 +00019d 9536 lsr r19 +00019e 9536 lsr r19 ; записываем данные -000197 9310 0069 sts TEMP_L, r17 -000199 9320 006a sts TEMP_H, r18 -00019b 9330 006b sts TEMP_F, r19 +00019f 9310 0069 sts TEMP_L, r17 +0001a1 9320 006a sts TEMP_H, r18 +0001a3 9330 006b sts TEMP_F, r19 ; sei -00019d 914f pop r20 -00019e 913f pop r19 -00019f 912f pop r18 -0001a0 911f pop r17 -0001a1 910f pop r16 -0001a2 9508 ret +0001a5 914f pop r20 +0001a6 913f pop r19 +0001a7 912f pop r18 +0001a8 911f pop r17 +0001a9 910f pop r16 +0001aa 9508 ret ; TEMP_CONV: -0001a3 930f push r16 +0001ab 930f push r16 ; cli -0001a4 d022 rcall OW_PRESENCE -0001a5 ec0c ldi r16, DS18B20_CMD_SKIPROM -0001a6 2e80 mov OW_CMD_r, r16 -0001a7 d034 rcall OW_SEND_BYTE +0001ac d022 rcall OW_PRESENCE +0001ad ec0c ldi r16, DS18B20_CMD_SKIPROM +0001ae 2e80 mov OW_CMD_r, r16 +0001af d034 rcall OW_SEND_BYTE -0001a8 e404 ldi r16, DS18B20_CMD_CONVERTTEMP -0001a9 2e80 mov OW_CMD_r, r16 -0001aa d031 rcall OW_SEND_BYTE +0001b0 e404 ldi r16, DS18B20_CMD_CONVERTTEMP +0001b1 2e80 mov OW_CMD_r, r16 +0001b2 d031 rcall OW_SEND_BYTE ; sei -0001ab 910f pop r16 -0001ac 9508 ret +0001b3 910f pop r16 +0001b4 9508 ret // // ; **** ОТПРАВКА БАЙТА В СДВИГОВЫЙ РЕГИСТР ************************* USI_TRANSMIT: -0001ad 930f push r16 -0001ae b80f out USIDR, r0 ; Байт для отправки всегда находится в регистре r0. Помещаем данные в регистр USIDR. +0001b5 930f push r16 +0001b6 b80f out USIDR, r0 ; Байт для отправки всегда находится в регистре r0. Помещаем данные в регистр USIDR. ; Enable USI Overflow Interrupt Flag (will be 0 if transfer is not compeleted) -0001af e400 ldi TEMP_REG_A, (1< USI Clock Source Select ; USICLK <--------------> USI Clock Strobe ; USITC <--------------> USI Toggle Clock (Enable clock generation) -0001b1 e10b ldi TEMP_REG_A, (1< +0001bd 9ac0 sbi PORTB, USI_LATCH_PIN +0001be 98c0 cbi PORTB, USI_LATCH_PIN +0001bf 910f pop r16 +0001c0 9508 ret// // SW_CHECK_PROCESS: -0001b9 930f push r16 -0001ba d08c rcall DEBOUNCE_SW -0001bb 9bb2 sbis SW_PIN, SW_PLUS_PIN -0001bc 9601 adiw DISP_NUM_L, 1 +0001c1 930f push r16 +0001c2 d08c rcall DEBOUNCE_SW +0001c3 9bb2 sbis SW_PIN, SW_PLUS_PIN +0001c4 9601 adiw DISP_NUM_L, 1 -0001bd 9bb3 sbis SW_PIN, SW_MINUS_PIN -0001be 9701 sbiw DISP_NUM_L, 1 +0001c5 9bb3 sbis SW_PIN, SW_MINUS_PIN +0001c6 9701 sbiw DISP_NUM_L, 1 -0001bf 9bb4 sbis SW_PIN, SW_SET_PIN -0001c0 c001 rjmp _INTO_DEFAULT_STATE -0001c1 c003 rjmp _SW_CHECK_PROCESS_END +0001c7 9bb4 sbis SW_PIN, SW_SET_PIN +0001c8 c001 rjmp _INTO_DEFAULT_STATE +0001c9 c003 rjmp _SW_CHECK_PROCESS_END _INTO_DEFAULT_STATE: -0001c2 e000 ldi r16, MCU_STATE_DEFAULT -0001c3 9300 0060 sts MCU_STATE, r16 +0001ca e000 ldi r16, MCU_STATE_DEFAULT +0001cb 9300 0060 sts MCU_STATE, r16 _SW_CHECK_PROCESS_END: -0001c5 910f pop r16 -0001c6 9508 ret +0001cd 910f pop r16 +0001ce 9508 ret // // // ; **** ОПРОС ПРИСУТСТВИЯ УСТРОЙСТВА ****************************** OW_PRESENCE: -0001c7 94f8 cli -0001c8 9ab9 ow_pull -0001c9 e033 -0001ca eb4e -0001cb d08b DELAY16 480 -0001cc 98b9 ow_release -0001cd e030 -0001ce e84a -0001cf d087 DELAY16 70 -0001d0 d005 rcall OW_CHECK_PRESENCE +0001cf 94f8 cli +0001d0 9ab9 ow_pull 0001d1 e033 -0001d2 e342 -0001d3 d083 DELAY16 410 -0001d4 9478 sei -0001d5 9508 ret +0001d2 eb4e +0001d3 d08b DELAY16 480 +0001d4 98b9 ow_release +0001d5 e030 +0001d6 e84a +0001d7 d087 DELAY16 70 +0001d8 d005 rcall OW_CHECK_PRESENCE +0001d9 e033 +0001da e342 +0001db d083 DELAY16 410 +0001dc 9478 sei +0001dd 9508 ret // // @@ -1649,85 +1650,85 @@ main.asm(296): Including file 'mpy16u.asm' ; Если подчиненное устройство притянет шину, то устанавливаем флаг OWPRF в единицу в регистре флагов ; OW_CHECK_PRESENCE: -0001d6 9bb1 sbis OW_PIN, OW_LINE -0001d7 6071 sbr OWFR, (1< // OW_SEND_BYTE: -0001dc 930f push r16 -0001dd 931f push r17 -0001de 2d08 mov r16, OW_CMD_r -0001df e018 ldi r17, 8 +0001e4 930f push r16 +0001e5 931f push r17 +0001e6 2d08 mov r16, OW_CMD_r +0001e7 e018 ldi r17, 8 _OW_SEND_BYTE_LOOP: -0001e0 9506 lsr r16 -0001e1 f408 brcc _OW_SEND_0 -0001e2 f058 brcs _OW_SEND_1 +0001e8 9506 lsr r16 +0001e9 f408 brcc _OW_SEND_0 +0001ea f058 brcs _OW_SEND_1 _OW_SEND_0: -0001e3 94f8 cli -0001e4 9ab9 ow_pull -0001e5 e030 -0001e6 e746 -0001e7 d06f DELAY16 60 -0001e8 98b9 ow_release -0001e9 e030 -0001ea e142 -0001eb d06b DELAY16 10 -0001ec 9478 sei -0001ed c00a rjmp _OW_SEND_BYTE_END +0001eb 94f8 cli +0001ec 9ab9 ow_pull +0001ed e030 +0001ee e746 +0001ef d06f DELAY16 60 +0001f0 98b9 ow_release +0001f1 e030 +0001f2 e142 +0001f3 d06b DELAY16 10 +0001f4 9478 sei +0001f5 c00a rjmp _OW_SEND_BYTE_END _OW_SEND_1: -0001ee 94f8 cli -0001ef 9ab9 ow_pull -0001f0 e030 -0001f1 e04a -0001f2 d064 DELAY16 6 -0001f3 98b9 ow_release -0001f4 e030 -0001f5 e74e -0001f6 d060 DELAY16 64 -0001f7 9478 sei +0001f6 94f8 cli +0001f7 9ab9 ow_pull +0001f8 e030 +0001f9 e04a +0001fa d064 DELAY16 6 +0001fb 98b9 ow_release +0001fc e030 +0001fd e74e +0001fe d060 DELAY16 64 +0001ff 9478 sei _OW_SEND_BYTE_END: -0001f8 951a dec r17 -0001f9 f731 brne _OW_SEND_BYTE_LOOP -0001fa 911f pop r17 -0001fb 910f pop r16 -0001fc 9508 ret +000200 951a dec r17 +000201 f731 brne _OW_SEND_BYTE_LOOP +000202 911f pop r17 +000203 910f pop r16 +000204 9508 ret // // OW_RD_BYTE: -0001fd 930f push r16 -0001fe 931f push r17 -0001ff 2700 clr r16 -000200 e018 ldi r17, 8 -000201 94f8 cli +000205 930f push r16 +000206 931f push r17 +000207 2700 clr r16 +000208 e018 ldi r17, 8 +000209 94f8 cli _OW_RD_BYTE_LP: -000202 9506 lsr r16 -000203 9ab9 ow_pull -000204 e030 -000205 e04a -000206 d050 DELAY16 6 -000207 98b9 ow_release -000208 e030 -000209 e140 -00020a d04c DELAY16 9 -00020b 99b1 sbic OW_PIN, OW_LINE -00020c 6800 sbr r16, (1<<7) -00020d e030 -00020e e64c -00020f d047 DELAY16 55 -000210 951a dec r17 -000211 f781 brne _OW_RD_BYTE_LP -000212 930c st X, r16 -000213 9478 sei -000214 911f pop r17 -000215 910f pop r16 -000216 9508 ret +00020a 9506 lsr r16 +00020b 9ab9 ow_pull +00020c e030 +00020d e04a +00020e d050 DELAY16 6 +00020f 98b9 ow_release +000210 e030 +000211 e140 +000212 d04c DELAY16 9 +000213 99b1 sbic OW_PIN, OW_LINE +000214 6800 sbr r16, (1<<7) +000215 e030 +000216 e64c +000217 d047 DELAY16 55 +000218 951a dec r17 +000219 f781 brne _OW_RD_BYTE_LP +00021a 930c st X, r16 +00021b 9478 sei +00021c 911f pop r17 +00021d 910f pop r16 +00021e 9508 ret // @@ -1738,156 +1739,156 @@ main.asm(296): Including file 'mpy16u.asm' ; Описание: Перемещает цифры числа в соответствующие ячейки памяти в SRAM ; путем деления этого числа несколько раз DISPLAY_UPD_DIGITS: -000217 94f8 cli -000218 935f push r21 -000219 e054 ldi r21, 4 ; (4 раза делим) т.к индикатор четырех разрядный +00021f 94f8 cli +000220 935f push r21 +000221 e054 ldi r21, 4 ; (4 раза делим) т.к индикатор четырех разрядный ; инициализация указателя (за каждый проход цикла будет инкрементироваться) -00021a e6a3 ldi XL, LOW(DIGITS) -00021b e0b0 ldi XH, HIGH(DIGITS) +000222 e6a3 ldi XL, LOW(DIGITS) +000223 e0b0 ldi XH, HIGH(DIGITS) .equ dividend = SRAM_TEMP_1 ; число которе будем делить .equ divisor = 10 ; на что делим ; загружаем число которое хотим поделить в адрес SRAM делимого -00021c 9380 0061 sts dividend, DISP_NUM_L -00021e 9390 0062 sts dividend+1, DISP_NUM_H +000224 9380 0061 sts dividend, DISP_NUM_L +000226 9390 0062 sts dividend+1, DISP_NUM_H ; четыре раза производим деление для получения остатков DIV_LOOP: ; заполняем нужные регистры -000220 9100 0061 lds dd16uL, dividend -000222 9110 0062 lds dd16uH, dividend+1 -000224 e02a ldi dv16uL, LOW(divisor) -000225 e030 ldi dv16uH, HIGH(divisor) +000228 9100 0061 lds dd16uL, dividend +00022a 9110 0062 lds dd16uH, dividend+1 +00022c e02a ldi dv16uL, LOW(divisor) +00022d e030 ldi dv16uH, HIGH(divisor) -000226 de9a rcall div16u ; делим +00022e de92 rcall div16u ; делим -000227 92ed st X+, drem16uL ; сохраняем остаток в ячейку по указателю и увеличиваем его +00022f 92ed st X+, drem16uL ; сохраняем остаток в ячейку по указателю и увеличиваем его ; обновляем делимое -000228 9300 0061 sts dividend, dres16uL -00022a 9310 0062 sts dividend+1, dres16uH +000230 9300 0061 sts dividend, dres16uL +000232 9310 0062 sts dividend+1, dres16uH -00022c 955a dec r21 ; декрементируем счетчик цикла -00022d f791 brne DIV_LOOP ; делим еще раз если не 0 -00022e 915f pop r21 -00022f 9478 sei -000230 9508 ret +000234 955a dec r21 ; декрементируем счетчик цикла +000235 f791 brne DIV_LOOP ; делим еще раз если не 0 +000236 915f pop r21 +000237 9478 sei +000238 9508 ret // // ; **** ЗАГРУЖАЕТ НУЖНЫЙ АДРЕС СИМВОЛА В R0 *********************** DISPLAY_DECODER: -000231 930f push r16 -000232 931f push r17 -000233 eee0 ldi ZL, LOW(2*DISPLAY_SYMBOLS) -000234 e0f4 ldi ZH, HIGH(2*DISPLAY_SYMBOLS) +000239 930f push r16 +00023a 931f push r17 +00023b efe0 ldi ZL, LOW(2*DISPLAY_SYMBOLS) +00023c e0f4 ldi ZH, HIGH(2*DISPLAY_SYMBOLS) -000235 2711 clr TEMP_REG_B -000236 0fe0 add ZL, TEMP_REG_A -000237 1ff1 adc ZH, TEMP_REG_B +00023d 2711 clr TEMP_REG_B +00023e 0fe0 add ZL, TEMP_REG_A +00023f 1ff1 adc ZH, TEMP_REG_B -000238 9004 lpm r0, Z -000239 911f pop r17 -00023a 910f pop r16 -00023b 9508 ret// +000240 9004 lpm r0, Z +000241 911f pop r17 +000242 910f pop r16 +000243 9508 ret// // BEEP_SHORT: -00023c 9ac5 sbi BUZZER_PORT, BUZZER_PIN -00023d d022 rcall DELAY -00023e 98c5 cbi BUZZER_PORT, BUZZER_PIN -00023f 9508 ret +000244 9ac5 sbi BUZZER_PORT, BUZZER_PIN +000245 d022 rcall DELAY +000246 98c5 cbi BUZZER_PORT, BUZZER_PIN +000247 9508 ret // // BEEP_LONG: -000240 9ac5 sbi BUZZER_PORT, BUZZER_PIN -000241 d01e rcall DELAY -000242 d01d rcall DELAY -000243 d01c rcall DELAY -000244 d01b rcall DELAY -000245 98c5 cbi BUZZER_PORT, BUZZER_PIN -000246 9508 ret// +000248 9ac5 sbi BUZZER_PORT, BUZZER_PIN +000249 d01e rcall DELAY +00024a d01d rcall DELAY +00024b d01c rcall DELAY +00024c d01b rcall DELAY +00024d 98c5 cbi BUZZER_PORT, BUZZER_PIN +00024e 9508 ret// // DEBOUNCE_SW: -000247 930f push r16 -000248 931f push r17 -000249 932f push r18 +00024f 930f push r16 +000250 931f push r17 +000251 932f push r18 -00024a e02a ldi r18, 10 +000252 e02a ldi r18, 10 _loop_2: -00024b ef1f ldi r17, 255 +000253 ef1f ldi r17, 255 _loop_0: -00024c ef0f ldi r16, 255 +000254 ef0f ldi r16, 255 _dec_0: -00024d 950a dec r16 -00024e f7f1 brne _dec_0 +000255 950a dec r16 +000256 f7f1 brne _dec_0 _loop_1: -00024f 951a dec r17 -000250 f7d9 brne _loop_0 +000257 951a dec r17 +000258 f7d9 brne _loop_0 _loop_3: -000251 952a dec r18 -000252 f7c1 brne _loop_2 +000259 952a dec r18 +00025a f7c1 brne _loop_2 -000253 912f pop r18 -000254 911f pop r17 -000255 910f pop r16 -000256 9508 ret// +00025b 912f pop r18 +00025c 911f pop r17 +00025d 910f pop r16 +00025e 9508 ret// // DELAY_LOOP_16: -000257 5041 subi DELAY_8_r, 1 -000258 4030 sbci DELAY_16_r, 0 -000259 f7e8 brcc DELAY_LOOP_16 -00025a 9508 ret +00025f 5041 subi DELAY_8_r, 1 +000260 4030 sbci DELAY_16_r, 0 +000261 f7e8 brcc DELAY_LOOP_16 +000262 9508 ret // // DELAY_LOOP_24: -00025b 5041 subi DELAY_8_r, 1 -00025c 4030 sbci DELAY_16_r, 0 -00025d 4050 sbci DELAY_24_r, 0 -00025e f7e0 brcc DELAY_LOOP_24 -00025f 9508 ret +000263 5041 subi DELAY_8_r, 1 +000264 4030 sbci DELAY_16_r, 0 +000265 4050 sbci DELAY_24_r, 0 +000266 f7e0 brcc DELAY_LOOP_24 +000267 9508 ret // // DELAY: -000260 930f push r16 -000261 931f push r17 -000262 932f push r18 +000268 930f push r16 +000269 931f push r17 +00026a 932f push r18 -000263 e026 ldi r18, 6 +00026b e026 ldi r18, 6 _DELAY_0: -000264 ef0f ldi r16, 255 +00026c ef0f ldi r16, 255 _DELAY_1: -000265 ef1f ldi r17, 255 +00026d ef1f ldi r17, 255 _DELAY_2: -000266 951a dec r17 -000267 f7f1 brne _DELAY_2 +00026e 951a dec r17 +00026f f7f1 brne _DELAY_2 -000268 950a dec r16 -000269 f7d9 brne _DELAY_1 -00026a 952a dec r18 -00026b f7c1 brne _DELAY_0 +000270 950a dec r16 +000271 f7d9 brne _DELAY_1 +000272 952a dec r18 +000273 f7c1 brne _DELAY_0 -00026c 912f pop r18 -00026d 911f pop r17 -00026e 910f pop r16 -00026f 9508 ret // +000274 912f pop r18 +000275 911f pop r17 +000276 910f pop r16 +000277 9508 ret // // DISPLAY_SYMBOLS: ; HGFEDCBA HGFEDCBA -000270 f9c0 .DB 0b11000000, 0b11111001 ; 0, 1 -000271 b0a4 .DB 0b10100100, 0b10110000 ; 2, 3 -000272 9299 .DB 0b10011001, 0b10010010 ; 4, 5 -000273 f882 .DB 0b10000010, 0b11111000 ; 6, 7 -000274 9080 .DB 0b10000000, 0b10010000 ; 8, 9 -000275 bf9c .DB 0b10011100, 0b10111111 ; °, -// +000278 f9c0 .DB 0b11000000, 0b11111001 ; 0, 1 +000279 b0a4 .DB 0b10100100, 0b10110000 ; 2, 3 +00027a 9299 .DB 0b10011001, 0b10010010 ; 4, 5 +00027b f882 .DB 0b10000010, 0b11111000 ; 6, 7 +00027c 9080 .DB 0b10000000, 0b10010000 ; 8, 9 +00027d bf9c .DB 0b10011100, 0b10111111 ; °, -// // @@ -1915,7 +1916,7 @@ counted separately from r26..r31 here. "ATtiny2313A" register use summary: x : 2 y : 0 z : 1 r0 : 4 r1 : 2 r2 : 0 r3 : 0 r4 : 0 r5 : 0 r6 : 0 r7 : 0 r8 : 6 r9 : 0 r10: 2 r11: 2 r12: 2 -r13: 2 r14: 5 r15: 10 r16: 120 r17: 60 r18: 40 r19: 49 r20: 48 +r13: 2 r14: 5 r15: 10 r16: 120 r17: 60 r18: 40 r19: 49 r20: 50 r21: 23 r22: 7 r23: 8 r24: 5 r25: 3 r26: 4 r27: 4 r28: 0 r29: 0 r30: 2 r31: 2 Registers used: 25 out of 35 (71.4%) @@ -1925,26 +1926,26 @@ Registers used: 25 out of 35 (71.4%) andi : 1 asr : 0 bclr : 0 bld : 0 brbc : 0 brbs : 0 brcc : 6 brcs : 1 break : 0 breq : 4 brge : 3 brhc : 0 brhs : 0 brid : 0 brie : 0 brlo : 0 brlt : 0 brmi : 0 -brne : 21 brpl : 0 brsh : 0 brtc : 1 brts : 2 brvc : 0 -brvs : 0 bset : 0 bst : 0 cbi : 24 cbr : 3 clc : 2 +brne : 22 brpl : 0 brsh : 0 brtc : 1 brts : 2 brvc : 0 +brvs : 0 bset : 0 bst : 0 cbi : 25 cbr : 3 clc : 2 clh : 0 cli : 5 cln : 0 clr : 11 cls : 0 clt : 1 clv : 0 clz : 0 com : 4 cp : 2 cpc : 2 cpi : 11 cpse : 0 dec : 12 eor : 0 icall : 0 ijmp : 0 in : 2 -inc : 1 ld : 0 ldd : 0 ldi : 83 lds : 24 lpm : 2 +inc : 1 ld : 0 ldd : 0 ldi : 83 lds : 25 lpm : 2 lsl : 4 lsr : 11 mov : 18 movw : 0 neg : 1 nop : 0 or : 1 ori : 0 out : 15 pop : 43 push : 42 rcall : 50 -ret : 22 reti : 3 rjmp : 26 rol : 6 ror : 9 sbc : 2 -sbci : 4 sbi : 13 sbic : 3 sbis : 5 sbiw : 1 sbr : 2 +ret : 22 reti : 3 rjmp : 28 rol : 6 ror : 9 sbc : 2 +sbci : 4 sbi : 14 sbic : 3 sbis : 5 sbiw : 1 sbr : 2 sbrc : 0 sbrs : 0 sec : 2 seh : 0 sei : 5 sen : 0 ser : 0 ses : 0 set : 1 sev : 0 sez : 0 sleep : 0 spm : 0 st : 2 std : 0 sts : 23 sub : 5 subi : 3 -swap : 0 tst : 2 wdr : 0 +swap : 0 tst : 3 wdr : 0 Instructions used: 56 out of 105 (53.3%) "ATtiny2313A" memory use summary [bytes]: Segment Begin End Code Data Used Size Use% --------------------------------------------------------------- -[.cseg] 0x000000 0x0004ec 1226 12 1238 2048 60.4% +[.cseg] 0x000000 0x0004fc 1242 12 1254 2048 61.2% [.dseg] 0x000060 0x000073 0 19 19 128 14.8% [.eseg] 0x000000 0x000000 0 0 0 128 0.0% diff --git a/dist/default/production/attiny2313a_thermostat.X.production.map b/dist/default/production/attiny2313a_thermostat.X.production.map index 17b4f65..d6c9f57 100644 --- a/dist/default/production/attiny2313a_thermostat.X.production.map +++ b/dist/default/production/attiny2313a_thermostat.X.production.map @@ -1,5 +1,5 @@ -AVRASM ver. 2.2.7 main.asm Sun Jun 25 23:20:09 2023 +AVRASM ver. 2.2.7 main.asm Mon Jun 26 09:43:03 2023 EQU SIGNATURE_000 0000001e @@ -526,14 +526,14 @@ EQU UART_TX_PIN 00000001 EQU MCU_STATE_DEFAULT 00000000 EQU MCU_STATE_PROGRAM 00000001 EQU MCU_STATE_ERROR 00000002 -EQU DEFAULT_TEMP 00000096 -EQU DEFAULT_HYST 00000008 +EQU DEFAULT_TEMP 0000012c +EQU DEFAULT_HYST 00000005 EQU HEAT_MODE 00000001 EQU COOLING_MODE 00000000 EQU DEFAULT_MODE 00000001 -EQU DEFAULT_SETTING_TEMP_L 00000096 -EQU DEFAULT_SETTING_TEMP_H 00000000 -EQU DEFAULT_SETTING_HYST 00000008 +EQU DEFAULT_SETTING_TEMP_L 0000002c +EQU DEFAULT_SETTING_TEMP_H 00000001 +EQU DEFAULT_SETTING_HYST 00000005 EQU DEFAULT_SETTING_MODE 00000001 DSEG MCU_STATE 00000060 DSEG SRAM_TEMP_1 00000061 @@ -558,25 +558,25 @@ CSEG _INTO_PROGRAM_STATE 0000001a CSEG _CLR_CURRENT_DIGIT 0000002d CSEG _indicate_1 00000030 CSEG _indicate_2 00000042 -CSEG DISPLAY_DECODER 00000231 -CSEG USI_TRANSMIT 000001ad +CSEG DISPLAY_DECODER 00000239 +CSEG USI_TRANSMIT 000001b5 CSEG _indicate_3 00000054 CSEG _indicate_4 00000061 CSEG _indicate_exit 0000006b CSEG MCU_INIT 00000076 -CSEG RD_F_CODE 0000014f +CSEG RD_F_CODE 00000157 CSEG ERR_FAMILY_CODE 000000a6 CSEG START_PROGRAM 000000ab -CSEG BEEP_LONG 00000240 -CSEG BEEP_SHORT 0000023c +CSEG BEEP_LONG 00000248 +CSEG BEEP_SHORT 00000244 CSEG LOOP 000000ae CSEG _STATE_DEFAULT 000000b0 CSEG _STATE_PROGRAM 000000b8 -CSEG DISPLAY_UPD_DIGITS 00000217 -CSEG TEMP_UPD 0000013c +CSEG DISPLAY_UPD_DIGITS 0000021f +CSEG TEMP_UPD 00000144 CSEG TEMP_COMPARSION 000000f1 CSEG _STATE_ERROR 000000bd -CSEG SW_CHECK_PROCESS 000001b9 +CSEG SW_CHECK_PROCESS 000001c1 DEF drem16uL r14 DEF drem16uH r15 DEF dres16uL r16 @@ -618,42 +618,41 @@ DEF min_r_trhd_h r10 DEF max_r_trhd_l r13 DEF max_r_trhd_h r12 CSEG _NEGATE_TEMP 00000121 -CSEG _CHECK_MODE 00000125 -CSEG _HEATING_MODE 00000129 -CSEG _HEATING_ON 00000130 -CSEG _HEATING_OFF 00000132 -CSEG _COMPARSION_EXIT 00000133 -CSEG TEMP_CONV 000001a3 -CSEG DELAY_LOOP_24 0000025b -CSEG TEMP_RD 00000159 -CSEG OW_PRESENCE 000001c7 -CSEG OW_SEND_BYTE 000001dc -CSEG OW_RD_BYTE 000001fd -CSEG _TEMP_RD_TO_UNSIGNED 00000175 -CSEG _TEMP_RD_CONTINUE 0000017e -CSEG _TEMP_RD_END 00000187 -CSEG _USI_TRANSMIT_LOOP 000001b2 -CSEG DEBOUNCE_SW 00000247 -CSEG _INTO_DEFAULT_STATE 000001c2 -CSEG _SW_CHECK_PROCESS_END 000001c5 -CSEG DELAY_LOOP_16 00000257 -CSEG OW_CHECK_PRESENCE 000001d6 -CSEG _EXIT 000001db -CSEG _OW_SEND_BYTE_LOOP 000001e0 -CSEG _OW_SEND_0 000001e3 -CSEG _OW_SEND_1 000001ee -CSEG _OW_SEND_BYTE_END 000001f8 -CSEG _OW_RD_BYTE_LP 00000202 +CSEG _COMPARE 00000125 +CSEG _MIN_THRESHOLD 0000012c +CSEG _MAX_THRESHOLD 00000134 +CSEG _COMPARSION_EXIT 0000013b +CSEG TEMP_CONV 000001ab +CSEG DELAY_LOOP_24 00000263 +CSEG TEMP_RD 00000161 +CSEG OW_PRESENCE 000001cf +CSEG OW_SEND_BYTE 000001e4 +CSEG OW_RD_BYTE 00000205 +CSEG _TEMP_RD_TO_UNSIGNED 0000017d +CSEG _TEMP_RD_CONTINUE 00000186 +CSEG _TEMP_RD_END 0000018f +CSEG _USI_TRANSMIT_LOOP 000001ba +CSEG DEBOUNCE_SW 0000024f +CSEG _INTO_DEFAULT_STATE 000001ca +CSEG _SW_CHECK_PROCESS_END 000001cd +CSEG DELAY_LOOP_16 0000025f +CSEG OW_CHECK_PRESENCE 000001de +CSEG _EXIT 000001e3 +CSEG _OW_SEND_BYTE_LOOP 000001e8 +CSEG _OW_SEND_0 000001eb +CSEG _OW_SEND_1 000001f6 +CSEG _OW_SEND_BYTE_END 00000200 +CSEG _OW_RD_BYTE_LP 0000020a EQU dividend 00000061 EQU divisor 0000000a -CSEG DIV_LOOP 00000220 -CSEG DISPLAY_SYMBOLS 00000270 -CSEG DELAY 00000260 -CSEG _loop_2 0000024b -CSEG _loop_0 0000024c -CSEG _dec_0 0000024d -CSEG _loop_1 0000024f -CSEG _loop_3 00000251 -CSEG _DELAY_0 00000264 -CSEG _DELAY_1 00000265 -CSEG _DELAY_2 00000266 +CSEG DIV_LOOP 00000228 +CSEG DISPLAY_SYMBOLS 00000278 +CSEG DELAY 00000268 +CSEG _loop_2 00000253 +CSEG _loop_0 00000254 +CSEG _dec_0 00000255 +CSEG _loop_1 00000257 +CSEG _loop_3 00000259 +CSEG _DELAY_0 0000026c +CSEG _DELAY_1 0000026d +CSEG _DELAY_2 0000026e diff --git a/dist/default/production/attiny2313a_thermostat.X.production.obj b/dist/default/production/attiny2313a_thermostat.X.production.obj index e2126640d11beb4b0f419b0e3eeb9daa5fb061b3..5032b19b225ec2d2dcc921b9bf68aa61c8186b28 100644 GIT binary patch delta 3355 zcmXBWd7Mwx8^H1BJa#y=FOxv&h=T7yjNcu_*MGZAIqoUvE>HhJZ*ZV%_x#yhc+;i`l^5%st;zVjS+8bBq z63RsuiAa~C8IgF+Pbe0Na5?m~NOgoG6 zBS+$UBuo^S%;f=pWhALW=Y&z>>TvmbQQZE)6;^toDI%_ZG)df4&|p}ixM`qaR;sw^ zpi!+o;%0%y6*h{S4VsiT6gLMntyxvvJaA)tin#fpS!r)^3&2f<^z$%i9?ldO0xe`} zfR+uqiOV69R$5)$B5O;}&lR_rX}7YuFClXCS|X2f(Yo*|agPycV;wC8ZLK3iJL_l} zxWzhp0<^cgp5(3$*3WVxw_49Dxab%TiF=yJZDDR-2|9&`iOUtjox@q;!h|xy8RGIl zW;jh8%k8>^Q^l%;tD|b*idon7_7(XHUaJ|=@a0t zqU!?mw47(j>18<};MdCIQ>2FP&!2p>M zU|?EU+!i8t+oZRGdu*=Tz@P}T-w6i$v&HQK_n!8|y#zu-TIPsjFS`5uW#aaLp=UOT z+XwEC?Gd*hJm7B=cK{5tWq273x2|6SBdqJ!z(`w<*TJYrnz%z?bRtu6O)&O+6>)EYaUmQ2Z8YAWFYX;M;aoLw?}CZe^d6Yx&k^@Nm|XmVxDUY;o7qQT zsvi~iF_>1oL)=j?-I{#xke?^62+Xjh`V`ExRW!^B*Aw>{m@Oez&oswo{W+K$YAWsv zFfRjq3Fcp5e;or0R-F}h96VfDN!(Xpp>33t;E`2S_6-Qxs}ut{(R$)efkm-a;&`{+ z;>2WeyxVR`EM44p;L+3uA#vZM$85*)a=XW^#~;AbXk&3df@RTb#GM0ASmZo-(jq^B z{pO$)f>X4EO05vi?(9_{e~iGUBz7jtETbH{s2*n z{0W{(Y%T6Du-b4LmZKwwI>Z_h+}y^y`8>-^Gchg1y#O5A5?>iQWMA zTh|T20qeRE_?LBk6L|Sm&>XzNGu1Tk>cMKF>EPh0%A&V|e;=$W+6lZ?Fk7@Uc>U;Q z(G2_k99ml_+Lh4Ze9#RXvBB;Dg*I4s@P-Z66TIoK5bXutD%dC58@&CD6YT@uDcCQX z1^%;|NH%!4;DBg<@E+Ss2Y~krJ<);S1NNv65}yBu5j2?4M>0IX$2R;BBLB7F?*m6y zm5Yu9{@R10qu8rOvDTua!6)bX2Kdxp9^kWla>mf~KlZsk2tGgCGr$-A(g0uj@uFkt zFm%j18b{Lc)3*os%3l)T#HzWX<4OA3<}m@BEZ8gh5cp>JbkP|gR;Z#g!KpPg*+KPf z=n+vns7~8mbHR7EcniVze53RcP~3thd-P{Qv1>(h(Aj7O(Z%40Qreb)A1@3ReH5It z>K_N^t@@?R^(U)r8Tk23_W&jS)BqQ(`X^|*XgPKo{c?)J48Qv9WkabIwww-sD`fxc z3iP{;VFy&1jj@uXa=SklT#B)JhClq#0sgcx!bJYEoIG&(3{Syu#pfX!{5t7uEbX{42GuA4xD zt=Se(*(SY}Jyyjgv<+0XNgJy9*#Q!5(%Xq7Su$+@m=QPjwmg|9`WZ;e`$?2TNYm}XapY(#>&S4k zeKn7R*4B}sO>~Ip3DCAIEc!KQ7p9Dp;1;X?8_?crwKu(kJ=S7yt3B2;pkql)^eo>W zy)9NM%8{d;np77(2RbLxb{=G;UKHh|(ac=Fj3vPSBhm}N{v*%{9H JIZ<=n{{ajw)RO=J delta 3283 zcmXBWd7Mwx8^H1BJlBX3L$ag^8Ig6ylGG0~#ug1TBH7Bmm!&NI`o))&C1JjE=c_TJ zB1$Nc>X)*NRxLm7w5#YVjImQwqawf0**ZcdNbI&=?x#!+z3R_%kUQVRO!L8-W zT>N>Fc_PxeXp$eNdGUute17&T8sx9nEcdm4QIlMTpXg=9eBH{ zMSdZ$)NVM!wM-t0VR@8a$GEbsshBG)55|xat>7OjH`{IYhsI@9Um=c0*;wernKl(= z`@7?M#E%kJou6+83;n9)JH-zXcOyS{1edlAEWg|fF^y{wsVZ(VNE((PZVG6aSx?+l za7#E%+;q@Lro_-VsjIjdL~bo*rkS8g%`M_WplSIv;^u;8r47Zg6|Q-W%HrmO7IBH< zo&+sR!BZf)&=a@7ZcE9}7PpAOTG`qc6KS1CWC=goghS$%5@{P|`eop@@Gx=9LA!9K zxNLBHI8|I2v=1kX%K>+USv}k3?hGf0%LV_6R1g;d9ekQrf{wu$arqJw*C{$wTmh4% z9%&mx+PU5_bS}CfhIH$*iauSekD;seF?1`c5kvRjI&sf2bdNCGxfkPdlmFO!lu0j?rAw!+-A@( zSR{_KA8y(CNw-<~l z-XQKXFxFP~IT#m2#C-wAhl)3f+lMAt+kP-H$PpKSNw!yCf(LCI4G)Fui~9;pw%s#K zu|LoNkVdSOP+kM&eF@xsh7p zPJ($BIR&1u$Z0U&B4@ypky@O;v*;-codXN3(|NEk%w)fUMV7r`aVb0e8+bax%1XhK zRNE%Fywme5Ar-(b1n638}O2H^x=;42^}p{<0}AwSYi)C0MOav)-e z11k)Co!qm2Rndwdj|E-DO258nJdu1J$5j;gDWa8#tddDFJjYwARfs&#TdE1*1-447 zg4LXN4OK&HIG=hQc#-p|)xlcMr`81Pf(D{DfR{LWS_iz$`BFY%Zhg>JG!eXVw47*N zu)&(@fsH{c(fVMMjhqBtwUHZw*KFjbVDmemnSFm==TT})uw{D{(PXgoa3#?@z#H2u zi*^9p3TBFS1aI!YEZPaYm0u{D4&KfKUBG{BvaaAAo2(nyZjliPro>cY*;^4hVVxF(lZVO7a4O(1 z8%|qhPc!0~!g$do;H=GI_350=v5Y?F?e^v1LX^!j{2Gjo;WwKin@Fkk34`B{hjifW|J*186$?b%x3md6fI+aD&n6WkE(FS-lVDPAkO2i!Cn-7F#Kti+wU6cj(9Fg$G>;4x{SmY%3yc258P=9z@;C^RE&D?t#d7@_w6f=V z479fAS`6Bpjfx%zZKI{4CE&Kk)kIH%b_q0{0=L(@AWEgt_St+H&jS08NY4TLk4UL6 zYX1@G1-?JpA^#)M-wAcJZ|xtTQy!5rkZPSMFq&q4E`!cNUD1C)dT^8I70@L}6i-0c z;70Kr=*I1yg6`bz(WX5}!@CCDMH*fO(38ULRTQ3oFE-YzMCk5wv{eQf=jfdPdPm~L zs|Na%T@a4~p_!Z=?|P6`c0jxupl^iRYk_;p_J~&-^rOIdR0{1+(jJvU?e z-30E->MY*PAT%&7MZ5-RP+5t1Nno&bqEzS*>(m4cwLa7gy+18Wyk_8mvZ#2?!7%IG z0t~klTZ0jnVjD2hQfv!GMH`9N4veYZS0$P(&+##xFT!FWqL6-=-c)4)Va zu``%tDW-!5Ek!DgK4d9UX>_us*d0u<1@!<^|11+3hHx$6H^_{PHk diff --git a/dist/default/production/attiny2313a_thermostat.X.production.tmp b/dist/default/production/attiny2313a_thermostat.X.production.tmp index c004449..a706d7d 100644 --- a/dist/default/production/attiny2313a_thermostat.X.production.tmp +++ b/dist/default/production/attiny2313a_thermostat.X.production.tmp @@ -49,25 +49,25 @@ <_CLR_CURRENT_DIGIT>main.asm108 <_indicate_1>main.asm112 <_indicate_2>main.asm132 - main.asm740 - main.asm553 + main.asm741 + main.asm554 <_indicate_3>main.asm150 <_indicate_4>main.asm166 <_indicate_exit>main.asm178 main.asm197 - main.asm425 + main.asm426 main.asm253 main.asm258 - main.asm764 - main.asm756 + main.asm765 + main.asm757 main.asm267 <_STATE_DEFAULT>main.asm271 <_STATE_PROGRAM>main.asm279 - main.asm699 - main.asm408 + main.asm700 + main.asm409 main.asm298 <_STATE_ERROR>main.asm285 - main.asm584 + main.asm585 div16u.asm32 div16u.asm36 div16u.asm42 @@ -79,43 +79,42 @@ mpy16u.asm31 mpy16u.asm37 mpy16u.asm40 - <_NEGATE_TEMP>main.asm364 - <_CHECK_MODE>main.asm370 - <_HEATING_MODE>main.asm381 - <_HEATING_ON>main.asm391 - <_HEATING_OFF>main.asm394 - <_COMPARSION_EXIT>main.asm396 - main.asm533 - main.asm808 - main.asm441 - main.asm608 - main.asm635 - main.asm668 - <_TEMP_RD_TO_UNSIGNED>main.asm476 - <_TEMP_RD_CONTINUE>main.asm487 - <_TEMP_RD_END>main.asm497 - <_USI_TRANSMIT_LOOP>main.asm571 - main.asm774 - <_INTO_DEFAULT_STATE>main.asm597 - <_SW_CHECK_PROCESS_END>main.asm600 - main.asm800 - main.asm624 - <_EXIT>main.asm630 - <_OW_SEND_BYTE_LOOP>main.asm640 - <_OW_SEND_0>main.asm644 - <_OW_SEND_1>main.asm652 - <_OW_SEND_BYTE_END>main.asm659 - <_OW_RD_BYTE_LP>main.asm674 - main.asm716 - main.asm842 - main.asm817 - <_loop_2>main.asm780 - <_loop_0>main.asm782 - <_dec_0>main.asm784 - <_loop_1>main.asm787 - <_loop_3>main.asm790 - <_DELAY_0>main.asm823 - <_DELAY_1>main.asm825 - <_DELAY_2>main.asm827 + <_NEGATE_TEMP>main.asm365 + <_COMPARE>main.asm371 + <_MIN_THRESHOLD>main.asm381 + <_MAX_THRESHOLD>main.asm390 + <_COMPARSION_EXIT>main.asm397 + main.asm534 + main.asm809 + main.asm442 + main.asm609 + main.asm636 + main.asm669 + <_TEMP_RD_TO_UNSIGNED>main.asm477 + <_TEMP_RD_CONTINUE>main.asm488 + <_TEMP_RD_END>main.asm498 + <_USI_TRANSMIT_LOOP>main.asm572 + main.asm775 + <_INTO_DEFAULT_STATE>main.asm598 + <_SW_CHECK_PROCESS_END>main.asm601 + main.asm801 + main.asm625 + <_EXIT>main.asm631 + <_OW_SEND_BYTE_LOOP>main.asm641 + <_OW_SEND_0>main.asm645 + <_OW_SEND_1>main.asm653 + <_OW_SEND_BYTE_END>main.asm660 + <_OW_RD_BYTE_LP>main.asm675 + main.asm717 + main.asm843 + main.asm818 + <_loop_2>main.asm781 + <_loop_0>main.asm783 + <_dec_0>main.asm785 + <_loop_1>main.asm788 + <_loop_3>main.asm791 + <_DELAY_0>main.asm824 + <_DELAY_1>main.asm826 + <_DELAY_2>main.asm828 diff --git a/main.asm b/main.asm index 52308f6..c54c573 100644 --- a/main.asm +++ b/main.asm @@ -360,7 +360,7 @@ TEMP_COMPARSION: ; определяем знак температуры brts _NEGATE_TEMP - rjmp _CHECK_MODE + rjmp _COMPARE _NEGATE_TEMP: com temp_r_l @@ -368,26 +368,31 @@ _NEGATE_TEMP: subi temp_r_l, low(-1) sbci temp_r_h, high(-1) -_CHECK_MODE: - ; определяем режим работы - lds r20, SETTING_MODE - tst r20 - brne _HEATING_MODE - -_HEATING_MODE: +_COMPARE: ; проверяем нижний порог cp min_r_trhd_l, temp_r_l cpc min_r_trhd_h, temp_r_h - brge _HEATING_ON ; TEMP <= MIN + brge _MIN_THRESHOLD ; TEMP <= MIN ; проверяем верхний порог cp temp_r_l, max_r_trhd_l cpc temp_r_h, max_r_trhd_h - brge _HEATING_OFF ; TEMP >= TOP + brge _MAX_THRESHOLD ; TEMP >= TOP rjmp _COMPARSION_EXIT -_HEATING_ON: +_MIN_THRESHOLD: + ; определяем режим работы + lds r20, SETTING_MODE + tst r20 + brne PC+3 + relay_off + rjmp PC+2 relay_on rjmp _COMPARSION_EXIT -_HEATING_OFF: +_MAX_THRESHOLD: + lds r20, SETTING_MODE + tst r20 + brne PC+3 + relay_on + rjmp PC+2 relay_off _COMPARSION_EXIT: pop r23 diff --git a/nbproject/private/private.xml b/nbproject/private/private.xml index af26a1b..2ba85cb 100644 --- a/nbproject/private/private.xml +++ b/nbproject/private/private.xml @@ -3,7 +3,10 @@ + file:/home/sergeyyarkov/Documents/Projects/Firmwares/AVR/attiny2313a_thermostat.X/mpy16u.asm + file:/home/sergeyyarkov/Documents/Projects/Firmwares/AVR/attiny2313a_thermostat.X/NOTES.md file:/home/sergeyyarkov/Documents/Projects/Firmwares/AVR/attiny2313a_thermostat.X/main.asm + file:/home/sergeyyarkov/Documents/Projects/Firmwares/AVR/attiny2313a_thermostat.X/README.md file:/home/sergeyyarkov/Documents/Projects/Firmwares/AVR/attiny2313a_thermostat.X/macros.asm file:/home/sergeyyarkov/Documents/Projects/Firmwares/AVR/attiny2313a_thermostat.X/definitions.asm