[uquote="MOHCTEP",url="/forum/viewtopic.php?p=4268053#p4268053"]
VladislavS, Верно - не учел. Придется условие раскрыть. Как-то так, наверное, если без объединения.
Код: Выделить всё
ulong data;
void readTMData(){
for(uint8_t i = 0; i < 5; i++){// bytes from TM1628
if(i == 2){
shiftIn(PIN_DIO, PIN_CLK, LSBFIRST); // в космос
continue;
}
data <<= 8;
data |= shiftIn(PIN_DIO, PIN_CLK, LSBFIRST);
}
data |= 0x80000000; // ставим 31-й бит в 1.
}
[/uquote]
Изящно, но с точки зрения оптимизации те же яйца что у меня только в профиль. )
Добавлено after 19 minutes 7 seconds:
[uquote="ARV",url="/forum/viewtopic.php?p=4268056#p4268056"]что-то я не понимаю: 2 лишних байта ОЗУ так критичны? 40 бит это 5 байт, считывайте все 5, а потом спокойно работайте побайтово с тремя нужными, обращаясь к нужным битам при помощи маски. или я упускаю что-то важное?[/uquote]
Да в общем то ОЗУ хоть жопой ешь - контроллер tiny84 - 512 байт целых. Вопрос в другом - я ведь не зря сказал, что в ардуиновской среде ковыряюсь - мне удобнее взять стандартный тип переменной, чем свою 5-ти байтную сочинять. Весь этот онанизм вприсядку связан с тем, что появилась необходимость доработать уже сделанное ранее устройство и тут внезапно выяснилось, что надо где то добыть 3 дополнительных порта контроллера, один еще и в роли ацп. А порты внезапно все уже заняты и чтобы их освободить, три входа под датчики типа сухой контакт пришлось отдолжить у TM1628. В ДШ для этого очень удачно под индикацию не задействованы ноги SEG8 - SEG10. Кстати, не верьте ДШ TM1628 - ее бессовестно скопировали с AIP1628. Разница по ДШ как раз в пятом байте регистра кнопок - в ДШ на TM1628 их почему то гарисовано только 4. И схема подключения кнопок в 2-х местах разная.
Не важно чем все начнется. Важно чем кончится!