Питание, vin-порт, энкодер, native USB
- Войдите на сайт для отправки комментариев
Ср, 28/03/2018 - 21:12
схема подключения http://prntscr.com/ixmxg8
Код ниже работает с левой схемой подключения, но не работает с правой.
/* * MIDIUSB_test.ino * * Created: 4/6/2015 10:47:08 AM * Author: gurbrinder grewal * Modified by Arduino LLC (2015) */ #include "MIDIUSB.h" // First parameter is the event type (0x09 = note on, 0x08 = note off). // Second parameter is note-on/note-off, combined with the channel. // Channel can be anything between 0-15. Typically reported to the user as 1-16. // Third parameter is the note number (48 = middle C). // Fourth parameter is the velocity (64 = normal, 127 = fastest). void noteOn(byte channel, byte pitch, byte velocity) { midiEventPacket_t noteOn = {0x09, 0x90 | channel, pitch, velocity}; MidiUSB.sendMIDI(noteOn); } void noteOff(byte channel, byte pitch, byte velocity) { midiEventPacket_t noteOff = {0x08, 0x80 | channel, pitch, velocity}; MidiUSB.sendMIDI(noteOff); } void setup() { Serial.begin(115200); } // First parameter is the event type (0x0B = control change). // Second parameter is the event type, combined with the channel. // Third parameter is the control number number (0-119). // Fourth parameter is the control value (0-127). void controlChange(byte channel, byte control, byte value) { midiEventPacket_t event = {0x0B, 0xB0 | channel, control, value}; MidiUSB.sendMIDI(event); } void loop() { Serial.println("Sending note on"); noteOn(0, 48, 64); // Channel 0, middle C, normal velocity MidiUSB.flush(); delay(500); Serial.println("Sending note off"); noteOff(0, 48, 64); // Channel 0, middle C, normal velocity MidiUSB.flush(); delay(1500); // controlChange(0, 10, 65); // Set the value of controller 10 on channel 0 to 65 }
Код ниже не работает с левой схемой подключения, но работает с правой.
/* Простой скетч с отработкой энкодера. Поворот увеличивает и уменьшает значение переменной counter. Вся отработка уместилась в функции encoderTick(). Отработка осуществляется БЕЗ ПРЕРЫВАНИЙ, поэтому для внедрения в проект нужно обеспечить максимальную прозрачность кода (боже упаси delay и безвыходные циклы). AlexGyver Technologies http://alexgyver.ru/ */ //--ПИНЫ ЭНКОДЕРА-- #define CLK 2 #define DT 3 #define SW 4 long counter = 0; boolean DT_now, DT_last; void setup() { Serial.begin (9600); pinMode (CLK, INPUT); pinMode (DT, INPUT); DT_last = digitalRead(CLK); // читаем начальное положение CLK } void loop() { encoderTick(); // ФУНКЦИЯ ОТРАБОТКИ ЭНКОДЕРА! СМОТРИ, ВОТ ОНА! } void encoderTick() { DT_now = digitalRead(CLK); // читаем текущее положение CLK if (DT_now != DT_last) { // если предыдущее и текущее положение CLK разные, значит был поворот if (digitalRead(DT) != DT_now) { // если состояние DT отличается от CLK, значит крутим по часовой стрелке counter ++; // прибавить счётчик } else { // если совпадают, значит против часовой counter --; // убавить счётчик } Serial.print("Position: "); Serial.println(counter); } DT_last = DT_now; // обновить значение }
Мне нужно чтобы оба скетча работали, и при этом не нужно было менять схему подключения.
Вопрос №1 - вы знаете, как устроен энкодер, какие сигналы он выдает?
нет, мало что в этом понимаю
Плохо дело. Энкодер - это считайте три кнопки. А если кнопку подключить одним контактом на вход ардуины, а вторым - никуда, то что будет?
Вобщем, питание с ардуины на модуль подайте, а не с левого разъема.
Плохо дело. Энкодер - это считайте три кнопки. А если кнопку подключить одним контактом на вход ардуины, а вторым - никуда, то что будет?
Вобщем, питание с ардуины на модуль подайте, а не с левого разъема.
спасибо. Подскажите, как можно отказаться от запитывания энкодера с ардуинки. Мне нужно будет очень много чего подключать, а +5 вольт на ней тольуо один. Сори за пионерские вопросы))))
Поставьте отдельный стабилизатор на 5 В.
спасибо. Подскажите, как можно отказаться от запитывания энкодера с ардуинки. Мне нужно будет очень много чего подключать, а +5 вольт на ней тольуо один. Сори за пионерские вопросы))))
Так я же написал, что ваш механический энкодер - это практически кнопки. Они по 300 ампер не потребляют. Ваша драгоценная ардуина не похудеет и от десятка энкодеров.
А если уж прямо спать не можете и хотите отдельное питание - хотя бы gnd посторонней шины питания соедените с ардуиновским.
Поставьте отдельный стабилизатор на 5 В.
http://prntscr.com/ixogeg
так? объяснитепожалуйста, зачем это нужно?
gnd посторонней шины питания соедените с ардуиновским.
http://prntscr.com/ixoix6
так?
Поставьте отдельный стабилизатор на 5 В.
http://prntscr.com/ixogeg
так? объяснитепожалуйста, зачем это нужно?
Вы же сами пишете:
Подскажите, как можно отказаться от запитывания энкодера с ардуинки. Мне нужно будет очень много чего подключать, а +5 вольт на ней тольуо один. Сори за пионерские вопросы))))
По поводу схемы: я не знаю, к каким контактам модуля энкодера что подходит. Чтобы понимать принцип работы, нужне принципиальная схема, а не монтажная.
Но следует иметь в виду, что ни на какой из пинов Дуэ нельзя подавать 5 В, поэтому энкодер тоже следует питать от 3.3В, а не от 5.
ну это же обычный китайский ky-040. Вот так покрупнее http://prntscr.com/ixtk1g
так ничего и не понял. На всякий случай, ещё раз про то чего я добиваюсь: ардуину хочу питать от USB а всю переферию (5 вольт) от внешнего питания. Такое возможно? Если нет, то подойдет вариант питания ардуины тоже от внешнего источника, но при подключёном native USB
тоесть как правильно сделать? так https://prnt.sc/ixtk1g или так https://prnt.sc/ixoix6 или так http://prntscr.com/ixwslf ?
1. Понять, как функционирует схема можно только по принципиальной схеме, монтажная схема для этого не подходит. Поэтому что-то обсуждать возможно только если опубликована принципиальная схема. Если ее нет, то варианта всего два: либо перерисовывать для себя монтажную схему в принципиальную, либо проигнорировать как монтажную схему, так и вопрос. Второе - легче. Поэтому разумно, что работу по преобразованию монтажной схемы в принципиальную будет выполнять спрашивающий.
2. Повторюсь: ни на какой контакт контроллера Arduino Due нельзя подавать напряжение больше 3.3 В. В том числе и с подключенных датчиков. Поэтому следует либо питать датчики от 3.3В (разумеется, если они такое допускают. Энкодеры, например, - допускают), либо ставить между Ардуино и датчиками конверторы уровней.
Что там наворочено в модуле, я не знаю, сам пользуют только такими:
Чаще всего используют схемы, такую:
либо такую:
Но обе эти схемы не очень хороши. Правильная схема должна быть такой:
спасибо, поизучаю......сложно мне пока с принципиальными схемами(((...спрошу так: если я gnd посторонней шины питания (5 вольт) соеденю с ардуиновским https://prnt.sc/ixoix6 как советовал sadman41 ардуинке ничего не будет?
не стал дожидаться ответа - объединил земли - всё заработало
ошибочка вышла. оказывается я забыл убрать питание от ардуины на бредборд. тоесть когда я написал что заработало - вот так было:
Если питание идущее от ардуины на бредборд убрать (а оставить только землю) то энкодер опять не читается.
причём ведёт себя энкодер так: поворачиваю на одно деление - он работает (ардуина выводит значение на единичку больше или меньше предыдущего), поворачиваю дальше - значения побежали (ну тоесть не работает)....поворачиваю дальше - опять встал (работает, ждёт нового поворота). И так делее.
Чаще всего используют схемы, такую:
хочу начать с этой схемы, как с самой простой. Ну и все компоненты у меня есть в наличии. Но у меня есть питание только 5 вольт. Вы писали что больше 3 нельзя подавать на ардуину....Тоесть, в моём случае - не вариант? Сейчас разобрался в правильной схеме - там же тоже пины с питанием нужно соединять....Или через резисторы это можно? 10 кОм подойдут для схемы на этой картинке?
Притяните выводы А и В к земле резисторами по 20К при R1,2 равным 10К.
А почему не берете 3.3В с самой платы на энкодер?
суммарное потребление периферии будет больше 800мА.
Притяните выводы А и В к земле резисторами по 20К при R1,2 равным 10К.
по какой формуле это расчитывается?
Какое потребление у вашего энкодера? Посчитайте по закону Ома.
Периферию Вы можете запитывать от внешнего питания, как предполагалось ранее. Энкодер же можно питать непосредственно от платы, где есть готовые 3.3В, а не городить дополнительную обвязку из резисторов. Формула расчетов проста, загуглите резистивный делитель напряжения. И, кстати, 800ма - это по линии 5В, по 3.3В будет только 180ма.
Чаще всего используют схемы, такую:
хочу начать с этой схемы, как с самой простой. Ну и все компоненты у меня есть в наличии. Но у меня есть питание только 5 вольт. Вы писали что больше 3 нельзя подавать на ардуину....Тоесть, в моём случае - не вариант? Сейчас разобрался в правильной схеме - там же тоже пины с питанием нужно соединять....Или через резисторы это можно? 10 кОм подойдут для схемы на этой картинке?
У этой схемы нет аппаратного подавления дребезга контактов. Мне кажется, лучше делать то, что надежнее, а не то, что проще. Тем более, что дребезг усиливается в процессе эксплуатации - может оказаться, что пока вы отлаживаете макет, дребезг не будет серьезно мешать, а потом, когда устройство будет закончено, распаяно, помещено в корпус, начнет проявляться дребезг. Кстати, Вы бы для начала выяснили, что там реально распаяно на плате модуля.
По поводу 3.3 В на ножках - можно, как совеовали выше, поставить дополнительные резисторы на землю. Можно запитать энкодер от стабилизатора Ардуины (тем более, что остальная периферия у Вас питается от 5 В). Если ток потребления хотя бы приближается к 800 мА (я бы сказал, порядка половины от этой величины), однозначно нудно переходить на питание от внешнего стабилизатора (а не испытывать судьбу).
Насчёт того чем запитывать энкодер (ардуиновским питанием или внешним) : да может в итоге я и остановлюсь на ардуиновском. Дело не в этом. Мне сейчас нужно научиться запитываться внешним питанием. А энкодер это будет или светодиодная матрица - не так важно. Подавление дребезга на данном этапе - задача не особо актуальная, это уже, скажем так, финишная шлифовка. Хотя, безусловно, по возможности воспользуюсь правильной схемой.
Так? https://prnt.sc/iyobbd
В общем случае - если вы подключаете к одному устройству другое, взаимодействующее с первым, устройство, то соединяйте их земли. Далее уже частности - согласование уровней, чтобы одно устройство не спалило другое. Или полная развязка, чтобы не завалило помехами по земле.
почти заработало. Подключил так https://prnt.sc/iyobbd
энкодер такой http://prntscr.com/iyxzjr (там уже свои резисторы стоят, моя схема это не учитывает)
Против часовой кручу - всё работает как надо. По часовой - энкодер прыгает на месте (плс/минус одно значение) Что это может быть?
Насчёт того чем запитывать энкодер (ардуиновским питанием или внешним) : да может в итоге я и остановлюсь на ардуиновском. Дело не в этом. Мне сейчас нужно научиться запитываться внешним питанием. А энкодер это будет или светодиодная матрица - не так важно. Подавление дребезга на данном этапе - задача не особо актуальная, это уже, скажем так, финишная шлифовка. Хотя, безусловно, по возможности воспользуюсь правильной схемой.
Так? https://prnt.sc/iyobbd
1. Есть определенные правила. Если их придерживаться, можно считать, что есть гарантии, что все будет работать нормально. Кроме того, обычно предусматривается некоторое количество защит, благодаря которым в некоторых случаях нарушение правил не приводит к выходу устройства из строя. В общем, если бы этих защит не существовало, свой контроллер Вы бы уже спалили.
Тем не менее, правил следует придерживаться. Иначе рано или поздно, возможно, при совершенно незначительном изменении условий (в конкретном случае, например, при изменении номиналов резисторов) схнма перестанет работать. Притом, - необратимо.
Поэтому запомните и никогдла не нарушайте: не следует подавать ни на какой пин контроллера напряжение выше 3.3 В. Т.е. схему нужно переделывать: либо существующую схему питать от 3.3В, либо добавлять еще пару резисторов на землю, как рекомендовали выше.
2. На Вашем модуле уже, скорее всего, распаяна пара резисторов. Не знаю, учли ли Вы это в своей схеме.
3. Насчет финишной шлифовки - я бы не был столь категоричным. При условии, что Вам нужна хоть какая-то работоспособность. Т.е. для защиты от дребезга необходимо предпринимать какие-то меры. Здесь возможны варианты, в частности несколько вариантов программного подавления дребезга. Т.е. работоспособность схемы зависит от того, как программно осуществляется взаимодействие с ней. Если же схема аппаратно подавляет дребезг, то выбор допустимых программных решений существенно расширяется.
почти заработало. Подключил так https://prnt.sc/iyobbd
энкодер такой http://prntscr.com/iyxzjr (там уже свои резисторы стоят, моя схема это не учитывает)
Против часовой кручу - всё работает как надо. По часовой - энкодер прыгает на месте (плс/минус одно значение) Что это может быть?
Вполне возможно, тот самый дребезг, который для Вас пока неактуален.
заработало наконец-то))), всем спасибо.
часть изначальной проблемы осталась: при подключении SD-модуля к SPI, Native USB перестаёт работать (перестаёт определяться виндой)
от модуля все провода(кроме CS) тяну в spi в центре ардуины
Нашёл тему http://forum.arduino.cc/index.php?topic=172631.0 которая натолкнула на мысль что по native usb передаётся spi. И чтобы задействовать нужное устройство нужно переключить на нужное spi устройство в коде. Что-то типо такого SPI.setDataMode(SPI_MODE1); Я прав?
Судя по рисунку, у Вас 5-вольтовый модуль. Т.е. для SD-карты нужны сигналы и питание 3.3В, поэтому для сопряжения с 5-вольтовыми контроллерами там куча дополнительной обвязки, которая дл 3.3-вольтовой логики не нужна.
Но, на самом деле, ситуация намного хуже. Не знаю, как конкретно Ваш модуль, но у китайцев часто попадаются неправильно сделанные модули. Неправильность заключается в том, что преобразователи уровня никогда не отключаются от шины (хотя должны). Поэтому хотя сама карта, вроде работает, подключить более ни одного устройства SPI не получается.
Выход простой - использовать либо 3.3-вольтовый модуль без всяких дополнительных преобразователей, либо вообще использовать не модуль, а вместо него переходник, скажем, с micro-SD на SD, и к нему просто подпаивать провода. Естественно, это допустимо только с 3.3-вольтовым контроллером, каковым и является Ардуино Дуе.
++++ сделал как на картинке - всё работает. спасибо