arduino + i2c + accelerometer = большие помехи
- Войдите на сайт для отправки комментариев
Знающие товарищи, подскажите пожалуйста с чем может быть связано огромные помехи возникающие при взаимодействием ардуины и датчика ускорнения через i2c шину.
Имею:
Sparkfun pro micro 3.3v - https://www.sparkfun.com/products/10999
Sparkfun Triple Axis Accelerometer Breakout - ADXL345 - https://www.sparkfun.com/products/9836
Обычный шлейф, оставил 4ре контакта.
По уму подключил шлейф - крайние контакты на шлейфе SDA и SCL, земля и vcc - 2ой и 3ий провода соответственно. Шлейф длиной 30см.
Результат:
Все работает замечательно до тех пор пока я просто не подведу палец руки близко к чипу акселероментра (даже не дострагиваюсь), после чего прочитайть из акселерометра ничего не возможно (на то время когда палец находится над чипом). Или просто если подвести платку акселерометра к любой металлической детали - прочитать во время нахождения акс. в близости к металлической детали становится тоже невозможно.
Предыдущая конфигурация с китайской ардуиной и этим же датчиком работала прекрасно. Но возможно что-то случилось за вермя замены китайской ардуины на спаркфан. У меня подозрение на то что возмоможно платка акселерометра намагнитилась, поскольку она лежала рядом с природным магнитом какое-то время (хотя я не уверен что был реальный контакт).
В чем может быть дело?
>В чем может быть дело?
Подтягивающие резисторы к питанию (R1,R2 на картинке), для линий SDA, SCL не забыли? (в тексте вы нигде про них не упомянули).
Если "не поможет" - показывайте код и давайте ссылки на библиотеки которые используете. Возможно "обратная ситуация" - используются встроенные подтягивающие. А они по 20k. И для 3-х вольтового питания они могут оказатся "слишком сильными". Линия не успевает востанавливаться. Возможно даже 10K будут "перебором", тогда можно до 4.7K попробовать понизить номинал.
Но "по описанию проблемы", все-таки больше похоже что "их нет вообще", чем "есть но перебор". Тем более в туториалах, почему-то, везде показанно подключение без них.
Спасибо за ответ.
Да, конечно подтягивающие есть. По 10кОм.
Забыл сказать что я пробовал подключать другой акселерометр, тоже по i2c, но со шлейфом 20см. Этот работает хорошо, без помех.
Если "не поможет" - показывайте код и давайте ссылки на библиотеки которые используете. Возможно "обратная ситуация" - используются встроенные подтягивающие. А они по 20k. И для 3-х вольтового питания они могут оказатся "слишком сильными". Линия не успевает востанавливаться. Возможно даже 10K будут "перебором", тогда можно до 4.7K попробовать понизить номинал.
Но "по описанию проблемы", все-таки больше похоже что "их нет вообще", чем "есть но перебор". Тем более в туториалах, почему-то, везде показанно подключение без них.
Использую эту библиотеку: http://www.i2cdevlib.com/devices/adxl345#source
Вообще происходит нечто странное. Не думал что влияние человесеской плоти может настолько влиять на помехи (при этом не качаясь до саомго чипа) :)
Да и спросто если подносишь к металлической поверхности происходит тоже самое.
И самое главное что если трогаешь шлейф то помех не возникает.
Вообще происходит нечто странное. Не думал что влияние человесеской плоти может настолько влиять на помехи (при этом не качаясь до саомго чипа) :)
Да и спросто если подносишь к металлической поверхности происходит тоже самое.
И самое главное что если трогаешь шлейф то помех не возникает.
Сама "человеческа плоть" - не может. Но в данном случае она выступает как антена которая ловит "помехи из эфира". Скорее всего 50 герц от проводки в стенах вокруг вас. Если вы уйдете куда-нибудь "далеко-далеко" в поле - возможно эффект и перестанет проявляется.
Можете еще попробовать снизить номинал подтягивающих до 4.7K, что-бы оно "сильнее притянулу" к питаю, авось менее чувствительно будет.
Можете попробовать заменить шлейф на витую пару. Взять кабель для Ethernet. Его и экрнированным можено найти. Шлейфы обычно используются для коротких растояний. Внутри экранированного корпуса.
А еще попробуйте померять, со стороны модуля, напрежение между землей и линией. Возможно у шлейфа сопротивление слишком большое (ну или сопротивление самого шлефва промеряйте) и к модулю добирается сигнал "слишком слабым".
Спасибо за советы. В итоге обнаружил пробой на плате акселерометра SCL контакта. Дорожка повредилась.
Кстати, что делают в таких случаях? Я пока аккуратно восстановил её оловом.
Спасибо за советы. В итоге обнаружил пробой на плате акселерометра SCL контакта. Дорожка повредилась.
Кстати, что делают в таких случаях? Я пока аккуратно восстановил её оловом.
Электроника - наука о контактах :)
Да, вот именно это и делают. Припоем "востанавливают". Обычно, когда плату изготавливают в домашних условиях, даже не ждут пока "дорожка повредится", а изначально все их "промазывают" припоем. Называется "лудить плату". Что-бы если были огрехи травления - снизить их катострофичность.
Черт, рано радовался. Все по-прежнему. Но такое чувство что помех меньше. Все-таки мне кажется что i2c тут ни при чем.
Может такое поведение быть из-за намагниченности? На плате акселерометра есть три SMD конденсатора. Могут ли они быть причиной, если намагнитились?
.
Не похоже. Если бы проблема была в "намагниченности", то поднесение руки вряд ли на что-то влияло. Да и по описанию, все-таки, намного больше похоже на "ловит помехи". Мне кажется если бы дело было в "намангиченности", то он бы "врал", а не "обижался и замолкал" (хотя, конечно может магнит и повредил чего). Так что все-таки i2c очень даже может быть "причем".
Но это можно "проверить", возмите короткий шлейф. в пару сантименторов. Если проблема "датчик поврежден", то длина шлейфа не должна ему помочь, а вот если на коротком "все заработает" - версию намагниченонсти точно можно откинуть.
Да и "починеная дорожка", раз вы говорите "стало меньше" говорит о том что уровня сигнала не хватает на линии. "Починили дорожку" - уменьшили сопротивление. Стало лучше "проходить".
Вообщем попробуйте
А еще, раз одна дорожка была повреждена. Просмотрите все дорожки. Не только "которые данные". Проверте не отвалился ли кто-то из конденсаторов между питанием и землей, на модуле. Может в питание помеха наводится, а кто-то из них "отвалился" и перестал ее фильтровать.
Ну и традиционное: померте тестером питание на модуле, не просаживается?
Кстати вот в родственной теме
http://arduino.ru/forum/obshchii/lcd-lovit-pomekhu-s-lampy-dnevnogo-svet...
AlexFisher хорошую мысль высказал (подтягивающий резистор переместить поближе к приемнику).
Так что можно попробовать не 10K заменять на 4.7K, а просто влепить по 10K и возле дуины, и возле модуля. Тогда, собственно и получится "потдягивающий" 5K, и расположен "близко ко всем".
Но это уже, конечно, какие-то "пляски с бубном". И если будут еще устройства подключатся - смотреть внимательно что-бы в итоге паралельное подключение всех подтягивающих не вылелось в слишком малый номинал.
Спасибо за советы.
Похоже что подтягивающие резисторы и вправду должны быть как можно ближе к датчику, я начал вспоминать что именно так у меня и было раньше.
Но сейчас вроде бы все работает и так, посмотрим как будет дальше...
Проверил сканером, ни на один адрес но не получил ответа.
Єто значить что часы дохлые?
Проверил сканером, ни на один адрес но не получил ответа.
Єто значить что часы дохлые?
Темой промахнулись?
Да, промахнулся :(