![[personal profile]](https://www.dreamwidth.org/img/silk/identity/user.png)
На базе покатушек по google earth решил сделать тренажер для Flight Gear. После прельстиво и любовно (с) подпаянных кнопочек и РУДа передача по I2C отказалась работать - если при отсоединенных магнитометрах таки определялось то что они отсоединены и выдавалось false по вызову подпрограммы
- то сейчас ардуина тупо виснет намертво. Причем это только для одного канала подключения магнитометра, для другого ОК. По электрическим характеристикам они не отличаются. Транзисторы целы.
Вывод №1 - не нужно трогать то, что работает, особенно если ты тупой ардуинщик
Вывод №2 - скорее всего, это вот это -
". На момент поста использовал 47к с обеих сторон, теперь поменял резисторы со стороны EV3 на 30к и оно стало +- стабильно работать. Кроме того, подтяжка теперь идёт не от 4.3в, а от 5в (опять же, это всё со стороны EV3).
Но! Работает стабильно лишь с подключенным осциллографом (щупы осциллографа ISDS 205B подключены к SDA SCL линиям EV3) . Если отключить щупы от этих контактов, то связь вновь барахлит. Ещё заметил, что связь нормализуется при касании пальцев к этим линиям. Если убрать Щупы, то опять начинаются проблемы (до замены резисторов проблемы были всегда)."
(с) https://forum.cxem.net/index.php?/topic/224699-%D0%BF%D1%80%D0%BE%D0%B1%D0%BB%D0%B5%D0%BC%D1%8B-%D0%B2-%D1%80%D0%B0%D0%B1%D0%BE%D1%82%D0%B5-i2c/
Потому что -
Некоторые особенности применения AVR в схемах У большинства выводов МК имеется встроенный подключаемый "подтягивающий" (т. е. подсоединенный к шине питания) резистор, что, казалось бы, решает одну из обычных схемотехнических проблем, когда наличие такого резистора требуется для подключения двухвыводных кнопок или выходов с "открытым коллектором". Однако в критичных случаях необходим внешний резистор сопротивлением 2–5 кОм (в критичных для потребления случаях до 10–30 кОм).
"Подтягивающий" резистор следует устанавливать не только на выводе /RESET (о чем пойдет речь в главе 2), но и в том случае, когда выводы SCK, MOSI и MISO соответствующих портов используются для программирования и подключены к программирующему разъему ISP (см. главу 5), а также по выводам внешних прерываний, если они задействованы. Если эти выводы не "подтягивать" к напряжению питания дополнительными резисторами (хотя это и не оговорено в технической документации), то не исключены ложные срабатывания внешних прерываний, перезапуск системы, а при очень мощных помехах — даже порча программы в памяти программ. С другой стороны, когда выводы программирования служат и в качестве обычных портов, сконфигурированных на выход, а в устройстве применяются режимы энергосбережения, наличие "подтягивающих" резисторов может привести к лишнему потреблению тока (при установке вывода в логический ноль через резистор потечет ток от источника питания на вход МК). Если реализован один из режимов энергосбережения, то нужно тщательно проанализировать схему, чтобы исключить ситуации, при которых через эти резисторы протекает ток. Также всегда следует устанавливать внешние резисторы при работе выводов МК на общую шину, как в интерфейсе I2C (или просто при подсоединении входа МК к выходу другого устройства с открытым коллектором, например, мониторов питания, описанных в главе 3), при подключении к двухвыводным кнопкам (особенно при наличии внешнего прерывания, см. главы 4 и 5). Сопротивление встроенного резистора (на самом деле представляющего собой, разумеется, полевой транзистор) в таких случаях слишком велико для того, чтобы электромагнитные помехи ("наводки") на нем эффективно "садились".
Микросхемы AVR, как и всякая КМОП-логика, благодаря высокому порогу срабатывания эффективно защищены от помех по шине "земли". Однако они ведут себя гораздо хуже при помехах по шине питания. Поэтому не забывайте о развязывающих конденсаторах, которые нужно устанавливать непосредственно у выводов питания (керамические 0,1–0,5 мкФ), а также про качество сетевых выпрямителей и стабилизаторов.
(с) Ревич Ю. В. Практическое программирование микроконтроллеров Atmel AVR на языке
ассемблера.
Хотя по идее на плате GY-271 все должно быть ужэ сделано с развязыванием.
bool detectHMC5883L() { Wire.beginTransmission(HMC5883L_ADDR); //open communication with HMC5883 Wire.write(10); //select Identification register A Wire.endTransmission(); Wire.requestFrom(HMC5883L_ADDR, 3); if(3 == Wire.available()) { char a = Wire.read(); char b = Wire.read(); char c = Wire.read(); if(a == 'H' && b == '4' && c == '3') return true; } return false; }
- то сейчас ардуина тупо виснет намертво. Причем это только для одного канала подключения магнитометра, для другого ОК. По электрическим характеристикам они не отличаются. Транзисторы целы.
Вывод №1 - не нужно трогать то, что работает, особенно если ты тупой ардуинщик
Вывод №2 - скорее всего, это вот это -
". На момент поста использовал 47к с обеих сторон, теперь поменял резисторы со стороны EV3 на 30к и оно стало +- стабильно работать. Кроме того, подтяжка теперь идёт не от 4.3в, а от 5в (опять же, это всё со стороны EV3).
Но! Работает стабильно лишь с подключенным осциллографом (щупы осциллографа ISDS 205B подключены к SDA SCL линиям EV3) . Если отключить щупы от этих контактов, то связь вновь барахлит. Ещё заметил, что связь нормализуется при касании пальцев к этим линиям. Если убрать Щупы, то опять начинаются проблемы (до замены резисторов проблемы были всегда)."
(с) https://forum.cxem.net/index.php?/topic/224699-%D0%BF%D1%80%D0%BE%D0%B1%D0%BB%D0%B5%D0%BC%D1%8B-%D0%B2-%D1%80%D0%B0%D0%B1%D0%BE%D1%82%D0%B5-i2c/
Потому что -
Некоторые особенности применения AVR в схемах У большинства выводов МК имеется встроенный подключаемый "подтягивающий" (т. е. подсоединенный к шине питания) резистор, что, казалось бы, решает одну из обычных схемотехнических проблем, когда наличие такого резистора требуется для подключения двухвыводных кнопок или выходов с "открытым коллектором". Однако в критичных случаях необходим внешний резистор сопротивлением 2–5 кОм (в критичных для потребления случаях до 10–30 кОм).
"Подтягивающий" резистор следует устанавливать не только на выводе /RESET (о чем пойдет речь в главе 2), но и в том случае, когда выводы SCK, MOSI и MISO соответствующих портов используются для программирования и подключены к программирующему разъему ISP (см. главу 5), а также по выводам внешних прерываний, если они задействованы. Если эти выводы не "подтягивать" к напряжению питания дополнительными резисторами (хотя это и не оговорено в технической документации), то не исключены ложные срабатывания внешних прерываний, перезапуск системы, а при очень мощных помехах — даже порча программы в памяти программ. С другой стороны, когда выводы программирования служат и в качестве обычных портов, сконфигурированных на выход, а в устройстве применяются режимы энергосбережения, наличие "подтягивающих" резисторов может привести к лишнему потреблению тока (при установке вывода в логический ноль через резистор потечет ток от источника питания на вход МК). Если реализован один из режимов энергосбережения, то нужно тщательно проанализировать схему, чтобы исключить ситуации, при которых через эти резисторы протекает ток. Также всегда следует устанавливать внешние резисторы при работе выводов МК на общую шину, как в интерфейсе I2C (или просто при подсоединении входа МК к выходу другого устройства с открытым коллектором, например, мониторов питания, описанных в главе 3), при подключении к двухвыводным кнопкам (особенно при наличии внешнего прерывания, см. главы 4 и 5). Сопротивление встроенного резистора (на самом деле представляющего собой, разумеется, полевой транзистор) в таких случаях слишком велико для того, чтобы электромагнитные помехи ("наводки") на нем эффективно "садились".
Микросхемы AVR, как и всякая КМОП-логика, благодаря высокому порогу срабатывания эффективно защищены от помех по шине "земли". Однако они ведут себя гораздо хуже при помехах по шине питания. Поэтому не забывайте о развязывающих конденсаторах, которые нужно устанавливать непосредственно у выводов питания (керамические 0,1–0,5 мкФ), а также про качество сетевых выпрямителей и стабилизаторов.
(с) Ревич Ю. В. Практическое программирование микроконтроллеров Atmel AVR на языке
ассемблера.
Хотя по идее на плате GY-271 все должно быть ужэ сделано с развязыванием.