Перейти к содержанию
    

Как соединить STM32 через I2C через HAL-прерывания с AD7746?

Здравствуйте.

Надумал измерять расстояние комбинацией STM32-AD7746. AD7746 по счастливому стечению обстоятельств работает с I2C. Подскажите, как с помощью HAL-прерываний прописать общение обоих чипов?

Заранее спасибо.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

HAL-прерывания тут не нужны. Делаете так:

Берёте пачку любого из чипов STM32 или AD7746; выкладываете ими измеряемое расстояние (вплотную друг к другу!); считаете количество уместившихся чипов; при помощи даташита (или штангенциркуля) узнаёте размер корпуса чипа; умножаете на количество. Всё - расстояние получено.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

3 hours ago, bookmender said:

Подскажите, как с помощью HAL-прерываний прописать общение обоих чипов?

Ох, не с того вы начали. Начните с теории, и множество вопросов отпадут сами собой. Сейчас же в инете полно различных примеров для быстрого старта.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

16 minutes ago, haker_fox said:

Ох, не с того вы начали. Начните с теории, и множество вопросов отпадут сами собой. Сейчас же в инете полно различных примеров для быстрого старта.

Так ТС и пошел по пути быстрого старта - HAL & CUBE

Сейчас многие начинающие даже ни одной книжке по Си не читают, а так как-то по наитию действуют )))

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

5 часов назад, bookmender сказал:

Надумал измерять расстояние комбинацией STM32-AD7746. AD7746 по счастливому стечению обстоятельств работает с I2C. Подскажите, как с помощью HAL-прерываний прописать общение обоих чипов?

А вы нам расскажите, что надумали :).

 

Я сама раньше с AD7745 имела дело - он почти такой же, как ваш AD7746, только входов меньше. Но не с STM32 я его стыковала, а с X-Мегой.

Прерывания там действительно могут быть задействованы для оперативной реакции на сигнал готовности данных (RDY).

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

8 hours ago, dimka76 said:

Сейчас многие начинающие даже ни одной книжке по Си не читают

Да ладно по Си, так ведь и Тургенева, Чехова тоже...(((

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

А мне вот интересно: как ТС собирается при помощи АЦП расстояние измерять?

Вообще же, вопрост так тупо задан, что на SO его сразу же закрыли бы как невалидный!

Похоже, ТС не слышал о том, что в правильно заданном вопросе содержится уже половина ответа. Иначе сразу выложил бы схему, код, свои соображения по поводу того, почему его код не работает, попросил бы совета... И ему сразу же посоветовали бы выбросить калокуб и не заниматься чушью!

Изменено пользователем Eddy_Em

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

AD7746 не АЦП, а измеритель ёмкости — соответственно, датчик у автора емкостной.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

В отладочной плате от AD содержится переменный конденсатор-"ползунок", именно для демонстрации измерения перемещения.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Почитайте на досуге https://www.anekdot.ru/id/997169/ 

Если кто-то сталкивался с i2c, hal и stm32 вкупе и готов помочь, буду признателен. Мне проект интересен и я хочу его закончить. Если чего-то не хватает, допишу.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

17 часов назад, Xenia сказал:

А вы нам расскажите, что надумали :).

 

Я сама раньше с AD7745 имела дело - он почти такой же, как ваш AD7746, только входов меньше. Но не с STM32 я его стыковала, а с X-Мегой.

Прерывания там действительно могут быть задействованы для оперативной реакции на сигнал готовности данных (RDY).

Расстояние надумал измерять. Вот, представьте себе лазер, режущий железку какую-нибудь. (чтоб камень не кинули - деталь вырезают, гравируют или сваривают). Чтобы постоянно держать равное расстояние между форсункой лазера и железкой )), мне нужно емкостным методом измерить расстояние до нее. Для этого я взял AD7746. (На всякий случай с двумя выходами. Тема для меня новая.) Паровать их можно через i2c. Другой коммуникации не нашел.

 

В принципе, у меня есть файл от ST с примером применения i2c с hal через прерывание. Но до конца пока не разобрался. Поллингом не хочу делать, ибо процессорные мощности могут понадобится для расчета емкости.

 

Ах да! Использую STM32F303RE, EVAL-AD7746EBZ. И жмень проводов ))

Изменено пользователем bookmender

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

У самих ADI есть примеры кода.

Спойлер

(как по мне, имеет место избыточность)

 

https://wiki.analog.com/_media/resources/tools-software/uc-drivers/renesas/ad7746_generic.zip

 

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

1 hour ago, bookmender said:

В принципе, у меня есть файл от ST с примером применения i2c с hal через прерывание. Но до конца пока не разобрался. Поллингом не хочу делать, ибо процессорные мощности могут понадобится для расчета емкости.

За это время можно было бы уже наизусть выучить те несколько страниц RM, в которых говорится об I2C. И, между прочим, можно с I2C через DMA работать. Тогда накладных расходов будет значительно меньше. А факт приема получим по флагу, выставленному по окончанию DMA-транзакции.

А если вместо нормального подхода хочется хал использовать, то почитать документацию хала.

Коль оба пункта не выполнены, то тему нужно было в JOB размещать!

 

P.S. У ST можно скачать отличный набор сниппетов. Правда, только под STM32F0, но их легко портировать и на другие серии. И никакой кал не понадобится! В упомянутых сниппетах есть и работа с I2C через DMA!!!

Изменено пользователем Eddy_Em

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Почему лучше с DMA, чем без?

 

Мне кажется, я скачал такой набор. Там куча примеров для периферии процессора. Я правильно излагаю? Правда, примеры с HAL(чем плох?). Как раз пытаюсь настроить его под свою программу.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Потому что передавать N байт с DMA — почти ненапряжно для МК. А передавать N байт по прерываниям — придется каждый новый байт в прерывании отправлять, тогда уж может быть проще вообще блокирующие операции выполнять.

Хал плох тем, что не дает понять, как оно там внутри работает. Плюс он дает уйму оверхеда. Ну и дополнительный минус - помимо чтения RM и даташита на МК все равно придется читать документацию на этот самый хал. Со сниппетами намного удобней: скопировал к себе, да подправил чуть при помощи даташита на МК.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Присоединяйтесь к обсуждению

Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.

Гость
Ответить в этой теме...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

×
×
  • Создать...