Список разделов Flyback.org.ru » не HV » Микроконтроллеры и всё, что с ними связано
Тему сейчас просматривают - зарегистрированных: 0, скрытых: 0 и гостей: 0
Зарегестрированные - Нет
Ответить с цитатой

Vcoder
Магистр


Ivani, благодарю за проявленный интерес к теме.

Но пожалуйста не нужно держать меня за дурака и пытаться уличить в чём-то подобном.
АЦП 12-битный, максимальное значение 4095.
На преобразование нужно время, это подмечено верно. Но время это всегда постоянно и потому вынесено мною за скобки и в данном вопросе не учитывается.

Добавлено: Thu Jul 07, 2016 4:04 pm
Ответить с цитатой

Анна
 


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

Добавлено: Thu Jul 07, 2016 4:46 pm
Ответить с цитатой

Ivani
 


Чет мне кажется это не реально, только если выходить из подпрограммы по таймеру.

Добавлено: Thu Jul 07, 2016 6:29 pm
Ответить с цитатой

Behram
 


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

Добавлено: Thu Jul 07, 2016 6:45 pm
Ответить с цитатой

Денис
 


Не знаю, как там в пиках, но что-то подсказывает что у них тоже есть таймеры на борту.
Тогда заводим прерывания по таймеру на период, чуть больший, чем время выполнения самого долгой ветки (АЦП+преобразование).

Добавлено: Thu Jul 07, 2016 8:40 pm
Ответить с цитатой

Seriyvolk
Бездельник


Одинаковое кол-во тактов? Ну, например, как это видится мне: просто прогоняем значение АЦП втупую через ряд сравнений без выхода при совпадении. Нпример так: больше одного, меньше двух? - нет - идём дальше, больше двух, меньше трёх - ага! - записали в регистр двойку, больше трёх?.... И так до нужной дискретизации, которая не очень и велика, как я понял. Ряд будет выполняться фиксированное время. При одном из сравнений в регистр можно записать требуемое число и делать с ним, что захочется.
Выглядит это не совсем красиво, по быстроте выполнения кода тоже желает лучшего, но зато удовлетворяет поставленным условиям задачи.

Добавлено: Thu Jul 07, 2016 11:46 pm
Ответить с цитатой

BSVi
 


Просто, сделать таблицу. Если не нужна точность на границах целых вольт, убрать лишние биты.

Добавлено: Fri Jul 08, 2016 8:29 am
Ответить с цитатой

Vcoder
Магистр


Спасибо всем откликнувшимся.

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

Ivani, Денис, одно из условий ТЗ - нельзя применять ни таймеры ни прерывания. Не ожидал подобных идей, потому не написал об этом сразу.

Anton, Behram, да, неизбежно придётся дополнять некоторые ветки nop-ами. Так что задача сводится к нахождению такого алгоритма, разные ветви которого будут иметь минимальное расхождение, чтобы меньше ноп-ов вставлять, и чтобы весь алгоритм выполнялся за возможно меньшее время. Поэтому предложенный Seriyvolk-ом вариант хоть и рабочий, но не оптимальный. Сейчас реализовано что-то похожее, но надо улучшить.

BSVi, точность до сотых долей разумеется не нужна. При шаге в 1 В в ней нет смысла. Но что ты имел в виду, говоря "Просто, сделать таблицу"?
Если имел в виду сделать массив, в котором адресом будет значение АЦП, а по этому адресу будет располагаться требуемое значение для вывода в порт, то вряд ли это хорошая в данном случае идея - это не stm32 с килобайтами памяти, тут всего 4 банка по 224 байт. Кроме того устройство работает в условиях сильных наводок, сбои МК - постоянное и неизбежное явление. От их последствий и стараемся защититься, исключив таймеры, прерывания и подпрограммы. Поэтому хранить константы в ОЗУ - не лучшее решение.

Добавлено: Fri Jul 08, 2016 2:40 pm
Ответить с цитатой

Анна
 


Если от наводок сбоит стек подпрограмм и прерываний, рвется контент, глючат таймеры, то с тем же успехом помехи могут разрушать и регистры, и настройки портов, и сам цикл исполнения. Исключение прерываний и п/п вряд ли значительно повысит надежность в такой обстановке. Думаю, лучше бы защитить сам МК, его землю, питание, тактовый осциллятор и прочее близкое окружение. Вплоть до физического экранирования всей платы, если это конечно возможно.

Добавлено: Fri Jul 08, 2016 3:05 pm
Ответить с цитатой

Ivani
 


Vcoder писал(а):
Кроме того устройство работает в условиях сильных наводок, сбои МК - постоянное и неизбежное явление. От их последствий и стараемся защититься, исключив таймеры, прерывания и подпрограммы.
Путь не верный и принесет с собой кучу проблем, в такой обстановке нет никакой гарантии правильной адресации программы/данных, предположительно таймер от процессорного тактового сбить труднее чем обмен с ОЗУ/ПЗУ, единственный разумный вариант экранировать мозги всеми доступными путями.

Добавлено: Fri Jul 08, 2016 4:48 pm
Ответить с цитатой

TAN
 


Вкодер, ты хоть марку мк укажи.

Добавлено: Fri Jul 08, 2016 6:37 pm
Ответить с цитатой

BSVi
 


Да, именно это и имел ввиду - выход=таблица[значение ацп]. Не хватает места - нужен контроллер побольше. А, если нет уверенности в физической работе МК - то и программировать нечего.
На самом деле есть еще простой вариант - пересчитать делитель так, чтобы в верхних битах получалось именно то, что нужно выводить на ножки.

Добавлено: Fri Jul 08, 2016 6:45 pm
Ответить с цитатой

Vitek_22
Простой советский бомж


Как думаете, если на атмегу 8 (16 МГц) навешать 4 газоразрядных счётчика - 2 на прерывание и 2 на простые входы, потянет?

Добавлено: Thu Aug 11, 2016 8:35 pm
Ответить с цитатой

Behram
 


А обрабатывать как будешь? Нужно именно 4 отдельных канала счета?

Добавлено: Thu Aug 11, 2016 8:39 pm
Ответить с цитатой

Ivani
 


Проще все подать на счетный вход и сделать блокировку данных от ненужных счетчиков.
АЦП в ардуинке тянет порядка 8 К, если в твоем варианте грамотно сделать опрос на СИ или лучше заюзать 4 прерывания думаю 20 - 50 к потянет.

Добавлено: Thu Aug 11, 2016 9:02 pm
Ответить с цитатой

Vitek_22
Простой советский бомж


Да, необходимы все 4 счётчика одновременно, хочу мат обработку сделать и вычленять бету и гамму. Благо, у меня теперь есть доступ к источникам всевозможным для отладки

20 к/секунду это вполне нормально, больше - опасно близко подходить подмигивает 4 прерывания невозможно, т.к. только 2 входа предусмотрено у 8 атмеги

Добавлено: Thu Aug 11, 2016 10:32 pm
Ответить с цитатой

Behram
 


Так для этого будет достаточно 2 каналов счета, по 2 счетчика на каждый.

Добавлено: Thu Aug 11, 2016 11:07 pm
Ответить с цитатой

Ivani
 


Возьми ардуинку на меге328 там есть Pin Change Interrupt Request по идее должно пойти, можно юзать и без ардуиновского бутлоадера.

Добавлено: Thu Aug 11, 2016 11:12 pm
Ответить с цитатой

Dalamar
 


Vcoder писал(а):
одскажите алгоритм.

Есть девайс на 8-битном МК (серия pic17). С помощью АЦП измеряется напряжение. Делитель АЦП подобран так, что попугаи АЦП соответствуют напряжению с точностью до сотой доли вольта: например 1780 соответствует 17,8 В, 2692 - 26,92 В и так далее.


Вот совершенно никак не владею программированием МК, правда работал с АЦП.
Если еще не решили, то кажется, это по-другому - подобрать делитель так, чтобы код АЦП был не в 100, а в 128 раз больше численного значения напряжения. Делить на 128 куда проще! Округляем, убирая младшие 7 бит - оставшееся есть искомый результат. Чтобы округление было математически правильным, сперва к коду прибавляем 64 (0,5 В при данном масштабе), затем уже отбрасываем 7 бит.
Всегда за одно и то же число операций - две.
Т.е. 17,8 В - код 2278, добавляем 64 - 2342. Двоичное - 100100100110. Выкидываем младшие 7 бит, берем старшие 5. Будет 10010, т.е. 18.
17,49В - получаем 10001 (17)
17,50В - получаем уже 10010 (18 ) - так что алгоритм довольно точен.

Правда, снизится диапазон измерений, но можно делить на 64.

Добавлено: Tue Aug 16, 2016 10:03 pm
Ответить с цитатой

Денис
 


Кто-нибудь из присутствующих юзал такой дисплейчик?
https://ru.aliexpress.com/store/product/1-44-inc...0-06617-eub6yrrBy

Контроллер всего скорее ILI9163c.

Везде ардуинные библиотеки, не могу никак простую си-шную найти.

Добавлено: Tue Oct 04, 2016 8:25 pm
Ответить с цитатой

Евгений Светницкий
 


Денис писал(а):
Везде ардуинные библиотеки, не могу никак простую си-шную найти.

Вспоминается старая история баша.

-О, привет, чувак, целую неделю тебя не было видно, ты таки нашел дрова на свою сетевуху ?
- Я их написал *POKER FACE*
- O_o

А переписать с ардуинки на СИ вообще сложно ?

Добавлено: Wed Oct 05, 2016 8:30 am
Ответить с цитатой

Александр
 


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

Добавлено: Wed Oct 05, 2016 8:45 am
Ответить с цитатой

Денис
 


Евгений Светницкий писал(а):
А переписать с ардуинки на СИ вообще сложно ?
Перепиши по братски, если тебе не сложно.
А если серьезно, там в библиотеке черт ногу сломит, да и знаю я Си поверхностно. Так что не вариант.

ОК, а тогда может подскажете хорошие недорогие дисплеи с нормальными выводами, диагональю от 1,5'', цветные, под которые есть нормальные библиотеки Си.

Добавлено: Thu Oct 06, 2016 6:41 pm
Ответить с цитатой

perezx
 


Вопрос к практикам.
Есть несколько arduino pro mini - 4 или 5 штук. Каждая из них должна общаться с компьютером, желательно - все с одним. Как лучше реализовать? Желания делать каждой дурдуине usb-com переходник и пытаться втыкать эти переходники в usb-разветвитель не имею, ибо опасаюсь, что работать будет архихреново.

Добавлено: Mon Nov 14, 2016 6:59 pm
Ответить с цитатой

Денис
 


Есть дешевые модули nRF24L01, на один мастер можно повесить несколько ведомых. Но их придется сначала раскурить Smile

Добавлено: Mon Nov 14, 2016 7:07 pm
Список разделов Flyback.org.ru » не HV » Микроконтроллеры и всё, что с ними связано
На страницу Пред.  1, 2, 3 ... 89, 90, 91 ... 151, 152, 153  След.     Просмотр темы целиком



Лицензионное соглашение

(c)Flyback.org.ru
Российское общество любителей высоких напряжений.
Использование материалов с данного сайта и форума возможно только с разрешения администрации.