Почему ломаю? Схема один в один как у ТС, только катоды через ULN. Секундомер на двух регистрах работает на любых из трех. Изменение таймера с двух на три проходит, а дальше затык. Программа последняя, приведенная в топике, один в один, не работает с теми же симптомами. Буду дальше разбираться.
Сильно помогло бы, если в программе велосипед в лупе привели бы образец как цифру выводить.
Не очень понял почему такой щенячий восторг. Число 666 пишется нормально, но если попробовать записать другое число, с разными цифрами, то все - засвечивается абракадабра. Посмотрел еще раз внимательно на велосипед. Центральная ось рисуется не на центральном регистре, а на крайних.
Не очень понял почему такой щенячий восторг. Число 666 пишется нормально, но если попробовать записать другое число, с разными цифрами, то все - засвечивается абракадабра. Посмотрел еще раз внимательно на велосипед. Центральная ось рисуется не на центральном регистре, а на крайних.
ты скетч опубликуешь или будешь продолжать мосг ебать?
Ну, Вас просили ещё подробности об индикаторе и схему подключения. И кстати, я не понял фразы "работает на любых двух регистрах", поясните. Также не пноял "не показывает нормально". - а как показывает?
Не за что, только заметьте, я дважды (здесь и здесь) просил Вас дать мне подробности об индикаторе (например ссылку на товар у продавца или модель) и схему. Вы игнорировали. дали, давно б разобрались. Хотя и лучше, что Вы сами всё раскопали. Это полезнее, чем если бы я за Вас это сделал.
Виртуальные экраны это вот что такое. Вот представьте ради-часы или автомагнитолу - у этих устройств частенько один и тот ;е экран используется для разных целей. То показывает время, то частоту радиостанции, то настройки громкости и баланса и т.п. в зависимости от нажатия каких-то кнопок.
Гораздо проще скзать, что к одному физическому экрану у меня привязано N виртуальных. На каждую функцию свой собственный виртуальный экран. Тогда допустим, часы ничего не проверяют, а тупо выводят время на свой собственный экран всегда. Тоже самое термометр ничего не проверяет, а просто всегда выводит температуру на свой собственный экран. То есть всё упростилось. Всё выглядит так, как будто у них в вправду собственные экраны. Они (часы или термометр) вообще-то понятия не имеют и знать не хотят, что именно сейчас показывается на реальном экране - они выводят свои данные на виртуальный экран и не парятся ни о чём.
Ну и есть функция, которая по каким-то нажатиям кнопок или ещё по каким командам, просто переключает физический экран с одного виртуального на другой.
Вот допустим, Вы посмотрели температуру. Затем экран переключился на время. Но термометр каждую минуту исправно пишет новую температуру на свой виртуальный экранчик, которого никто видит. Затем Вы нажимаете кнопку, физически экран переходит с виртуального экрана часов на виртуальных экран термометра и Вы видите новую, текущую температуру (он же её в виртуальном экране регулярно обновлял). При этом ни часы, ни термометр не знают о том, что Вы переключали физический экран с одного виртуального на другой - они вообще про физический экран ничего не знают - они пишут в свои виртуальные и спят спокойно.
Концепция понятна?
реализуется это гораздо проще и короче, чем объясняется. Виртуальный экран - это просто переменная типа нашей numberToShow - своя для каждой функции. А переключатель - это программа из трёх строк, которая определяет какую из этих "numberToShow" отображать на физическом экране. Вот и вся реализация.
Ещё вопрос о функции вывода на печать на реальный дисплей.
Получается, что при таком подходе приходится полностью весь дисплей обновлять (перерисовывать/перепечатывать) на каждом такте/раз в N-тактов? Или как быть? У меня сейчас в проекте данные обновляются на дисплее только если они изменились. При подходе с виртуальными дисплеями такое реализуемо?
Не хотелось мудрсвовать но ладно. Есть код прикладной. Ну тот когда надо поменять контент программы сообщения, место и порядок надписей. А есть все остальное. Остальное тоже не однородно. Работа с виртуальными экранами это уровень обработки данных. Что то похожее на String. Может в большой упаковке, а может в виде рассыпи отдельных функций и структуры приведённой вышн. А есть канальный уровень. Это код который эти данные забрасывать уже на чип дисплея.
Не хочу показаться камнем без острых углов, но я все же не совсем понял как канальный уровень поймёт, что на прикладном уровне произошли изменения в отображаемой информации и надо дисплей перерисовать?
Как я это вижу? Флаг - «Что то изменилось, надо бы перерисовать дисплей». Его же можно и в примере с меняющимися часами и температурой использовать для смены «кадра». Не?
Ну вспомни библиотеку для лсд1602 и2с. Там гибрид. Что туда напечатано. То на экран и отправлено. Но если сделать промежуточный объект. И туда печатать. Конечно на экране ничего нет. Что бы было надо создавать ещё объект который будет настраивать канал и2с и чип дисплея. А когда надо показать то даётся команда отправить этот виртуальный дисплей на отображение реального.
Все зависит от задачи, я предпочитаю сохранять данные от разных функций в памяти, а уже отдельная часть логики решает что и когда выводить.
PS. Мало с дисплеями работал, а меню вообще страдание, все таки железка которая сама решает как жить программируется проще. Впрочем дело вкуса.
Я iic не использую, мне и так пинов хватает.
Собственно заинтересовала идея виртуальных дисплеев, но не хочется на каждом такте дисплей перерисовывать. А так как в программировании я ещё как котёнок, хотелось бы у более опытных участников форума узнать по максимуму.
Информация с датчиков приходит асинхроно. Да и датчиков море. Вот и приходится хранить все данные. Вдруг вот как раз их надо показать на экране. А так напечатал на экране значение и забыл. Нужный экран всегда готов к показу. Код упрощается. Да и по памяти перерасход не большой.
Вы что ему таймер ломаете? Если нормально при одинаковых цифрах, то похоже ...
В общем, хотите разговора, а не флуда, подробности об индикаторе, схему подклюучения и скетч в студию.
Почему ломаю? Схема один в один как у ТС, только катоды через ULN. Секундомер на двух регистрах работает на любых из трех. Изменение таймера с двух на три проходит, а дальше затык. Программа последняя, приведенная в топике, один в один, не работает с теми же симптомами. Буду дальше разбираться.
Сильно помогло бы, если в программе велосипед в лупе привели бы образец как цифру выводить.
Программа с велосипедом работает.
Программа с велосипедом работает.
О-О////
Не очень понял почему такой щенячий восторг. Число 666 пишется нормально, но если попробовать записать другое число, с разными цифрами, то все - засвечивается абракадабра. Посмотрел еще раз внимательно на велосипед. Центральная ось рисуется не на центральном регистре, а на крайних.
Не очень понял почему такой щенячий восторг. Число 666 пишется нормально, но если попробовать записать другое число, с разными цифрами, то все - засвечивается абракадабра. Посмотрел еще раз внимательно на велосипед. Центральная ось рисуется не на центральном регистре, а на крайних.
ты скетч опубликуешь или будешь продолжать мосг ебать?
В смысле сделать копию любого скетча для трехрегистрового индикатора из этой темы? Могу даже пины воткнуть в те же адреса. Тоже мысль.
Для двух разрядного все работают, для трех ни один.
Центральная ось рисуется не на центральном регистре, а на крайних.
Интересно девки пляшут. У велосипеда должна быть центральная ось в центре, а по краям педали крутятся в противофазе.
И в центровом регистре тоже педали крутятся без оси. Но больше всего смущает цифра 666.
Первый код с секундомером работает на любых двух регистрах. Второй если цифры одинаковые, показывает нормально, если разные - нет.
Ну, Вас просили ещё подробности об индикаторе и схему подключения. И кстати, я не понял фразы "работает на любых двух регистрах", поясните. Также не пноял "не показывает нормально". - а как показывает?
На любых - программно менял номера пинов. Таким образом проверял что все подключено правильно.
Почти все сегменты светятся, но с разной яркостью.
В велосипеде , вроде бы, сегменты высвечиваются наооборот.
Из того что пробовал. Если принудительно в функции, которую обрабатывает таймер, написать цифру в каком-нибудь сегменте - исправно пишет.
Разобрался. Общий катод, поэтому в соответствующем месте надо ставить 1, а не 0.
Перетащил из обработчика в лоор , поставил большой делай, сразу увидел.
Спасибо ЕвгенийП за науку.
Не за что, только заметьте, я дважды (здесь и здесь) просил Вас дать мне подробности об индикаторе (например ссылку на товар у продавца или модель) и схему. Вы игнорировали. дали, давно б разобрались. Хотя и лучше, что Вы сами всё раскопали. Это полезнее, чем если бы я за Вас это сделал.
И это тоже заметил. Работающий секундомер заставлял в этом сомневаться.
Виртуальные экраны это вот что такое. Вот представьте ради-часы или автомагнитолу - у этих устройств частенько один и тот ;е экран используется для разных целей. То показывает время, то частоту радиостанции, то настройки громкости и баланса и т.п. в зависимости от нажатия каких-то кнопок.
Гораздо проще скзать, что к одному физическому экрану у меня привязано N виртуальных. На каждую функцию свой собственный виртуальный экран. Тогда допустим, часы ничего не проверяют, а тупо выводят время на свой собственный экран всегда. Тоже самое термометр ничего не проверяет, а просто всегда выводит температуру на свой собственный экран. То есть всё упростилось. Всё выглядит так, как будто у них в вправду собственные экраны. Они (часы или термометр) вообще-то понятия не имеют и знать не хотят, что именно сейчас показывается на реальном экране - они выводят свои данные на виртуальный экран и не парятся ни о чём.
Ну и есть функция, которая по каким-то нажатиям кнопок или ещё по каким командам, просто переключает физический экран с одного виртуального на другой.
Вот допустим, Вы посмотрели температуру. Затем экран переключился на время. Но термометр каждую минуту исправно пишет новую температуру на свой виртуальный экранчик, которого никто видит. Затем Вы нажимаете кнопку, физически экран переходит с виртуального экрана часов на виртуальных экран термометра и Вы видите новую, текущую температуру (он же её в виртуальном экране регулярно обновлял). При этом ни часы, ни термометр не знают о том, что Вы переключали физический экран с одного виртуального на другой - они вообще про физический экран ничего не знают - они пишут в свои виртуальные и спят спокойно.
Концепция понятна?
реализуется это гораздо проще и короче, чем объясняется. Виртуальный экран - это просто переменная типа нашей numberToShow - своя для каждой функции. А переключатель - это программа из трёх строк, которая определяет какую из этих "numberToShow" отображать на физическом экране. Вот и вся реализация.
Ну, мы до этого ещё доберёмся если интересно.
Мне интересна реализация в примере, если можно.
ну это ж тривиально, не?
несколько структур
{
char Line1[16];
char Line2[16];
}
и актуальный указатель для вывода одной из них. Сам не догадаешь?
То есть так банально? Потом на реальном дисплее просто печатать обе эти линии, при необходимости?
Я думал что то по мудрее....
Ещё вопрос о функции вывода на печать на реальный дисплей.
Получается, что при таком подходе приходится полностью весь дисплей обновлять (перерисовывать/перепечатывать) на каждом такте/раз в N-тактов? Или как быть? У меня сейчас в проекте данные обновляются на дисплее только если они изменились. При подходе с виртуальными дисплеями такое реализуемо?
несколько структур
А в случае семисегментника, так и несколько чисел :)
Не хотелось мудрсвовать но ладно. Есть код прикладной. Ну тот когда надо поменять контент программы сообщения, место и порядок надписей. А есть все остальное. Остальное тоже не однородно. Работа с виртуальными экранами это уровень обработки данных. Что то похожее на String. Может в большой упаковке, а может в виде рассыпи отдельных функций и структуры приведённой вышн. А есть канальный уровень. Это код который эти данные забрасывать уже на чип дисплея.
Не хочу показаться камнем без острых углов, но я все же не совсем понял как канальный уровень поймёт, что на прикладном уровне произошли изменения в отображаемой информации и надо дисплей перерисовать?
Как я это вижу? Флаг - «Что то изменилось, надо бы перерисовать дисплей». Его же можно и в примере с меняющимися часами и температурой использовать для смены «кадра». Не?
Ну вспомни библиотеку для лсд1602 и2с. Там гибрид. Что туда напечатано. То на экран и отправлено. Но если сделать промежуточный объект. И туда печатать. Конечно на экране ничего нет. Что бы было надо создавать ещё объект который будет настраивать канал и2с и чип дисплея. А когда надо показать то даётся команда отправить этот виртуальный дисплей на отображение реального.
BOOM, никак - это просто разные вещи. Канальному уровню вообще пофиг чего там отображается - его дело данные гнать.
Все зависит от задачи, я предпочитаю сохранять данные от разных функций в памяти, а уже отдельная часть логики решает что и когда выводить.
PS. Мало с дисплеями работал, а меню вообще страдание, все таки железка которая сама решает как жить программируется проще. Впрочем дело вкуса.
Я iic не использую, мне и так пинов хватает.
Собственно заинтересовала идея виртуальных дисплеев, но не хочется на каждом такте дисплей перерисовывать. А так как в программировании я ещё как котёнок, хотелось бы у более опытных участников форума узнать по максимуму.
Информация с датчиков приходит асинхроно. Да и датчиков море. Вот и приходится хранить все данные. Вдруг вот как раз их надо показать на экране. А так напечатал на экране значение и забыл. Нужный экран всегда готов к показу. Код упрощается. Да и по памяти перерасход не большой.
Данные хранить надо в любом случае. Как их можно забывать?