Jump to content

    
Sign in to follow this  
D@rkD@iver

Использование 16-сегментного индикатора с 6 цифрами в протеусе

Recommended Posts

Здравствуйте всем. Тут такая проблемка.

В протеусе подлючил индикатор к AtMega128.Пытаюбсь вывести строку из 5 символов.

Вывожу каждый символ по очереди. Они отображаются но вот незадача, очень сильно видно как они моргают. То есть видно что в каждый момент только один символ зажжен.

Задержка междлу символами 100 мс. Если делаю меньше то они отображаются вообще некорректно.

Так вот вопрос как обычно работают с этими проклятыми индикаторами?

Или это глюк протеуса? И еще такой вопрос. Основной цикл занят олбновлением индикатора,но мне нужно выполнить кое-какой код раз в секунду.

Какэ то можно реализовать? Заранее спасибо

Share this post


Link to post
Share on other sites
Задержка междлу символами 100 мс. Если делаю меньше то они отображаются вообще некорректно.

Так вот вопрос как обычно работают с этими проклятыми индикаторами?

Или это глюк протеуса? И еще такой вопрос. Основной цикл занят олбновлением индикатора,но мне нужно выполнить кое-какой код раз в секунду.

Ключевые слова для поиска: "Динамическая индикация микроконтроллер".

 

100 мС - это много. Для 6 цифр скорее подойдут 10 мС.

 

Протеусу место в мусорном контейнере, ИМХО. АВР - это не тот случай, где нужны симуляторы.

 

Я вопроса вашего не понял. Но расскажу, как я решал похожую задачу. В основном цикле крутилась основная программа, которая выполняла кучу всяких действий, в том числе и вывод текста на индикатор. Для хранения этого текста использовался текстовый буфер на 6 символов, и основная программа, не задумываясь, просто писала в него символы, с каждым символом увеличивая счетчик записанных и еще не выведенных на индикатор символов на единичку. И все, что происходило с буфером потом, ее не касалось. Для отображения использовались обработчики от таймеров. Первый обработчик вызывался 100 раз в секунду и включал цифру за цифрой на индикаторе, реализуя динамическую индикацию. Второй же обработчик (его можно вызывать реже, например, 20 раз в секунду) проверял счетчик записанных в буфер и еще не выведенных на индикатор символов, и при отличии содержимого счетчика от нуля обновлял содержимое индикатора ...

Share this post


Link to post
Share on other sites
Протеусу место в мусорном контейнере, ИМХО. АВР - это не тот случай, где нужны симуляторы.
напрасно вы так. в чем другом - не знаю, но для отладки прог с МК протеус просто крайне удобен и полезен.

 

P.S. не понятно, зачем в вашем примере второй таймер - разве основная программа не могла писать "не задумываясь" сразу в буфер индикатора? к чему посредник, перемещающий данные из одного буфера в другой?

 

 

 

Share this post


Link to post
Share on other sites
напрасно вы так. в чем другом - не знаю, но для отладки прог с МК протеус просто крайне удобен и полезен.

 

P.S. не понятно, зачем в вашем примере второй таймер - разве основная программа не могла писать "не задумываясь" сразу в буфер индикатора? к чему посредник, перемещающий данные из одного буфера в другой?

Да, можно и так, это не принципиально. Задача-то несложная, и я просто предлагаю автору темы поискать в Сети, как реализуется динамическая индикация ...

Share this post


Link to post
Share on other sites

ну в принципе я так и делаю, есть буффер из которого прога отправляет символы на индикатор, если буфер поменять то мнгновенно поменябтся данные на индикаторе.

но сейчас основная проблема что не могу его настроить чтоб он отображался нормально без морганий, если ставлю 10 мс то он не отображает ничего

Share this post


Link to post
Share on other sites

нет, не надо для отладки ствить другие задержки, надо настроить протеус. в его меню System есть пунктик Set Animation Options - там настраиваются режимы, позволяющие привести в соответствие "мгновенность" обновления диспля компьютера с "виртуальным" временем исполнения. вы замечали, что протеус как правило для имитации 10-миллисекундных процессов затрачивает сотни миллисекунд? поэтому ваша динамическая индикация на дисплее компа выглядит как редкое мигание отдельных разрядов. чтобы как-то это сгладить и служит указанный мной пункт меню. Задайте Frames per Second = 20, Timestep per Frame = 50m, Single Step Time = 50m, Max SPICE Timestep = 25m, Step Animation Rate = 4 (так настроено у меня и я не жалуюсь). надеюсь, эти настройки вам помогут, а если нет - поварьируйте первые два параметра и подберите подходящие для вас.

 

Еще в параметрах динамических (многоразрядных) индикаторов есть Minimum Trigger Time - этакий аналог времени послесвечения, можно подстроить эту величину для какой-то компенсации слишком медленной симуляции...

 

главное, о чем вы должны всегда помнить, работая с протеусом, так это то, что его виртуальное время не совпадает с реальным! в статусной строке смотрите за тем, как тикают виртуальные секунды-миллисекунды, и ориентируйтесь на них. в крайнем случае измеряйте временные интервалы виртуальным осциллографом протеуса. это необходимо для того, чтобы не попасть в ситуацию, когда из-за ошибки в программе у вас реальная частота динамической индикации не 100Гц, а 10Гц, но вы подогнали настройки протеуса так, что ничего не мигает и довольны, как слон... а после прошивки в девайс страшно удивляетесь, что все страшно мерцает.

Share this post


Link to post
Share on other sites

С протеусом сталкиваюсь не часто, но в сети попадались на глаза подобные топики. Суть (если это "оно") в том, что частота тактирования индикатора не должна быть кратна обновлению экрана протеуса. Или частота обновления в протеусе не должна быть кратна частоте обновления экрана. Помню, что, вместо 10мс необходимо установить к примеру 9.5мс. Или чтото в этом духе. Где править эти настройки я не помню. Возможно народ подскажет.

Share this post


Link to post
Share on other sites

Уже несколько дней работать пытаюсь в протесе.

Мало в нем конечно удобства, но работать можно, особенно когда начинаешь понимать где и от чего у него вылазят глюки.

AVR Tiny13a эммулируется нормально. Хотя порой заметно что есть какая-то странная реакция на прошивку, может вылететь с симуляции с непонятной ошибкой.

 

что касается димамической индикации, так 100мс на символ - это реально много

обычно выбирается из соображений минимум 30Гц на символ * кол-во символов

Share this post


Link to post
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

Sign in to follow this