show negative numbers

This commit is contained in:
Sergey Yarkov 2023-08-05 17:28:52 +03:00
parent 9fae0d671e
commit 7fa07e9e57
No known key found for this signature in database
GPG Key ID: E91CE1FABC619B6F
9 changed files with 910 additions and 843 deletions

Binary file not shown.

View File

@ -1,7 +1,7 @@
:1000000013C01AC019C018C017C016C015C014C03C :1000000013C01AC019C018C017C016C015C014C03C
:1000100013C012C011C010C00FC00EC00DC03F06EB :1000100013C012C011C010C00FC00EC00DC03F06EB
:100020005B4F666D7D077F6F11241FBECFE5D1E06A :100020005B4F666D7D077F6F11241FBECFE5D1E06A
:10003000DEBFCDBF30D11EC3E3CFF894C09AC29AC1 :10003000DEBFCDBF4FD148C3E3CFF894C09AC29A78
:100040008DE08A95F1F70000C0988DE08A95F1F770 :100040008DE08A95F1F70000C0988DE08A95F1F770
:100050000000C29878940895F894C298C0988DE0F2 :100050000000C29878940895F894C298C0988DE0F2
:100060008A95F1F70000C29A8DE08A95F1F70000B9 :100060008A95F1F70000C29A8DE08A95F1F70000B9
@ -19,87 +19,92 @@
:100120000895CF93DF93C82FD62F80E4D8DF85DFE3 :100120000895CF93DF93C82FD62F80E4D8DF85DFE3
:100130008D2F806CA0DF8C2F9EDF8EDFDF91CF9123 :100130008D2F806CA0DF8C2F9EDF8EDFDF91CF9123
:10014000089562E080E4EDDF61E080E4EADF60E0F2 :10014000089562E080E4EDDF61E080E4EADF60E0F2
:1001500080E4E7DF089521E08A30910550F021E046 :1001500080E4E7DF0895992384F021E08A30910557
:10016000EAE0F0E0BF015FD2CB012F5F6A3071059A :1001600054F021E0EAE0F0E0BF019BD2CB012F5F29
:10017000C8F7822F0895AF92BF92CF92DF92EF928D :100170006A307105CCF7822F089591958195910988
:10018000FF920F931F93CF93DF9300D01F92CDB7B1 :10018000ECCF9F92AF92BF92CF92DF92EF92FF920D
:10019000DEB7B62EF42E009749F461113BC08C01F6 :100190000F931F93CF93DF9300D01F92CDB7DEB79D
:1001A000883E93407CF007EE13E00CC08C01883E43 :1001A000D62EA42EB92EBB1CBB24BB1CB22AE82E13
:1001B00023E0920714F007EE13E099231CF4119545 :1001B000F92E88EEE81683E0F80634F00F2EF7EEFD
:1001C00001951109C801C7DFA82E2AE030E0C80157 :1001C000EF2EF3E0FF2EF02DBB2009F47BC0F1945D
:1001D000B9013DD28B83CB01B90139D28A83C801E1 :1001D000E194F108C701BFDFC82E82E011E0C81228
:1001E00064E670E034D2CB01B90131D2898331E0C9 :1001E00010E02AE030E0C701B9015BD28B83CB017C
:1001F000A31691F083E0D82EDA1882E08D15A8F1CD :1001F000B90157D28A83C70164E670E052D2CB01BD
:1002000010E000E0C12C82E090E09C012F19310940 :10020000B9014FD2898381E0C81679F003E00C1957
:10021000790118C08C01D3CFDA2CF2CFE1E0F0E005 :10021000033008F041C082E090E07C01EA18F10868
:10022000EC0FFD1FED0DF11DE081F0E0E25EFF4FF0 :100220006894AA24A7F8912C1AC00C2DF4CF892D1C
:1002300084916C2D76DFD394C3940F5F1F4F82E0BF :10023000B1102AC08A2D28C0E1E0F0E0EC0FFD1FCC
:100240008D15A0F0E016F10649F733E0A31631F35F :10024000E00FF11DE081F0E0E25EFF4F8491612F4D
:10025000E1E0F0E0EC0FFD1FED0DF11DE081F0E0BD :1002500068DF1123D9F00F5F1F5F0330E8F41E152C
:10026000E25EFF4F84918068E4CFC12CEB2DF0E07B :100260001F0451F783E0C81639F3E1E0F0E0EC0F2A
:10027000E25EFF4F84916C2D54DF0F900F900F9032 :10027000FD1FE00FF11DE081F0E0E25EFF4FE49131
:10028000DF91CF911F910F91FF90EF90DF90CF9072 :1002800082E0C816A1F28A2D8E2BE1CFBB2019F394
:10029000BF90AF900895CF93DF93CDB7DEB764974B :10029000692D80E446DFDFCFED2DF0E0E25EFF4F19
:1002A0000FB6F894DEBF0FBECDBF6BE0CE01019656 :1002A0008491612F3EDF0F900F900F90DF91CF91DF
:1002B000E5D028E042E062E080E019DF42DF04E6BA :1002B0001F910F91FF90EF90DF90CF90BF90AF9084
:1002C00010E001C03EDFCE01019613D18111FACFBB :1002C0009F900895C70147DFC82E82E0C81288CFEB
:1002D000CE01019621D18B899C89B801A4D141E03E :1002D00010E087CFCF93DF93CDB7DEB765970FB62A
:1002E00089899A8948DFEFCFF894BC9A8FEB93E025 :1002E000F894DEBF0FBECDBF6BE0CE010196E6D025
:1002F0000197F1F700C00000BC989AEB9A95F1F7CE :1002F00028E042E062E080E0FADE23DF04E610E07E
:1003000000C086B3E3E3F3E03197F1F700C00000EB :1003000001C01FDFCE01019614D18111FACFCE01B9
:1003100078948295817091E08927089598E00DC0C6 :10031000019622D18B899C89B801AFD12D8941E00A
:10032000BC9A20EA2A95F1F7BC982AE12A95F1F7C0 :1003200089899A892EDFEECFF894BC9A8FEB93E0FF
:1003300000C078948695915069F0F89480FFF0CFD2 :100330000197F1F700C00000BC989AEB9A95F1F78D
:10034000BC9A20E12A95F1F7BC982AEA2A95F1F7A0 :1003400000C086B3E3E3F3E03197F1F700C00000AB
:1003500000C0EFCF089598E080E007C022E92A9519 :1003500078948295817091E08927089598E00DC086
:10036000F1F700C07894915071F0F8948695BC9A9A :10036000BC9A20EA2A95F1F7BC982AE12A95F1F780
:1003700020E12A95F1F7BC9828E12A95F1F7B49B82 :1003700000C078948695915069F0F89480FFF0CF92
:10038000EDCF8068EBCF0895AFDF811101C00895F4 :10038000BC9A20E12A95F1F7BC982AEA2A95F1F760
:100390008CECC4DF81E0FBCF0F931F93CF93DF93EF :1003900000C0EFCF089598E080E007C022E92A95D9
:1003A0008C01A2DF811105C0DF91CF911F910F91C8 :1003A000F1F700C07894915071F0F8948695BC9A5A
:1003B000089583E3B3DFE801085F1F4FCCDF899323 :1003B00020E12A95F1F7BC9828E12A95F1F7B49B42
:1003C000C017D107D9F781E0EFCFFC01680F791F83 :1003C000EDCF8068EBCF0895AFDF811101C00895B4
:1003D00080E02CE80BC08695915029F080FFFBCF80 :1003D0008CECC4DF81E0FBCF0F931F93CF93DF93AF
:1003E00086958227F9CFE617F70721F091918927A3 :1003E0008C01A2DF811105C0DF91CF911F910F9188
:1003F00098E0F4CF0895EF92FF920F931F93CF935D :1003F000089583E3B3DFE801085F1F4FCCDF8993E3
:10040000DF937C01C1DF8EEB89DFE7018701085FA5 :10040000C017D107D9F781E0EFCFFC01680F791F42
:100410001F4FA1DF8993C017D107D9F768E070E0BB :1004100080E02CE80BC08695915029F080FFFBCF3F
:10042000C701D3DFC82F97DF91E0C81390E0892F71 :1004200086958227F9CFE617F70721F09191892762
:10043000DF91CF911F910F91FF90EF90089554DFBE :1004300098E0F4CF0895EF92FF920F931F93CF931C
:10044000811101C00895A0DF88E468DF8FE19EE498 :10044000DF937C01C1DF8EEB89DFE7018701085F65
:100450000197F1F700C0000081E0F4CFCF93DF9364 :100450001F4FA1DF8993C017D107D9F768E070E07B
:10046000EC0192DF8EE45ADF888158DF898156DF04 :10046000C701D3DFC82F97DF91E0C81390E0892F31
:100470008A8154DFE4DFDF91CF910895FF920F93DB :10047000DF91CF911F910F91FF90EF90089554DF7E
:100480001F93CF93DF9300D01F92CDB7DEB78C01BF :10048000811101C00895A0DF88E468DF8FE19EE458
:10049000F62EB1DFF8018281898383818A83FAE0B5 :100490000197F1F700C0000081E0F4CFCF93DF9324
:1004A000FF16B9F08BE0F81689F0E9E0FE16A1F02E :1004A000EC0192DF8EE45ADF888158DF898156DFC4
:1004B0008FE78B83CE010196D1DF0F900F900F90C5 :1004B0008A8154DFE4DFDF91CF910895FF920F939B
:1004C000DF91CF911F910F91FF9008958FE58B835E :1004C0001F93CF93DF9300D01F92CDB7DEB78C017F
:1004D000F1CF8FE38B83EECF8FE18B83EBCF04DF04 :1004D000F62EB1DFF8018281898383818A83FAE075
:1004E000811101C008958CEC19DF84E417DF81E0ED :1004E000FF16B9F08BE0F81689F0E9E0FE16A1F0EE
:1004F000F9CFCF93DF93EC01F7DE811104C081E0E7 :1004F0008FE78B83CE010196D1DF0F900F900F9085
:10050000DF91CF910895CE01089646DF81E098856E :10050000DF91CF911F910F91FF9008958FE58B831D
:100510009832B1F780E0F4CFCF93DF93EC01DFDFC7 :10051000F1CF8FE38B83EECF8FE18B83EBCF04DFC3
:10052000882309F456C02C81822F90E08095909505 :10052000811101C008958CEC19DF84E417DF81E0AC
:1005300080769927892B09F04FC02FE78FE492E14D :10053000F9CFCF93DF93EC01F7DE811104C081E0A6
:10054000215080409040E1F700C00000CE0153DF11 :10054000DF91CF910895CE01089646DF81E098852E
:10055000882309F43EC029813881522F432FCA01D4 :100550009832B1F780E0F4CFCF93DF93EC01DFDF87
:1005600099230CF45BC095958795959587959595FE :10056000882309F45DC02C81822F90E080959095BE
:10057000879595958795998B888B287F11F0319574 :1005700080769927892B09F056C02FE73FE482E166
:10058000388388818F70282F30E0C901880F991F28 :10058000215030408040E1F700C00000CE0153DF31
:1005900082959295907F9827807F9827821B930B56 :10059000882309F445C0898190E04881242F382FB1
:1005A000880F991F880F991F820F931F880F991F1B :1005A00033230CF462C035952795359527953595FD
:1005B000880F991F880F991F9C0199238CF13595FD :1005B000279535952795398B288B80959095887F41
:1005C00027953595279535952795359527953B8B17 :1005C0009927892B09F054C081E08C8B4195488391
:1005D0002A8BDF91CF91089526FF0AC02FEB87E287 :1005D00088818F70282F30E0C901880F991F82957C
:1005E00099E0215080409040E1F700C00000AECF7C :1005E0009295907F9827807F9827821B930B880F86
:1005F00025FF0AC02FEF86E994E02150804090400B :1005F000991F880F991F820F931F880F991F880FCB
:10060000E1F700C00000A2CF2FE78BE492E0215079 :10060000991F880F991F9C019923A4F1359527956F
:1006100080409040E1F700C0000098CF0F96A3CF34 :100610003595279535952795359527953B8B2A8BCD
:10062000215F3F4FCCCFAA1BBB1B51E107C0AA1FC4 :10062000DF91CF91089526FF0AC09FEB27E239E0C2
:10063000BB1FA617B70710F0A61BB70B881F991F83 :10063000915020403040E1F700C00000A7CF25FFD7
:100640005A95A9F780959095BC01CD01089597FB27 :100640000AC08FEF96E924E0815090402040E1F706
:10065000072E16F4009406D077FD08D0E4DF07FCDF :1006500000C000009BCF3FE78BE492E03150804028
:1006600005D03EF4909581959F4F089570956195C2 :100660009040E1F700C0000091CF215F3F4F9BCF4A
:080670007F4F0895F894FFCFBD :100670001C8AAECF215F3F4FC9CFAA1BBB1B51E1E4
:1006800007C0AA1FBB1FA617B70710F0A61BB70B02
:10069000881F991F5A95A9F780959095BC01CD01A7
:1006A000089597FB072E16F4009406D077FD08D026
:1006B000E4DF07FC05D03EF4909581959F4F0895A7
:0C06C000709561957F4F0895F894FFCF6E
:00000001FF :00000001FF

File diff suppressed because it is too large Load Diff

View File

@ -195,7 +195,7 @@ END GROUP
.rela.plt .rela.plt
*(.rela.plt) *(.rela.plt)
.text 0x0000000000000000 0x678 .text 0x0000000000000000 0x6cc
*(.vectors) *(.vectors)
.vectors 0x0000000000000000 0x1e /home/sergeyyarkov/.mchp_packs/Microchip/ATtiny_DFP/3.0.151/gcc/dev/attiny45/avr25/crtattiny45.o .vectors 0x0000000000000000 0x1e /home/sergeyyarkov/.mchp_packs/Microchip/ATtiny_DFP/3.0.151/gcc/dev/attiny45/avr25/crtattiny45.o
0x0000000000000000 __vectors 0x0000000000000000 __vectors
@ -291,64 +291,64 @@ END GROUP
0x0000000000000142 0x14 build/default/production/main.o 0x0000000000000142 0x14 build/default/production/main.o
0x0000000000000142 TM1637_DisplayLine 0x0000000000000142 TM1637_DisplayLine
.text.get_int_length .text.get_int_length
0x0000000000000156 0x20 build/default/production/main.o 0x0000000000000156 0x2c build/default/production/main.o
0x0000000000000156 get_int_length 0x0000000000000156 get_int_length
.text.TM1637_DisplayFixedNum .text.TM1637_DisplayFixedNum
0x0000000000000176 0x120 build/default/production/main.o 0x0000000000000182 0x152 build/default/production/main.o
0x0000000000000176 TM1637_DisplayFixedNum 0x0000000000000182 TM1637_DisplayFixedNum
.text.main 0x0000000000000296 0x52 build/default/production/main.o .text.main 0x00000000000002d4 0x54 build/default/production/main.o
0x0000000000000296 main 0x00000000000002d4 main
.text.OneWire_Presence .text.OneWire_Presence
0x00000000000002e8 0x34 build/default/production/onewire.o 0x0000000000000328 0x34 build/default/production/onewire.o
0x00000000000002e8 OneWire_Presence 0x0000000000000328 OneWire_Presence
.text.OneWire_WriteByte .text.OneWire_WriteByte
0x000000000000031c 0x3a build/default/production/onewire.o 0x000000000000035c 0x3a build/default/production/onewire.o
0x000000000000031c OneWire_WriteByte 0x000000000000035c OneWire_WriteByte
.text.OneWire_ReadByte .text.OneWire_ReadByte
0x0000000000000356 0x32 build/default/production/onewire.o 0x0000000000000396 0x32 build/default/production/onewire.o
0x0000000000000356 OneWire_ReadByte 0x0000000000000396 OneWire_ReadByte
.text.OneWire_SkipROM .text.OneWire_SkipROM
0x0000000000000388 0x10 build/default/production/onewire.o 0x00000000000003c8 0x10 build/default/production/onewire.o
0x0000000000000388 OneWire_SkipROM 0x00000000000003c8 OneWire_SkipROM
.text.OneWire_ReadROM .text.OneWire_ReadROM
0x0000000000000398 0x32 build/default/production/onewire.o 0x00000000000003d8 0x32 build/default/production/onewire.o
0x0000000000000398 OneWire_ReadROM 0x00000000000003d8 OneWire_ReadROM
.text.OneWire_CRC8_Update .text.OneWire_CRC8_Update
0x00000000000003ca 0x2c build/default/production/onewire.o 0x000000000000040a 0x2c build/default/production/onewire.o
0x00000000000003ca OneWire_CRC8_Update 0x000000000000040a OneWire_CRC8_Update
.text.DallasTemp_ReadScratchpad .text.DallasTemp_ReadScratchpad
0x00000000000003f6 0x48 build/default/production/dstemperature.o 0x0000000000000436 0x48 build/default/production/dstemperature.o
0x00000000000003f6 DallasTemp_ReadScratchpad 0x0000000000000436 DallasTemp_ReadScratchpad
.text.DallasTemp_CopyScratchpad .text.DallasTemp_CopyScratchpad
0x000000000000043e 0x1e build/default/production/dstemperature.o 0x000000000000047e 0x1e build/default/production/dstemperature.o
0x000000000000043e DallasTemp_CopyScratchpad 0x000000000000047e DallasTemp_CopyScratchpad
.text.DallasTemp_WriteScratchpad .text.DallasTemp_WriteScratchpad
0x000000000000045c 0x20 build/default/production/dstemperature.o 0x000000000000049c 0x20 build/default/production/dstemperature.o
0x000000000000045c DallasTemp_WriteScratchpad 0x000000000000049c DallasTemp_WriteScratchpad
.text.DallasTemp_SetResolution .text.DallasTemp_SetResolution
0x000000000000047c 0x62 build/default/production/dstemperature.o 0x00000000000004bc 0x62 build/default/production/dstemperature.o
0x000000000000047c DallasTemp_SetResolution 0x00000000000004bc DallasTemp_SetResolution
.text.DallasTemp_Convert .text.DallasTemp_Convert
0x00000000000004de 0x14 build/default/production/dstemperature.o 0x000000000000051e 0x14 build/default/production/dstemperature.o
0x00000000000004de DallasTemp_Convert 0x000000000000051e DallasTemp_Convert
.text.DallasTemp_CheckError .text.DallasTemp_CheckError
0x00000000000004f2 0x26 build/default/production/dstemperature.o 0x0000000000000532 0x26 build/default/production/dstemperature.o
0x00000000000004f2 DallasTemp_CheckError 0x0000000000000532 DallasTemp_CheckError
.text.DallasTemp_GetTemperature .text.DallasTemp_GetTemperature
0x0000000000000518 0x10e build/default/production/dstemperature.o 0x0000000000000558 0x122 build/default/production/dstemperature.o
0x0000000000000518 DallasTemp_GetTemperature 0x0000000000000558 DallasTemp_GetTemperature
.text.libgcc.div .text.libgcc.div
0x0000000000000626 0x28 /opt/avr8-gnu-toolchain-linux_x86_64/bin/../lib/gcc/avr/7.3.0/avr25/libgcc.a(_udivmodhi4.o) 0x000000000000067a 0x28 /opt/avr8-gnu-toolchain-linux_x86_64/bin/../lib/gcc/avr/7.3.0/avr25/libgcc.a(_udivmodhi4.o)
0x0000000000000626 __udivmodhi4 0x000000000000067a __udivmodhi4
.text.libgcc.div .text.libgcc.div
0x000000000000064e 0x26 /opt/avr8-gnu-toolchain-linux_x86_64/bin/../lib/gcc/avr/7.3.0/avr25/libgcc.a(_divmodhi4.o) 0x00000000000006a2 0x26 /opt/avr8-gnu-toolchain-linux_x86_64/bin/../lib/gcc/avr/7.3.0/avr25/libgcc.a(_divmodhi4.o)
0x000000000000064e __divmodhi4 0x00000000000006a2 __divmodhi4
0x000000000000064e _div 0x00000000000006a2 _div
0x0000000000000674 . = ALIGN (0x2) 0x00000000000006c8 . = ALIGN (0x2)
*(.fini9) *(.fini9)
.fini9 0x0000000000000674 0x0 /opt/avr8-gnu-toolchain-linux_x86_64/bin/../lib/gcc/avr/7.3.0/avr25/libgcc.a(_exit.o) .fini9 0x00000000000006c8 0x0 /opt/avr8-gnu-toolchain-linux_x86_64/bin/../lib/gcc/avr/7.3.0/avr25/libgcc.a(_exit.o)
0x0000000000000674 exit 0x00000000000006c8 exit
0x0000000000000674 _exit 0x00000000000006c8 _exit
*(.fini9) *(.fini9)
*(.fini8) *(.fini8)
*(.fini8) *(.fini8)
@ -367,11 +367,11 @@ END GROUP
*(.fini1) *(.fini1)
*(.fini1) *(.fini1)
*(.fini0) *(.fini0)
.fini0 0x0000000000000674 0x4 /opt/avr8-gnu-toolchain-linux_x86_64/bin/../lib/gcc/avr/7.3.0/avr25/libgcc.a(_exit.o) .fini0 0x00000000000006c8 0x4 /opt/avr8-gnu-toolchain-linux_x86_64/bin/../lib/gcc/avr/7.3.0/avr25/libgcc.a(_exit.o)
*(.fini0) *(.fini0)
0x0000000000000678 _etext = . 0x00000000000006cc _etext = .
.data 0x0000000000800060 0x0 load address 0x0000000000000678 .data 0x0000000000800060 0x0 load address 0x00000000000006cc
[!provide] PROVIDE (__data_start, .) [!provide] PROVIDE (__data_start, .)
*(.data) *(.data)
*(.data*) *(.data*)
@ -389,8 +389,8 @@ END GROUP
*(.bss*) *(.bss*)
*(COMMON) *(COMMON)
[!provide] PROVIDE (__bss_end, .) [!provide] PROVIDE (__bss_end, .)
0x0000000000000678 __data_load_start = LOADADDR (.data) 0x00000000000006cc __data_load_start = LOADADDR (.data)
0x0000000000000678 __data_load_end = (__data_load_start + SIZEOF (.data)) 0x00000000000006cc __data_load_end = (__data_load_start + SIZEOF (.data))
.noinit 0x0000000000800060 0x0 .noinit 0x0000000000800060 0x0
[!provide] PROVIDE (__noinit_start, .) [!provide] PROVIDE (__noinit_start, .)

View File

@ -98,10 +98,20 @@ void DallasTemp_GetTemperature(DallasSensor *Sensor) {
* Двойное дополнение для дробной части если минусовая температура: * Двойное дополнение для дробной части если минусовая температура:
* проверяем что последние пять битов в старшем байте температуры стоят в единице * проверяем что последние пять битов в старшем байте температуры стоят в единице
*/ */
if (Sensor->SCRATCHPAD[1] & 0xf8) Sensor->SCRATCHPAD[0] = -Sensor->SCRATCHPAD[0]; if (!(~Sensor->SCRATCHPAD[1] & 0xf8)) {
Sensor->T_NEGATIVE = 1;
Sensor->SCRATCHPAD[0] = -Sensor->SCRATCHPAD[0];
} else {
Sensor->T_NEGATIVE = 0;
}
/** /**
* Получаем дробную часть через битовую маску 0x0f, умножаем для получения точности. * Получаем дробную часть через битовую маску 0x0f, умножаем для получения точности.
*/ */
Sensor->TEMPERATURE_FRACTION = ((Sensor->SCRATCHPAD[0] & 0x0f) * 1000) / 16; Sensor->TEMPERATURE_FRACTION = ((Sensor->SCRATCHPAD[0] & 0x0f) * 1000) / 16;
} }
//float DallasTemp_GetFloatTemperature(DallasSensor *Sensor) {
// DallasTemp_GetTemperature(Sensor);
// return (float)((float)Sensor->TEMPERATURE + ((float)Sensor->TEMPERATURE_FRACTION / 1000));
//}

View File

@ -6,6 +6,11 @@
#define DS18B20_CMD_CPSCRATCHPAD 0x48 #define DS18B20_CMD_CPSCRATCHPAD 0x48
#define DS18B20_CONST_FAMILY_CODE 0x28 #define DS18B20_CONST_FAMILY_CODE 0x28
#define DS_TEMP_ADC_RESOLUTION_12 12
#define DS_TEMP_ADC_RESOLUTION_11 11
#define DS_TEMP_ADC_RESOLUTION_10 10
#define DS_TEMP_ADC_RESOLUTION_9 9
#ifndef DSTEMPERATURE_H #ifndef DSTEMPERATURE_H
#define DSTEMPERATURE_H #define DSTEMPERATURE_H
@ -14,6 +19,7 @@ typedef struct DallasSensor {
uint8_t ROM[8]; // ПЗУ (код семейства, серийный код, CRC8) uint8_t ROM[8]; // ПЗУ (код семейства, серийный код, CRC8)
int16_t TEMPERATURE; // Температура в градусах цельсия (целая часть) int16_t TEMPERATURE; // Температура в градусах цельсия (целая часть)
uint16_t TEMPERATURE_FRACTION; // Дробная часть uint16_t TEMPERATURE_FRACTION; // Дробная часть
uint8_t T_NEGATIVE;
} DallasSensor; } DallasSensor;
// TODO сделать чтобы все работало с несколькими датчиками а не с одним (выполнять команду skiprom если один датчик, иначе выбирать к какому датчику обращаться) // TODO сделать чтобы все работало с несколькими датчиками а не с одним (выполнять команду skiprom если один датчик, иначе выбирать к какому датчику обращаться)
@ -56,10 +62,17 @@ void DallasTemp_SetResolution(DallasSensor *Sensor, uint8_t r);
/** /**
* Получает оцифрованное значение датчика и конвертирует занчение в читаемый вид. * Получает оцифрованное значение датчика и конвертирует занчение в читаемый вид.
* @param Sensor - датчика * @param Sensor - датчик
*/ */
void DallasTemp_GetTemperature(DallasSensor *Sensor); void DallasTemp_GetTemperature(DallasSensor *Sensor);
/**
* Преобразует целую и дробную часть в тип числа с плавающей точкой
* @param Sensor - датчик
* @return Возвращает температуру
*/
//float DallasTemp_GetFloatTemperature(DallasSensor *Sensor);
/** /**
* Читает семейный код датчика и проверяет его правильность * Читает семейный код датчика и проверяет его правильность
* @param Sensor - датчик * @param Sensor - датчик

37
main.c
View File

@ -164,7 +164,7 @@ void TM1637_DisplayInt(int16_t num) {
if (is_signed) { if (is_signed) {
tmp = -tmp; tmp = -tmp;
TM1637_DisplaySymbol(0x40, 0); // sign symbol TM1637_DisplaySymbol(0x40, 0);
} }
do { do {
@ -174,8 +174,9 @@ void TM1637_DisplayInt(int16_t num) {
} while (--i); } while (--i);
} }
uint8_t get_int_length(uint16_t num) { uint8_t get_int_length(int16_t num) {
uint8_t l = 1; uint8_t l = 1;
if (num < 0) num = -num;
while (num > 9) { while (num > 9) {
num /= 10; num /= 10;
l++; l++;
@ -183,10 +184,8 @@ uint8_t get_int_length(uint16_t num) {
return l; return l;
} }
void TM1637_DisplayFixedNum(int16_t num, uint8_t frac, uint8_t presicion, uint8_t sign) {
// TODO сделать отображение минусовой температуры для этой функции uint8_t is_signed = (num < 0) | (sign);
void TM1637_DisplayFixedNum(int16_t num, uint8_t frac, uint8_t presicion) {
uint8_t is_signed = (num < 0) | (num == 0 && frac > 0);
num = num > 999 ? 999 : num; num = num > 999 ? 999 : num;
if (is_signed) { if (is_signed) {
@ -194,7 +193,8 @@ void TM1637_DisplayFixedNum(int16_t num, uint8_t frac, uint8_t presicion) {
} }
uint8_t length = get_int_length(num); uint8_t length = get_int_length(num);
uint8_t i = TM1637_DIGITS_COUNT, j = 0; uint8_t is_overflow = length + 1 == TM1637_DIGITS_COUNT;
uint8_t i = TM1637_DIGITS_COUNT, j = is_overflow && is_signed ? 1 : 0;
uint8_t buffer[TM1637_DIGITS_COUNT]; uint8_t buffer[TM1637_DIGITS_COUNT];
do { do {
@ -209,19 +209,17 @@ void TM1637_DisplayFixedNum(int16_t num, uint8_t frac, uint8_t presicion) {
} }
while (i < TM1637_DIGITS_COUNT) { while (i < TM1637_DIGITS_COUNT) {
// if (j == 0) {
//// if (is_signed) {
//// TM1637_DisplaySymbol(0x40, 0);
//// }
// i++;
// j++;
// continue;
// }
TM1637_DisplaySymbol( TM1637_DisplaySymbol(
(j == TM1637_DIGITS_COUNT - 1 - presicion && TM1637_DIGITS_COUNT != length) (j == TM1637_DIGITS_COUNT - 1 - presicion && TM1637_DIGITS_COUNT != length)
? get_symbol(buffer[i]) | 0x80 // точка ? get_symbol(buffer[i]) | (is_overflow && is_signed ? 0 : 0x80) // точка
: get_symbol(buffer[i]), : get_symbol(buffer[i]),
j); j);
if (j == 0) {
if (is_signed) {
TM1637_DisplaySymbol(0x40, 0);
}
}
i++; i++;
j++; j++;
} }
@ -231,12 +229,11 @@ void TM1637_DisplayFixedNum(int16_t num, uint8_t frac, uint8_t presicion) {
int main(void) { int main(void) {
DallasSensor Sensor_01; DallasSensor Sensor_01;
DallasTemp_SetResolution(&Sensor_01, DS_TEMP_ADC_RESOLUTION_11);
DallasTemp_SetResolution(&Sensor_01, 11);
TM1637_Init(PORT_TWI_DIO, PORT_TWI_CLK, TM1637_BRIGHTNESS_2, TM1637_DISP_ON); TM1637_Init(PORT_TWI_DIO, PORT_TWI_CLK, TM1637_BRIGHTNESS_2, TM1637_DISP_ON);
TM1637_DisplayLine(); TM1637_DisplayLine();
while (1) { while (1) {
/** /**
* Проверка датчика * Проверка датчика
@ -250,7 +247,7 @@ int main(void) {
* Получение температуры и вывод на индикатор * Получение температуры и вывод на индикатор
*/ */
DallasTemp_GetTemperature(&Sensor_01); DallasTemp_GetTemperature(&Sensor_01);
TM1637_DisplayFixedNum(Sensor_01.TEMPERATURE, Sensor_01.TEMPERATURE_FRACTION / 100, 1); TM1637_DisplayFixedNum(Sensor_01.TEMPERATURE, Sensor_01.TEMPERATURE_FRACTION / 100, 1, Sensor_01.T_NEGATIVE);
} }
return 0; return 0;
} }