Здравствуйте! Я начинающий. Прошу помощи старших коллег по следующему вопросу: Пишу код под атмега8 для вывода на 4х разрядном семисегментнике числа 9578, проблема вот в чем, при попытке вывести 9578 по отдельности на 4х одноразрядных семисигментниках все получается как надо, но при попытке отобразить его на 4х или 6и разрядном семисегментнике вылезает какая то билеберда! Может это протеус глючит? Или я...Сталкивались ли с такой проблемой? У меня ничего не выходит.
Добавлено after 36 minutes 45 seconds: с динамической индикацией не сталкивался... от динамической индикации в глазах рябит)) мне нравится статическая))
зато я сталкивался с синхронизацией...
в исходнике прерывание таймера не синхронизировано с другой программой... это не правильно.
-в программе есть главная функция int main(void). -в программе есть функция перевода числа в разряды 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 - в прерывании таймера мы выводим разряды на индикатор.
Ладно, опустим комментарии на русском (хоть это странно), но названия функций… Ну и главный вопрос: зачем в суперлупе постоянно молотить преобразование одного и того же числа? Можно же было просто вот так сделать:
Код:
chizlo(9578); while(1){}
Добавлено after 2 minutes 31 second: roman.com, ну, в данном случае у него проблем не будет, т.к. он постоянно молотит одно и то же. Да и вообще, это не страшно для динамической индикации: момент смены числа будет достаточно быстрым, глаз просто не заметит "засады".
_________________ Windows must die! And the users of this crap should either become smarter or become janitors.
Ладно, опустим комментарии на русском (хоть это странно), но названия функций…
пофигу)) кому как удобней. главное что всем понятно.
linux_rulezz писал(а):
это не страшно для динамической индикации: момент смены числа будет достаточно быстрым, глаз просто не заметит "засады".
страшно... не страшно... это вопрос десятый.)) главное что это не правильно.
программа может например остановиться в любом месте... или МК может уйти в сон в любом месте программы... "sleep"... или МК может просто тупо зависнуть в любом месте программы... while(1){}; или... ещё может быть миллион вариантов))
главное что в любом случаев (из миллиона вариантов) на индикаторе мы увидим последнее обработанное число... и с высокой вероятностью это число будет не 9578. это не правильно.
Ну вот когда я вижу китайский код с иероглифами в комментариях, возникает желание кому-нибудь двинуть… Ну неужели на международном языке нельзя писать? Сразу к культуре надо приучаться. И функции называть не "zafiga4it_otpravku", а, скажем, "send_data".
_________________ Windows must die! And the users of this crap should either become smarter or become janitors.
roman.com, статическая индикация последнее время "не в моде". Взять те же светодиодные панели: там мало того, что для изменения яркости отдельного светодиода нужно долбить индикатор с частотой 16-24Гц, так еще и индикатор фактически поделен на 4 квадранта! И каждый обслуживается поочередно. И ничего, вполне себе работает. Я шутки ради делал "игровую приставку" (арканоид, тетрис и змейка) на STM32F103. Видео.
_________________ Windows must die! And the users of this crap should either become smarter or become janitors.
https://img.radiokot.ru/files/20529/1st7ni12lm.jpg https://img.radiokot.ru/files/20529/1st7nh5zvs.jpg Та же динамическая индикация... От такого индикатора "в глазах рябит"? При правильно организованной работе "побочных эфектов" у динамики не будет. Вот только сделать это без ущерба основной программе не всегда удачно получается. Желательно иметь свободный таймер и блок обслуживания развертки отображения по прерыванию плюс пару буферных массивов размером по количеству знакомест дисплея. На сегодня при наличии большого количества готовых модулей индикаторов "с мозгами" как бы данный вопрос уже давно подзабыт...
Да, MAX7219 работает с высокой частотой обновления LED, мерцания не видно, легко управляется, три провода. В кодировйки даже ATtiny13 легко справляется.
Динамическое управление LED по RF очень мешает, но это понятно.
Для снятия "мерцания" достаточно и 62 Герца выставить... Там просто рутинные операции не забыть выполнять. Плюс стабильность развертки, не зависящая от выполнения основной программы. "Трещит" конечно весьма (для радиочастот при мощной нагрузке) - но до 8 индикаторов вполне свободно можно соорудить. Большее количество уже может и проиграть статике. Но только не в вопросах энергопрожорливости - там статика в явном проигрыше.
Динамическую индикацию надо уметь готовить . Особо в случае рекламных щитов... Да и на сегодня огромное количество "шустроумных" светиков в тех экранах применяется - а то уже не динамика в чистом виде, а построчно/покадровый вывод (аналогия телевизионной картинки). Там другие "особенности" основанные на специфике восприятия глазом "мультипликации" у усредненного человечика. Кстати... вариант "заморозки" изображения при резком повороте головы обычное явление. Но то совсем не "мерцание" (несколько иной механизм восприятия).
Вот насчет светодиодных панелей, специально предназначенных для "бегущей строки", все время недоумевал: почему до сих пор нет для них стандартных параллельных буферов? Скажем, на 32 пикселя по вертикали. Соединяешь на плате 128 таких буферов - вуаля, у тебя "бегущая строка" в 128 пикселей шириной и 32 высотой. Подключаешь через параллельный интерфейс следующий - и побежала строчка дальше. МК мог бы этой фигней (правда, без изменения яркости светодиодов) по трем проводам управлять: такт для сдвигового регистра (заполняющего столбцы), данные для него и такт для сдвига столбцов. И, как тут некоторые любят, была бы "чисто статическая" индикация (покуда не сдвинешь дальше).
_________________ Windows must die! And the users of this crap should either become smarter or become janitors.
h При правильно организованной работе "побочных эфектов" у динамики не будет. Вот только сделать это без ущерба основной программе не всегда удачно получается. Желательно иметь свободный таймер и блок обслуживания развертки отображения по прерыванию плюс пару буферных массивов размером по количеству знакомест дисплея.
для светодиодов допустим оочень широкий диапазон частот разверток ~ 50Hz...500kHz частоты полных циклов. так что отдельный таймер обычно не нужен, достаточно общего таймера системных процессов обычно ж и другие алгоритмы требуют выравниваний своих задач по таймерам.
чтоб не было интерференционных мельканий при низких частотах разверток - надо синхронизировать с 50Hz. (ну или 60Hz, если вы иноземный кот )
не знаю как её готовить... она всё равно будет мерцать...
сделал себе дома гирлянду... а она мерцает... через всякие тринисторы...
в итоге.. всё повыкидывал и подключил напрямую от стабилизированного источника питания постоянного тока. теперь просто светит... вместо освещения)) больше ничего не мерцает и не раздражает))
Добавлено after 5 minutes 51 second: а вообще... если сравнивать разные лампы... то приятней всего лампа накаливания...
поэтому в доме лучше всего использовать именно лампа накаливания... причём много... для лучшего распределения света... без теней... и лучше на постоянном токе... чтоб не мерцали...
для светодиодов допустим оочень широкий диапазон частот разверток ~ 50Hz...500kHz частоты полных циклов. ... )
Частотный диапазон светика не одно и то же, что и допустимый интервал свечения позиции в строке развертки. Значительное уменьшение времени индикации требует увеличения яркости светика. Нужен компромисс как по параметрам самого светика так и по времени индикации позиции в блоке развертки. Второй параметр - время на смену данных в позиции (скорость загрузки регистров). Собственно время индикации позиции не может быть меньше времени на ее загрузку. Хорошо, ежли позиций до 8 и параллельная загрузка в два регистра. А если допустим 8 строк по 64 точки? (или более длинная строка)
Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 23
Вы не можете начинать темы Вы не можете отвечать на сообщения Вы не можете редактировать свои сообщения Вы не можете удалять свои сообщения Вы не можете добавлять вложения