Сообщество - Arduino & Pi

Arduino & Pi

1 493 поста 20 825 подписчиков

Популярные теги в сообществе:

466

О помощи и ЧСВ на Пикабу

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

И конечно же, у нашего героя «тупо нет времени». Понимаем, а когда оно было? А особенно когда вдобавок еще и мозгов не хватает.

В комментариях пикабушники дают вполне себе неплохие ответы. Вроде бы подсказали и забыли. Через пару дней автор делится своей радостью и творением.


Внимание, НАУЧНЫЙ проект, который выглядит так:

Погодите-ка, что это там?

ОН СЕРЬЕЗНО? Простите, но почему то я заржал в голос

Ну и прюфы:

1-ый пост просьба помощи - https://pikabu.ru/story/udalyonnoe_izmerenie_kharakteristik_...

2-ой пост: https://pikabu.ru/story/udalyonnoe_izmerenie_kharakteristik_...

Показать полностью 6

Удалённое измерение характеристик конденсатора (2)

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


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


Ярик писал софт, заливал его в арду, разработал программу на комп...
Идея с привязкой Т4 к аруинке оказалась провальной, поэтому был найден и залит отредактированный скетч измерителя в контроллер, а сам измеритель стал играть роль "презиционного" показателя данных.


Моя роль в этом деле заключалась в работе над железом и разработке системы автоматики. Построил модель частотника с двиглом, систему заряда и разряда конденсатора и занимался пайкой всего в одну систему. А так же спалил один Т4 неразряженным кондёром, просто перепутав реле и сломал паяльник. (да, я был сонный рукожоп)


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


Скетчей и подробностей изготовления не будет, так как это индивидуальная работа, без права копирования и распространения.

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

Показать полностью 2
22

Обмен между R3 ATmega2560 + ESP8266

Обмен между R3 ATmega2560 + ESP8266

Всем привет!
Имеется единая плата, совмещающая в себя Mega2560 и ESP8266.
Передача информации из ESP8266 в mega2560 понятна (например моргание лампочкой из web браузера). А вот чтоб например состояние контакта (геркон на окне) из mega2560 передать в esp8266 для дальнейшего отображения в браузере не понятно как. Гугл молчит по этому поводу. Так же есть 3 датчика влажности, подключенные к mega2560, как всё это передать в чип esp8266 непонятно...
Я уже отчаялся, и пишу сюда.... HELP!

Показать полностью 1
21

Светомузыка с Arduino. Сезон 2 Часть 3

Часть 1 https://pikabu.ru/story/svetomuzyika_s_arduino_sezon_2_chast...

Часть 2 https://pikabu.ru/story/svetomuzyika_s_arduino_sezon_2_chast...


Продолжаем ковырять прерывания и таймеры.

Поговорим о делителях частоты и зачем они нужны. Делители - тупо уменьшают системную частоту, зачем - да фиг его знает, но зачем то нужны. В прошлом посте я пришёл к тому, что цикл прерывания работает, и не мешают работе ШИМ, но вот чот не так быстро как хотелось бы. Напомню, что время между тактами составляло порядка 2 миллисекунд, а надо микросекунды. Будем отключать делитель.

У адруины нано есть вот такие варианты:

1. таймер/Счетчик выключен;

2. Тактовый генератор;

3. Делитель на 8;

4. Делитель на 64;

5. Делитель на 256;

6. Делитель на 1024.

По умолчанию, в частности на таймере 2, делитель установлен на 64. Посчитаем:

Ардуина работает на 16 МГц, следовательно 16 000 000 / 64 = 250 000, т.е. 250 кГц, т.е. 250 000 раз в секунду.

Далее посмотрим, сколько времени требуется на такт: 1 / 250 000 = 0, 000004 сек, или 4 микросекунды. Счетчик таймеры 2 считает до 255, а значит прерывание срабатывает 1 раз за 256 тактов (0 - 255), значит прерывание срабатывает каждые 4 * 256 = 1024 мкс, или 1,024 миллисекунды,...


Отступление: многие мануалы, которые я прочитал,пытаются заставить работать прерывание со сбросом при совпадении, и настраивают его на работу в 1 миллисекунду, но при выборе режима работы допускают маленькую ошибку, и получают время 1,024 - на практике это особо не заметно, и их светодиоды работают вроде бы как надо, но отличить глазом разницу в 24 мкс - не реально, и типа ок. А когда я стал с этим разбираться, тайминги не совпадали, и ничего не работало как надо.


Ок, вернемся к нашим баранам.

1,024 миллисекунды - слишком медленно,... будем выключать делители. Посмотрим как это делать: (картинка с видео)

Как видим, какие-то мутные регистры, но ничего сложного:

Все настройки делаются в блоке setup!

CS00, CS01, CS02 - Разбираемся: CS - Регистры, просто запоминаем. первая цифра - номер таймера, Нам нужен 2. Вторая цифра - управляющий бит. Итак, нам надо тактовый генератор на канале B таймера 2, а значит надо установить регистры CS20 = 1, CS21 = 0, CS22 = 0 в регистр таймера 2 канал B

В программном виде это выглядит так:

TCCR2B |= 1<<CS20;

TCCR2B &= ~((1<<CS22)|(1<<CS21));

, где

TCCR2B - Регистр таймера 2, канал B (Соответственно может быть TCCR0А, TCCR0B, TCCR1A, TCCR1B, TCCR2A, TCCR2B - Думаю понятно что тут и где).

Первой строчкой через оператор OR устанавливаю 1 на регистр CS20, второй строчкой устанавливаю нули в регистры CS21 и CS22 используя операторы AND и Инвертирование от OR.

Для тех кто не знает:

| - это оператор OR (логиеское или). Принцип работы: имеем биты А и Б, Про себя проговариваем: Если А или Б = 1, то на выходе 1. т.е. если хотя бы один из битов = 1, то на выходе 1. Соответственно, если оба = 0, то на выходе 0.

& - это оператор AND (логическое и). Принцип работы: имеем биты А и Б, Про себя проговариваем: Если А и Б = 1, то на выходе 1. т.е. если хотя бы один из битов = 0, то на выходе 0. Соответственно, если оба = 0, то на выходе тоже 0. Чуишь разницу?

~ - это оператор NOT (логическое не). Принцип работы: Имеем бит А. Про себя проговариваем: Если А = 0, то на выходе не 0, и наоборот. Грубо говоря, просто инвертируем значение.

<< - Операция побитового смещения влево, То есть, было у нас 3 бита = 001, смещаем их влево на 1 знак, получаем 010, Еще разок сместим - 100, еще разок сместим 000. ну и вправо смещать тоже можно аналогично.


Как работает вся эта конструкция в целом - да не особо важно, если будет ты туда залез, и тебе это нужно - разобраться будет не сложно.


Итак. Делители выключили, посчитаем: 1 секунда / 16 000 000 Гц = 0,0625 мкс, * 256 = 16 мкс. Во, уже просто супер! Теперь можно хреначить цикл работы с микрухой анализатора.

Изменение частоты делителя, никак не влияет на работу ШИМ, - так как подняв частоту ШИМ, мы не меняем скважность сигнала (процентное соотношение времени вкл и выкл) - это как частоту на мониторе поднять, просто мерцать меньше будет.


В общем и целом,что можно сделать на ардуине:

7 типа параллельных потоков:

один цикл - Основной LOOP, - очень шустрый, менее 1 мкс на круг.

еще два цикла - на таймере 2 каналы A и B - довольно шустрые по 16 мкс на круг.

еще два цикла - на таймере 1 каналы A и B - помедленнее, так как они до 1024 считаю, т.е. 64 мкс на круг.

и еще два - на таймере 0, но тут частоту менять не надо, то есть 1024 мкс на круг.


Далее, если нам не надо ШИМ или всякие Delay, micros, millis, и прочие (в зависимости от таймеров и каналов), можно поставить в прерывании по таймеру сброс счетчика, и в регистр сравнения записать 1, таким образом, прерывание будет вызываться в каждый такт: т.е. получим скорость как у основного цикла LOOP, = 0,0625 мкс.

Посмотрим как это делать:

Видим, что надо задавать регистры WGM, где первая цифра - это номер таймера, вторая - задающий бит (У таймера 1 немного иначе - имейте ввиду). То есть надо сделать так:

TCCR2B = 1<<WGM21;

По умолчанию установлен режим Нормальный, то есть биты стоят в 0. поэтому дополнительных манипуляций не требуется, просто берем и устанавливаем единицу в нужный регистр.

Обращаю внимание что оператор | (OR) перед знаком равенства не используется! Я фиг знает почему так, - логично что надо бы, но если его поставить, то нифига не работает. Ну и соответственно, эту строчку надо бы размещать перед другими настройками этого бита (TCCR2B в данном случае).

Если надо установить в оба бита, то делаем так: TCCR2B = ((1<<WGM21)|(1<<WGM20));

Итак: в конечном виде это выглядит так:

TCCR2B = 1<<WGM21;  Режим Сброс при совпадении

TCCR2B |= 1<<CS20;  Режим работы по генератору 16 МГц

TCCR2B &= ~((1<<CS22)|(1<<CS21));  Делители выключаем.

OCR2B = 1;  Число для сравнения с счетчиком, пущай каждый такт прерывание фигачит

TIMSK2 |= (1 << OCIE2B);  Разрешаем прерывание при совпадении

В коде функции прерывания, напишем немного кода, что бы посчитать время. И на мониторе порта посмотрим результат: 30 мкс... Сабака, так быстро тикает, что пропускает такты, или micros не успевает считать. Ок,.. поставим Счетчик подальше, OCR2B = 127 и... 15 мкс

Вывод: Без делителей, смысла использовать режим Сброса при совпадении - особо нет. Да и ШИМ перестает работать - нахер эту ерунду. Оставляем режим в "нормальном", вырубаем делители, и получаем и ШИМ и 16 мкс на круг. Всё, можно писать прошивку для Светомузыки с  микросхемой анализатора.


Продолжение следует.... со скоростью китайско-русской почты. Жду посылку с микрухой.

Показать полностью 2
90

Ka-radio недорогое онлайн радио.

Приветствую друзья, я попробовал собрать онлайн- радио оно обойдется где-то 700р. Я его собрал и внизу схема сборки на nodemcu и vs1053, усилитель можете применять любой. Вот ссылка на проект. https://hackaday.io/project/11570-wifi-webradio-on-esp8266-o...

Это моя сборка. Видео не могу показать. Не хватает рейтинга.

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

Показать полностью 3

Удалённое измерение характеристик конденсатора

Занялся с другом недавно проектом, работа которого заключается в измерении ESR, ёмкости и температуры кондёра. В идеале измеренные показания читаются еср-метром, передаётся на арду, а она в свою очередь отправляет данные на комп по вайфаю.

Железо практически собрано, прога готова, но столкнулись с проблемой, что оба не знаем, как перехватить сигнал измерений с ESR-метра и отправить его на ардуину.


Как я понял, те четыре проводочка, которые к дисплею идут, они передают сигнал по типу юсб, и инфа идёт уже для кодировки матрицы? Брать этот сигнал, или ловить его где-то раньше?


Задача состоит именно в подключении ESR-метра к арду, на сборку других вариантов тупо нет времени.

Понимаю, что это возможно, а мозгов, как это сделать, не хватает.

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

P.S. Возможно, редакция и читатели посчитают это нарушением одного из правил паблика.
Извиняюсь перед всеми, но у меня крайняя степень отчаяния, защита диплома на этой неделе.

Показать полностью 2

Проблема с Orange Pi One Plus

Доброго времени суток.
Подскажите, из тех кто заказывал эту штуковину. При запуске мигает светодиод с маркировкой D8, и нет никакой реакции на подключение LAN кабеля. Чип греется.

Без вставленной флешки реакции нет никакой вообще (что нормально, судя по обычной Orange Pi One)

Флешка SanDisk

При подключении к монитору (1366x768) выскакивает оповещение о неоптимальном разрешении.
Прошивка - Андроид 7.0 отсюда Флешку готовил и заливал прошивку как обычно, через PhoenixCard. Прошивается без ошибок.

Как думаете, это брак или я где-то допустил ошибку?

Показать полностью 4
Отличная работа, все прочитано!