Massduino md328d и пьезодатчик

vladitot
Offline
Зарегистрирован: 07.02.2018

Здравствуйте! Меня можно считать новичком. Купил плату massduino md328d, пытаюсь завести на аналоговый вход пьезодатчик через параллельно подключенный резистор на 1 МОм. К сожалению, не выходит. На ней стоит CH340

Пытался подключить, например, по такой схеме: https://cdn.instructables.com/F1C/KMPX/I5UX98B1/F1CKMPXI5UX98B1.LARGE.jpg

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

Если собрать по схеме, то сколько ни тыкай - показывает ноль.

Вопрос к возсожным обладателям подобной платы: у меня недостаточно прямые руки, или этот контроллер работает с пьезами иначе, чем оригинальная ардуино? Стоит ли идти покупать оригинальную Uno ради эксперимента, или можно завести на этой плате?

alex_r61
Offline
Зарегистрирован: 20.06.2012

Там АЦП до 16 бит, но чтобы задействовать больше 10бит нужно поставить поддержку в IDE.

http://mypractic.ru/urok-54-specifika-programmirovaniya-platy-massduino-...

dimax
dimax аватар
Offline
Зарегистрирован: 25.12.2013

vladitot, народ писал что на этой плате  есть перепутанные пины. Так что стоит попробовать воткнуть в другие входы. А вообще, кто надоумил вас купить это говнище? наверно у тех стоит и спрашивать :) И ещё -схема включения это хорошо, а где остальная инфа? Стоит ли аддон в IDE, какой скетч заливали. Реагирует ли монитор порта просто на подключение +3,3/+5 к аналоговому входу.

 

vladitot
Offline
Зарегистрирован: 07.02.2018

Спасибо за ответы!

dimax пишет:

vladitot, народ писал что на этой плате  есть перепутанные пины. Так что стоит попробовать воткнуть в другие входы. А вообще, кто надоумил вас купить это говнище? наверно у тех стоит и спрашивать :) И ещё -схема включения это хорошо, а где остальная инфа? Стоит ли аддон в IDE, какой скетч заливали. Реагирует ли монитор порта просто на подключение +3,3/+5 к аналоговому входу.

 

const int sensorPin = 0;
const int ledPin = 11;
const int threshold = 1000;

void setup()
{
  pinMode(ledPin, OUTPUT);
}

void loop()
{
  int val = analogRead(sensorPin);
  if (val >= threshold)
  {
    digitalWrite(ledPin, HIGH);
    delay(40);
    digitalWrite(ledPin, LOW);
    delay(40);
  }
  else
    digitalWrite(ledPin, LOW);
}

Заливал такой и подобный скетч, например, менял адрес порта вместо "0" на "А0", менял чувствительность.
Я завожу это все дело на маке, видимо из-за этого у меня в мониторе порта выводятся кракозябры вместо цифр и букв, но я завел это дело на лампочке.

С точки зрения того, как реагирует плата:

У меня нашелся только переменный резистор на 1 МОм. Если я его выставляю на 1 МОм, то при подключении земля-А0 на резисторе есть напряжение около 4,5 вольт. Я почему то полагаю, что это неправильно. Таким макаром подключенный светодиод у меня в соответствии со скетчем постоянно моргает. Если же я выкручиваю резистор на минимальное сопротивление (ну вроде как), то ток пропадает.. Впрочем, опять таки, не могу не грешить на прямоту рук..

Ну и вопрос в догонку, на этой плате заведется ли без проблем такая схема? http://roboshop.spb.ru/arduino/xDuino-Uno
 

dimax
dimax аватар
Offline
Зарегистрирован: 25.12.2013

vladitot пишет:

Я завожу это все дело на маке, видимо из-за этого у меня в мониторе порта выводятся кракозябры вместо цифр и букв, но я завел это дело на лампочке.

Вы бросили одну проблему что б разобраться с другой, в итоге не разобрались ни с одной ни с другой. Это не професиональный подход. Сначала сделайте вывод в монитор порта, без него вообще дальше мигания светодиодом не продвинитесь.

vladitot пишет:

У меня нашелся только переменный резистор на 1 МОм. Если я его выставляю на 1 МОм, то при подключении земля-А0 на резисторе есть напряжение около 4,5 вольт. Я почему то полагаю, что это неправильно.

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

 

vladitot
Offline
Зарегистрирован: 07.02.2018

dimax пишет:

vladitot пишет:

Я завожу это все дело на маке, видимо из-за этого у меня в мониторе порта выводятся кракозябры вместо цифр и букв, но я завел это дело на лампочке.

Вы бросили одну проблему что б разобраться с другой, в итоге не разобрались ни с одной ни с другой. Это не професиональный подход. Сначала сделайте вывод в монитор порта, без него вообще дальше мигания светодиодом не продвинитесь.

vladitot пишет:

У меня нашелся только переменный резистор на 1 МОм. Если я его выставляю на 1 МОм, то при подключении земля-А0 на резисторе есть напряжение около 4,5 вольт. Я почему то полагаю, что это неправильно.

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

 

 

Понял, займусь вопросом и отпишусь.

vladitot
Offline
Зарегистрирован: 07.02.2018

Спасибо участникам за ценные наводки!

Мне в конечном итоге удалось все подключить. Проблема действительно есть в этой самой массдуине. Заключается прежде всего в том, что скорость работы последовательного порта не соответствует реальности, а именно: если выставить 9600 в прошивке, то в компьютере на port-listener нужно выставить скорость в 4 раза меньшую. Ох уж эти китайцы. Ставим 2400 - и вуаля, можем принимать данные с платы. Вдруг кому пригодится.

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

andriano
andriano аватар
Offline
Зарегистрирован: 20.06.2015

vladitot пишет:

Проблема действительно есть в этой самой массдуине. Заключается прежде всего в том, что скорость работы последовательного порта не соответствует реальности, а именно: если выставить 9600 в прошивке, то в компьютере на port-listener нужно выставить скорость в 4 раза меньшую. Ох уж эти китайцы. Ставим 2400 - и вуаля, можем принимать данные с платы. Вдруг кому пригодится.

А сколько millis() за секунду она отщелкивает?

vladitot
Offline
Зарегистрирован: 07.02.2018

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

andriano
andriano аватар
Offline
Зарегистрирован: 20.06.2015

Чисто программного решения этой задачи не существует. Должен быть какой-то источник временных интервавлов снаружи. Это либо RTC, либо просто выдавать, скажем в порт (или мигать светодиодом) раз в секунду и по секундомеру замерить количество импульсов.

В общем - это все для того, чтобы понять, проблема только с портом, либо у МК вообще сдвинута вся шкала времени.

vladitot
Offline
Зарегистрирован: 07.02.2018

Свежие дрожжи подъехали! Я тут порылся по интернетам и нашел на сайте производителя так называемый support package.

Установил (на мак) не без маленького геморроя с путями к файлам. Но теперь у меня в списке плат появилась сама massduino md328d. Выровнялась скорость последовательного порта(теперь не надо делить на 4), а также явно стабилизировались показания, приходящие на аналоговый порт.

Остался единственный вопрос, почему соединенные накоротко gnd + a0 дают сигнал равный "0", а полное отсутствие соединения дает 1023?

Это на всех платах так? Или только мне так повезло с подобной "инверсией"?

Ссылку на материалы по плате прилагаю(вкладка "download" под картинкой устройства). http://www.inhaos.com/product_info.php?products_id=156

P.S. до этого плату прошивал как Arduino/Genuino Uno

andriano
andriano аватар
Offline
Зарегистрирован: 20.06.2015

vladitot пишет:

Остался единственный вопрос, почему соединенные накоротко gnd + a0 дают сигнал равный "0", а полное отсутствие соединения дает 1023?

Это на всех платах так? Или только мне так повезло с подобной "инверсией"?

А какое поведение Вы сочли бы нормальным, и что именно называете "инверсией"?

dimax
dimax аватар
Offline
Зарегистрирован: 25.12.2013

vladitot пишет:

Свежие дрожжи подъехали! Я тут порылся по интернетам и нашел на сайте производителя так называемый support package.

Я у вас ещё в #2, стоит ли addon в IDE. Этот МК левой конторы вообще без  даташитов и каких-либо вразумительных  описаний внутренней структуры, и до какой стеени он совместим с мегой328 -известно только его производителям.   Без аддона вообще ничего не обязано было работать.

vladitot
Offline
Зарегистрирован: 07.02.2018

andriano пишет:

vladitot пишет:

Остался единственный вопрос, почему соединенные накоротко gnd + a0 дают сигнал равный "0", а полное отсутствие соединения дает 1023?

Это на всех платах так? Или только мне так повезло с подобной "инверсией"?

А какое поведение Вы сочли бы нормальным, и что именно называете "инверсией"?

да, я отвечу, какое бы я счёл нормальным поведение. Если коннекта нет - то ничего нет. 0.

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

если конечно ацп измеряет вольтаж. Наверное мне стоит уточнить, измеряется вольтаж ли?

andriano
andriano аватар
Offline
Зарегистрирован: 20.06.2015

vladitot пишет:

да, я отвечу, какое бы я счёл нормальным поведение. Если коннекта нет - то ничего нет. 0.

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

если конечно ацп измеряет вольтаж. Наверное мне стоит уточнить, измеряется вольтаж ли?

У Вас неверное представление о том, что должно быть.

При коротком замыкании на землю должен быть 0.

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

Проведите такой эксперимент:

- возьмите две батарейки, скажем, Кроны,

- батарейки между собой не соединяйте,

- подключите щуп вольтметра к "-" первой батарейки, другой - к "+": вольтметр покажет 9В,

- повторите со второй батарейкой,

- теперь один щуп подключите к "-" одной батарейки, а другой - к "-" другой. Что показывает вольтметр? 0В.

- переключите второй щуп на "+" второй батарейки, что теперь? Опять 0В.

А теперь объясните, как 0В - 0В = 9В?

Такое может быть?

Нет, такого быть не может.

Так в чем же подвох?

А подвох в том, что используемый Вами вольтметр не способен различить между содой два принципиально разные состояния:

1. На вход подан 0 вольт,

2. На входе обрыв.

ПОчему так, я сейчас объяснять не буду, но факт в том, что "неизвестно" - "неизвестно" вполне может равняться ( Аольтам, а вот 0 - 0 не может. Т.е. проблема "0-0=9" - это проблема индикации вольтметра, которая к напряжению как таковому не имеет отношения.

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

Еще раз (повторение - мать учения): 0 Вольт - это конкретное значение напряжения, а обрыв - это отсутствия напряжения. Отсутствие и 0 - это совершенно различные вещи.