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

MEGA8 опрос кнопок по таймеру


tifaso

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

не будет он работать. не в действительности не в принципе.

1. в прерывании инкремент/декремент по нажатой кнопке на выходе имеем рендомное значение переменной
2. время выполнения одного блока задержек 2,4секунды во время исполнения которого код к изменениию переменой относится монопенесуально

ЗЫ этому товарисчу как строится код писали уже надцать раз, все бестолку , на выходе все равно бредокод.
 

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

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

@Beliy_voron я делаю обычную гирлянду в которой кстати всё работает кроме этого момента. Ну твою прошивку я без её кода всё равно не пойму что и где подключается и главное как она работает.

И да ещё я всю прошивку сразу проверяю и отлаживаю на реальном железе, а не в протеусах всяких.

Я уж тут думаю если не выходит работать с переменной в таймере то напрямую работать со светодиодами индикации и уже от этого отталкиваться. Скорей всего придётся именно так и делать.

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

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

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

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

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

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

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

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

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

Только что, IMXO сказал:

лучше думай как delay из бредокода убрать, большн толку будет

Вот этого уж точно никогда не будет. Без delay ничего работать не будет.

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

:D Будет работать и так и эдак. Просто по неписанным правилам лучше подключить второй таймер и через него коммутировать все светодиоды. А delay вообще не применяется в главном цикле. Из-за него много глюков может быть. Особенно если прошивка разветвленная. Но она у тебя линейная, поэтому никаких проблем не будет. 

Самый простой, наивный способ ты использовал. Работает и хорошо. Возможно позже понадобиться выучить несколько иной подход. 

"Мы все учились понемногу, чему-нибудь и как-нибудь...")

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

Только что, Beliy_voron сказал:

Будет работать и так и эдак. Просто по неписанным правилам лучше подключить второй таймер

эдак работать не будет, почему читай пункт2 выше, второй таймер тут наненать.

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

Не могу проверить в железе. В симуляторе после нескольких видоизменений работает. Если на практике у него будет задержка в 2,4 сек, то пускай держит кнопку 2,5 сек. 

Нормально это? Нет. Но работать будет. 

Я сам в программировании валенок, но иногда приходится по долгу работы пообщаться с разработчиками - профессионалами. Так вот не дай Бог их больше двух соберется вместе. Они начинают обсерать  усовершенствовать любые твои потуги в простом коде. 

К примеру мне намного понятнее регистры портов в восьми разрядных МК писать в виде бинарного кода. Сразу наглядно видно что да как. Но почему то все меня норовят исправить на шестнадцатиричное исчисление. ДЛя чего? Что в этом практичного? Что бы я сидел с калькулятором и тратил время на писанину?  Или когда надо поменять одно значение регистра (пин), то сидели голову чесал? 

Три года назад написал программу (и сделал устройство) которое управляет последовательным включением трех реле , по истечению некоторого жестко заданного времени. Без кнопок, без меню. Тупо индикация и все. "Заказчик" попросил сделать "для удешевления" на таймерах. Но я переубедил его использовать один МК - tiny13, так как в процессе наладки необходимо было оперативно подобрать время срабатывания реле, а сделать это легче с помощью программатора и ноутбука, а не паяльника и кучи дискретных элементов. . Как Вы понимаете код состоял из 6 строчек. Подключал ли я таймер? Нет. Знает ли об этом заказчик? Нет. Устройство третий год работает в полевых условиях. 

Так может давайте ограничимся понятием - "разумной достаточности", а не вечного теоретического идеализма? 

Да, код ТС плох. На мое мнение и на Ваше мнение. Но переделать его на 100% он не хочет. Я чем смог помог, делать за него его работу не буду и тем более учить как сделать правильно. Потому как понятия правильности в программировании не существует. Всегда найдется тот, кто предложит более оптимальный (читай простой) способ добиться результата. В своем подобном "проекте" я подключал два таймера. Один на управление кнопками, второй на периферию. Потому как других функций в схеме не было, кстати как и у ТС. Ну и что? Серьезные дяди - программисты начали мне было объяснять что правильно задать задержки и прерывания на одном таймере, но когда я высказал простую истину, что у меня будет изменяться в широких пределах эти задержки в процессе наладки и бегать по коду что бы сберечь правильность работы кнопок мне не уперлось, то серьезные дяди сдулись, приняли это во внимания и согласились, что если второй таймер НЕ ЗАНЯТ, то почему бы  и не разделить абсолютно отдельно две функции одну от другой. 

Если завтра будет время, накидаю для ТС более - менее читабельный код. 

@IMXO :drinks:

"Мы все учились понемногу, чему-нибудь и как-нибудь...")

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

6 минут назад, Beliy_voron сказал:

Если на практике у него будет задержка в 2,4 сек, то пускай держит кнопку 2,5 сек.

читай пункт1 выше

 

6 минут назад, Beliy_voron сказал:

то серьезные дяди сдулись

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

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

Как я вообще стал программировать микросхемы. Сперва как то была мыль просто собрать одно устройство, но там нужен был программатор чтобы зашить прошивку (она прилагалась к схеме). Таким образом я приобрёл программатор. И около полугода он у меня просто лежал пока я не наткнулся на серию видео уроков по программированию.

https://www.youtube.com/channel/UCByG5fr-hWOMKlb7DqyQQ9Q/videos

Там парень всё чётко, понятно, доступно и подробно объясняет, показывает на примерах. Именно после этих уроков я понял что нужно для работы с микросхемами и как с ними работать. Я их и сейчас постоянно пересматриваю чтобы освежить информацию. Так и пишу код.

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

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

Относительно второй части Вашего сообщения, то возможно я и в правду запамятовал. У меня в программе использовалось ШИМ вывод с помощью таймера. И вывод на семисегментный дисплей с управлением кнопками. Раскрутить все это в один таймер я без чужой помощи не смог, так как уперся в отладку. О дефайнах знаю и использую, однако отладка схемы представляла собой изменения связанные не только с константами, но еще и с временными регистрами самого таймера. Я проверял ШИМ в нагруженном состоянии на различных частотах работы как самого ШИМ так и тактовой частоты МК, что постоянно приводило к сбою, как динамической индикации вывода на сдвоенный семисегментный дисплей, так и управления дребезгом и откликом кнопок. Решить это можно было бы либо правильно поставленным ТЗ и заведомо известными задержками и частотами вывода (какого не было, я делал, экспериментировал лично для себя) либо же использованием отдельно взятого таймера, который не мешал ничему и ни от чего не зависел в процессе обработки (разве только от тактовой частоты, но это быстро решалось). Таким образом разделив "грешное от праведного"я вдоволь наигрался различными возможностями конкретно взятого таймера с единственной его функцией. Для этого мне понадобилось аж целых 30 минут. 

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

Насчет наших программистов, то не следует их сильно гнобить). Ребята хорошие, используют и рекомендуют те наработки, которые уже десяток лет оптимальны, а кто же там захочет в чужом коде разбираться ? ;)

"Мы все учились понемногу, чему-нибудь и как-нибудь...")

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

1 час назад, tifaso сказал:

Без delay ничего работать не будет

За Си не знаю, а в асме так :

Делаете прерывания каждые 10ms  и дальше считаете прерывания.  10 прерываний и кнопка постоянно нажата - значит она сработала  .  На повторное  срабатывание при постоянном удержании  ставите другое число проверок.

Регулируя число проверок (они же антидребезг) добиваетесь удобства управления .

Если прерывания не понятны , делайте программу без прерываний , по циклам . Но циклы также делите таймером .

п.с.

я например, про алгоритмы программирования нигде не читал , но знал как строятся цифровые схемы и это очень помогло сочинять элементарные замены дискретам .

 

п.с.2 если не собираетесь составить конкуренцию Биллу, лучше пишите на асме . Он позволяет держать каждый бит под контролем ,  а дальше чуть-чуть сообразительности .

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

@colorad Асемблер слишком уж мудреный и не читабельный. Пробовал было дело разобраться в одной исходнике, но бросил из за его кода который совершенно не читабелен на мой взгляд. На си как то полегче и понятнее.

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

16 минут назад, Beliy_voron сказал:

Проверку следует ввести для "отжатия" кнопки. 

вот... и мы приходим к тому что нужно обрабатывать не состояние, а событие... ТСу  об этом уже год толдычать, но товарисч с упорством носорога по прежнему пишет бред ,  просто зайдите в публикации ТСа и посмотрите созданные им темы ,  своими кнопками уже год моск на форуме выносит.:moil:

22 минуты назад, colorad сказал:

За Си не знаю, а в асме так :

точно так же.

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

А я вот сейчас чего подумал может ли влиять на невыполнение некоторых действий отсутствие питания на 20 ножке мега8. Возможность подключения питания на плате я предусмотрел через перемычку, но не подключал так как мне не ясно нужно ли оно там.

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

Все есть в даташите, 6 страница. Питание на AVcc подавать нужно, особенно если ножки порта С в работе. 

Цитата

AVCC is the supply voltage pin for the A/D Converter, Port C (3..0), and ADC (7..6). It should be externally connected to VCC, even if the ADC is not used. If the ADC is used, it should be connected to VCC through a low-pass filter. Note that Port C (5..4) use digital supply voltage, VCC

 

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

Хорошо учту и исправлю. Возможно это и поможет. У меня как раз таки и есть проблемы с портами B и C.

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

10 часов назад, tifaso сказал:

я уже себе всю голову сломал

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

https://forum.cxem.net/index.php?/topic/215211-программирование-кнопок-в-atmega8-на-с/&do=findComment&comment=3280077

 

 

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

@IMXO Это всё не то я уже давно это изучил и понял. Но конкрентно в этой ситуации нужен другой подход. Ну и конечно же другие скрипты. Так так и задача у меня сейчас стоит совершенно другая. Нечего меня путать.

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

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

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

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

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

@andrusha152 Кстати в главном цикле значения переменных отлавливаются хорошо. Как раз таки из таймера и не выводит изменения переменных. И на хрена вообще создавать гемор с таймерами если есть задержки. Которые кстати и не мешают вовсе работе. Как минимум в моей программе.

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

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

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

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

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

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

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

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

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

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

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

  • Сообщения

    • сила притяжения, развиваемая соленоидом прямо зависит от тока. Если постоянно не нужна максимальная сила притяжения, то можно при помощи ШИМ уменьшить ток соленоида. Но это не точно ))
    • @READART Конкретно с LOGO не сталкивался, но у всех других, с кем сталкивался, программа всегда лежала во флеше. Да и хранить именно програмный код в энегозависимой памяти просто нелогично. Ионистор, скорее, может использоваться для отработки отключения питания, что-бы программа штатно могла завершиться, сохранив свое состояние.
    • А тема офигенно интересная. Рассуждать логически, в варианте А в среднем проводнике тока вообще практически нет и он нафиг не нужен. Во втором варианте по этим двум проводникам фигачит полный ток туда и обратно. Если хорошо свить, то по помехам одно...нно, только омические потери.  Дальше однозначного понимания у меня тоже нет. Я не выдающийся математик, мне нужен эксперимент. Например попробовать разорвать средний провод. Посмотреть куда подключены остальные цепи. Возможно у БЖТ асимметрия. Посмотреть как идут крайние провода обмотки, возможно раздвоенный средний компенсировал помеху от крайних.  ......  Не надо в подушку плакать, просто не нужно лезть с сегнетоэлектрикой в (калашный) звуковой ряд. Только не забывать про тоненькие дорожки к ним на ПП, если вдруг их приходится делать, или дилетанты наделали. А так да, отсутствие выводов большой плюс. Особенно когда занимаешься полосковой технологией.
    • Да схема самая обычная, без всяких пиэфси . Вот примерная.  Но блочок все равно не заработал, при превышении нагрузки 50 ватт происходит перекос плечей и выброс. В одной клетке 50 вольт. Получается на одном плече 200 на другом 150.
    • @1960sae "Собирал когда то такой конструктор, запустился сразу....". блин. не могу управится с ним. все проверил. нашел пробитый конденсатор, поменял. питание от адаптера сделал 7,3в. регулятор четко 5,05 в держит. на ногах пика питание есть, на всех ногах тоже какая то напруга есть. ниче не греется, транзы холодные. но не работает и все. когда щупами проверял по выводам пика моргнули индикаторы один раз и все. осцилла нет. ума не приложу, интернет рою. пока нифига не смог победить. что смущает: по схеме (я выше здесь выложил) 8 резисторов (на индикаторы идут) по 220 ом, а в наборе они по 1 кОм (я их впаял).  может по прошивке другая частота запуска прописана, может с кварцем что не так. опыта не хватает, конечно, сообразить, куда рыть. буду перебором
    • Кто сказал? Откуда такие знания? Опишите механизм появления искаженного звука. Точно не надо.
×
×
  • Создать...