Перейти к содержанию

Динамическая Индикация & Co


AtmelInside

Рекомендуемые сообщения

Здравствуйте! Как правильно реализовать динамическую индикацию? Я сделал на Atmega8 индикацию для 6 7-ми сегментников. Все работает, но, например, где-то в коде при определенном событии мне нужно сделать задержку в 2 секунды. В таком случае все ломается :( Нужно что-ли как-то в несколько потоков выполнять. Для вывода данных на сегменты у меня есть одна-единственная ф-ция. Её вызываю в вечном цикле.

Ссылка на комментарий
Поделиться на другие сайты

Реклама: ООО ТД Промэлектроника, ИНН: 6659197470, Тел: 8 (800) 1000-321

Самое простое - использовать прерывания.

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

Я когда-то делал такую задачу без использования прерываний.

К примеру задержка для отображения индикации в 2 секунды:

if(++timer>80) {timer=0; Led_out=100;}// выводим число 100

else if(timer>40)Led_out=150; // выводим число 150

delay_ms(5);

...

Где то тут крутим индикацию.

Что может быть лучше в радиоэлектронике, чем программирование микроконтроллеров ?

Ссылка на комментарий
Поделиться на другие сайты

20% скидка на весь каталог электронных компонентов в ТМ Электроникс!

Акция "Лето ближе - цены ниже", успей сделать выгодные покупки!

Плюс весь апрель действует скидка 10% по промокоду APREL24 + 15% кэшбэк и бесплатная доставка!

Перейти на страницу акции

Реклама: ООО ТМ ЭЛЕКТРОНИКС, ИНН: 7806548420, info@tmelectronics.ru, +7(812)4094849

А можно подробнее про прерывания ?

Вот к примеру у меня есть два HC595, соединенных каскадом. Есть ф-ция setRegister(data, display), которая загружает в display'тый дисплей значение data.

То-есть второй регистр принимает значение display грубо говоря, а первый значение data.

На скрине у меня подряд выполняются ф-ции с задержкой в 1мс в вечном цикле.

RU1qnAC7-ys.jpg

Изменено пользователем artos5
Ссылка на комментарий
Поделиться на другие сайты

Выбираем схему BMS для корректной работы литий-железофосфатных (LiFePO4) аккумуляторов

 Обязательным условием долгой и стабильной работы Li-FePO4-аккумуляторов, в том числе и производства EVE Energy, является применение специализированных BMS-микросхем. Литий-железофосфатные АКБ отличаются такими характеристиками, как высокая многократность циклов заряда-разряда, безопасность, возможность быстрой зарядки, устойчивость к буферному режиму работы и приемлемая стоимость. Но для этих АКБ, также как и для других, очень важен контроль процесса заряда и разряда, а специализированных микросхем для этого вида аккумуляторов не так много. Инженеры КОМПЭЛ подготовили список имеющихся микросхем и возможных решений от разных производителей. Подробнее>>

Реклама: АО КОМПЭЛ, ИНН: 7713005406, ОГРН: 1027700032161

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

Вот по прерываниям подробно:

http://samou4ka.net/page/tajmer-schetchik-mikrokontrollerov-avr

Что может быть лучше в радиоэлектронике, чем программирование микроконтроллеров ?

Ссылка на комментарий
Поделиться на другие сайты

По этим таймерам, весь интернет завален статьями. На вопрос "как ?" ответ один - гуглим.

По дин. индикации, также, просто куча статей с примерами кода. Ответ тот же - гуглим.

Ссылка на комментарий
Поделиться на другие сайты

По этим таймерам, весь интернет завален статьями. На вопрос "как ?" ответ один - гуглим.

По дин. индикации, также, просто куча статей с примерами кода. Ответ тот же - гуглим.

Куча статей, где просто дин., индикация без прочих ф-ций.

Вынес ф-цию обновления индикаторов в прерывание по переполнению таймера 1.

Теперь мне нужно постоянно опрашивать АЦП и ифать значения, которые на нем, в зависимости от значений делаем действия с определенными задержками (до 0.5 сек). Всовываю этот вопрос в вечный цикл - все работает, но есть один момент:

В зависимости от значения АЦП с разной скоростью изменяется значение переменной (эдакий инкремент, декримент), но если сделать АЦП таким, чтобы ничего не изменялось, то значение с небольшим запазданием резко меняется, как это можно решить? Пробовал выносить в нулевой таймер, но при этом начинает глючит индикация (задержки по АЦП влияют )

Ссылка на комментарий
Поделиться на другие сайты

Присоединяйтесь к обсуждению

Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.
Примечание: Ваш пост будет проверен модератором, прежде чем станет видимым.

Гость
Unfortunately, your content contains terms that we do not allow. Please edit your content to remove the highlighted words below.
Ответить в этой теме...

×   Вставлено с форматированием.   Восстановить форматирование

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

Загрузка...
  • Последние посетители   0 пользователей онлайн

    • Ни одного зарегистрированного пользователя не просматривает данную страницу
×
×
  • Создать...