Определение наличие устройств на шине I2C

PIC версия программы(разные темы)

Определение наличие устройств на шине I2C

Сообщение andr_l (Андрей) » 20 сен 2016, 14:44

Добрый день.

4 штуки PCM1795 подключенны по I2C к 12F1840-I/SN.
в FC5 написал программу с помощью которой при инициализации устройства в PCM1795 заливаю нужную конфигурацию,
а за тем в цикле опрашивая внешний потенциометр регулирую громкость во всех 4х цапах.

решил сделать "защиту от дурака" и ввести проверку на отсутствие любого цапа в этой 4ке.
сделал так как написано на форуме производителя:
Initialise I2C master
Start
TransmitByte, with the device address as parameter, test the return value (0=Ack, 1=Nak)
Stop

прошивка при отсутствии любого цапа зависает не получая от него ACK, соответственно дальше не могу ничего с прошивкой сделать :(

Помогите пожалуйста в данном вопросе
Ник: andr_l
Имя: Андрей
(msk)
Заинтересованный
Заинтересованный
Информация о пользователе

Re: Определение наличие устройств на шине I2C

Сообщение mim (mim) » 21 сен 2016, 08:05

Сигнал АСК (подтверждение или квитирование) информирует о нормальном завершении каждого обмена данными. Передатчик, как «Ведущий», так и «Ведомый», освобождает линию SDA после передачи восьмого бита данных. Во время девятого тактового импульса приемник - «Ведомый» переводит линию SDA в низкий логический уровень, подтверждая прием переданного ему байта, а передатчик - «Ведущий» проверяет состояние шины и в зависимости от результата либо повторяет байт, либо готовит передачу следующего. Либо определяет что нет такого устройства (адрес не приняли и не подтвердили)...
I Am Legend
Аватар пользователя
Ник: mim
Имя: mim
(Из Лесу, вестимо...)
Легенда
Легенда
Информация о пользователе

Re: Определение наличие устройств на шине I2C

Сообщение andr_l (Андрей) » 21 сен 2016, 12:01

Спасибо. Вопрос закрыт и все заработало :D
Ник: andr_l
Имя: Андрей
(msk)
Заинтересованный
Заинтересованный
Информация о пользователе
Вернуться наверх

Re: Определение наличие устройств на шине I2C

Сообщение DmitryAnarhist (DmitryAnarhist) » 04 сен 2018, 21:38

Любопытно как закрыт и как работает?
Аватар пользователя
Ник: DmitryAnarhist
Имя: DmitryAnarhist
(SPB)
Ученик
Ученик
Информация о пользователе
Вернуться наверх

Re: Определение наличие устройств на шине I2C

Сообщение Прохожий (Прохожий) » 05 сен 2018, 06:40

DmitryAnarhist писал(а):Любопытно как закрыт и как работает?

Привет! А чего? Форум Фловкода во всей его красе :) Получил консультацию, всё заработало. А самый простой пример сделать и на основе приобретённых знаний и отдельной темой готового решения выложить - это извините :) Вот и получается, что админов и со-форумчан вопросами нагружают, а форум информацией не богатеет :)
Ник: Прохожий
Имя: Прохожий
Практик
Практик
Информация о пользователе
Вернуться наверх

Re: Определение наличие устройств на шине I2C

Сообщение DmitryAnarhist (DmitryAnarhist) » 05 сен 2018, 09:15

Ну у меня тоже всё заработало, правда на костылях.
К сожалению красивого решения пока не нашёл.
Самое забавное, что код для работы с i2c, с ошибкой, во всех примерах в интернете, в библиотеках, и даже в атмеловском даташите)
Куда катится мир?)
Аватар пользователя
Ник: DmitryAnarhist
Имя: DmitryAnarhist
(SPB)
Ученик
Ученик
Информация о пользователе
Вернуться наверх

Re: Определение наличие устройств на шине I2C

Сообщение Вячеслав (Вячеслав) » 05 сен 2018, 09:55

DmitryAnarhist писал(а):код для работы с i2c, с ошибкой, во всех примерах в интернете....

Так поправь уже! У меня датчик AM2320, он что -работать в I2C не будет? На пугай так.
Аватар пользователя
Ник: Вячеслав
Имя: Вячеслав
(Саратов)
Разработчик
Разработчик
Информация о пользователе
Вернуться наверх

Re: Определение наличие устройств на шине I2C

Сообщение DmitryAnarhist (DmitryAnarhist) » 05 сен 2018, 11:03

Работать будет всё, но только до того момента пока не отвалится провод или не глюкнет датчик, далее полный завис всего устройства, выход только через перезагрузку.
Поскольку контроллер загнан в бесконечный цикл ожидания ответа от датчика, если датчик не отвечает, то дальше он не поедет, а датчик не повторит ответ пока не будет нового запроса от контроллера, а контроллер ждёт ответа от датчика... рекурсия в общем...(
Аватар пользователя
Ник: DmitryAnarhist
Имя: DmitryAnarhist
(SPB)
Ученик
Ученик
Информация о пользователе
Вернуться наверх

Re: Определение наличие устройств на шине I2C

Сообщение andrewproffi (Андрей) » 05 сен 2018, 11:17

У меня в конструкции эта проблема решалась проверкой значения ACK после первого отправленного байта (обычно это адрес устройства) - если устройство ответило (ACK=0) то работаем дальше, если нет =1 то отправляем команду стоп. Таким образом осуществлялась проверка адресов модулей которые произвольным образом подключались к линии.
Ну и получается что для надежности во всех программах при работе с и2с устройствами нужно после первого байта проверять этот бит. Иначе при внезапном отключении устройства МК может зависнуть.
А про ошибку товарищ видимо имеет в виду операцию WHILE при проверке ACK, то есть мк будет ждать пока устройство не ответит и зависнет. Должно стоять IF.
Аватар пользователя
Ник: andrewproffi
Имя: Андрей
(Томск)
Гуру
Гуру
Информация о пользователе
Вернуться наверх

Re: Определение наличие устройств на шине I2C

Сообщение DmitryAnarhist (DmitryAnarhist) » 05 сен 2018, 11:24

Это зависит от того в какой момент датчик отвалится, если отключение произойдёт в процессе отправки второго байта или любого другого, то это не спасёт.
По хорошему надо править файл самого флоукода, убирать бесконечный цикл, иначе это костыли.
Аватар пользователя
Ник: DmitryAnarhist
Имя: DmitryAnarhist
(SPB)
Ученик
Ученик
Информация о пользователе
Вернуться наверх

След.

Вернуться в Flowcode PIC

Кто сейчас на форуме

Пользователь просматривает форум: нет зарегистрированных пользователей

cron