Регистрация | Вход

[ Новые сообщения · Участники · Правила форума · Поиск · RSS ]
  • Страница 2 из 2
  • «
  • 1
  • 2
Модератор форума: ivan_fd  
Контрольный байт для связи с акселерометром MMA7455L
somlich Дата: Сб, 18.08.2012, 02:13  |                                                                                                                Сообщение # 16
Группа: Проверенные
Ранг:  Начал соображать
Сообщений: 35
Репутация: 0   ±
Замечания:   ±
На сайте с 23.02.2009

Статус: Offline

Quote (DAlexV)
Спокойствие, только спокойствие Так как малехо напутал, придется расхлебывать. Попробую написать имитатор MMA7455L пару-тройку активных регистров для отладки, тем паче что нашел библиотеку для работы I2C Slave. Сейчас изучаю, и ломаю. Так что могет и получится.

Блин респект от меня. Жду с нетерпением.
DAlexV Дата: Сб, 18.08.2012, 11:56  |                                                                                                                Сообщение # 17
Группа: Проверенные
Ранг:  Разобрался
Сообщений: 657
Репутация: 27   ±
Замечания:   ±
На сайте с 13.05.2008

Статус: Offline

Quote (DAlexV)
Попробую написать имитатор MMA7455L пару-тройку активных регистров для отладки, тем паче что нашел библиотеку для работы I2C Slave.
Сидел до глубокой ночи. Написал прием, отправку. Все было вроде замечательно. Адрес слейва $22. При замене на $1D начались проблемы. Слейв процессор не отправляет ACK. То есть если 0 бит приема (отправки) в slave =0 то ack формируется формируется, если 1 - нет. Забавно. + флаг прерывания по приему не сбрасывается, что то же вызывает сомнения. Будем полностью переписывать библиотеку на свой лад. Сегодня еще время есть. Желаю себе удачи biggrin


Будьте оригинальны-не повторяйте чужих ошибок ! Рыба сдохла. Теперь STM32(TS)+C#(VS).Старею :)
somlich Дата: Сб, 18.08.2012, 13:45  |                                                                                                                Сообщение # 18
Группа: Проверенные
Ранг:  Начал соображать
Сообщений: 35
Репутация: 0   ±
Замечания:   ±
На сайте с 23.02.2009

Статус: Offline

Quote (DAlexV)
Желаю себе удачи
Блин, я тоже желаю
applause
DAlexV Дата: Сб, 18.08.2012, 23:37  |                                                                                                                Сообщение # 19
Группа: Проверенные
Ранг:  Разобрался
Сообщений: 657
Репутация: 27   ±
Замечания:   ±
На сайте с 13.05.2008

Статус: Offline

Вынос мозга гарантирован bash bash bash . Все банально просто оказалось. Где то далеко закрадывалось сомнение, что с адресацией что то намудрено, но не придал этому значения book . Сравним рисунки, а именно протокол I2C и то что предлагает производитель акселя.

здесь все стандартно, start, 6 бит адрес, R/W. ACK

здесь вроде то же все стандартно, start, 6 бит адрес, R/W. ACK. Но при записи адреса($1D) происходит смещение и в итоге получается S 00011101 N, где последний бит получается 1 (R/W бит), и как следствие вместо записи адреса происходит чтение. А если взять число $1E (7 бит отправки - 0), тогда сигнал ACK нормально формируется. Вывод из этого - нестандартная адресация.
Для чтения к адресу 11101($OD) добавить 0. Получиться 111010($3А)
Для записи $3B соответственно.

Забавнее всего что промучился с этим вчера полночи, и сегодня почти весь день. Допер все таки сам, а надо было просто в Гугл залезть.
http://www.ccsinfo.com/forum/viewtopic.php?t=38728
здесь указана правильная последовательность записи - чтения. somlich, если имитатор все таки будет нужен, свистни, завтра за день накидаю, теперь проблем точно не будет. А на сегодня все. Успехов wink
Прикрепления: 0542252.png (11.2 Kb) · 9463460.png (36.1 Kb)


Будьте оригинальны-не повторяйте чужих ошибок ! Рыба сдохла. Теперь STM32(TS)+C#(VS).Старею :)
anatol Дата: Сб, 18.08.2012, 23:42  |                                                                                                                Сообщение # 20
Группа: Проверенные
Ранг:  Помогаю всем
Сообщений: 471
Репутация: 32   ±
Замечания:   ±
На сайте с 10.02.2010

Статус: Offline

Quote (DAlexV)
Берем кусок мануала на MMA7455L
SINGLE BYTE WRITE
To start a write command, the Master transmits a start condition (ST) to the MMA7455L, slave address ($1D)

А картинку далее внимательно смотрел? Разряды адреса 6:0 и бит записи , т.е. как уже заметил phenomen на ..радиокоте http://radiokot.ru/forum/viewtopic.php?f=20&t=40352
Quote
Есть одно НО! Адрес устройства в даташите надо ссунуть на 1 влево, поскольку в 0bXXXXXXXX биты - адрес устройства, а бит - флаг чтения или записи. И адрес устройства будет не 0x1D а 0x3A.

Сообщение отредактировал anatol - Вс, 19.08.2012, 00:49
DAlexV Дата: Сб, 18.08.2012, 23:58  |                                                                                                                Сообщение # 21
Группа: Проверенные
Ранг:  Разобрался
Сообщений: 657
Репутация: 27   ±
Замечания:   ±
На сайте с 13.05.2008

Статус: Offline

Quote (anatol)
А картинку далее внимательно смотрел? Разряды адреса 6:0 и бит записи
Да смотрел, думал что все прекрасно. Пока в адрес слейв устройства не установил $1D, от сюда и вся чехарда пошла. Приложил картинки. Они все объяснят.
Adress $1D

Adress $1E

Не может 8 бит адреса быть 1. Это бит R/W. Нашел еще пару мест где указан именно адрес $3A и $3B. Ссылки привести ???
И ссылка на Кота не рабочая anatol
Прикрепления: 5999282.png (29.2 Kb) · 2728547.png (28.5 Kb)


Будьте оригинальны-не повторяйте чужих ошибок ! Рыба сдохла. Теперь STM32(TS)+C#(VS).Старею :)
ЯНДЕКС Дата: 18.08.2012
DAlexV Дата: Вс, 19.08.2012, 00:10  |                                                                                                                Сообщение # 22
Группа: Проверенные
Ранг:  Разобрался
Сообщений: 657
Репутация: 27   ±
Замечания:   ±
На сайте с 13.05.2008

Статус: Offline

P/S. Маленькие дополнения. Еще один рисуночек добавлю


А вот и код

While true
I2C.Start
I2C.WriteByte($3A)
I2C.WriteByte($03)
I2C.WriteByte($aa)
I2C.Stop
DelayuS(50)
Wend

И ссылка на адресацию I2C устройств от NXP http://www.classic.nxp.com/acrobat....IDE.PDF
Прикрепления: 7034124.png (74.4 Kb)


Будьте оригинальны-не повторяйте чужих ошибок ! Рыба сдохла. Теперь STM32(TS)+C#(VS).Старею :)
Сообщение отредактировал DAlexV - Вс, 19.08.2012, 00:23
anatol Дата: Вс, 19.08.2012, 00:54  |                                                                                                                Сообщение # 23
Группа: Проверенные
Ранг:  Помогаю всем
Сообщений: 471
Репутация: 32   ±
Замечания:   ±
На сайте с 10.02.2010

Статус: Offline

Ссылка на радиокот неправильно конвертировалась.
А по битам 1D=00011101
Старший бит не используется = 0011101
добавляем младший бит (чтения или записи) и получим
00111010=3A
00111011=3B
DAlexV Дата: Вс, 19.08.2012, 07:25  |                                                                                                                Сообщение # 24
Группа: Проверенные
Ранг:  Разобрался
Сообщений: 657
Репутация: 27   ±
Замечания:   ±
На сайте с 13.05.2008

Статус: Offline

Quote (anatol)
00111010=3A 00111011=3B
Можно конечно и так. Главное результат. В последнее время все чаще и чаще попадаются описания с вот такими подвохами. Такое впечатление что с китайского переводили, они любят не заостряться на подробном описании протокола. Ведь если бы изначально правильно указали адрес (как например это делает Microchip), то меньше бы заморочек было. А по идеи производителю веришь suspect


Будьте оригинальны-не повторяйте чужих ошибок ! Рыба сдохла. Теперь STM32(TS)+C#(VS).Старею :)
somlich Дата: Вс, 19.08.2012, 08:44  |                                                                                                                Сообщение # 25
Группа: Проверенные
Ранг:  Начал соображать
Сообщений: 35
Репутация: 0   ±
Замечания:   ±
На сайте с 23.02.2009

Статус: Offline

Спасибо за помощь, копаюся дальше smile
  • Страница 2 из 2
  • «
  • 1
  • 2
Поиск: