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

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

Реклама: АО КОМПЭЛ, ИНН: 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 пользователей онлайн

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

  • Сообщения

    • Всем привет, комрады!  Пользуюсь данным усилителем чуть больше 13 лет, все устраивает. Питается от ТС-180-2. Понадобилось заменить этот трансформатор на другой поменьше, думаю на торе заказать, а какой именно по характеристикам - пытаюсь разобраться. Стыдно признаться, ни разу не смотрел какие напряжения, какие токи в усилителе... собрал - включил и забыл. Сейчас придется разбираться.  Правильно ли понимаю что общая мощность транса = токи и напряжения каждой лампы, + накалы?  Тогда судя по даташитам, 6н1п на два канала - (250в*0,0075мА)*2 + (6,3в*0,6А)=3,75Вт+ 3,8Вт=~7,5Вт.  А 6п14п=(250в*0,048А+250В*0,005А+6,3В*0,76А) * 2 = (12Вт+1,25Вт+4,8Вт ) * 2 лампы = 18Вт * 2  = 36Вт. Хотя две лампы 6п14п питаются от одной обмотки 6,3в.  Итого меньше 50 Вт, ну и с запасом небольшим 60-80Вт.  А вот как указать в заказе? Схема питается 275в, то есть вторичку делать 200в, а ток?  То есть две выходных лампы уже 100мА, запас если делать как правило 10-20%, то примерно 200в * 120мА ?  НУ с накалом тут проще) Задача в том что нужно как можно менее габаритный трансформатор, увы, ТС-180 не влезает в новую конструкцию. Ну и для понимания, сейчас начну усилитель для наушников собирать, пригодится.    
    • Лучше не надо.  Буфер добавляет всего 6 копеечных деталей а надëжность и мощность увеличит в разы, и даст работать даже с низкоомными наушниками. Даже 32 Ом наушники один ОУ из JRC4558 не потянет. 
    • Какова площадь поверхности данного радиатора?
    • @Богдан Назаренко , 4558 и 5532 на слух не отличить. Да и параметры у них практически одиннаковые. Мне показалось TL072 звучит хуже.
×
×
  • Создать...