Форум РадиоКот https://radiokot.ru/forum/ |
|
Не корректная работа I2C на F103C6T6A (INA219) https://radiokot.ru/forum/viewtopic.php?f=59&t=186373 |
Страница 1 из 2 |
Автор: | DataLife [ Сб янв 14, 2023 00:09:25 ] |
Заголовок сообщения: | Не корректная работа I2C на F103C6T6A (INA219) |
Друзья, прошу помощи. Делаю "показометр" Вольт-Амперметр для ЛБП. Вернее уже сделал. Но есть нюанс... Суть - замер тока через INA219 Изначально программу писал под F103C8T6 (синяя таблетка), саму плату развёл и заказал отдельно чипы C6T6A с Али. Они самые дешёвые и по "начинке" мне максимально подходят. Так вот, на С6Т6А нормально не обнуляются показания амперметра при отсутствии нагрузки, при напряжении на выходе ЛБП больше 10 Вольт (примерно) появляется 1, а дальше и 2-3 мА. Хотя на С8Т6 и даже на F401CCU6 - всё работает отлично! Чипы 99.9% оригинальные. Распаял в две платы, думал брак в микросхеме INA219 - нет, "погрешность" всё равно вылезает. Сам замер +/- точный. В холостую только проявляются симптомы. Шунт 0,01 Ом. Пробовал его замыкать, пробовал замыкать токоизмерительные ноги на микросхеме - не помогает, не обнуляется. Так же, замечен "накопительный эффект": если подключить нагрузку на несколько минут, а потом снять её - "холостых" миллиамепр становится больше. 4-5-6 мА ... Использую связку Куб_МХ 6.5.0 и Кеил 5.36 Неужели проблема именно в чипах СТМ? PS. заливал проекты созданные кубом как для С6Т6А, так и для С8Е6 - эффекту ноль. Основная программа и библиотеки - для всех чипов, что я пробовал - просто копировал, то есть они одинаковые и не в них проблема (скорее всего). PS2. так же на шине I2C висит дисплей LCD1602 - работает корректно. Пробовал стандартную и "быструю" частоту шины - нет результата. PS3. Работает от встроенного генератора частоты. При тестах других чипов - так же использовал встроенный генератор. |
Автор: | Martian [ Сб янв 14, 2023 00:32:59 ] |
Заголовок сообщения: | Re: Не корректная работа I2C на F103C6T6A (INA219) |
совершенно непонятно, причём тут некорректная работа и2ц |
Автор: | MLX90640 [ Сб янв 14, 2023 09:39:14 ] |
Заголовок сообщения: | Re: Не корректная работа I2C на F103C6T6A (INA219) |
Если есть сомнения в работе I2C, подключите логический анализатор и проверьте приходящие и отправляемые байты напрямую анализатором с шины. По этим результатам уже и будет видно, где искать дальше. |
Автор: | u37 [ Сб янв 14, 2023 22:42:33 ] |
Заголовок сообщения: | Re: Не корректная работа I2C на F103C6T6A (INA219) |
DataLife, я бы мог долго и нудно объяснять, почему не стоит использовать F1 и ее аппаратный I2C, но вы всё это проигнорируете. Посему кратко - поставьте программный I2C (ногодрыг), можете на тех-же ногах. В следующий раз лучше использовать процессоры, где эти проблемы уже исправлены. Недавно взял G030, пока только положительные впечатления, особенно понравилось потребление и бережное отношение к "ногам". |
Автор: | Eddy_Em [ Сб янв 14, 2023 22:54:39 ] |
Заголовок сообщения: | Re: Не корректная работа I2C на F103C6T6A (INA219) |
почему не стоит использовать F1 и ее аппаратный I2C И почему же? Вот честно! Почему у меня работает? Может, потому что я внимательно прочитал мануал и эррату? DataLife, код в строгом соответствии с алгоритмом из мануала? Нет проблем с другой периферией, описанных в эррате? Вот, например, мой простенький i2cscan: сканирует шину и позволяет читать/писать. Только если будешь брать код, там у меня ошибка в I2Cscan: нельзя i2c_7bit_send(NULL, 0), это может привести к ошибке в устройстве (и оно "подвесит" шину). Правильней — как здесь: просто без адресации попытаться 1 байт считать. Да, если в F103 сделать работу с I2C через DMA, должно быть меньше проблем, чем блокирующие вызовы использовать. Правда, всю преамбулу все равно придется ручками дергать (как у меня для G0). |
Автор: | DataLife [ Вс янв 15, 2023 00:10:12 ] |
Заголовок сообщения: | Re: Не корректная работа I2C на F103C6T6A (INA219) |
u37, читал, что в серии F1 интерфейс I2C реализован криво, но я шёл по пути наименьшего потребления денег. Брал дешёвый МК. Попробую программный I2C, спасибо. По поводу МК - G030 имеет всего один АЦП, мне нужно два. с ДМА я ещё не подружился, чтобы опрашивать каналы. И, например, этот G030 имеет другую распиновку (хоть и действительно лучшую, чем у других, всего один вход питания). У меня уже есть десяток плат с разводкой под типичный F103C8T6. На будущее - задумаюсь, спасибо. Вероятно, я как начинающий в этом всём - писал на всем нелюбимом HAL... Именно для I2C использовал библиотеку Adafruit_INA219. Eddy_Em, спасибо за ссылки на библиотеки и решения. Пока план действий на будущее накидал. Буду пробовать! |
Автор: | u37 [ Вс янв 15, 2023 00:33:09 ] |
Заголовок сообщения: | Re: Не корректная работа I2C на F103C6T6A (INA219) |
"один АЦП, мне нужно два" Можно поинтересоваться, в чем выражается эта нужда? И по INA219. Я использовал INA226. Диапазон и результирующий уровень шума соответствует документации. С ним появляется другая проблема - как найти адекватный шунт. )) |
Автор: | Eddy_Em [ Вс янв 15, 2023 00:37:08 ] |
Заголовок сообщения: | Re: Не корректная работа I2C на F103C6T6A (INA219) |
DataLife, вы хочите DMA? Их есть у меня! А вот так в массиве из девяти последних значений берется медиана и выдается пользователю. Но, конечно, F103 — самый убогий блин из арсенала STM32. |
Автор: | Martian [ Вс янв 15, 2023 00:46:30 ] |
Заголовок сообщения: | Re: Не корректная работа I2C на F103C6T6A (INA219) |
Вся кривизна описана в еррата. Её и надо читать. Остальная кривизна - в голове и руках "писателей" и читателей. Все тупо копируют софтовый, потому что кто-то где-то когда-то не смог аппаратный запустить и расплакался об этом на весь интернет... |
Автор: | neid [ Вс янв 15, 2023 08:57:20 ] |
Заголовок сообщения: | Re: Не корректная работа I2C на F103C6T6A (INA219) |
Имел дело плотно с ina226, но с AVR. По своему опыту выкини Адафрутовскую библиотеку, и напиши свою. Проблема мне кажется вся в этом, а не i2c мк stm32f103. Мог бы и портянку свою выложить, что там делаешь, не думаю что там такой уж серьезный проект, люди давно б уже сказали в чем ошибся. |
Автор: | DataLife [ Вс янв 15, 2023 17:44:39 ] |
Заголовок сообщения: | Re: Не корректная работа I2C на F103C6T6A (INA219) |
neid, я бы свалил всю вину на библиотеку или тот же HAL, но на F103C8T6 и F401CCU6 - работает. А именно на F103C6T6A - нет. u37, как я говорил - я ещё очень на Вы с ДМА... Знаю, что штука нужная, полезная то сё, но пока и нужды в ней не было и времени осваивать. Всему своё время, наверное. У меня просто два места, где нужно замерять напряжение (непосредственно для "показометра" и температура радиатора), поэтому и два АЦП. На моём уровне знаний - мне так проще. Сейчас жду новый паяльный фен, перепаяю из одной синей пилюли F103C8T6 и заменю на F103C6T6A - попробую записать от внешнего кварца с платы. Может что-то прояснится. Может у меня где-то косяк в разводке самого питания МК, хотя всё по ДатаШиту и по образу и подобию плат типа блуПил. ЗЫ. попробовал уменьшить подтягивающие резисторы на SDA/SCL до 1к - не помогло. |
Автор: | Eddy_Em [ Вс янв 15, 2023 18:30:41 ] |
Заголовок сообщения: | Re: Не корректная работа I2C на F103C6T6A (INA219) |
DataLife, возможна ситуация, что на восьмерке чудом обошлось, а на шестерке конкретный баг и выполз. Первый шаг: выкинуть кал и пользоваться только заголовочными файлами от CMSIS. Второй шаг: либо тщательно проверить адафрутовскую библиотеку, либо тоже выкинуть. Я, кстати, было дело, находил в адафрутовских баги и просто мелкие косяки. А оно и понятно: любой продукт с претензией на универсальность априори будет тормозным и дырявым. |
Автор: | Martian [ Вс янв 15, 2023 18:38:43 ] |
Заголовок сообщения: | Re: Не корректная работа I2C на F103C6T6A (INA219) |
И третий шаг - подцепить заведомо исправную еепромку и посмотреть обмен с ней. |
Автор: | Sergi [ Вс янв 15, 2023 20:17:51 ] |
Заголовок сообщения: | Re: Не корректная работа I2C на F103C6T6A (INA219) |
DataLife - У одного АЦП есть несколько (8-19) каналов. Не обязательно использовать отдельные АЦП. Однажды написал функцию опроса каналов с ДМА и долго пользовал пока Eddy_Em не подкинул медианный фильтр. Теперь все стало еще красивее. Иногда единица в младшем разряде появляется из-за прогрева. А так при комнатной температуре отстраиваю с точностью 0.1%. Для ЛБП вполне хватает. |
Автор: | DataLife [ Вс янв 15, 2023 21:01:48 ] |
Заголовок сообщения: | Re: Не корректная работа I2C на F103C6T6A (INA219) |
Eddy_Em, прошерстил всю библиотеку Адафрута: лично у меня нет к ней претензий, всё реализовано очень понятно и просто. Через HAL_I2C_Mem_Write/Read. Тут реально какой-то внутренний косяк на шине. Пока это писал, пришла в голову идея повесить на шину вообще другой дисплей (ну мало ли). Есть SSD1306 под рукой. Хотя снова... на C8T6 даже с LCD1602 нет проблем ... ![]() Sergi, да, знаю. Но вот с ДМА нужно подружиться. Вижу, что неизбежно в обозримом будущем придётся... Спасибо. PS. так как ооочень не хочется перепаивать МК в уже "работающей" плате, то ищу выходы. А что если таки реализовать обмен данными с INA219 через ДМА? Может уйдёт косяк (Eddy_Em, ещё раз спасибо за мысли). В еррате вроде пишут, что может помочь... И для меня некое обучение с прикладным моментом будет. Правильно я понимаю суть? Вместо HAL_I2C_Mem_Read, которая возвращает значение некой переменной, я вставляю HAL_I2C_Master_Receive_DMA, которая так же это делает, а о готовности я смотрю в колбэк и забираю данные, ставлю флаги и тп... Но что-то не пойму... Мне нужно забирать данные из регистра, который имеет адрес... Кароче обычно идёт обращение к устройству Адрес устройства - Адрес памяти.... А в функции ДМА только адрес устройства: Код: HAL_StatusTypeDef HAL_I2C_Master_Receive_DMA (I2C_HandleTypeDef* hi2c, uint16_t DevAddress, uint8_t* pData, uint16_t Size); Или я что-то не так понимаю?HAL_StatusTypeDef HAL_I2C_Master_Transmit_DMA (I2C_HandleTypeDef* hi2c, uint16_t DevAddress, uint8_t* pData, uint16_t Size); UPD: нашёл HAL_I2C_Mem_Read_DMA ![]() |
Автор: | xDriver [ Пт фев 03, 2023 19:05:50 ] |
Заголовок сообщения: | Re: Не корректная работа I2C на F103C6T6A (INA219) |
решилась проблема? в сети полно жалоб на F103C6T6A с али, то одно не работает,то другое. может все таки перемаркировка какого нибудь GD? |
Автор: | Martian [ Пт фев 03, 2023 19:35:08 ] |
Заголовок сообщения: | Re: Не корректная работа I2C на F103C6T6A (INA219) |
А что, у GigaDevice то одно не работает, то другое? набрали отбраковки на помойке вот и вся проблема. |
Автор: | shonty [ Вс фев 25, 2024 16:36:13 ] |
Заголовок сообщения: | Re: Не корректная работа I2C на F103C6T6A (INA219) |
DataLife писал(а): нормально не обнуляются показания амперметра при отсутствии нагрузки Сейчас на руках 5 модулей INA226, 2 из одной партии, 3 из другой.По классификации из "популярной" статьи "INA226 хорошие и плохие", то 2 "хорошие" и 3 "плохие".. Таки вот: "хорошие" модули: ампераж при отсутствии нагрузки не обнуляется, постоянно скачут цифры. А "полохие" почти в нулях. |
Автор: | AVK [ Вт дек 03, 2024 07:49:02 ] |
Заголовок сообщения: | Re: Не корректная работа I2C на F103C6T6A (INA219) |
Я тут тоже начал ковырять INA219. Все работает нормально, но почему то невозможно прочитать все регистры за раз. Только по два, или по одному 16ти битному. Ну тоесть: старт, адрес, адрес регистра, повстарт, адрес на чтение и читается только два байта, если читать дальше эти байты просто повторяются. По идее должны читаться дальше регистры. |
Страница 1 из 2 | Часовой пояс: UTC + 3 часа |
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group http://www.phpbb.com/ |