Добрый день.
Видимо, во мне умер капитан Очевидность. Чем больше читаю обсуждение и скетчи и нифига не понимаю. Суть проблемы в следующем: есть даташит микросхемы - в данном случае - тюнер SN761642.
Как видно на этой вырезке, адрес 0xC0 - W, 0xC1 - R. Однако во всех опубликованный скетчах происходит обращение к микросхеме по адресу 0x61. Понимаю, что при передаче 7 бит в библиотеке реальный адрес сдвигается вправо и из 0xC0 мы получаем 0x60. В случае 7битного адреса теряется последний бит, который не дает нам возможность переключать режимы читать/писать. Подскажите болезному, как так?
Повторяю для раздраженных. Название библиотеки в заголовке запроса. Меня интересует абсолютно локальный вопрос, связанный с передачей адреса в тюнер. Схема тут причем? И скетчи тоже. Однако я уже нашел ответ за сегодня. Отличаются библиотеки. В Wire действительно передаются 7 бит. В другой библиотеке 8.
Так выглядит передача адреса в тюнер через Wire:
void SNTVtuner(uint16_t RF,uint8_t OSCI)
{
uint16_t fpd =0;
Wire.beginTransmission(0x60);
А так в другой библиотеке:
I2CStart();
I2COutByte(0b11000000); // Tuner Address
Такие дела, болезный.
Какая разница, что передается в библиотеке?
Физически передаются адрес в старших 7 разрядах, а в младшем разряде признак R/W. И это от библиотеки не зависит.
B1100.0001 = 0xC1 - адрес для чтения - 8 бит отправка - как в даташите, см. в запросе.
B0110.0000 = 0x60 - адрес для записи - 7 бит отправка
Как нет разницы?
Регистр адреса 8 битный, мы заполняем его 7 битным значением, начиная со старшего бита. Как изменить значение младшего бита адреса?
Могу предположить, что к одной шине можно подключить до 4 разных устройств, у каждого из которых будет свой адрес. Этот адрес выбирается подключением соответствующих ног микросхемы к низкому или высокому уровню.
Штука вот в чем: сканер устройств i2c (есть такой), возвращает адрес 0x61. Действительно, при указании этого адреса при записи, микросхема возвращает некое число, не ошибку, если же попытаться записать в 0x60 - ошибка. Получается, что ваше предложение не работает, ибо - запись - это 0. а чтение - 1. Короче. пока не разобрался.
Запись проходит. Возвращается число, которое никак не соответствует даташиту. Чешу репу. В понедельник буду писать цикл, чтобы физически прослушать эфир. Не забываем, что этот чип - тюнер.
Ты же не напрямую в i2c пихаешь адрес, а через библиотеку. Через неё читать и писать надо один и тот же адрес. Прочитай status byte. Там заранее известно состояние.
Согласно даташиту на SN761642, пин AS определяет биты 1 и 2 адреса. Так что я бы посмотрел. А алгоритм чтения/записи согласно даташиту? Время на инициализацию тюнера учтено? Может он тупо не успевает включиться, а МК уже требует обмена.
В тюнере 22 нога микросхемы куда-то ведет, но наружу не выходит. В крайнем случае я могу посмотреть состояние пина чуть позже (в предыдущих версиях тюнеров рекомендуют AS float, он нужен для включения дополнительных устройств). Буду сегодня пытаться запустить шарманку.
Да, верно. Ставил туда потенциометр. Возвращаемое число менялось от 56 до 60. Младшие части байта состояния менялись в зависимости от напряжения на этой ноге. Не помогло. Чуть позже выложу скетч.