Вопрос про динамическую индикацию!
-
Максим Пахтусов
- Родился
- Сообщения: 2
- Зарегистрирован: Ср окт 15, 2025 21:42:15
Вопрос про динамическую индикацию!
Здравствуйте! Я начинающий. Прошу помощи старших коллег по следующему вопросу: Пишу код под атмега8 для вывода на 4х разрядном семисегментнике числа 9578, проблема вот в чем,
при попытке вывести 9578 по отдельности на 4х одноразрядных семисигментниках все получается как надо, но при попытке отобразить его на 4х или 6и разрядном семисегментнике вылезает какая то билеберда!
Может это протеус глючит? Или я...Сталкивались ли с такой проблемой? У меня ничего не выходит.
при попытке вывести 9578 по отдельности на 4х одноразрядных семисигментниках все получается как надо, но при попытке отобразить его на 4х или 6и разрядном семисегментнике вылезает какая то билеберда!
Может это протеус глючит? Или я...Сталкивались ли с такой проблемой? У меня ничего не выходит.
- Вложения
-
- Proteus+AVR.zip
- (37.02 КБ) 127 скачиваний
Re: Вопрос про динамическую индикацию!
да нормально показывает))

лучше сразу выкладывать исходник... отдельно.))

Добавлено after 36 minutes 45 seconds:
с динамической индикацией не сталкивался...
от динамической индикации в глазах рябит))
мне нравится статическая))
зато я сталкивался с синхронизацией...
в исходнике прерывание таймера не синхронизировано с другой программой...
это не правильно.

лучше сразу выкладывать исходник... отдельно.))
Добавлено after 36 minutes 45 seconds:
с динамической индикацией не сталкивался...
от динамической индикации в глазах рябит))
мне нравится статическая))
зато я сталкивался с синхронизацией...
в исходнике прерывание таймера не синхронизировано с другой программой...
это не правильно.

- Вложения
-
- Screenshot_1.jpg
- (146.75 КБ) 744 скачивания
-
Максим Пахтусов
- Родился
- Сообщения: 2
- Зарегистрирован: Ср окт 15, 2025 21:42:15
Re: Вопрос про динамическую индикацию!
Ничего не понял) "в исходнике прерывание таймера не синхронизировано с другой программой...
это не правильно" с какой другой программой?
это не правильно" с какой другой программой?
Re: Вопрос про динамическую индикацию!
-в программе есть главная функция int main(void).
-в программе есть функция перевода числа в разряды void chislo(unsigned int result).
-в программе есть функция прерывания таймера ISR(TIMER0_OVF_vect).
и всё это не синхронизировано.
см. Семафор (англ. semaphore) в программировании.

подробнее...
1 -в главной функции int main(void) мы вызываем функцию void chislo(unsigned int result) и передаём число 9578.
2 -в функции void chislo(unsigned int result) мы переводим число в разряды.
3 - в прерывании таймера мы выводим разряды на индикатор.
и всё бы ничего... вот только есть обна проблемка)) нет синхронизации с таймером.
может случиться так что прерывание таймера сработает до того как мы переведём число в разряды.
смотрим что получится...
вызываем в функцию void chislo(unsigned int result)...
в итоге на индикаторе мы увидим неправильное число))
это не правильно.

-в программе есть функция перевода числа в разряды void chislo(unsigned int result).
-в программе есть функция прерывания таймера ISR(TIMER0_OVF_vect).
и всё это не синхронизировано.
см. Семафор (англ. semaphore) в программировании.
подробнее...
1 -в главной функции int main(void) мы вызываем функцию void chislo(unsigned int result) и передаём число 9578.
Код: Выделить всё
while (1)
{
chislo(9578);
}
2 -в функции void chislo(unsigned int result) мы переводим число в разряды.
Код: Выделить всё
void chislo(unsigned int result)
{
res_1000 = result / 1000;
res_100 = result % 1000 / 100;
res_10 = result % 100/10;
res_1 = result % 10;
}3 - в прерывании таймера мы выводим разряды на индикатор.
Код: Выделить всё
ISR(TIMER0_OVF_vect)
{
if (++z > 4) {z = 1;}
if (z==1)
{
PORTB &= ~(1<<2);
PORTB |= (1<<5) | (1<<4) | (1<<3);
obrabotka(res_1000);
}
if (z==2)
{
PORTB &= ~(1<<3);
PORTB |= (1<<5) | (1<<4) | (1<<2);
obrabotka(res_100);
}
if (z==3)
{
PORTB &= ~(1<<4);
PORTB |= (1<<5) | (1<<3) | (1<<2);
obrabotka(res_10);
}
if (z==4)
{
PORTB &= ~(1<<5);
PORTB |= (1<<4) | (1<<3) | (1<<2);
obrabotka(res_1);
}
}и всё бы ничего... вот только есть обна проблемка)) нет синхронизации с таймером.
может случиться так что прерывание таймера сработает до того как мы переведём число в разряды.
смотрим что получится...
вызываем в функцию void chislo(unsigned int result)...
Код: Выделить всё
void chislo(unsigned int result)
{
res_1000 = result / 1000;
res_100 = result % 1000 / 100;
// в этом месте сработало прерывание таймера.
// уходим в прерывание таймера.
ISR(TIMER0_OVF_vect)
{
if (++z > 4) {z = 1;}
if (z==1)
{
PORTB &= ~(1<<2);
PORTB |= (1<<5) | (1<<4) | (1<<3);
obrabotka(res_1000);
}
if (z==2)
{
PORTB &= ~(1<<3);
PORTB |= (1<<5) | (1<<4) | (1<<2);
obrabotka(res_100);
}
if (z==3)
{
PORTB &= ~(1<<4);
PORTB |= (1<<5) | (1<<3) | (1<<2);
obrabotka(res_10);
}
if (z==4)
{
PORTB &= ~(1<<5);
PORTB |= (1<<4) | (1<<3) | (1<<2);
obrabotka(res_1);
}
}
// выходим из прерывания таймера.
// продолжаем переводить число в разряды.
res_10 = result % 100/10;
res_1 = result % 10;
}в итоге на индикаторе мы увидим неправильное число))
это не правильно.

Последний раз редактировалось roman.com Чт окт 16, 2025 12:10:56, всего редактировалось 3 раза.
- linux_rulezz
- Вымогатель припоя
- Сообщения: 584
- Зарегистрирован: Пн сен 15, 2025 08:43:23
- Откуда: Маленький СССР посреди шариатской республики
Re: Вопрос про динамическую индикацию!
Внешне код рабочий, хоть и страшный
Ладно, опустим комментарии на русском (хоть это странно), но названия функций…
Ну и главный вопрос: зачем в суперлупе постоянно молотить преобразование одного и того же числа? Можно же было просто вот так сделать:
Добавлено after 2 minutes 31 second:
roman.com, ну, в данном случае у него проблем не будет, т.к. он постоянно молотит одно и то же.
Да и вообще, это не страшно для динамической индикации: момент смены числа будет достаточно быстрым, глаз просто не заметит "засады".
Ладно, опустим комментарии на русском (хоть это странно), но названия функций…
Ну и главный вопрос: зачем в суперлупе постоянно молотить преобразование одного и того же числа? Можно же было просто вот так сделать:
Код: Выделить всё
chizlo(9578);
while(1){}Добавлено after 2 minutes 31 second:
roman.com, ну, в данном случае у него проблем не будет, т.к. он постоянно молотит одно и то же.
Да и вообще, это не страшно для динамической индикации: момент смены числа будет достаточно быстрым, глаз просто не заметит "засады".
Windows must die!
Re: Вопрос про динамическую индикацию!
Ладно, опустим комментарии на русском (хоть это странно), но названия функций…
пофигу)) кому как удобней.
главное что всем понятно.
linux_rulezz писал(а):это не страшно для динамической индикации: момент смены числа будет достаточно быстрым, глаз просто не заметит "засады".
страшно... не страшно... это вопрос десятый.))
главное что это не правильно.
программа может например остановиться в любом месте...
или МК может уйти в сон в любом месте программы... "sleep"...
или МК может просто тупо зависнуть в любом месте программы... while(1){};
или... ещё может быть миллион вариантов))
главное что в любом случаев (из миллиона вариантов) на индикаторе мы увидим последнее обработанное число...
и с высокой вероятностью это число будет не 9578.
это не правильно.

- linux_rulezz
- Вымогатель припоя
- Сообщения: 584
- Зарегистрирован: Пн сен 15, 2025 08:43:23
- Откуда: Маленький СССР посреди шариатской республики
Re: Вопрос про динамическую индикацию!
кому как удобней
Ну вот когда я вижу китайский код с иероглифами в комментариях, возникает желание кому-нибудь двинуть… Ну неужели на международном языке нельзя писать? Сразу к культуре надо приучаться. И функции называть не "zafiga4it_otpravku", а, скажем, "send_data".
Windows must die!
Re: Вопрос про динамическую индикацию!
"zafiga4it_otpravku"...
да можно и так.))
а где 6-ти разрядный семисегментник ?

Добавлено after 16 minutes 41 second:
а ещё можно сделать так...

или так...

но это всё динамическая индикация...
я бы так делать не стал))

да можно и так.))
при попытке отобразить его на 4х или 6и разрядном семисегментнике вылезает какая то билеберда!
а где 6-ти разрядный семисегментник ?
Добавлено after 16 minutes 41 second:
а ещё можно сделать так...
или так...
но это всё динамическая индикация...
я бы так делать не стал))

- Вложения
-
- Screenshot_2.jpg
- (76.79 КБ) 1106 скачиваний
-
- Screenshot_1.jpg
- (93.83 КБ) 590 скачиваний
- linux_rulezz
- Вымогатель припоя
- Сообщения: 584
- Зарегистрирован: Пн сен 15, 2025 08:43:23
- Откуда: Маленький СССР посреди шариатской республики
Re: Вопрос про динамическую индикацию!
roman.com, статическая индикация последнее время "не в моде". Взять те же светодиодные панели: там мало того, что для изменения яркости отдельного светодиода нужно долбить индикатор с частотой 16-24Гц, так еще и индикатор фактически поделен на 4 квадранта! И каждый обслуживается поочередно. И ничего, вполне себе работает. Я шутки ради делал "игровую приставку" (арканоид, тетрис и змейка) на STM32F103. Видео.
Windows must die!
Re: Вопрос про динамическую индикацию!
повторяю...
поэтому далем так...
сдвиговый регистр + регистр буфера + блок синхронизации (на схеме не показан).

-индикация статическая. в глазах не рябит))
-для индикатора используется всего один вывод МК. экономия выводом МК))
класс ! ))

roman.com писал(а):от динамической индикации в глазах рябит))
мне нравится статическая))
поэтому далем так...
сдвиговый регистр + регистр буфера + блок синхронизации (на схеме не показан).
-индикация статическая. в глазах не рябит))
-для индикатора используется всего один вывод МК. экономия выводом МК))
класс ! ))

- Вложения
-
- Screenshot_1.jpg
- (62.23 КБ) 558 скачиваний
-
veso74
- Поставщик валерьянки для Кота
- Сообщения: 1902
- Зарегистрирован: Сб май 05, 2012 20:24:52
- Откуда: KN34PC, Болгария
- Контактная информация:
Re: Вопрос про динамическую индикацию!
Последний раз редактировалось veso74 Чт окт 16, 2025 14:14:27, всего редактировалось 3 раза.
Re: Вопрос про динамическую индикацию!
https://img.radiokot.ru/files/20529/1st7ni12lm.jpg
https://img.radiokot.ru/files/20529/1st7nh5zvs.jpg
Та же динамическая индикация...
От такого индикатора "в глазах рябит"?
При правильно организованной работе "побочных эфектов" у динамики не будет.
Вот только сделать это без ущерба основной программе не всегда удачно получается.
Желательно иметь свободный таймер и блок обслуживания развертки отображения по прерыванию плюс пару буферных массивов размером по количеству знакомест дисплея.
На сегодня при наличии большого количества готовых модулей индикаторов "с мозгами" как бы данный вопрос уже давно подзабыт...

https://img.radiokot.ru/files/20529/1st7nh5zvs.jpg
Та же динамическая индикация...
От такого индикатора "в глазах рябит"?
При правильно организованной работе "побочных эфектов" у динамики не будет.
Вот только сделать это без ущерба основной программе не всегда удачно получается.
Желательно иметь свободный таймер и блок обслуживания развертки отображения по прерыванию плюс пару буферных массивов размером по количеству знакомест дисплея.
На сегодня при наличии большого количества готовых модулей индикаторов "с мозгами" как бы данный вопрос уже давно подзабыт...
Re: Вопрос про динамическую индикацию!
Для снятия "мерцания" достаточно и 62 Герца выставить...
Там просто рутинные операции не забыть выполнять. Плюс стабильность развертки, не зависящая от выполнения основной программы.
"Трещит" конечно весьма (для радиочастот при мощной нагрузке) - но до 8 индикаторов вполне свободно можно соорудить. Большее количество уже может и проиграть статике. Но только не в вопросах энергопрожорливости - там статика в явном проигрыше.

Там просто рутинные операции не забыть выполнять. Плюс стабильность развертки, не зависящая от выполнения основной программы.
"Трещит" конечно весьма (для радиочастот при мощной нагрузке) - но до 8 индикаторов вполне свободно можно соорудить. Большее количество уже может и проиграть статике. Но только не в вопросах энергопрожорливости - там статика в явном проигрыше.
Re: Вопрос про динамическую индикацию!
veso74 писал(а):всегда можно сделать лучше :П. Например так:
там нет элемента XOR.
а это главный элемент. без него ничего работать не будет.
BOB51 писал(а):От такого индикатора "в глазах рябит"?
о любого...
-у меня на столе LED часы мерцают...
-гуляя по ночному городу "в глазах рябит"...
-особенно бесит "бегущая строка"...
BOB51 писал(а):в вопросах энергопрожорливости - там статика в явном проигрыше.
вопрос спорный...
хотя... когда вопрос касается комфорта... и здоровья... остальное уже не важно))

- Вложения
-
- Screenshot_2.jpg
- (44.64 КБ) 468 скачиваний
-
- Screenshot_1.jpg
- (106.06 КБ) 478 скачиваний
Re: Вопрос про динамическую индикацию!
Динамическую индикацию надо уметь готовить .
Особо в случае рекламных щитов...
Да и на сегодня огромное количество "шустроумных" светиков в тех экранах применяется - а то уже не динамика в чистом виде, а построчно/покадровый вывод (аналогия телевизионной картинки).
Там другие "особенности" основанные на специфике восприятия глазом "мультипликации" у усредненного человечика.
Кстати... вариант "заморозки" изображения при резком повороте головы обычное явление.
Но то совсем не "мерцание" (несколько иной механизм восприятия).

Особо в случае рекламных щитов...
Да и на сегодня огромное количество "шустроумных" светиков в тех экранах применяется - а то уже не динамика в чистом виде, а построчно/покадровый вывод (аналогия телевизионной картинки).
Там другие "особенности" основанные на специфике восприятия глазом "мультипликации" у усредненного человечика.
Кстати... вариант "заморозки" изображения при резком повороте головы обычное явление.
Но то совсем не "мерцание" (несколько иной механизм восприятия).
- linux_rulezz
- Вымогатель припоя
- Сообщения: 584
- Зарегистрирован: Пн сен 15, 2025 08:43:23
- Откуда: Маленький СССР посреди шариатской республики
Re: Вопрос про динамическую индикацию!
Вот насчет светодиодных панелей, специально предназначенных для "бегущей строки", все время недоумевал: почему до сих пор нет для них стандартных параллельных буферов? Скажем, на 32 пикселя по вертикали. Соединяешь на плате 128 таких буферов - вуаля, у тебя "бегущая строка" в 128 пикселей шириной и 32 высотой. Подключаешь через параллельный интерфейс следующий - и побежала строчка дальше.
МК мог бы этой фигней (правда, без изменения яркости светодиодов) по трем проводам управлять: такт для сдвигового регистра (заполняющего столбцы), данные для него и такт для сдвига столбцов. И, как тут некоторые любят, была бы "чисто статическая" индикация (покуда не сдвинешь дальше).
МК мог бы этой фигней (правда, без изменения яркости светодиодов) по трем проводам управлять: такт для сдвигового регистра (заполняющего столбцы), данные для него и такт для сдвига столбцов. И, как тут некоторые любят, была бы "чисто статическая" индикация (покуда не сдвинешь дальше).
Windows must die!
Re: Вопрос про динамическую индикацию!
h
При правильно организованной работе "побочных эфектов" у динамики не будет.
Вот только сделать это без ущерба основной программе не всегда удачно получается.
Желательно иметь свободный таймер и блок обслуживания развертки отображения по прерыванию плюс пару буферных массивов размером по количеству знакомест дисплея.
При правильно организованной работе "побочных эфектов" у динамики не будет.
Вот только сделать это без ущерба основной программе не всегда удачно получается.
Желательно иметь свободный таймер и блок обслуживания развертки отображения по прерыванию плюс пару буферных массивов размером по количеству знакомест дисплея.
для светодиодов допустим оочень широкий диапазон частот разверток
~ 50Hz...500kHz частоты полных циклов.
так что отдельный таймер обычно не нужен, достаточно общего таймера системных процессов
обычно ж и другие алгоритмы требуют выравниваний своих задач по таймерам.
чтоб не было интерференционных мельканий при низких частотах разверток - надо синхронизировать с 50Hz. (ну или 60Hz, если вы иноземный кот
Re: Вопрос про динамическую индикацию!
BOB51 писал(а):Динамическую индикацию надо уметь готовить .
не знаю как её готовить... она всё равно будет мерцать...
сделал себе дома гирлянду... а она мерцает... через всякие тринисторы...
в итоге.. всё повыкидывал и подключил напрямую от стабилизированного источника питания постоянного тока.
теперь просто светит... вместо освещения))
больше ничего не мерцает и не раздражает))
Добавлено after 5 minutes 51 second:
а вообще... если сравнивать разные лампы... то приятней всего лампа накаливания...
поэтому в доме лучше всего использовать именно лампа накаливания... причём много... для лучшего распределения света... без теней... и лучше на постоянном токе... чтоб не мерцали...

- Вложения
-
- Screenshot_3.jpg
- (74.86 КБ) 408 скачиваний
-
- Screenshot_4.jpg
- (24.55 КБ) 422 скачивания
-
- Screenshot_2.jpg
- (47.05 КБ) 435 скачиваний
Re: Вопрос про динамическую индикацию!
AlexS4 писал(а):...
для светодиодов допустим оочень широкий диапазон частот разверток
~ 50Hz...500kHz частоты полных циклов.... )
Частотный диапазон светика не одно и то же, что и допустимый интервал свечения позиции в строке развертки.
Значительное уменьшение времени индикации требует увеличения яркости светика.
Нужен компромисс как по параметрам самого светика так и по времени индикации позиции в блоке развертки.
Второй параметр - время на смену данных в позиции (скорость загрузки регистров).
Собственно время индикации позиции не может быть меньше времени на ее загрузку.
Хорошо, ежли позиций до 8 и параллельная загрузка в два регистра.
А если допустим 8 строк по 64 точки? (или более длинная строка)