From a74e7008ff447521b9a8ba0e7e3fb2d78e313190 Mon Sep 17 00:00:00 2001 From: sergeyyarkov Date: Wed, 10 May 2023 22:31:29 +0300 Subject: [PATCH] 1 wire presence detect --- build/firmware.hex | 35 ++--- build/firmware.lss | 316 +++++++++++++++++++++++++-------------------- firmware.asm | 140 ++++++++++++-------- 3 files changed, 275 insertions(+), 216 deletions(-) diff --git a/build/firmware.hex b/build/firmware.hex index 7437412..3a94642 100644 --- a/build/firmware.hex +++ b/build/firmware.hex @@ -3,31 +3,32 @@ :020016003EC0EA :10001A0000C04F935F930F935FB7409167004530DD :10002A000CF403C0442740936700403041F493988E -:10003A0094989598929A00916600AAD06BD0413014 -:10004A0041F4929894989598939A00916500A0D05B +:10003A0094989598929A00916600B5D06BD0413009 +:10004A0041F4929894989598939A00916500ABD050 :10005A0061D0423041F4929893989598949A00917D -:10006A00640096D057D0433041F49298939894986C -:10007A00959A009163008CD04DD0439540936700C8 +:10006A006400A1D057D0433041F492989398949861 +:10007A00959A0091630097D04DD0439540936700BD :10008A005FBF0F915F914F9118950F930FB7B29B76 :10009A0005C0B39B05C0B49B05C005C0019603C04B :1000AA000A9601C0CF960FBF0F9118950FED0DBF9D :1000BA000EE701BB01EC07BB0CE108BB00E20BBF7A :1000CA000CE100BD02E000BF05E003BF09E106BF85 :1000DA0001E009BF11241092670080E090E026D069 -:1000EA0078943ED070FD969A70FF9698FACFEE24D7 +:1000EA00789449D070FD969A70FF9698FACFEE24CC :1000FA00FF1841E1001F111F4A9509F40895EE1CEB :10010A00FF1CE21AF30A20F4E20EF31E8894F2CFDF :10011A000894F0CF0F930FB800E40EB90BE10DB9B4 -:10012A00769BFDCFC09AC0980F91089503E80CBD45 -:10013A0001EC0ABD09EC08BD03E00EBDB99A08B787 -:10014A0006FFFCCFB99808B705FFFDCF03D00027FB -:10015A000EBD0895B19B02C07E7F01C071600895F3 -:10016A005F9354E0A3E6B0E080936100909362004D -:10017A0000916100109162002AE030E0B8DFED9250 -:10018A0000936100109362005A9591F75F91089568 -:10019A000F931F93E4EDF1E01127E00FF11F049094 -:1001AA001F910F91089503EB0A95F1F708950F93A4 -:1001BA001F930FEF1FEF1A95000000000000D9F7F8 -:1001CA000A95C1F71F910F910895C0F9A4B09992A9 -:0601DA0082F880909C00F9 +:10012A00769BFDCFC09AC0980F910895F89400E08D +:10013A000CBD0CE30ABD05E408BD03E00EBDB99A87 +:10014A0008B706FFFCCFB99808B705FFFDCF0DD059 +:10015A0000E00CBD04E30ABD08B706FFFDCF002787 +:10016A000EBD0FEF08BF78940895B19B7160089592 +:10017A00F894789408955F9354E0A3E6B0E08093EE +:10018A0061009093620000916100109162002AE080 +:10019A0030E0ADDFED9200936100109362005A9552 +:1001AA0091F75F9108950F931F93EAEEF1E01127FB +:1001BA00E00FF11F04901F910F91089503EB0A9528 +:1001CA00F1F708950F931F930FEF1FEF1A95000091 +:1001DA0000000000D9F70A95C1F71F910F91089501 +:0C01EA00C0F9A4B0999282F880909C00AB :00000001FF diff --git a/build/firmware.lss b/build/firmware.lss index 09d94f8..12b0667 100644 --- a/build/firmware.lss +++ b/build/firmware.lss @@ -1,20 +1,20 @@ -AVRASM ver. 2.2.7 firmware.asm Sat Apr 29 03:25:47 2023 +AVRASM ver. 2.2.7 firmware.asm Wed May 10 21:22:23 2023 firmware.asm(14): Including file 'tn2313Adef.inc' -firmware.asm(257): Including file 'div16u.asm' +firmware.asm(270): Including file 'div16u.asm' div16u.asm(22): warning: Register r16 already defined by the .DEF directive -firmware.asm(257): 'div16u.asm' included form here +firmware.asm(270): 'div16u.asm' included form here div16u.asm(23): warning: Register r17 already defined by the .DEF directive -firmware.asm(257): 'div16u.asm' included form here +firmware.asm(270): 'div16u.asm' included form here div16u.asm(24): warning: Register r16 already defined by the .DEF directive -firmware.asm(257): 'div16u.asm' included form here +firmware.asm(270): 'div16u.asm' included form here div16u.asm(25): warning: Register r17 already defined by the .DEF directive -firmware.asm(257): 'div16u.asm' included form here -firmware.asm(258): Including file 'usi.asm' +firmware.asm(270): 'div16u.asm' included form here +firmware.asm(271): Including file 'usi.asm' firmware.asm(14): Including file 'tn2313Adef.inc' -firmware.asm(257): Including file 'div16u.asm' -firmware.asm(258): Including file 'usi.asm' +firmware.asm(270): Including file 'div16u.asm' +firmware.asm(271): Including file 'usi.asm' ; Project name: thermostat @@ -730,35 +730,48 @@ firmware.asm(258): Including file 'usi.asm' ; ***** END OF FILE ****************************************************** .LIST - .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 числа которое сейчас на индикаторе + .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 числа которое сейчас на индикаторе - .EQU DIGIT_1_PIN = PD2 ; Пин разряда индикатора 1 - .EQU DIGIT_2_PIN = PD3 ; Пин разряда индикатора 2 - .EQU DIGIT_3_PIN = PD4 ; Пин разряда индикатора 3 - .EQU DIGIT_4_PIN = PD5 ; Пин разряда индикатора 4 + .EQU DIGIT_1_PIN = PD2 ; Пин разряда индикатора 1 + .EQU DIGIT_2_PIN = PD3 ; Пин разряда индикатора 2 + .EQU DIGIT_3_PIN = PD4 ; Пин разряда индикатора 3 + .EQU DIGIT_4_PIN = PD5 ; Пин разряда индикатора 4 - .EQU LED_POWER_PIN = PD6 ; Светодиод, который говорит о том что питание подано + .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 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 DS18B20_CMD_CONVERTTEMP = 0x44 + .EQU DS18B20_CMD_RSCRATCHPAD = 0xbe + .EQU DS18B20_CMD_WSCRATCHPAD = 0x4e + .EQU DS18B20_CMD_CPYSCRATCHPAD = 0x48 + .EQU DS18B20_CMD_RECEEPROM = 0xb8 + .EQU DS18B20_CMD_RPWRSUPPLY = 0xb4 + .EQU DS18B20_CMD_SEARCHROM = 0xf0 + .EQU DS18B20_CMD_READROM = 0x33 + .EQU DS18B20_CMD_MATCHROM = 0x55 + .EQU DS18B20_CMD_SKIPROM = 0xcc + .EQU DS18B20_CMD_ALARMSEARCH = 0xec - .EQU SW_PLUS_PIN = PB2 ; Кнопка "Минус" - .EQU SW_MINUS_PIN = PB3 ; Кнопка "Плюс" - .EQU SW_SET_PIN = PB4 ; Кнопка "Установить" + .EQU USI_LATCH_PIN = PB0 ; ST_CP на 74HC595 + .EQU USI_DO_PIN = PB6 ; DS на 74HC595 + .EQU USI_CLK_PIN = PB7 ; SH_CP на 74HC595 - .EQU MCU_STATE_DEFAULT = 0x01 ; Режим измерения температуры и сравнения с заданными параметрами - .EQU MCU_STATE_PROGRAM = 0x02 ; Режим настройки параметров в EEPROM - .EQU MCU_STATE_ERROR = 0x03 ; Режим ошибки, например когда не подключен датчик + .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 + .EQU MCU_STATE_ERROR = 0x03 ; Режим ошибки, например когда не подключен датчик ; **** МАКРОСЫ ************************************************** .MACRO outi @@ -826,7 +839,7 @@ firmware.asm(258): Including file 'usi.asm' 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 +000022 d0b5 rcall DISPLAY_DECODER 000023 d06b rcall USI_TRANSMIT _indicate_2: @@ -838,7 +851,7 @@ firmware.asm(258): Including file 'usi.asm' 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 +00002c d0ab rcall DISPLAY_DECODER 00002d d061 rcall USI_TRANSMIT _indicate_3: @@ -850,7 +863,7 @@ firmware.asm(258): Including file 'usi.asm' 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 +000036 d0a1 rcall DISPLAY_DECODER 000037 d057 rcall USI_TRANSMIT _indicate_4: @@ -862,7 +875,7 @@ firmware.asm(258): Including file 'usi.asm' 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 +000040 d097 rcall DISPLAY_DECODER 000041 d04d rcall USI_TRANSMIT _indicate_exit: @@ -946,12 +959,12 @@ firmware.asm(258): Including file 'usi.asm' 000072 e080 000073 e090 display_load 0 ; загружаем число, которое нужно показать на индикатор -000074 d026 rcall ONE_WIRE_RESET ; проверяем наличие датчика на шине путем выполнения процедуры сброса +000074 d026 rcall _1_WIRE_DETECT_PRESENCE ; проверяем наличие датчика на шине путем выполнения процедуры сброса 000075 9478 sei ; **** ГЛАВНЫЙ ЦИКЛ ********************************************** LOOP: -000076 d03e rcall DISPLAY_UPD_DIGITS ; получаем из этого числа цифры путем деления и распределяем их по ячейкам в SRAM +000076 d049 rcall DISPLAY_UPD_DIGITS ; получаем из этого числа цифры путем деления и распределяем их по ячейкам в SRAM ; usart_t: ; sbis UCSRA, UDRE @@ -1065,140 +1078,157 @@ firmware.asm(258): Including file 'usi.asm' 000098 98c0 cbi PORTB, USI_LATCH_PIN 000099 910f pop r16 00009a 9508 - ; **** ПРОВЕРКА ДАТЧИКА НА ШИНЕ *************************************************** - ONE_WIRE_RESET: + ; **** ОПРОС ПРИСУТСТВИЯ УСТРОЙСТВА ****************************** + _1_WIRE_DETECT_PRESENCE: +00009b 94f8 cli ; Шаг 1. выключаем глобальные прерывания + ; 62 тика -00009b e803 -00009c bd0c outi r16, TCNT1L, 131 -00009d ec01 -00009e bd0a outi r16, OCR1AL, 193 -00009f ec09 -0000a0 bd08 outi r16, OCR1BL, 201 +00009c e000 +00009d bd0c outi r16, TCNT1L, 0 +00009e e30c +00009f bd0a outi r16, OCR1AL, 60 ; 480 мкс +0000a0 e405 +0000a1 bd08 outi r16, OCR1BL, 69 ; 72 мкс - ; запуск таймера в режиме Normal -0000a1 e003 -0000a2 bd0e outi r16, TCCR1B, (1<