error handling

This commit is contained in:
Sergey Yarkov 2023-08-05 20:33:08 +03:00
parent 7fa07e9e57
commit 4f5be5e1f4
No known key found for this signature in database
GPG Key ID: E91CE1FABC619B6F
10 changed files with 1036 additions and 894 deletions

Binary file not shown.

View File

@ -1,7 +1,7 @@
:1000000013C01AC019C018C017C016C015C014C03C
:1000100013C012C011C010C00FC00EC00DC03F06EB
:100020005B4F666D7D077F6F11241FBECFE5D1E06A
:10003000DEBFCDBF4FD148C3E3CFF894C09AC29A78
:10003000DEBFCDBF97D1A9C3E3CFF894C09AC29ACF
:100040008DE08A95F1F70000C0988DE08A95F1F770
:100050000000C29878940895F894C298C0988DE0F2
:100060008A95F1F70000C29A8DE08A95F1F70000B9
@ -19,92 +19,104 @@
:100120000895CF93DF93C82FD62F80E4D8DF85DFE3
:100130008D2F806CA0DF8C2F9EDF8EDFDF91CF9123
:10014000089562E080E4EDDF61E080E4EADF60E0F2
:1001500080E4E7DF0895992384F021E08A30910557
:1001600054F021E0EAE0F0E0BF019BD2CB012F5F29
:100170006A307105CCF7822F089591958195910988
:10018000ECCF9F92AF92BF92CF92DF92EF92FF920D
:100190000F931F93CF93DF9300D01F92CDB7DEB79D
:1001A000D62EA42EB92EBB1CBB24BB1CB22AE82E13
:1001B000F92E88EEE81683E0F80634F00F2EF7EEFD
:1001C000EF2EF3E0FF2EF02DBB2009F47BC0F1945D
:1001D000E194F108C701BFDFC82E82E011E0C81228
:1001E00010E02AE030E0C701B9015BD28B83CB017C
:1001F000B90157D28A83C70164E670E052D2CB01BD
:10020000B9014FD2898381E0C81679F003E00C1957
:10021000033008F041C082E090E07C01EA18F10868
:100220006894AA24A7F8912C1AC00C2DF4CF892D1C
:10023000B1102AC08A2D28C0E1E0F0E0EC0FFD1FCC
:10024000E00FF11DE081F0E0E25EFF4F8491612F4D
:1002500068DF1123D9F00F5F1F5F0330E8F41E152C
:100260001F0451F783E0C81639F3E1E0F0E0EC0F2A
:10027000FD1FE00FF11DE081F0E0E25EFF4FE49131
:1002800082E0C816A1F28A2D8E2BE1CFBB2019F394
:10029000692D80E446DFDFCFED2DF0E0E25EFF4F19
:1002A0008491612F3EDF0F900F900F90DF91CF91DF
:1002B0001F910F91FF90EF90DF90CF90BF90AF9084
:1002C0009F900895C70147DFC82E82E0C81288CFEB
:1002D00010E087CFCF93DF93CDB7DEB765970FB62A
:1002E000F894DEBF0FBECDBF6BE0CE010196E6D025
:1002F00028E042E062E080E0FADE23DF04E610E07E
:1003000001C01FDFCE01019614D18111FACFCE01B9
:10031000019622D18B899C89B801AFD12D8941E00A
:1003200089899A892EDFEECFF894BC9A8FEB93E0FF
:100330000197F1F700C00000BC989AEB9A95F1F78D
:1003400000C086B3E3E3F3E03197F1F700C00000AB
:1003500078948295817091E08927089598E00DC086
:10036000BC9A20EA2A95F1F7BC982AE12A95F1F780
:1003700000C078948695915069F0F89480FFF0CF92
:10038000BC9A20E12A95F1F7BC982AEA2A95F1F760
:1003900000C0EFCF089598E080E007C022E92A95D9
:1003A000F1F700C07894915071F0F8948695BC9A5A
:1003B00020E12A95F1F7BC9828E12A95F1F7B49B42
:1003C000EDCF8068EBCF0895AFDF811101C00895B4
:1003D0008CECC4DF81E0FBCF0F931F93CF93DF93AF
:1003E0008C01A2DF811105C0DF91CF911F910F9188
:1003F000089583E3B3DFE801085F1F4FCCDF8993E3
:10040000C017D107D9F781E0EFCFFC01680F791F42
:1004100080E02CE80BC08695915029F080FFFBCF3F
:1004200086958227F9CFE617F70721F09191892762
:1004300098E0F4CF0895EF92FF920F931F93CF931C
:10044000DF937C01C1DF8EEB89DFE7018701085F65
:100450001F4FA1DF8993C017D107D9F768E070E07B
:10046000C701D3DFC82F97DF91E0C81390E0892F31
:10047000DF91CF911F910F91FF90EF90089554DF7E
:10048000811101C00895A0DF88E468DF8FE19EE458
:100490000197F1F700C0000081E0F4CFCF93DF9324
:1004A000EC0192DF8EE45ADF888158DF898156DFC4
:1004B0008A8154DFE4DFDF91CF910895FF920F939B
:1004C0001F93CF93DF9300D01F92CDB7DEB78C017F
:1004D000F62EB1DFF8018281898383818A83FAE075
:1004E000FF16B9F08BE0F81689F0E9E0FE16A1F0EE
:1004F0008FE78B83CE010196D1DF0F900F900F9085
:10050000DF91CF911F910F91FF9008958FE58B831D
:10051000F1CF8FE38B83EECF8FE18B83EBCF04DFC3
:10052000811101C008958CEC19DF84E417DF81E0AC
:10053000F9CFCF93DF93EC01F7DE811104C081E0A6
:10054000DF91CF910895CE01089646DF81E098852E
:100550009832B1F780E0F4CFCF93DF93EC01DFDF87
:10056000882309F45DC02C81822F90E080959095BE
:1005700080769927892B09F056C02FE73FE482E166
:10058000215030408040E1F700C00000CE0153DF31
:10059000882309F445C0898190E04881242F382FB1
:1005A00033230CF462C035952795359527953595FD
:1005B000279535952795398B288B80959095887F41
:1005C0009927892B09F054C081E08C8B4195488391
:1005D00088818F70282F30E0C901880F991F82957C
:1005E0009295907F9827807F9827821B930B880F86
:1005F000991F880F991F820F931F880F991F880FCB
:10060000991F880F991F9C019923A4F1359527956F
:100610003595279535952795359527953B8B2A8BCD
:10062000DF91CF91089526FF0AC09FEB27E239E0C2
:10063000915020403040E1F700C00000A7CF25FFD7
:100640000AC08FEF96E924E0815090402040E1F706
:1006500000C000009BCF3FE78BE492E03150804028
:100660009040E1F700C0000091CF215F3F4F9BCF4A
:100670001C8AAECF215F3F4FC9CFAA1BBB1B51E1E4
:1006800007C0AA1FBB1FA617B70710F0A61BB70B02
:10069000881F991F5A95A9F780959095BC01CD01A7
:1006A000089597FB072E16F4009406D077FD08D026
:1006B000E4DF07FC05D03EF4909581959F4F0895A7
:0C06C000709561957F4F0895F894FFCF6E
:1001500080E4E7DF0895BF92CF92DF92EF92FF92A3
:100160000F931F93CF93DF938C01EC01083E83E044
:10017000180714F0C7EED3E0112354F00F2EF3E06C
:10018000DF2EF02D0F2EFAE0EF2EF12CF02D17C000
:10019000D195C195D10960E080E4C3DFEFCFDA9457
:1001A000CE01B701DFD2B62EC72E825E9F4FFC0173
:1001B00084916D2DB6DFCB2DDC2DDD2029F01123B0
:1001C00074F7E1E0DE12EBCFDF91CF911F910F9139
:1001D000FF90EF90DF90CF90BF900895992384F027
:1001E00021E08A30910554F021E0EAE0F0E0BF011F
:1001F000B9D2CB012F5F6A307105CCF7822F0895F9
:10020000919581959109ECCF9F92AF92BF92CF9239
:10021000DF92EF92FF920F931F93CF93DF9300D063
:100220001F92CDB7DEB7D62EA42EC92ECC1CCC245F
:10023000CC1CC22AE82EF92E88EEE81683E0F806D8
:1002400034F00F2EF7EEEF2EF3E0FF2EF02DCC2042
:1002500009F480C0F194E194F108C701BFDFB82E22
:1002600082E011E0B81210E02AE030E0C701B901E5
:1002700079D28B83CB01B90175D28A83C70164E639
:1002800070E070D2CB01B9016DD2898381E0B816DC
:1002900079F003E00B19033008F046C082E090E0EB
:1002A0007C01EA18F1086894AA24A7F8912C18C0D8
:1002B0000B2DF4CF1E151F04F1F0E1E0F0E0EC0F80
:1002C000FD1FE00FF11DE081F0E0E25EFF4F849141
:1002D000612F27DF81E0800F1F5F0F5F833020F5E4
:1002E000CC2041F31111E6CF692D80E41ADF81E0C3
:1002F000800F11E0F2CF83E0B816F9F2E1E0F0E010
:10030000EC0FFD1FE00FF11DE081F0E0E25EFF4F1A
:10031000E49182E0B81619F08A2D8E2BD9CF892D61
:10032000C110FBCF8A2DF9CFED2DF0E0E25EFF4F3B
:100330008491612FF6DE0F900F900F90DF91CF9197
:100340001F910F91FF90EF90DF90CF90BF90AF90F3
:100350009F900895C70142DFB82E82E0B81283CF84
:1003600010E082CFCF93DF93CDB7DEB766970FB69D
:10037000F894DEBF0FBECDBFBB9AC3986BE0CE0131
:100380000196F2D028E042E062E080E0B0DED9DE03
:1003900004E610E00CC0C39A90E0DDDE2FEF80E7AA
:1003A00092E0215080409040E1F700C00000CE0173
:1003B000019615D18111EFCFC398CE01019629D1B5
:1003C0008B899C89B801BAD12D8941E089899A89A4
:1003D0001BDFEDCFF894BC9A8FEB93E00197F1F718
:1003E00000C00000BC989AEB9A95F1F700C086B364
:1003F000E3E3F3E03197F1F700C0000078948295D1
:10040000817091E08927089598E00DC0BC9A20EA98
:100410002A95F1F7BC982AE12A95F1F700C0789463
:100420008695915069F0F89480FFF0CFBC9A20E156
:100430002A95F1F7BC982AEA2A95F1F700C0EFCF88
:10044000089598E080E007C022E92A95F1F700C0FE
:100450007894915071F0F8948695BC9A20E12A9591
:10046000F1F7BC9828E12A95F1F7B49BEDCF8068AD
:10047000EBCF0895AFDF811101C008958CECC4DF8C
:1004800081E0FBCF0F931F93CF93DF938C01A2DF0B
:10049000811105C0DF91CF911F910F91089583E3E2
:1004A000B3DFE801085F1F4FCCDF8993C017D10786
:1004B000D9F781E0EFCFFC01680F791F80E02CE8CD
:1004C0000BC08695915029F080FFFBCF869582273F
:1004D000F9CFE617F70721F09191892798E0F4CF3B
:1004E0000895EF92FF920F931F93CF93DF937C01B8
:1004F000C1DF8EEB89DFE7018701085F1F4FA1DFB6
:100500008993C017D107D9F768E070E0C701D3DF3E
:10051000C82F97DF91E0C81390E0892FDF91CF912A
:100520001F910F91FF90EF90089554DF811101C04A
:100530000895A0DF88E468DF8FE19EE40197F1F77A
:1005400000C0000081E0F4CFCF93DF93EC0192DF95
:100550008EE45ADF888158DF898156DF8A8154DF33
:10056000E4DFDF91CF910895FF920F931F93CF9314
:10057000DF9300D01F92CDB7DEB78C01F62EB1DF2E
:10058000F8018281898383818A83FAE0FF16B9F0BA
:100590008BE0F81689F0E9E0FE16A1F08FE78B8377
:1005A000CE010196D1DF0F900F900F90DF91CF9188
:1005B0001F910F91FF9008958FE58B83F1CF8FE30B
:1005C0008B83EECF8FE18B83EBCF04DF811101C0F2
:1005D00008958CEC19DF84E417DF81E0F9CFCF9325
:1005E000DF93EC01F7DE811104C081E0DF91CF9150
:1005F0000895CE01089646DF8885883211F082E0A2
:10060000F5CFCE016EDF882311F080E0EFCF83E0DD
:10061000EDCFCF93DF93EC01D8DF882309F45EC0E0
:100620002C81822F90E08095909580769927892B58
:1006300009F057C02FE73FE482E12150304080406D
:10064000E1F700C00000CE014CDF882309F46BC045
:100650001D8A898190E04881242F382F33230CF4A0
:1006600065C0359527953595279535952795359509
:100670002795398B288B80959095887F9927892B92
:1006800009F057C081E08C8B4195488388818F7039
:10069000282F30E0C901880F991F82959295907F8D
:1006A0009827807F9827821B930B880F991F880FAC
:1006B000991F820F931F880F991F880F991F880F0A
:1006C000991F9C019923BCF1359527953595279560
:1006D00035952795359527953B8B2A8BDF91CF91C3
:1006E000089526FF0AC09FEB27E239E09150204091
:1006F0003040E1F700C00000A6CF25FF0AC08FEF11
:1007000096E924E0815090402040E1F700C00000CD
:100710009ACF3FE78BE492E0315080409040E1F780
:1007200000C0000090CF81E08D8BD8CF215F3F4F7C
:1007300098CF1C8AABCF215F3F4FC6CFAA1BBB1BF4
:1007400051E107C0AA1FBB1FA617B70710F0A61BD1
:10075000B70B881F991F5A95A9F780959095BC01F2
:10076000CD01089597FB072E16F4009406D077FD6F
:1007700008D0E4DF07FC05D03EF4909581959F4FAB
:0E0780000895709561957F4F0895F894FFCF0E
:00000001FF

File diff suppressed because it is too large Load Diff

View File

@ -14,8 +14,6 @@ Discarded input sections
.text 0x0000000000000000 0x0 build/default/production/main.o
.data 0x0000000000000000 0x0 build/default/production/main.o
.bss 0x0000000000000000 0x0 build/default/production/main.o
.text.TM1637_DisplayInt
0x0000000000000000 0x86 build/default/production/main.o
.text 0x0000000000000000 0x0 build/default/production/onewire.o
.data 0x0000000000000000 0x0 build/default/production/onewire.o
.bss 0x0000000000000000 0x0 build/default/production/onewire.o
@ -195,7 +193,7 @@ END GROUP
.rela.plt
*(.rela.plt)
.text 0x0000000000000000 0x6cc
.text 0x0000000000000000 0x78e
*(.vectors)
.vectors 0x0000000000000000 0x1e /home/sergeyyarkov/.mchp_packs/Microchip/ATtiny_DFP/3.0.151/gcc/dev/attiny45/avr25/crtattiny45.o
0x0000000000000000 __vectors
@ -290,65 +288,68 @@ END GROUP
.text.TM1637_DisplayLine
0x0000000000000142 0x14 build/default/production/main.o
0x0000000000000142 TM1637_DisplayLine
.text.TM1637_DisplayInt
0x0000000000000156 0x86 build/default/production/main.o
0x0000000000000156 TM1637_DisplayInt
.text.get_int_length
0x0000000000000156 0x2c build/default/production/main.o
0x0000000000000156 get_int_length
0x00000000000001dc 0x2c build/default/production/main.o
0x00000000000001dc get_int_length
.text.TM1637_DisplayFixedNum
0x0000000000000182 0x152 build/default/production/main.o
0x0000000000000182 TM1637_DisplayFixedNum
.text.main 0x00000000000002d4 0x54 build/default/production/main.o
0x00000000000002d4 main
0x0000000000000208 0x15c build/default/production/main.o
0x0000000000000208 TM1637_DisplayFixedNum
.text.main 0x0000000000000364 0x70 build/default/production/main.o
0x0000000000000364 main
.text.OneWire_Presence
0x0000000000000328 0x34 build/default/production/onewire.o
0x0000000000000328 OneWire_Presence
0x00000000000003d4 0x34 build/default/production/onewire.o
0x00000000000003d4 OneWire_Presence
.text.OneWire_WriteByte
0x000000000000035c 0x3a build/default/production/onewire.o
0x000000000000035c OneWire_WriteByte
0x0000000000000408 0x3a build/default/production/onewire.o
0x0000000000000408 OneWire_WriteByte
.text.OneWire_ReadByte
0x0000000000000396 0x32 build/default/production/onewire.o
0x0000000000000396 OneWire_ReadByte
0x0000000000000442 0x32 build/default/production/onewire.o
0x0000000000000442 OneWire_ReadByte
.text.OneWire_SkipROM
0x00000000000003c8 0x10 build/default/production/onewire.o
0x00000000000003c8 OneWire_SkipROM
0x0000000000000474 0x10 build/default/production/onewire.o
0x0000000000000474 OneWire_SkipROM
.text.OneWire_ReadROM
0x00000000000003d8 0x32 build/default/production/onewire.o
0x00000000000003d8 OneWire_ReadROM
0x0000000000000484 0x32 build/default/production/onewire.o
0x0000000000000484 OneWire_ReadROM
.text.OneWire_CRC8_Update
0x000000000000040a 0x2c build/default/production/onewire.o
0x000000000000040a OneWire_CRC8_Update
0x00000000000004b6 0x2c build/default/production/onewire.o
0x00000000000004b6 OneWire_CRC8_Update
.text.DallasTemp_ReadScratchpad
0x0000000000000436 0x48 build/default/production/dstemperature.o
0x0000000000000436 DallasTemp_ReadScratchpad
0x00000000000004e2 0x48 build/default/production/dstemperature.o
0x00000000000004e2 DallasTemp_ReadScratchpad
.text.DallasTemp_CopyScratchpad
0x000000000000047e 0x1e build/default/production/dstemperature.o
0x000000000000047e DallasTemp_CopyScratchpad
0x000000000000052a 0x1e build/default/production/dstemperature.o
0x000000000000052a DallasTemp_CopyScratchpad
.text.DallasTemp_WriteScratchpad
0x000000000000049c 0x20 build/default/production/dstemperature.o
0x000000000000049c DallasTemp_WriteScratchpad
0x0000000000000548 0x20 build/default/production/dstemperature.o
0x0000000000000548 DallasTemp_WriteScratchpad
.text.DallasTemp_SetResolution
0x00000000000004bc 0x62 build/default/production/dstemperature.o
0x00000000000004bc DallasTemp_SetResolution
0x0000000000000568 0x62 build/default/production/dstemperature.o
0x0000000000000568 DallasTemp_SetResolution
.text.DallasTemp_Convert
0x000000000000051e 0x14 build/default/production/dstemperature.o
0x000000000000051e DallasTemp_Convert
0x00000000000005ca 0x14 build/default/production/dstemperature.o
0x00000000000005ca DallasTemp_Convert
.text.DallasTemp_CheckError
0x0000000000000532 0x26 build/default/production/dstemperature.o
0x0000000000000532 DallasTemp_CheckError
0x00000000000005de 0x34 build/default/production/dstemperature.o
0x00000000000005de DallasTemp_CheckError
.text.DallasTemp_GetTemperature
0x0000000000000558 0x122 build/default/production/dstemperature.o
0x0000000000000558 DallasTemp_GetTemperature
0x0000000000000612 0x12a build/default/production/dstemperature.o
0x0000000000000612 DallasTemp_GetTemperature
.text.libgcc.div
0x000000000000067a 0x28 /opt/avr8-gnu-toolchain-linux_x86_64/bin/../lib/gcc/avr/7.3.0/avr25/libgcc.a(_udivmodhi4.o)
0x000000000000067a __udivmodhi4
0x000000000000073c 0x28 /opt/avr8-gnu-toolchain-linux_x86_64/bin/../lib/gcc/avr/7.3.0/avr25/libgcc.a(_udivmodhi4.o)
0x000000000000073c __udivmodhi4
.text.libgcc.div
0x00000000000006a2 0x26 /opt/avr8-gnu-toolchain-linux_x86_64/bin/../lib/gcc/avr/7.3.0/avr25/libgcc.a(_divmodhi4.o)
0x00000000000006a2 __divmodhi4
0x00000000000006a2 _div
0x00000000000006c8 . = ALIGN (0x2)
0x0000000000000764 0x26 /opt/avr8-gnu-toolchain-linux_x86_64/bin/../lib/gcc/avr/7.3.0/avr25/libgcc.a(_divmodhi4.o)
0x0000000000000764 __divmodhi4
0x0000000000000764 _div
0x000000000000078a . = ALIGN (0x2)
*(.fini9)
.fini9 0x00000000000006c8 0x0 /opt/avr8-gnu-toolchain-linux_x86_64/bin/../lib/gcc/avr/7.3.0/avr25/libgcc.a(_exit.o)
0x00000000000006c8 exit
0x00000000000006c8 _exit
.fini9 0x000000000000078a 0x0 /opt/avr8-gnu-toolchain-linux_x86_64/bin/../lib/gcc/avr/7.3.0/avr25/libgcc.a(_exit.o)
0x000000000000078a exit
0x000000000000078a _exit
*(.fini9)
*(.fini8)
*(.fini8)
@ -367,11 +368,11 @@ END GROUP
*(.fini1)
*(.fini1)
*(.fini0)
.fini0 0x00000000000006c8 0x4 /opt/avr8-gnu-toolchain-linux_x86_64/bin/../lib/gcc/avr/7.3.0/avr25/libgcc.a(_exit.o)
.fini0 0x000000000000078a 0x4 /opt/avr8-gnu-toolchain-linux_x86_64/bin/../lib/gcc/avr/7.3.0/avr25/libgcc.a(_exit.o)
*(.fini0)
0x00000000000006cc _etext = .
0x000000000000078e _etext = .
.data 0x0000000000800060 0x0 load address 0x00000000000006cc
.data 0x0000000000800060 0x0 load address 0x000000000000078e
[!provide] PROVIDE (__data_start, .)
*(.data)
*(.data*)
@ -389,8 +390,8 @@ END GROUP
*(.bss*)
*(COMMON)
[!provide] PROVIDE (__bss_end, .)
0x00000000000006cc __data_load_start = LOADADDR (.data)
0x00000000000006cc __data_load_end = (__data_load_start + SIZEOF (.data))
0x000000000000078e __data_load_start = LOADADDR (.data)
0x000000000000078e __data_load_end = (__data_load_start + SIZEOF (.data))
.noinit 0x0000000000800060 0x0
[!provide] PROVIDE (__noinit_start, .)

View File

@ -71,10 +71,18 @@ uint8_t DallasTemp_Convert(void) {
return 1;
}
uint8_t DallasTemp_CheckError(DallasSensor* Sensor) {
if (!OneWire_Presence()) return 1;
DallasSensorError DallasTemp_CheckError(DallasSensor* Sensor) {
/* Нету присутствия */
if (!OneWire_Presence()) return ERR_NO_PRESENCE;
/* Семейный код неверный */
OneWire_ReadROM(Sensor->ROM);
if (Sensor->ROM[0] != DS18B20_CONST_FAMILY_CODE) return 1;
if (Sensor->ROM[0] != DS18B20_CONST_FAMILY_CODE) return ERR_F_CODE_INVALID;
/* Ошибка CRC8 для ОЗУ */
if (!DallasTemp_ReadScratchpad(Sensor->SCRATCHPAD)) return ERR_CRC8_RAM;
/* Все ОК */
return 0;
}
@ -91,7 +99,13 @@ void DallasTemp_GetTemperature(DallasSensor *Sensor) {
_delay_ms(94);
}
if (!DallasTemp_ReadScratchpad(Sensor->SCRATCHPAD)) return;
if (!DallasTemp_ReadScratchpad(Sensor->SCRATCHPAD)) {
Sensor->CRC_ERROR = 1;
return;
}
Sensor->CRC_ERROR = 0;
Sensor->TEMPERATURE = ((Sensor->SCRATCHPAD[1] << 8) | Sensor->SCRATCHPAD[0]) / 16;
/*

View File

@ -14,12 +14,19 @@
#ifndef DSTEMPERATURE_H
#define DSTEMPERATURE_H
typedef enum DallasSensorError {
ERR_NO_PRESENCE = 0x01,
ERR_F_CODE_INVALID = 0x02,
ERR_CRC8_RAM = 0x03
} DallasSensorError;
typedef struct DallasSensor {
uint8_t SCRATCHPAD[8]; // ОЗУ (T_LSB, T_MSB, TH/USER BYTE 1, TH/USER BYTE 2, CONFIG, RESERVED, RESERVED, RESERVED, CRC8)
uint8_t ROM[8]; // ПЗУ (код семейства, серийный код, CRC8)
int16_t TEMPERATURE; // Температура в градусах цельсия (целая часть)
uint16_t TEMPERATURE_FRACTION; // Дробная часть
uint8_t T_NEGATIVE;
uint8_t T_NEGATIVE; // Минусовая ли температура
uint8_t CRC_ERROR; // Ошибка CRC8 ОЗУ
} DallasSensor;
// TODO сделать чтобы все работало с несколькими датчиками а не с одним (выполнять команду skiprom если один датчик, иначе выбирать к какому датчику обращаться)
@ -78,7 +85,7 @@ void DallasTemp_GetTemperature(DallasSensor *Sensor);
* @param Sensor - датчик
* @return Возвращает "1" если имеются проблемы с датчиком иначе "0"
*/
uint8_t DallasTemp_CheckError(DallasSensor *Sensor);
DallasSensorError DallasTemp_CheckError(DallasSensor *Sensor);
#endif /* DSTEMPERATURE_H */

28
main.c
View File

@ -14,6 +14,8 @@
#define PIN_TWI_CLK PINB2
#define TWI_DELAY 5 // uS
#define PIN_LED_ERR PB3
#define TM1637_DIGITS_COUNT 3
#define TM1637_DATA_CMD 0x40 // Data command setting
@ -209,17 +211,17 @@ void TM1637_DisplayFixedNum(int16_t num, uint8_t frac, uint8_t presicion, uint8_
}
while (i < TM1637_DIGITS_COUNT) {
if (is_signed && j == 0) {
TM1637_DisplaySymbol(0x40, 0);
i++;
j++;
continue;
}
TM1637_DisplaySymbol(
(j == TM1637_DIGITS_COUNT - 1 - presicion && TM1637_DIGITS_COUNT != length)
? get_symbol(buffer[i]) | (is_overflow && is_signed ? 0 : 0x80) // точка
: get_symbol(buffer[i]),
j);
if (j == 0) {
if (is_signed) {
TM1637_DisplaySymbol(0x40, 0);
}
}
i++;
j++;
}
@ -228,6 +230,9 @@ void TM1637_DisplayFixedNum(int16_t num, uint8_t frac, uint8_t presicion, uint8_
}
int main(void) {
DDRB |= _BV(PIN_LED_ERR);
PORTB &= ~_BV(PIN_LED_ERR);
DallasSensor Sensor_01;
DallasTemp_SetResolution(&Sensor_01, DS_TEMP_ADC_RESOLUTION_11);
@ -236,11 +241,16 @@ int main(void) {
while (1) {
/**
* Проверка датчика
* Обработка ошибки датчика
*/
if (DallasTemp_CheckError(&Sensor_01)) {
TM1637_DisplayLine();
DallasSensorError error = DallasTemp_CheckError(&Sensor_01);
if (error) {
PORTB |= _BV(PIN_LED_ERR);
TM1637_DisplayInt(error);
_delay_ms(100);
continue;
} else {
PORTB &= ~_BV(PIN_LED_ERR);
}
/**

View File

@ -3,7 +3,6 @@
<editor-bookmarks xmlns="http://www.netbeans.org/ns/editor-bookmarks/2" lastBookmarkId="0"/>
<open-files xmlns="http://www.netbeans.org/ns/projectui-open-files/2">
<group>
<file>file:/home/sergeyyarkov/Documents/Projects/Firmwares/AVR/attiny45v_thermometer.X/onewire.c</file>
<file>file:/home/sergeyyarkov/Documents/Projects/Firmwares/AVR/attiny45v_thermometer.X/dstemperature.h</file>
<file>file:/home/sergeyyarkov/Documents/Projects/Firmwares/AVR/attiny45v_thermometer.X/main.c</file>
<file>file:/home/sergeyyarkov/Documents/Projects/Firmwares/AVR/attiny45v_thermometer.X/dstemperature.c</file>