|
|
 |
Ответов
|
Apr 18 2011, 10:04
|

Профессионал
    
Группа: Свой
Сообщений: 1 001
Регистрация: 27-06-06
Пользователь №: 18 409

|
Цитата(eugmai86 @ Apr 10 2011, 19:38)  Доброго времени суток, есть проблема чтения и записи регистров модуля акселерометра работающего через SPI. Подскажите как на Си читать и писать в регистры данного модуля. Например нужно отправить с меги 16 значение 0b00000101 в регистр $16. SPI разобрался как конфигурировать, проблема за малым. Спасибо
MMA7455L_____________.pdf ( 519.11 килобайт )
Кол-во скачиваний: 334Успешно применяем данный акселерометр в проектах. Код инициализации и управления довольно простой - не жалко привести полностью Основные условия - MOSI, MISO, SCK, nCS должны быть согласовыны по уровням с управляющим процессором. SELECT_SPI(pin) - думаю сами догадаетесь как организовать SPIWriteChar(unsigned char), SPIReadChar() - в любой доке на атмегу есть 100% рабочий код отправки/приёма данных по SPI Естественно перед работой SPI настраивается в режиме мастер а nCS как выход. CODE #ifndef mm745x_h #define mm745x_h
/****************************************************************/ //адреса регистро акселерометра enum { XOUTL = 0x00, //10битные регистры результата по осям XYZ XOUTH = 0x01, YOUTL = 0x02, YOUTH = 0x03, ZOUTL = 0x04, ZOUTH = 0x05, XOUT8 = 0x06, //8битные регистры результата по осям XYZ YOUT8 = 0x07, ZOUT8 = 0x08, STATUS = 0x09, //регистр статуса DETSRC = 0x0a, // TOUT = 0x0B, I2CCAD = 0x0D, //регистр адреса I2C, старший бит запрещает I2C XOFFL = 0x10, //10битные регистры сдвига по осям XYZ XOFFH = 0x11, YOFFL = 0x12, YOFFH = 0x13, ZOFFL = 0x14, ZOFFH = 0x15, MCTL = 0x16, //регистр рабочего режима INTRST = 0x17, //регистр сброса прерываний CTL1 = 0x18, // CTL2 = 0x19, // LDTH = 0x1A, //минимальный порог уровня PDTH = 0x1B, //минимальный порог импульса PW = 0x1C, //величина длительности LT = 0x1D, //величина задержки TW = 0x1E, //длительность окна для второго импульса }; /****************************************************************/
/****************************************************************/ //константы регистра статуса (регистр STATUS) enum{ DRDYStat = (1<<0), //статус данных DOVRStat = (1<<1), //статус перезаписи данных PERRStat = (1<<2), //ошибка чётности при тесте }; /****************************************************************/
/****************************************************************/ //константы настройки интерфейса I2C (разрешение/запрещение, регистр I2CCAD) enum{ I2CDIS = (1<<7), //запрещение интерфейса I2C установкой бита I2CDIS в 1 }; /****************************************************************/
/****************************************************************/ //константы настройки рабочего режима (регистр MCTL) enum{ STDB = 0, //режимы работы MES = 1, LEVEL = 2, PULSE = 3, G8 = (0<<2), //настройка чувствительности G4 = (1<<2), G2 = (2<<2), SPI4 = (0<<5), //режим работы spi SPI3 = (1<<5), DRDYPINON = (0<<6), //режим работы вывода DRDY DRDYPINOFF = (1<<6), }; /****************************************************************/
/****************************************************************/ //константы настройки рабочего режима (регистр INTRST) enum{ CLRINT2 = (1<<1), //сброс INT2 - сначала записываем 1 потом 0 CLRINT1 = (1<<0), //сброс INT1 - сначала записываем 1 потом 0 }; /****************************************************************/
#endif //mm745x_h
/*********************************************************/ //запись значения в заданный адрес void mm745xWrite(unsigned char reg, unsigned char data) { SELECT_SPI(nSS_MM745X); SPIWriteChar( ((reg &0x3F)<<1)|0x80 ); SPIWriteChar(data); DESELECT_SPI(); } /*********************************************************/
/*********************************************************/ //чтение значения регистра unsigned char mm745xRead(unsigned char reg) { unsigned char data; SELECT_SPI(nSS_MM745X); SPIWriteChar( (reg &0x3F)<<1 );
data = SPIReadChar(); DESELECT_SPI(); return(data); } /*********************************************************/
/*********************************************************/ mm745xInit(void) { //запрещаем работу шины I2C mm745xWrite(I2CCAD, I2CDIS); //настройка режима работы акселерометра mm745xWrite(MCTL, SPI4|G2|MES); //выполняем фиктивное чтение после инициализации mm745xRead(XOUT8); mm745xRead(YOUT8); mm745xRead(ZOUT8);
} /*********************************************************/
Сообщение отредактировал mempfis_ - Apr 18 2011, 10:06
|
|
|
|
Сообщений в этой теме
eugmai86 SPI отправка и получение данных с регистров ведомого устр. Apr 10 2011, 16:38 Палыч На странице 18 всё написано/нарисовано (рис 13): п... Apr 10 2011, 17:14 rezident Не нужно забывать, что SPI не просто передает или ... Apr 10 2011, 17:20 eugmai86 т.е. для записи в регистр ММА7455 можно так:
SPI_M... Apr 10 2011, 17:56 Палыч Цитата(eugmai86 @ Apr 10 2011, 21:56) т.е... Apr 11 2011, 04:04 eugmai86 ясно, спасибо, буду пробовать Apr 12 2011, 11:40 eugmai86 Уже неделю пытаюсь добиться работы акселерометра. ... Apr 17 2011, 18:09 rezident В функции SPI_MasterReceive у вас присутствует алг... Apr 17 2011, 18:36 Белка12 Цитата(rezident @ Apr 17 2011, 22:36) В ф... Jun 8 2011, 07:49  Палыч Цитата(Белка12 @ Jun 8 2011, 11:49) В слу... Jun 8 2011, 09:14   Белка12 Цитата(Палыч @ Jun 8 2011, 13:14) Можно
... Jun 23 2011, 19:25    Палыч Цитата(Белка12 @ Jun 23 2011, 23:25) Прер... Jun 24 2011, 08:48     Белка12 Цитата(Палыч @ Jun 24 2011, 12:48) У Вас,... Jun 24 2011, 09:41      Палыч Цитата(Белка12 @ Jun 24 2011, 13:41) В пр... Jun 24 2011, 09:57       Белка12 Цитата(Палыч @ Jun 24 2011, 13:57) Вы это... Jun 25 2011, 13:02        Палыч Цитата(Белка12 @ Jun 25 2011, 17:02) А сн... Jun 25 2011, 14:16         Белка12 Цитата(Палыч @ Jun 25 2011, 18:16) Тогда,... Jun 25 2011, 16:41          Палыч Цитата(Белка12 @ Jun 25 2011, 20:41) Осци... Jun 26 2011, 14:45           Белка12 Цитата(Палыч @ Jun 26 2011, 18:45) На вре... Jun 26 2011, 16:13 eugmai86 unsigned char SPI_MasterReceive(char cReg)
{
unsig... Apr 17 2011, 18:41 rezident Цитата(eugmai86 @ Apr 18 2011, 00:41) Как... Apr 17 2011, 18:44 eugmai86 Прошиваю) Пишу в $16 регистр 0b00000101 (вклю... Apr 17 2011, 18:45 rezident Цитата(eugmai86 @ Apr 18 2011, 00:45) Пиш... Apr 17 2011, 19:27 Слесарь Мож мой сырой код чем-то поможет
Кодvoid spi_io_w... Apr 17 2011, 19:00 eugmai86 Боюсь что датчик вышел из строя, мне не нравится е... Apr 17 2011, 19:10 eugmai86 Чтоб датчик понял "write" MSB должен быт... Apr 17 2011, 19:30 rezident Я уже что-то перестал понимать. Вы какой интерфе... Apr 17 2011, 19:42 eugmai86 Да, для I2C, но чем она для SPI не подходит то. Пр... Apr 17 2011, 19:49 rezident Тогда следующий вопрос для "партизана". ... Apr 17 2011, 20:04 Слесарь А у него чип на шине наверное всегда выбран и он э... Apr 17 2011, 20:08 eugmai86 4-х проводной SPI используется, SCK, MOSI, MISO и... Apr 18 2011, 04:20 rezident А преобразование уровней только для трех сигналов ... Apr 18 2011, 09:26 eugmai86 да, преобразую только СS MISO, MOSI. SCK оставил б... Apr 18 2011, 09:39 ILYAUL Цитата(eugmai86 @ Apr 18 2011, 13:39) да,... Apr 18 2011, 09:55 Слесарь А какие тайминги рекомендует производитель? Ведь н... Apr 18 2011, 09:52 eugmai86 спасибо всем! буду пробовать. Apr 18 2011, 11:10 Белка12 Палыч, что скажете?
Может, я написала не очень по... Jun 26 2011, 14:33 Белка12 Уменьшила частоту SLK, вот что получилось.
Навер... Jun 28 2011, 06:49 Палыч Цитата(Белка12 @ Jun 28 2011, 10:49) Умен... Jun 28 2011, 07:48  =AK= Цитата(Палыч @ Jun 28 2011, 17:18) Настор... Jun 28 2011, 11:46  Белка12 Цитата(Палыч @ Jun 28 2011, 11:48) Настор... Jun 28 2011, 12:48   Палыч Только внимательно посмотрев на Ваши функции вывод... Jun 28 2011, 14:40    Белка12 Цитата(Палыч @ Jun 28 2011, 18:40) Только... Jun 28 2011, 16:30     Палыч Цитата(Белка12 @ Jun 28 2011, 20:30) 1. А... Jun 28 2011, 20:49      Белка12 Цитата(Палыч @ Jun 29 2011, 00:49) Мусор ... Jun 29 2011, 16:08       demiurg_spb Цитата(Белка12 @ Jun 29 2011, 20:08) Дисп... Jun 29 2011, 18:31        Белка12 Цитата(demiurg_spb @ Jun 29 2011, 22:31) ... Jun 30 2011, 16:08         Палыч Цитата(Белка12 @ Jun 30 2011, 20:08) в да... Jun 30 2011, 16:38          Белка12 Цитата(Палыч @ Jun 30 2011, 20:38) Раздел... Jul 1 2011, 03:16          Белка12 Цитата(Палыч @ Jun 30 2011, 20:38) Раздел... Jul 1 2011, 16:54           Палыч Цитата(Белка12 @ Jul 1 2011, 20:54) а что... Jul 1 2011, 21:16            Белка12 Цитата(Палыч @ Jul 2 2011, 01:16) Берем д... Jul 2 2011, 04:26             Палыч Цитата(Белка12 @ Jul 2 2011, 08:26) Значи... Jul 2 2011, 04:44              Белка12 Цитата(Палыч @ Jul 2 2011, 08:44) Вы, нав... Jul 2 2011, 05:46               Палыч Цитата(Белка12 @ Jul 2 2011, 09:46) не по... Jul 2 2011, 13:50        Белка12 Цитата(demiurg_spb @ Jun 29 2011, 22:31) ... Jul 4 2011, 13:32         demiurg_spb Нет никаких призраков. Как удобнее так и делайте. ... Jul 4 2011, 18:48   =AK= Цитата(Белка12 @ Jun 28 2011, 22:18) в да... Jun 28 2011, 22:20 Белка12 Палыч, огромное спасибо!
Вы мне очень, очень ... Jul 2 2011, 17:30 Белка12 Перепаяли резисторы, вроде бы, дисплей заработал п... Jul 5 2011, 15:07 demiurg_spb Аминь три раза Jul 6 2011, 04:36
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|