roboforum.ru

Технический форум по робототехнике.
Текущее время: 03 дек 2024, 17:21

Часовой пояс: UTC + 4 часа




Начать новую тему Ответить на тему  [ Сообщений: 8 ] 
Автор Сообщение
 Заголовок сообщения: SPI отправка и получение данных с регистров ведомого устр.
СообщениеДобавлено: 10 апр 2011, 20:11 
Не в сети
Аватара пользователя

Зарегистрирован: 10 фев 2011, 22:35
Сообщения: 22
Доброго времени суток, есть проблема чтения и записи регистров модуля акселерометра работающего через SPI. Подскажите как на Си читать и писать в регистры данного модуля. Например нужно отправить с меги 16 значение 0b00000101 в регистр $16. SPI разобрался как конфигурировать, проблема за малым. Спасибо


Вложения:
MMA7455L Акселерометр.pdf [519.11 КиБ]
Скачиваний: 0
mega16.pdf [7.14 МиБ]
Скачиваний: 0


Последний раз редактировалось eugmai86 10 апр 2011, 20:52, всего редактировалось 2 раз(а).
Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: SPI отправка и получение данных с регистров ведомого уст
СообщениеДобавлено: 10 апр 2011, 20:29 
Не в сети
Аватара пользователя

Зарегистрирован: 10 дек 2010, 13:16
Сообщения: 4995
Откуда: Красногорск МО
прог. языки: C, Python, wiring/processing
ФИО: Андрей
в даташите протокол всегда прописан. прикрепите даташит.

_________________
Мой волшебник это я сам. Всю архитектуру программы придумал лично, а ребята помогли воплотить её. Я бы и сам мог написать, но лень учить язык и его конструкции.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: SPI отправка и получение данных с регистров ведомого уст
СообщениеДобавлено: 10 апр 2011, 22:06 
Не в сети
Аватара пользователя

Зарегистрирован: 10 фев 2011, 22:35
Сообщения: 22
В ДШ написано:
SPI Write Operation
In order to write to one of the 8-bit registers, an 8-bit write command must be sent to the MMA7455L. The write command consists
of an MSB (0=read, 1=write) to indicate writing to the MMA7455L register, followed by a 6-bit address and 1 don’t care bit.
The command should then be followed the 8-bit data transfer. See Figure 13 for the timing diagram for an 8-bit data write.
Значит ли это чтоб записать данные в регистр нужно
SPI_MasterTransmit(0b10101100); //записываю в 16 регистр мма7455
SPI_MasterTransmit(0b00000101); // значение 0b00000101


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: SPI отправка и получение данных с регистров ведомого уст
СообщениеДобавлено: 10 апр 2011, 22:25 
Не в сети
Аватара пользователя

Зарегистрирован: 10 дек 2010, 13:16
Сообщения: 4995
Откуда: Красногорск МО
прог. языки: C, Python, wiring/processing
ФИО: Андрей
если 16 регистр это 0x16, то да. если 16 регистр - это 16, то нет :-)))

_________________
Мой волшебник это я сам. Всю архитектуру программы придумал лично, а ребята помогли воплотить её. Я бы и сам мог написать, но лень учить язык и его конструкции.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: SPI отправка и получение данных с регистров ведомого уст
СообщениеДобавлено: 12 апр 2011, 15:41 
Не в сети
Аватара пользователя

Зарегистрирован: 10 фев 2011, 22:35
Сообщения: 22
ок спасибо буду пробовать


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: SPI отправка и получение данных с регистров ведомого уст
СообщениеДобавлено: 17 апр 2011, 22:26 
Не в сети
Аватара пользователя

Зарегистрирован: 10 фев 2011, 22:35
Сообщения: 22
Уже неделю пытаюсь добиться работы акселерометра. Но все никак. Подозрение вызывает потребляемый ток 1.7 mA По ДШ 490 мкА максимум. Питаю акселерометр от L78L33. МК от 5В. Согласование уровней МК - Датчик сделал на мосфетах по AN97055. Черт его знает, что не так.

Вот ф-ция отправки и получения

void SPI_MasterTransmit(char cReg, char cData)
{
unsigned char x;
CS=0; //прижимаем CS к земле, давая понять что передача пошла
SPDR=(((cReg&0x3F)<<1)|0x80); /* Start transmission */
while(!(SPSR&(1<<SPIF)));/* Wait for transmission complete */
x = SPDR;//dummy read
SPDR = cData;
while(!(SPSR&(1<<SPIF)));/* Wait for transmission complete */
x = SPDR;//dummy read
CS=1;
}

unsigned char SPI_MasterReceive(char cReg)
{
unsigned char x;
CS=0;// прижимаем CS к земле, давая понять что передача пошла
SPDR=((cReg&0x3F)<<1); // write in the register address with the read comman
while(!(SPSR&(1<<SPIF))); /* Wait for reception complete */
x=SPDR;//dummy read
CS=1;
return x; /* Return data register */
}

Кому не лень, гляньте код, и еще насколько я понял из ДШ SPI должен быть "вариант 0" для МК Мега16
я пользую такую настройку

SPCR=0b01010011;
/*{
7: SPIE: SPI Interrupt Enable
6: SPE: SPI Enable
5: DORD: Data Order
4: MSTR: Master/Slave Select
3: CPOL: Clock Polarity
2: CPHA: Clock Phase
1,0: Bits 1, 0 – SPR1, SPR0: SPI Clock Rate Select 1 and 0
}*/


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: SPI отправка и получение данных с регистров ведомого уст
СообщениеДобавлено: 18 апр 2011, 11:59 
Не в сети

Зарегистрирован: 27 авг 2008, 10:45
Сообщения: 1981
Откуда: Харьков
прог. языки: С/С++
Receive неправильный.

У тебя данные вообще не принимаются в твоем коде - команду послал и все, CS=1 и выход.
Код:
SPDR=((cReg&0x3F)<<1); // write in the register address with the read comman
while(!(SPSR&(1<<SPIF))); /* Wait for reception complete */
x=SPDR;//dummy read


А надо после команды послать еще один пустой байт, чтобы дать девайсу возможность тебе ответить, смотри картинки на стр 18. У тебя ж 4-проводное подключение?

Код:
SPDR=((cReg&0x3F)<<1); // write in the register address with the read comman
while(!(SPSR&(1<<SPIF))); /* Wait for transmission complete */
x=SPDR;//dummy read
SPDR=0xff; // Dummy write
while(!(SPSR&(1<<SPIF))); /* Wait for reception complete */
x=SPDR;//Real read


Настройка SPCR на глаз вроде правильная (Master, DORD=0: MSB first, Mode 0, CLK/64)


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: SPI отправка и получение данных с регистров ведомого уст
СообщениеДобавлено: 23 апр 2011, 16:18 
Не в сети
Аватара пользователя

Зарегистрирован: 10 фев 2011, 22:35
Сообщения: 22
понял, спасибо. буду пробовать


Вернуться к началу
 Профиль  
 
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 8 ] 

Часовой пояс: UTC + 4 часа


Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 7


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Перейти:  
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
Русская поддержка phpBB
phpBB SEO