Contr1
Tags1
Outputs1
Variables1
0@0
LibraryRoot
LibraryGroup-Триггеры
LibraryGroup-Дисплеи
LibraryGroup-Датчики
LibraryGroup-Датчики температуры
LibraryGroup-Конвертация типов
LibraryGroup-Другие
0@-273
327
0@0
45
296
0@0
root
2
0@0
1
6
3
30@0
50@0 corner: 113.0d@120
30@0 corner: 133.0d@120
55.0d@13.5d
quick
26.0d
113.0d@30
133.0d@30
RT.shed+
9f53be78-23e3-49fb-9e36-7e1053b224d6
27912915-0b95-4069-ada5-41460abbd2b6
fast
85a4d73d-eeb3-4fb6-a664-baca19b3de8a
fe3dc41f-30be-44f8-b963-5b637c795e4e
slow
88b371df-2329-4477-82fc-4cabfeb9a454
7656bcd6-5562-4f08-a24b-48f9f6822a32
back
bd536d28-0990-454d-869b-5205b56a2c4e
62ae6443-d664-47db-8f54-309321c01bf0
frdm
3b98dea2-1ca2-4b5c-946a-b095467b5db8
c90e7821-0c4e-4637-9bf4-9be3242e04a8
504d8d2e-70f5-4174-b84b-2a3d9abc381c
02.RT.sheduler+:Диспетчер задач
//---ДИСПЕТЧЕР СИСТЕМЫ -----------------------------------------------------------------------------
//RT_HW_Boards.Task.:
// Вход:
// кратность периодов: qntPeriodSlow, qntPeriodBack;
// кол-во задач: qnt.quick,qnt.fast,qnt.slow,qnt.back,qnt.frdm;
// Выход:
// события: tick10,tick25,tick50,tick100,quick,fast,slow,frdm;
// меандры: blink10,blink25,blink50,blink100;
// blinkQuick, blinkFast, blinkSlow, blinkBack, blinkFrdm;
// blinkQUICK, blinkFAST, blinkSLOW, blinkBACK, blinkFRDM;
// номера задач как событие: num.quick, num.fast, num.slow, num.back, num.frdm;
// номера задач: cnt.quick, cnt.fast, cnt.slow, cnt.back, cnt.frdm;
// управление: reset,init,permit;
//--------------------------------------------------------------------------------------------------
856
Кол-во срочных задач
5
e582967a-3cee-4784-9c0f-fbd66bc9247f
12c1c454-1449-4d28-847e-ef465e42dddf
Кол-во быстрых задач
4
6692fa72-0a8e-4440-92e2-adb9ea04987a
1db156e7-ff01-4f0f-b610-bc6cc7cda45d
Кол-во медленных задач
3d2620be-a9a7-4722-9ba3-e0a6bd518915
38d39482-a6b3-4d48-a6cb-9a50e97ede4d
Кол-во фоновых задач
303077b1-0063-4f9f-b7d8-c694e78aa340
766fbed5-97c3-4b8d-ae56-3a05254d81b8
Кол-во свободных задач
20
a20d0a9e-cd9d-4f46-9fe3-d7a4b67f9e9d
fb3350d2-f2fa-4b44-b12d-425fa9f0922f
Разрешить инициализацию i2c в диспетчере
'Y' - разрешить; 'N' - запретить
16ee3521-ef95-4da4-8b91-e94c2156ce04
Y
bfa4a085-99eb-46d1-bbcc-584b5f9f2cc4
Разрешить инициализацию консоли в диспетчере
'Y' - разрешить; 'N' - запретить
3d3ed151-9ea0-42df-9387-3603973316e7
Y
e8d456d0-0740-4ef1-820d-5f62dc6a5702
//--------------------------------------------------------------------------------------------------
switch(RT_HW_Boards.dir){default: RT_HW_Boards.dir=0;
case 0: RT_HW_Boards.pinSetDOT_ALL(); //--Установка всех пинов на выход;;
RT_HW_Boards.Task.qnt.quick= Кол-во срочных задач ;
RT_HW_Boards.Task.qnt.fast = Кол-во быстрых задач ;
RT_HW_Boards.Task.qnt.slow = Кол-во медленных задач ;
RT_HW_Boards.Task.qnt.back = Кол-во фоновых задач ;
RT_HW_Boards.Task.qnt.frdm = Кол-во свободных задач ;
RT_HW_Boards.Console.permit=true;
if( Разрешить инициализацию i2c в диспетчере == 'Y') RT_HW_Boards.i2c_begin(); //--Инициализация i2c
RT_HW_Boards.dir++;
case 1: RT_HW_Boards.sheduler(); //--Вызов диспетчера планировщика здач;
break; }
//---Вывод параметров;
quick=RT_HW_Boards.Task.num.quick; fast=RT_HW_Boards.Task.num.fast; slow=RT_HW_Boards.Task.num.slow; back=RT_HW_Boards.Task.num.back; frdm=RT_HW_Boards.Task.num.frdm;
//--------------------------------------------------------------------------------------------------------
1150
#include
"RT_HW_BOARDS.h"
113.0d@20 corner: 133.0d@40
19.0d
113.0d@50
133.0d@50
113.0d@40 corner: 133.0d@60
140@60
160@60 corner: 295.0d@80
140@60 corner: 315.0d@80
164@75.0d
140@60 corner: 160@80
0.0d
295.0d@70
315.0d@70
295.0d@60 corner: 315.0d@80
140@70
10.0d
127.0d
Номер медленной задачи
160@70
133.0d@70 corner: 133.0d@70
23.0d
113.0d@70
133.0d@70
113.0d@60 corner: 133.0d@80
113.0d@90
133.0d@90
113.0d@80 corner: 133.0d@100
140@100
160@100 corner: 293.0d@120
140@100 corner: 313.0d@120
164@115.0d
140@100 corner: 160@120
293.0d@110
313.0d@110
293.0d@100 corner: 313.0d@120
140@110
125.0d
Номер свободной задачи
160@110
133.0d@110 corner: 133.0d@110
113.0d@110
133.0d@110
113.0d@100 corner: 133.0d@120
Task.shed+
ab76c5db-8b13-4823-b1b7-f16d6202499b
02.Task.shed+:диспетчер задач с выводом номеров задач
RT_HW_Task.sheduler(); //--Вызов диспетчера задач;
quick=RT_HW_Task.Shed.quick.num;
fast =RT_HW_Task.Shed.fast.num;
slow =RT_HW_Task.Shed.slow.num;
back=RT_HW_Task.Shed.back.num;
frdm= RT_HW_Task.Shed.frdm.num;
//--------------------------------------------------------------------------------------------------------
325
#include
"RT_HW_TASK.h"
63.0d
260@0
280@0 corner: 314.0d@40
260@0 corner: 334.0d@40
285.0d@13.5d
blink
пин DO
pin
a12f003b-579d-46ac-9650-282bb96bc64a
ffb0b749-ec28-4014-9aa6-ced3149358a6
val
4f74aeeb-5313-4320-8c0f-c11babcff491
7f4d07f9-f51d-469a-a888-ff89960b9429
44636600-f522-487d-a48e-491b727da656
21.пин DO -Вывод на пин дискретного вывода
ОТКРЫТЫЙ ВЫХОД
N - обычный выход; Y - открытый выход;
631127a0-0cf9-4a8c-9c00-46264b7dbd5d
N
f4816995-55a5-4b44-aebf-68139308f60e
ИНВЕРСИЯ ВЫХОДНОГО ЗНАЧЕНИЯ
N -обычный выход; Y -инверсный выход;
6dbab3c2-8b51-4b6b-87ad-0e7c79c47ffb
N
235ef8fc-bba7-4c40-a8a6-9cf995f5b72e
ВЫВОД ПОСТОЯННЫЙ
N - вывод только когда изменяется входной сигнал; Y -вывод постоянный
9eaa6191-c768-47f8-b6f2-3cd36315f1ac
N
a0c0626e-be18-4a51-867b-6dbecdc11850
if(!id.dir) {RT_HW_Boards.pinModeDOT (id, pin, ОТКРЫТЫЙ ВЫХОД , ИНВЕРСИЯ ВЫХОДНОГО ЗНАЧЕНИЯ , ВЫВОД ПОСТОЯННЫЙ , val);} //Настройка дискретного вывода
RT_HW_Boards.pinWriteDOT(id,val); //--Вывод на дискретный пин;
254
#include
"RT_HW_BOARDS.h"
id
;
RT_HW_BOARDS_DOT_ID
08971110-7534-490d-a550-5676f9514482
00.blink:мерцание на дискретном пине
//-----------------------Вывод на дискретный пин------------------------------------
if(dir<0) {if((pin>=0) && (pin<=127)) {dir=0; pinMode(pin,OUTPUT);}}
else {if(dir) dir=0; else dir=1; digitalWrite(pin,dir);}
212
dir
=-1;
int8_t
9
260@30
280@30
252.0d@33.5d
34.0d
201.0d
50@0
70@0 corner: 134.0d@80
50@0 corner: 178.0d@80
75.0d@14.5d
EN
50@30
64@30
frd_ds1820
fe5a4751-e1bb-495f-ad47-414ce97c8b92
e51d3655-5f70-4947-ab6c-154198ddc88d
T_float
9fd89c6e-1fef-442d-b392-f3a4d4768e95
865c3993-5497-4a72-a2b2-5dfc2e642826
EN
41dca5e4-cc39-4e16-96a5-bbe43f828337
92932339-dee4-462c-9b3d-88689de258b9
41ee7ffc-98e3-4a9f-805b-8efb70b46e69
frd_ds1820
//---БЛОК ЧТЕНИЯ ДАТЧИКА ТЕМПЕРАТУРЫ DS1820
switch(step) { default: step=0;
case 0:
Serial.println(F("ds1820_0")); break;
//if(( pin <0) || ( pin >=100)) {step=20; break;}
//ds.begin(pin);
period= ПЕРИОД ОПРОСА МС ; if(period<1000) period=1; cntErr=0; mode=0; T_float=20.0; step++;
case 1: if (! EN ) { break;} step++; //----Проверка на внешнее разрешение измерения
Serial.println(F("ds1820_1"));
case 2: timeStart=millis(); ds.reset(); step++; break;
case 3: ds.write(0xCC); ds.write(0x44,1); //--Начало преобразование с учетом сенсоров с "паразитным питанием"
timeDelay=millis(); step++; //--Начало преобразование с учетом сенсоров с "паразитным питанием"
case 4: if (getPastTime( timeDelay,millis()) <800) break; step++; //--Выдерживаем паузу для измерения сенсором
case 5: ds.reset(); step++;
Serial.println(F("ds1820_5"));
break;
case 6: ds.write(0xCC); ds.write(0xBE,mode); step++;
Serial.println(F("ds1820_6"));
break;
case 7: ds.read_bytes(data, 9); crc=OneWire::crc8(data, 8); step++; break;
case 8: if ((crc !=data[8]) || (data[4]==0)) {cntErr++; if(cntErr>5) {cntErr=5; T_float=NAN;} step=15; break;}
step++;
case 9: raw = (data[1] << 8) | data[0];
if (mode) {raw = raw << 3; if (data[7] == 0x10) { raw = (raw & 0xFFF0) + 12 - data[6]; }}
else {byte cfg = (data[4] & 0x60);
if (cfg == 0x00) raw = raw & ~7; //--Урезаем, если 9 bit resolution, 93.75 ms
else if (cfg == 0x20) raw = raw & ~3; //--Урезаем, если 10 bit res, 187.5 ms
else if (cfg == 0x40) raw = raw & ~1; //--Урезаем, если 11 bit res, 375 ms
}
cntErr=0; T_float=(float)raw / 16.0; step=15;
Serial.println(F("ds1820_9"));
case 15: if (getPastTime( timeStart,millis()) <1000) break;
Serial.println(F("ds1820_15"));
step=1; break;
case 20: break;
} //--end switch
//==============================================
1981
--Библиотека интерфейса 1-Wire
#include
"OneWire.h"
--Создание объекта для ds1820 на пине 10
ds
(10);
OneWire
--Тип датчика - новый/старый (0/1)
mode
;
uint8_t
--Период опроса сенсора
period
;
int
--Номер шага
step
=0;
byte
--Буфер для данных
data
[10];
byte
--Результат
raw
;
int16_t
--Буфер
timeStart
;
uint32_t
timeDelay
;
uint32_t
crc
;
byte
cntErr
;
byte
if (t2>=t1) {return (t2-t1);} else {return (0xFFFFFFFF-t1+t2);};
64
uint32_t
getPastTime
uint32_t
&t1
uint32_t
t2
658f8d13-e866-4eb5-a041-eac4326582c5
50@20 corner: 64@40
36.0d
134.0d@30
154.0d@30
134.0d@20 corner: 154.0d@40
170@40
190@40 corner: 300.0d@60
170@40 corner: 320.0d@60
200@54.5d
170@40 corner: 190@60
170@50
9.0d
90.0d
Температура х 10
170@10
190@10 corner: 250@250
170@10 corner: 270@250
198.0d@24.5d
170@30 corner: 190@50
dp1
170@60
190@60
170@50 corner: 190@70
dp2
170@80
190@80
170@70 corner: 190@90
dp3
170@100
190@100
170@90 corner: 190@110
7
280@30
300@30 corner: 318.0d@50
280@30 corner: 338.0d@50
304@43.5d
280@30 corner: 300@50
280@40
7.0d
A
D3
digital
300@40
270@40 corner: 270@40
a1
12.0d
250@40
270@40
250@30 corner: 270@50
8
280@50
300@50 corner: 316.0d@70
280@50 corner: 336.0d@70
304@63.5d
280@50 corner: 300@70
280@60
8.0d
B
D7
300@60
270@60 corner: 270@60
b1
250@60
270@60
250@50 corner: 270@70
280@70
300@70 corner: 316.0d@90
280@70 corner: 336.0d@90
304@83.5d
280@70 corner: 300@90
280@80
C
15
0
14
A0
300@80
270@80 corner: 270@80
c1
11.0d
250@80
270@80
250@70 corner: 270@90
10
280@90
300@90 corner: 316.0d@110
280@90 corner: 336.0d@110
304@103.5d
280@90 corner: 300@110
280@100
D
17
16
A2
300@100
270@100 corner: 270@100
d1
250@100
270@100
250@90 corner: 270@110
11
280@110
300@110 corner: 316.0d@130
280@110 corner: 336.0d@130
304@123.5d
280@110 corner: 300@130
280@120
E
18
A3
300@120
270@120 corner: 270@120
e1
250@120
270@120
250@110 corner: 270@130
12
280@130
300@130 corner: 315.0d@150
280@130 corner: 335.0d@150
304@143.5d
280@130 corner: 300@150
280@140
F
D4
300@140
270@140 corner: 270@140
f1
250@140
270@140
250@130 corner: 270@150
13
280@150
300@150 corner: 317.0d@170
280@150 corner: 337.0d@170
304@163.5d
280@150 corner: 300@170
280@160
G
sck
SPI
D13
300@160
270@160 corner: 270@160
g1
250@160
270@160
250@150 corner: 270@170
dp
13.0d
250@180
270@180
250@170 corner: 270@190
280@190
300@190 corner: 314.0d@210
280@190 corner: 334.0d@210
304@203.5d
280@190 corner: 300@210
280@200
6.0d
1
D8
300@200
270@200 corner: 270@200
r1
250@200
270@200
250@190 corner: 270@210
280@210
300@210 corner: 316.0d@230
280@210 corner: 336.0d@230
304@223.5d
280@210 corner: 300@230
280@220
2
ss
SPI
D10
300@220
270@220 corner: 270@220
r2
250@220
270@220
250@210 corner: 270@230
280@230
300@230 corner: 316.0d@250
280@230 corner: 336.0d@250
304@243.5d
280@230 corner: 300@250
280@240
3
mosi
SPI
D11
300@240
270@240 corner: 270@240
r3
250@240
270@240
250@230 corner: 270@250
170@40
Val
190@40
190@50
154.0d@50 corner: 154.0d@50
Tx10
25.0d
134.0d@50
154.0d@50
77a50e7a-2cca-4f84-ba01-d482d01df5d3
dba23054-09dc-42cc-ab10-ecae646be35e
Tx100
75076e91-8e49-4943-8e2e-accdebd7d92e
3c928ecd-24e2-430b-a2a3-e88a338a2e91
31fa5a63-ab95-4d5f-9db9-329eaee2579b
НОМЕР ПИНА
5bd2d42d-e8f7-4ab0-b3a1-db337b39f873
eb31fa52-5929-4f5f-bb0d-fd571e16d833
РЕЖИМ ПИТАНИЯ
6193e6f0-5265-4731-b6d5-be7861e1ad0f
507af109-2b85-4aca-823c-db437a934993
ПЕРИОД ОПРОСА В МС
1500
ecdcd85c-24ec-40a7-b66c-55a2e4f0ee59
5b6c8fcd-29a9-4768-95a9-6c737ea7baa8
//---БЛОК ЧТЕНИЯ ДАТЧИКА ТЕМПЕРАТУРЫ DS1820
switch(step) { default: step=0;
case 0: pin= НОМЕР ПИНА;
if( ( pin <0) || ( pin >=100) ) {step=20; break;}
period= ПЕРИОД ОПРОСА В МС ; if(period<1000) period=1000; cntErr=0; mode=0; T_float=20.0;
timeStart=millis();
//ds.begin(pin);
step=1; break;
case 1: if (!EN) {break;} //----Проверка на внешнее разрешение измерения
if ( getPastTime(timeStart,millis() ) >1500) { timeStart=millis()+period; step=2;} break;
//------Операции по запуску измерения в датчике
case 2: step=3; break;
case 3: ds.reset(); //--Cброс шины;
ds.write(0xCC, РЕЖИМ ПИТАНИЯ ); //--Пропуск адреса;
ds.write(0x44, РЕЖИМ ПИТАНИЯ );
timeDelay=micros();
step=4; break;
case 4: if ( getPastTime(timeDelay ,micros() ) >900) {step=5;}
break;
//------Операции по получению измеренных данных
case 5: ds.reset(); //--Cброс шины;
ds.write(0xCC, РЕЖИМ ПИТАНИЯ ); //--Пропуск адреса;
ds.write(0xBE, РЕЖИМ ПИТАНИЯ ); //--Команда чтения памяти;
ds.read_bytes(data, 9); //--Чтение буфера данных;
step=6; break;
case 6: crc=OneWire::crc8(data, 8);
if ((crc !=data[8]) || (data[4]==0)) {cntErr++; if(cntErr>5) {cntErr=5; T_float=NAN;} step=1; break;}
step=7; break;
case 7: raw = (data[1] << 8) | data[0];
if (mode) {raw = raw << 3; if (data[7] == 0x10) { raw = (raw & 0xFFF0) + 12 - data[6]; }}
else {byte cfg = (data[4] & 0x60);
if (cfg == 0x00) raw = raw & ~7; //--Урезаем, если 9 bit resolution, 93.75 ms
else if (cfg == 0x20) raw = raw & ~3; //--Урезаем, если 10 bit res, 187.5 ms
else if (cfg == 0x40) raw = raw & ~1; //--Урезаем, если 11 bit res, 375 ms
}
cntErr=0; T_float=(float)raw / 16.0; Tx100 =T_float*100;
timeStart=millis();
step=1; break;
case 20: break;
} //--end switch
//==============================================
2034
--Библиотека интерфейса 1-Wire
#include
"OneWire.h"
--Создание объекта для ds1820 на пине 10
ds
( НОМЕР ПИНА );
OneWire
--Тип датчика - новый/старый (0/1)
mode
;
uint8_t
pin
;
int8_t
--Период опроса сенсора
period
;
int
--Номер шага
step
=0;
byte
--Буфер для данных
data
[10];
byte
--Результат
raw
;
int16_t
--Буфер
timeStart
;
uint32_t
timeDelay
;
uint32_t
crc
;
byte
cntErr
;
byte
if(timeEnd >= timeBegin) return (timeEnd-timeBegin); else return (0xFFFFFFFF-timeBegin+timeEnd);
96
uint32_t
getPastTime
uint32_t
&timeBegin
uint32_t
timeEnd
f79b1a4f-62a3-4e2b-836b-ca825f63f764
//---БЛОК ЧТЕНИЯ ДАТЧИКА ТЕМПЕРАТУРЫ DS1820
switch(step) { default: step=0;
case 0: pin= НОМЕР ПИНА;
if( ( pin <0) || ( pin >=100) ) {step=20; break;}
period= ПЕРИОД ОПРОСА В МС ; if(period<1000) period=1000; cntErr=0; mode=0; T_float=20.0;
timeStart=millis();
//ds.begin(pin);
step=1; break;
case 1: if (!EN) {break;} //----Проверка на внешнее разрешение измерения
if ( getPastTime(timeStart,millis() ) >1500) { timeStart=millis()+period; step=2;} break;
//------Операции по запуску измерения в датчике
case 2: step=3; break;
case 3: ds.reset(); //--Cброс шины;
ds.write(0xCC, РЕЖИМ ПИТАНИЯ ); //--Пропуск адреса;
ds.write(0x44, РЕЖИМ ПИТАНИЯ );
timeDelay=micros();
step=4; break;
case 4: if ( getPastTime(timeDelay ,micros() ) >900) {step=5;}
break;
//------Операции по получению измеренных данных
case 5: ds.reset(); //--Cброс шины;
ds.write(0xCC, РЕЖИМ ПИТАНИЯ ); //--Пропуск адреса;
ds.write(0xBE, РЕЖИМ ПИТАНИЯ ); //--Команда чтения памяти;
ds.read_bytes(data, 9); //--Чтение буфера данных;
step=6; break;
case 6: crc=OneWire::crc8(data, 8);
if ((crc !=data[8]) || (data[4]==0)) {cntErr++; if(cntErr>5) {cntErr=5; T_float=NAN;} step=1; break;}
step=7; break;
case 7: raw = (data[1] << 8) | data[0];
if (mode) {raw = raw << 3; if (data[7] == 0x10) { raw = (raw & 0xFFF0) + 12 - data[6]; }}
else {byte cfg = (data[4] & 0x60);
if (cfg == 0x00) raw = raw & ~7; //--Урезаем, если 9 bit resolution, 93.75 ms
else if (cfg == 0x20) raw = raw & ~3; //--Урезаем, если 10 bit res, 187.5 ms
else if (cfg == 0x40) raw = raw & ~1; //--Урезаем, если 11 bit res, 375 ms
}
cntErr=0; T_float=(float)raw / 16.0; Tx10 =T_float*10; Tx100 =T_float*100;
timeStart=millis();
step=1; break;
case 20: break;
} //--end switch
//==============================================
2053
134.0d@40 corner: 154.0d@60
31.0d
134.0d@70
154.0d@70
134.0d@60 corner: 154.0d@80
4217df52-ab28-46a5-9e5e-78945613098e
Блок ds1820.
---------------------------
1.Опрашивает сенсор ds1820 c периодом=ПЕРИОД ОПРОСА В МС.
2.Не требует указания адреса(только пин, к которому подключается сенсор).
3. Вызов задачи должен планироваться как вызов "Свободная задача".
4. Максимальная задержка во время опроса менее 4.8 мс.
-------------------
ecoins@mail.ru 16.06.2020 (временное решение).
361
//---БЛОК ЧТЕНИЯ ДАТЧИКА ТЕМПЕРАТУРЫ DS1820
switch(step) { default: step=0;
case 0: pin= НОМЕР ПИНА;
if( ( pin <0) || ( pin >=100) ) {step=20; break;}
period= ПЕРИОД ОПРОСА В МС ; if(period<1000) period=1000; cntErr=0; mode=0; T_float=20.0;
timeStart=millis();
//ds.begin(pin);
step++; break;
case 1: if (!EN) {break;} //----Проверка на внешнее разрешение измерения
if ( getPastTime(timeStart,millis() ) > period) { timeStart=millis()+period; step++;} break;
//------Операции по запуску измерения в датчике
case 2: ds.reset(); //--Cброс шины;
step++; break;
case 3: ds.write(0xCC, РЕЖИМ ПИТАНИЯ ); //--Пропуск адреса;
ds.write(0x44, РЕЖИМ ПИТАНИЯ );
timeDelay=micros();
step++; break;
case 4: if ( getPastTime(timeDelay ,micros() ) >900) {step++;}
break;
//------Операции по получению измеренных данных
case 5: ds.reset(); //--Cброс шины;
step++; break;
case 6: ds.write(0xCC, РЕЖИМ ПИТАНИЯ ); //--Пропуск адреса;
ds.write(0xBE, РЕЖИМ ПИТАНИЯ ); //--Команда чтения памяти;
step++; break;
case 7: ds.read_bytes(data, 9); //--Чтение буфера данных;
step++; break;
case 8: crc=OneWire::crc8(data, 8);
if ((crc !=data[8]) || (data[4]==0)) {cntErr++; if(cntErr>5) {cntErr=5; T_float=NAN;} step=1; break;}
step++; break;
case 9: raw = (data[1] << 8) | data[0];
if (mode) {raw = raw << 3; if (data[7] == 0x10) { raw = (raw & 0xFFF0) + 12 - data[6]; }}
else {byte cfg = (data[4] & 0x60);
if (cfg == 0x00) raw = raw & ~7; //--Урезаем, если 9 bit resolution, 93.75 ms
else if (cfg == 0x20) raw = raw & ~3; //--Урезаем, если 10 bit res, 187.5 ms
else if (cfg == 0x40) raw = raw & ~1; //--Урезаем, если 11 bit res, 375 ms
}
cntErr=0; T_float=(float)raw / 16.0; Tx10 =T_float*10; Tx100 =T_float*100;
timeStart=millis();
step=1; break;
case 20: break;
} //--end switch
//==============================================
2104
171.0d
348.0d
9600
arduinoIDE
1024
164990438
Arduino Nano
90109856
default