25.06.2020, 09:53
|
|
Вид на жительство
Регистрация: 29.04.2007
Адрес: Иркутск
Сообщений: 311
Сказал спасибо: 0
Сказали Спасибо 12 раз(а) в 12 сообщении(ях)
|
определить адрес устройства i2C
Подключил устройство к PIC12F675
Сканирую адреса подключенных устройств и получаю четыре штуки.
Отчего такое может быть?
Код:
|
#include ‹12F675.h›
#FUSES WDT, INTRC_IO, PUT, NOBROWNOUT, NOPROTECT, NOCPD, NOMCLR
#use delay(clock=4000000, restart_wdt)
#use i2c(Master, sda=PIN_A1, scl=PIN_A0)
..........
for(i=0xA0; i ‹ 0xC0; i++)
{
i2c_start();
status = i2c_write(i);
if(!status){putc(i); delay_ms(10); putc(i); delay_ms(10);}
i2c_stop();
putc(i);
delay_ms(50);
} |
....B3 B4 B5 B6 B7 B8 B9 BA BA BA BB BB BB BC BC BC BD BD BD BE BF C0
|
|
|
|
25.06.2020, 14:05
|
|
Гуру портала
Регистрация: 17.07.2010
Адрес: мурмурляндия
Сообщений: 10,705
Сказал спасибо: 189
Сказали Спасибо 3,194 раз(а) в 2,071 сообщении(ях)
|
Re: определить адрес устройства i2C
а что является критерием что адрес существует?
вы уверены что эта галиматья на си верно определяет бит отклика на шине?
я вот например этого вообще не вижу за макросами
__________________
кагмаподэ магмаподэ
|
|
|
|
25.06.2020, 14:55
|
|
Вид на жительство
Регистрация: 29.04.2007
Адрес: Иркутск
Сообщений: 311
Сказал спасибо: 0
Сказали Спасибо 12 раз(а) в 12 сообщении(ях)
|
Re: определить адрес устройства i2C
спасибо за отклик.
я думаю эта "галиматья" всё очень верно определяет.
Потому что эта ни чья-то сторонняя библиотека с самодельными макросами, а давным-давно разработанный метод компилятора CCS
Когда мы указываем директиву #use i2c(Master, sda=PIN_A1, scl=PIN_A0)
Компилятор вставляет набор ассемблерных команд
Код:
|
5: #use i2c(Master, sda=PIN_A1, scl=PIN_A0)
044 3008 MOVLW 0x8
045 00A1 MOVWF 0x21
046 0000 NOP
............. всего 50 команд
075 1085 BCF 0x5, 0x1
076 1283 BCF 0x3, 0x5
077 28DC GOTO 0xdc |
Устройство, исходя из даташита имеет адрес 0хВА, значит моя функция должна три раза его выдать на терминал.
А выдаются кроме этого ещё и соседние адреса
|
|
|
|
26.06.2020, 01:49
|
|
Гуру портала
Регистрация: 17.07.2010
Адрес: мурмурляндия
Сообщений: 10,705
Сказал спасибо: 189
Сказали Спасибо 3,194 раз(а) в 2,071 сообщении(ях)
|
Re: определить адрес устройства i2C
когда я чото не понимаю - я беру осцил и смотрю биты которые в натурале летают по шине.
все сразу становится понятно и четко. занимает 1 минуту.
если есть сомнения что чьято индусская либа лагает - тупо пишу свою без всякого говномакроса.
контрлольный вопрос вам - как вся эта галиматья узнает что какойто адрес ответил???
__________________
кагмаподэ магмаподэ
Последний раз редактировалось индюк; 26.06.2020 в 01:53.
|
|
|
|
26.06.2020, 14:16
|
|
Прописка
Регистрация: 30.08.2010
Сообщений: 143
Сказал спасибо: 255
Сказали Спасибо 35 раз(а) в 28 сообщении(ях)
|
Re: определить адрес устройства i2C
1) при таком коде у устройства будет "2 адреса"( младший бит определяет направление)
2) а почему бы неизвестному устройству не иметь 2 адреса( или не работающий младший бит)?
|
|
|
|
27.06.2020, 10:22
|
|
Вид на жительство
Регистрация: 29.04.2007
Адрес: Иркутск
Сообщений: 311
Сказал спасибо: 0
Сказали Спасибо 12 раз(а) в 12 сообщении(ях)
|
Re: определить адрес устройства i2C
контрлольный ответ вам - когда какой-то адрес ответил, он удерживает линию SDA в нуле, что и регистрируется в переменной Status. ну и если status==0, то текущий сканируемый адрес печатается в терминал три раза.
А у меня три раза выдавались на терминал четыре адреса:
....B3 B4 B5 B6 B7 B8 B9 BA BA BA BB BB BB BC BC BC BD BD BD BE BF C0
В общем причина произошедшего не выяснена, зато найден метод избавления от неё:
Сначала нужно закончить работу с шиной I2C, а только потом UART использовать, а не наоборот!
Код:
|
i2c_stop();
if(!status)..... |
Теперь всё работает!
Спасибо всем откликнувшимся!
|
|
|
|
28.06.2020, 12:29
|
|
Почётный гражданин KAZUS.RU
Регистрация: 08.10.2007
Сообщений: 2,760
Сказал спасибо: 1,105
Сказали Спасибо 1,037 раз(а) в 569 сообщении(ях)
|
Re: определить адрес устройства i2C
Логгер за 20 баксов с али решает такие проблемы на раз.
|
|
|
|
Ваши права в разделе
|
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения
HTML код Выкл.
|
|
|
Тема |
Автор |
Раздел |
Ответов |
Последнее сообщение |
I2C в спорных условиях
|
dmitry.shagin |
Микроконтроллеры, АЦП, память и т.д |
7 |
01.02.2012 18:21 |
Акселерометр MMA7455 немогу соединиться по I2C
|
Maxim39 |
Микроконтроллеры, АЦП, память и т.д |
1 |
26.01.2012 07:27 |
Подскажите микросхему LED-драйвера с I2C
|
Archer07 |
Микроконтроллеры, АЦП, память и т.д |
10 |
17.03.2011 11:41 |
Знатоки AVR и I2C нужна помощь
|
Vlad68 |
Микроконтроллеры, АЦП, память и т.д |
0 |
23.05.2007 17:51 |
Запись в I2C EEPROM
|
yel |
Микроконтроллеры, АЦП, память и т.д |
8 |
07.03.2007 16:08 |
Часовой пояс GMT +4, время: 19:02.
|
|