Страница 1 из 2

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

СообщениеДобавлено: 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, соответственно дальше не могу ничего с прошивкой сделать :(

Помогите пожалуйста в данном вопросе

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

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

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

СообщениеДобавлено: 21 сен 2016, 12:01
Андрей
Спасибо. Вопрос закрыт и все заработало :D

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

СообщениеДобавлено: 04 сен 2018, 21:38
DmitryAnarhist
Любопытно как закрыт и как работает?

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

СообщениеДобавлено: 05 сен 2018, 06:40
Прохожий
DmitryAnarhist писал(а):Любопытно как закрыт и как работает?

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

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

СообщениеДобавлено: 05 сен 2018, 09:15
DmitryAnarhist
Ну у меня тоже всё заработало, правда на костылях.
К сожалению красивого решения пока не нашёл.
Самое забавное, что код для работы с i2c, с ошибкой, во всех примерах в интернете, в библиотеках, и даже в атмеловском даташите)
Куда катится мир?)

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

СообщениеДобавлено: 05 сен 2018, 09:55
Вячеслав
DmitryAnarhist писал(а):код для работы с i2c, с ошибкой, во всех примерах в интернете....

Так поправь уже! У меня датчик AM2320, он что -работать в I2C не будет? На пугай так.

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

СообщениеДобавлено: 05 сен 2018, 11:03
DmitryAnarhist
Работать будет всё, но только до того момента пока не отвалится провод или не глюкнет датчик, далее полный завис всего устройства, выход только через перезагрузку.
Поскольку контроллер загнан в бесконечный цикл ожидания ответа от датчика, если датчик не отвечает, то дальше он не поедет, а датчик не повторит ответ пока не будет нового запроса от контроллера, а контроллер ждёт ответа от датчика... рекурсия в общем...(

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

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

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

СообщениеДобавлено: 05 сен 2018, 11:24
DmitryAnarhist
Это зависит от того в какой момент датчик отвалится, если отключение произойдёт в процессе отправки второго байта или любого другого, то это не спасёт.
По хорошему надо править файл самого флоукода, убирать бесконечный цикл, иначе это костыли.