Карма: 13
Рейтинг сообщений: 9
Зарегистрирован: Пт фев 22, 2013 18:00:43 Сообщений: 508 Откуда: Беларусь, г. Гомель
Рейтинг сообщения:0
В общем то хочу сделать такой девайс на микроконтроллере. Как видно из схемы светодиоды будут включаться регистрами сдвига. Обороты буду считать так (в течении 1 сек. считаю прерывания от сигнала тахометра) полученное число >>7 (эквивалентно /128). Все просто 1 диод=128 об/мин. Вопрос в следующем, я не прошу написать программу, но нужна помощь как отобразить не полоску в текущий момент времени, а получить, что то типа стрелки аналогового тахометра, но именно полосой светодиодов, а не одним. В общем нужен алгоритм (быстрый алгоритм ), все что я не придумывал работает медленно, очень медленно . В файле, пробы работы с регистрами сдвига и соответственно схема.
на телефоне схему посмотреть не могу, если я правильно понял, счетчики не задействованы. исользуйте или прерывание по совпадению (нужные вам 128) или просто раз в нужный вам период (если его взять меньше секунды -уже будет делителем) считывайте и сбрасывайте счетчик - это должно освободить массу времени Если ждать показаний секунду - счетчик будет выглядеть тормозом. это бегло (нормально гляну только в понедельник, если ещё будет актуально )
_________________ Просто не учи физику в школе, и вся твоя жизнь будет наполнена чудесами и волшебством Безграмотно вопрошающим про силовую или высоковольную электронику я не отвечаю, а то ещё посадят за участие в (само)убиении оболтуса...
Карма: 13
Рейтинг сообщений: 9
Зарегистрирован: Пт фев 22, 2013 18:00:43 Сообщений: 508 Откуда: Беларусь, г. Гомель
Рейтинг сообщения:0
У меня тормозит как раз таки вывод и не могу понять почему, даже если не считаю, а просто вывожу столбик скажем высотой в 12 светодиодов. На счет использования меньшего времени подсчета идея отличная, че сам не додумался? Спасибо , а вот со скоростью отображения вопрос .
Если считать количество прерываний каждые полсекунды, то Это количество и будет равняться количеству зажигаемых светодиодов
Инженеры КОМПЭЛ провели сравнительное тестирование аккумуляторов EVE и Samsung популярного для бытовых и индустриальных применений типоразмера 18650.
Для теста были выбраны аккумуляторы литий-никельмарганцевой системы: по два образца одного наименования каждого производителя – и протестированы на двух значениях тока разряда: 0,5 А и 2,5 А. Испытания проводились в нормальных условиях на электронной нагрузке EBD-USB от ZKEtech, а зарядка осуществлялась от лабораторного источника питания в режиме CC+CV в соответствии с рекомендациями в даташите на определенную модель.
Карма: 13
Рейтинг сообщений: 9
Зарегистрирован: Пт фев 22, 2013 18:00:43 Сообщений: 508 Откуда: Беларусь, г. Гомель
Рейтинг сообщения:0
Я делаю на atmega16 так как, на ней уже сделана и работает кнопка START-STOP Engine и удлинялка поворотников, т. к. ног хватает, а эти программы работая параллельно, слабо жрут ресурс, я решил еще добавить Тахометр и вольтметр. Поэтому готовая прошивка мне не интересна, нужен алгоритм или код чего то подобного.
Компания EVE выпустила новый аккумулятор серии PLM, сочетающий в себе высокую безопасность, длительный срок службы, широкий температурный диапазон и высокую токоотдачу даже при отрицательной температуре.
Эти аккумуляторы поддерживают заряд при температуре от -40/-20°С (сниженным значением тока), безопасны (не воспламеняются и не взрываются) при механическом повреждении (протыкание и сдавливание), устойчивы к вибрации. Они могут применяться как для автотранспорта (трекеры, маячки, сигнализация), так и для промышленных устройств мониторинга, IoT-устройств.
сначала ТЗ - действительно нужен тахометр управляющий поворотниками? если да, то прикидывай, какие аппаратные ресурсы можно задействовать (таймеры-счетчики, прерывания), как оптимизировать всё устройство, например показания тахометра могут пригодиться как сигнал для отключения стартера, можно глянуть в сторону диспетчера задач (вроде РТОС) могу проектик интересный (не мой) подкинуть там неплохие комментарии, правда он на АБ (это почти асм).
Добавлено after 9 hours 3 minutes 51 second: По поводу скорости - надо смотреть, у котов вон на скорости вращения HDD отображать успевает
_________________ Просто не учи физику в школе, и вся твоя жизнь будет наполнена чудесами и волшебством Безграмотно вопрошающим про силовую или высоковольную электронику я не отвечаю, а то ещё посадят за участие в (само)убиении оболтуса...
подумал над кодом, он не слишком медленный, он слишком быстрый, а медленным кажется потому что постоянно обновляет регистры (возможно и светодиоды на это время не гасятся (схему не видел)) причем одним и темже значением. подумай где и как можно отправить проц в сон чтобы он ещё и проснулся, а я подскажу потом как сделать показания мягкими и шелковистыми плавными.
_________________ Просто не учи физику в школе, и вся твоя жизнь будет наполнена чудесами и волшебством Безграмотно вопрошающим про силовую или высоковольную электронику я не отвечаю, а то ещё посадят за участие в (само)убиении оболтуса...
Карма: 13
Рейтинг сообщений: 9
Зарегистрирован: Пт фев 22, 2013 18:00:43 Сообщений: 508 Откуда: Беларусь, г. Гомель
Рейтинг сообщения:0
Код кнопки запуска двигателя уже написан мною и работает на машине все ОК, удлинялка на поворотники вооще проста до безобразия и тоже работает нормально, все в одном коде. Есть переменная count она имеет значение соответствующее количеству прерываний, за полсекунды. Алгоритм таков Имеем полоску светодиодов count длиной, 1светодиод~128 об/мин вот эта полоска должна отобразится, но только не сразу, а постепенно нарастая, ну чтобы долго не объяснять, как эквалайзер в проигрывателе.
я хотел чтоб ты сам догадался где ошибка, ну да ладно, давай ТЗ - сколько оборотов МАХ, сколько светодиодов (или так например светодиодов 24, 4 светодиода = 1000 имп/мин) (1имп=1об ? ), свободные/занятые (и чем) счетчики, тактовая частота контроллера, ограничение по ногам (если чтото уже припаяно и перепаять нельзя. Если я правильно понял у тебя одна доложка светодиодов и гореть должны все, которые меньше текущих показаний тахометра (столбик). Плавность и живость столбика сделаю настраиваемыми, надо ли пики (когда обороты резко снижаются один светодиод повисит немного (это немного потрудней, но тоже реализуемо).
_________________ Просто не учи физику в школе, и вся твоя жизнь будет наполнена чудесами и волшебством Безграмотно вопрошающим про силовую или высоковольную электронику я не отвечаю, а то ещё посадят за участие в (само)убиении оболтуса...
Карма: 13
Рейтинг сообщений: 9
Зарегистрирован: Пт фев 22, 2013 18:00:43 Сообщений: 508 Откуда: Беларусь, г. Гомель
Рейтинг сообщения:0
Использую 32 светодиода 1=128имп/мин соответственно мах=4096. Переменная count содержит текущее значение частоты и изменяется каждые 0.5 сек. Последнее изменять нельзя ибо сильно усложнит алгоритм определения заведена ли машина, там все немного посложней чем определить ширину импульса. Да и все обкатано. С пиками было бы великолепно, но боюсь это сильно уменьшит производительность, хотя интересно. Я бы наверное даже сделал отдельно тахометр. Но при условии что не будет тормозить Вот пожалуй и все ТЗ.
Добавлено after 10 minutes 51 second: ушел от компа пришел к интернету
Добавлено after 1 hour 17 minutes 33 seconds: с пиками не работал (не знаю, есть ли смысл уже за них браться) . Переменная сохранилась и сохранила своё назначение. Про электросчетчик (в комментах)- правильнее было бы написать: сначала сверил 1го числа текущего и прошлого месячев, потом 2го и т.д. каждый раз получаем показания за месяц, и каждый день свежие. (просто торопился - времени свободного маловато на работе было)
_________________ Просто не учи физику в школе, и вся твоя жизнь будет наполнена чудесами и волшебством Безграмотно вопрошающим про силовую или высоковольную электронику я не отвечаю, а то ещё посадят за участие в (само)убиении оболтуса...
Карма: 13
Рейтинг сообщений: 9
Зарегистрирован: Пт фев 22, 2013 18:00:43 Сообщений: 508 Откуда: Беларусь, г. Гомель
Рейтинг сообщения:0
Спасибо огромное, исходя из кода, я понял, что частота измеряется по ширине фронта, но с учетом того, что известно колличество прерываний, заводку машины можно проверить сл. образома. пропускаем 4 прерывания и измеряем частоту, если частота превысила 600 об/мин engine=1; машина работает. Далее if ((engine)&&(!CurrMeas)) then <двигатель заглох>. Я правильно понял на счет этого? Вот код кнопки запуска, я интегрировал ее с сигналкой SHeriff ZX 1050. Схема собиралась на ATTINY2313. Все работает ОК. А тут под руки попала ATMEGA16 с кучей таймеров, вот и родилась идея скрестить ежа с колючей проволокой Обрати внимание я считал обороты не по захвату, а по количеству переполнений. Сейчас надо все переделывать, но я думаю оно того стоит.
И еще я не понимаю, почему дергается последний регистр, к которому подключен индикатор?
А вообще с пиками было бы красиво, но наверное если делать обратный цикл это бы сильно перегружало и возможно не успевало бы выполнится за отведенное время.
Чтобы не дергался - увеличь делитель (дергается - последний ркзряд - шумящий) если не поможет, напиши - добавлю гистерезис, это кардинально решит проблему. Переменную, да, так и делай, только устанавливай флаг допустим по 650, а сбрасывай по 550 пропускать ничего не надо (проверяй в прерывании Т1. Используется только количество импульсов. Если вольтметр не делать то здесь тинки хватит.
Добавлено after 26 minutes 33 seconds: а вот и гистерезис: вместо
_________________ Просто не учи физику в школе, и вся твоя жизнь будет наполнена чудесами и волшебством Безграмотно вопрошающим про силовую или высоковольную электронику я не отвечаю, а то ещё посадят за участие в (само)убиении оболтуса...
Карма: 13
Рейтинг сообщений: 9
Зарегистрирован: Пт фев 22, 2013 18:00:43 Сообщений: 508 Откуда: Беларусь, г. Гомель
Рейтинг сообщения:0
Завтра на попробую вольтметр добавить. Отпишусь. Но вот что то мне подсказывает, что за счет того, что прерывание будет выполняться очень часто, основной код записанный в main() будет реально глючить из-за постоянного прерывания процессов, я конечно понимаю, что программа вернется в точку прерывания, но вот как быть с задержкой? Я специально не использовал delay_ms(), а сделал это на таймере, получается прерывание в прерывании и здесь возможно все. Но в любом случае попробую объединить и посмотрю, что получится. Кстати в протеусе есть мерцание, но возможно это глюк протеуса, потому как в пошаговом исполнении судя по таймингам ничего не должно мерцать. Вот доделаю шкалу, тогда можно будет на железе проверить
это глюк протеуса, ну не глюк, в нем есть 2 вида светодиодов -analog и digital, вторые со сглаживанием. у простых можно выбирать в свойствах . шкала - аналоги, а восьмёрки цифровые, потому горят ровно.
Добавлено after 2 minutes 27 seconds: мерцание это как эффект камеры - когда частоты мерцания и отображения накладываются
_________________ Просто не учи физику в школе, и вся твоя жизнь будет наполнена чудесами и волшебством Безграмотно вопрошающим про силовую или высоковольную электронику я не отвечаю, а то ещё посадят за участие в (само)убиении оболтуса...
бегло глянул, как много всего задействовано, может выход сигнала о заведенности мотора сделать , а тинькой его ловить. Посмотрел внимательнее: вставить не трудно, но код перебрать придется (порты перецепить и переделать алгоритм, отказавшись от задержек и опираясь на то, что он 30 раз в секунду запускается). Вот ещё кот допиленный - сделана индикация вольтметра, перенесен ИСП в прерывания чтобы его не ждать, сделана переменная, указывающая на состояние двигателя, "расчищено" место и время для кода автозапуска.
_________________ Просто не учи физику в школе, и вся твоя жизнь будет наполнена чудесами и волшебством Безграмотно вопрошающим про силовую или высоковольную электронику я не отвечаю, а то ещё посадят за участие в (само)убиении оболтуса...
ещё мысль пришла - вольтметр может не только напряжение показывать, но и прочие надписи (Strt, Stop, Run, Err.1 и тд), (обороты пока нет - нет их в системе с такой точностью, хотя получить можно, притом не теряя в скорости: 1) по фронту сбрасываем счетчики, ждём ок 0,5с (Т1), 2) разрешаем захват, 3)при захвате смотрим сколько Т0 нащёлкал и 4)делим значение Т0 на время 0,5+ICR)
_________________ Просто не учи физику в школе, и вся твоя жизнь будет наполнена чудесами и волшебством Безграмотно вопрошающим про силовую или высоковольную электронику я не отвечаю, а то ещё посадят за участие в (само)убиении оболтуса...
Карма: 13
Рейтинг сообщений: 9
Зарегистрирован: Пт фев 22, 2013 18:00:43 Сообщений: 508 Откуда: Беларусь, г. Гомель
Рейтинг сообщения:0
Это мне понятно, мне интересно, как будет взаимодействовать мой код, где опрашиваются кнопки? Получается, что не успело произойти событие основном цикле бац прерывание, потом бац еще одно, т .п. Может нет смысла совмещать, кнопку и тахометр? Посмотри мой код, я сбрасывал выше, что скажешь?
совместить легко, только нужно принцип многозадачности соблюдать 1) подпрограммы запускаются поочереди по прерыванию таймера (в нашем случае по T2) 2) подпрограммы не должны выполняться долго (достаточно из них убрать циклы ожидания) 3) ожидание реализуется через переменную (подпрограмма проверила событие, если есть событие - прирастила переменную, проверила переменную: мало - завершилась, достаточно - ожидание закончено, работаем дальше)
_________________ Просто не учи физику в школе, и вся твоя жизнь будет наполнена чудесами и волшебством Безграмотно вопрошающим про силовую или высоковольную электронику я не отвечаю, а то ещё посадят за участие в (само)убиении оболтуса...
Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 10
Вы не можете начинать темы Вы не можете отвечать на сообщения Вы не можете редактировать свои сообщения Вы не можете удалять свои сообщения Вы не можете добавлять вложения