По главному вопросу темы.
Здесь на форуме часто бывает IM1, разработавший исключительно удачный термометр-термо-
стат. У него ничего не мерцает. Тема по этому прибору здесь есть и автор (IM1) в ней объяснял
что и как надо делать, чтобы не мерцало. Если память не изменяет, тема называется "Термо-
метр-термостат И. Шаталова".
; 3110 T |= TByte(0xFF) << 8; //read TH
LDI R30,LOW(255)
RCALL SUBOPT_0x52
MOV R26,R30
LDI R30,LOW(8)
RCALL __LSLB12
LDS R26,_T_S4D ;T
LDS R27,_T_S4D+1
RCALL SUBOPT_0x34
OR R30,R26
OR R31,R27 ;0
RCALL SUBOPT_0x53
__LSLB12: ;r30<<8
TST R30
MOV R0,R30
MOV R30,R26
BREQ __LSLB12R
__LSLB12L:
LSL R30
DEC R0
BRNE __LSLB12L
__LSLB12R:
RET
SUBOPT_0x34:
LDI R31,0
RET
Правда, при этом честно предупреждает, что результат будет 0.
Приходится править так: HIBYTE(T) |= TByte(0xFF); //read TH
Но это мелочи. За исходник спасибо, идея хорошая. Выигрыш по времени порядка 2 мс.
по поводу "мерцаний" (вопрос топикстартера) - правильно распределите ресурсы и время между выполняемыми задачами - сакнирование дисплея/клавиатуры , обработчиком датчика и исполнительной частью и "будет вам щщастье"
O-LED писал(а):
ЕГО задача вообще решается без усилий. выкидываем вообще запрет прерываний в функции опроса датчиков, и ставим проверку корректности чтения. даже если 10 чтений будет не корректых, и только одиннадцатое корректное, то это и будет решение ЕГО задачи.
На практике, такой подход даёт примерно 60-80% верных чтений.
Касательно ситуации топикстартера. Действительно самым простым будет вышеуказанный вариант O-LED. Правда, мой термостат иногда проскакивал порог из-за некорректных считанных значений температуры. Заказчик этого редкого явления не замечал - не подозревал о подвохе)). Во втором варианте я просто нашел библиотечную функцию в результирующем асм-файле Codevision, ручками вставил запрет/разрешение прерываний на время 1-wire тайм-слота и оттранслировал асмом по новой. Это конечно немножко через жо, зато как-раз для ленивых)).
а вставить запрос к датчику в конце развертки одной строки и считать результат в следующем окне не пробовалось?
мня... это ж была писанинка на С, а я туда со своими асмовскими решениями...
несоответствие сознания...