[uquote="BOB51",url="/forum/viewtopic.php?p=4543525#p4543525"]Нулями заведует фрагмент теста (преобразование из двоичного в двоично-десятичный):
Спойлер
Код: Выделить всё
// обработка текущего значения Dcnt и
// вывод двоично-десятичных значений в массив TrmDat
temp = Dcnt;
if (temp == 0)
{ for (byte m = 0; m <= 3; m++){ TrmDat[m] = fnt_0; } }
else
{ if (temp >= 1000)
{ TrmDat[0] = temp / 1000; temp = temp % 1000; }
else if(temp < 1000){ TrmDat[0] = fnt_0; }
if (temp >= 100)
{ TrmDat[1] = temp / 100; temp = temp % 100; }
else if(temp < 100){ TrmDat[1] = fnt_0; }
if (temp >= 10)
{ TrmDat[2] = temp / 10; temp = temp % 10; }
else if(temp < 10){ TrmDat[2] = fnt_0; }
TrmDat[3] = temp;
}
// перекодировка в сегментный код
for (byte m = 0; m <= 3; m++)
{ TrmDat[m] = znak(TrmDat[m]); }
// если флаг запроса сброшен
// выставить флаг запроса на обноление данных на индикаторе
if (!QtVrLd){ QtVrLd = 1; }
// выждать время удержания изображения
delay (200);
// приращение демосчетчика Dcnt
Dcnt++;
if (Dcnt >= 10000){ Dcnt = 0; }
}
Это уже подправленный вариант.

[/uquote]
Не помогло. Все на месте. Нулей нет.
Добавлено after 20 minutes 3 seconds:
[uquote="Ser60",url="/forum/viewtopic.php?p=4543539#p4543539"]
BOB51 - а ради интереса, можете проверить сколько места занимает библиотечная (или какая иная) реализация I2C протокола ориентированная на аппаратный драйвер (т.е., без "ногодрыга") на таком МК?[/uquote]
Код: Выделить всё
#include <OneWire.h>
/*------------------------------------------------*/
#define ONE_WIRE_BUS 4 // вывод, к которому подключён DS18B20
OneWire oneWire(ONE_WIRE_BUS);
void setup(){}
void loop(){}
Код: Выделить всё
Скетч использует 2068 байт (6%) памяти устройства. Всего доступно 32384 байт.
Глобальные переменные используют 46 байт (2%) динамической памяти, оставляя 2002 байт для локальных переменных. Максимум: 2048 байт.
Добавлено after 6 minutes 26 seconds:
[uquote="BOB51",url="/forum/viewtopic.php?p=4543525#p4543525"]Насчет фокуса с прерыванием по OCR0A - Это поддерживается в 48й, 88й и 328й мегах.
Есть и другой вариант - через TONE и INT1/INT0.
Или смотрим начинку МК и не задействованный в основной программе таймер (функции ШИМ и чего еще может быть). надо вчитываться в документацию и по МК и по IDE...[/uquote]
У гайвера на micros() сделано:
Код: Выделить всё
#include <GyverNTC.h>
GyverNTC therm(0, 10000, 3950);
//---- ПИНЫ ----
byte SCLK = 7;
byte RCLK = 6;
byte DIO = 5;
//---- ПИНЫ ----
#include <TM74HC595Display.h>
#include <TimerOne.h>
TM74HC595Display disp(SCLK, RCLK, DIO);
unsigned char SYM[18];
unsigned long dispIsrTimer, countTimer;
float value = 0.0;
void setup() {
}
void loop() {
if (millis() - countTimer > 1000) { // каждые 50 миллисекунд ("прозрачный" аналог delay)
value += 0.01; // прибавить 0.01
disp.float_dot(therm.getTemp(),1);
countTimer = millis(); // сбросить таймер
}
disp_isr(); // динамическая индикация
}
void disp_isr() {
if (micros() - dispIsrTimer > 300) { // таймер динамической индикации (по-русски: КОСТЫЛЬ!)
disp.timerIsr(); // "пнуть" дисплей
dispIsrTimer = micros(); // сбросить таймер
}
}
void disp_isr() {
if (micros() - dispIsrTimer > 300) { // таймер динамической индикации (по-русски: КОСТЫЛЬ!)
disp.timerIsr(); // "пнуть" дисплей
dispIsrTimer = micros(); // сбросить таймер
}