акселерометр 7455 и MEGA8 на BASCOM

Вопросы настройки, программирования, прошивки микроконтроллеров и микросхем программируемой логики
Закрыто
Аватара пользователя
olegkomak
Встал на лапы
Сообщения: 123
Зарегистрирован: Пт янв 08, 2010 16:21:41
Откуда: Тамбов
Контактная информация:

акселерометр 7455 и MEGA8 на BASCOM

Сообщение olegkomak »

помогите "связать" акселерометр MMA7455 и MEGA8 на BASCOM .
схему спаял отсюда http://avrdevices.ru/akselerometr_mma7455l/
но вместо ATMega32 взял ATMega8 (что было под рукой).
Застопорился на ПО.Обмен данными между акселерометром и МК происходит по I2C но я с ним пока еще не сталкивался .
даташит на акселерометр тут http://www.avrdevices.ru/datasheets/MMA7455L.pdf
судя по нему изначально акселерометр выключен и чтобы включить необходимо по адресу $16 в ячейки D0 и D1 записать 1 (или туда или туда или в обе) подскажите синтаксис и операторы для BASCOM как это сделать . И заодно как считать с этогоже адреса значения эти же бит.
Талантам надо помогать, бездарности пробьются сами! (Л.Гольдберг)
Реклама
Аватара пользователя
olegkomak
Встал на лапы
Сообщения: 123
Зарегистрирован: Пт янв 08, 2010 16:21:41
Откуда: Тамбов
Контактная информация:

Re: акселерометр 7455 и MEGA8 на BASCOM

Сообщение olegkomak »

сей девайс по интерфейсу SPI может работать . может про него кто нибудь расскажет как в BASCOM пользовать?
Талантам надо помогать, бездарности пробьются сами! (Л.Гольдберг)
Реклама
Аватара пользователя
Мурик
Друг Кота
Сообщения: 3385
Зарегистрирован: Пн окт 11, 2010 19:00:08

Re: акселерометр 7455 и MEGA8 на BASCOM

Сообщение Мурик »

olegkomak писал(а):Обмен данными между акселерометром и МК происходит по I2C но я с ним пока еще не сталкивался.
Протокол I2C и Bascom
Аватара пользователя
olegkomak
Встал на лапы
Сообщения: 123
Зарегистрирован: Пт янв 08, 2010 16:21:41
Откуда: Тамбов
Контактная информация:

Re: акселерометр 7455 и MEGA8 на BASCOM

Сообщение olegkomak »

Мурик спасибо но и это уже читал тоже... сейчас застопорился на том , что везде описания i2c и примеры работы с ним подразумевают что в датчике только один регистр, а в 7455 акселерометре их больше 30-ти штук.
подскажите кто знает как в BASCOMe указать какой регистр мне нужен в тот или иной момент?
Талантам надо помогать, бездарности пробьются сами! (Л.Гольдберг)
Реклама
Эиком - электронные компоненты и радиодетали
phenomen
Потрогал лапой паяльник
Сообщения: 310
Зарегистрирован: Пт дек 17, 2010 14:41:25

Re: акселерометр 7455 и MEGA8 на BASCOM

Сообщение phenomen »

У меня мост lis3lv02dq (акселерометр, снятый с нокии 5500спорт)-> mega8 -> CA-42 (usb кабель от телефонов нокиа
UART<->USB) -> Ноут
Работает на ура :)
Прогу писал под Codevision AVR на C.

Шина I2C:
Чтение одного байта (из даташита)
The Master (or MCU) transmits a start condition (ST) to the MMA7455L, slave address ($1D), with the R/W bit
set to “0” for a write, and the MMA7455L sends an acknowledgement. Then the Master (or MCU) transmits the 8-bit address of
the register to read and the MMA7455L sends an acknowledgement. The Master (or MCU) transmits a repeated start condition
(SR) and then addresses the MMA7455L ($1D) with the R/W bit set to “1” for a read from the previously selected register. The
Slave then acknowledges and transmits the data from the requested register. The Master does not acknowledge (NAK) it received
the transmitted data, but transmits a stop condition to end the data transfer.
Тоесть алгоритм чтения:
1)старт
2)отправить адрес устройства+запись (0)
3)отправить адрес регистра
4)старт
5)отправить адрес устройства+чтение (1)
6)получить данные
7)стоп.

И запись:
To start a write command, the Master transmits a start condition (ST) to the MMA7455L, slave address ($1D) with the R/W bit set
to “0” for a write, the MMA7455L sends an acknowledgement. Then the Master (MCU) transmits the 8-bit address of the register
to write to, and the MMA7455L sends an acknowledgement. Then the Master (or MCU) transmits the 8-bit data to write to the
designated register and the MMA7455L sends an acknowledgement that it has received the data. Since this transmission is complete,
the Master transmits a stop condition (SP) to the data transfer.
Алгоритм записи:
1)старт
2)отправить адрес устройства+запись (0)
3)отправить адрес регистра
4)отправить данные
5)стоп.

Используются функции:

Код: Выделить всё

I2cstart
I2cwbyte MyData
I2crbyte MyData, Nack
I2cstop
Есть одно НО! Адрес устройства в даташите надо ссунуть на 1 влево, поскольку в 0bXXXXXXXX биты - адрес устройства, а бит - флаг чтения или записи. И адрес устройства будет не 0x1D а 0x3A.

Успешным будет написание своих небольших функций для чтения/записи с параметрами: адрес устройства, адрес регистра, данные.
На Баскоме могу (хоть и с трудом) написать. На С уже имеется, если кому надо, обращайтесь.
Реклама
Аватара пользователя
olegkomak
Встал на лапы
Сообщения: 123
Зарегистрирован: Пт янв 08, 2010 16:21:41
Откуда: Тамбов
Контактная информация:

Re: акселерометр 7455 и MEGA8 на BASCOM

Сообщение olegkomak »

phenomen спасибо, кажись лед немного тронулся , но ....
вот листинг простой программы - записываем в 16 регистр акселерометра байт , потом проверяем и обнаруживаем что там хранится не тот байт какой записывали - а почему не пойму ... подскажите пожалуйста .

Код: Выделить всё

$regfile = "m8def.dat"          ' МК Mega8L
$crystal = 8000000                        ' частота 8 Mhz

Config Scl = Portc.5                       ' конфигурируем SCL
Config Sda = Portc.4                      ' конфигурируем SDA

Config Portc.1 = Output                  ' выход на светодиод 1
Config Portc.2 = Output                  ' выход на светодиод 2

L1 Alias Portc.1                               ' обзовем светодиод 1 L1
L2 Alias Portc.2                               ' обзовем светодиод 2 L2

Const Adrw = &B00111010              ' Адрес устройства с битом записи   00111010
Const Adrr = &B00111011               ' Адрес устройства с битом чтения   00111011

Dim Value As Byte                          ' переменная для считывания байта

Do
' заишем в регистр 16 акселерометра 00000101 означает включить акселерометр
' и выбрать предел измерений 2g

 I2cstart                                           ' старт
   I2cwbyte Adrw                               ' адрес акселерометра на запись
   I2cwbyte &H16                               ' адрес регистра
   I2cwbyte &B00000101                    ' байт включения питания и установки предела измерения
  I2cstop                                           ' стоп
  Waitms 50                                       ' пауза на всяк случай
' теперь у нас в 16 регистре хранится 00000101 а мы считаем байт из этого
' регистра и проверим так ли это или нет ? :)
  I2cstart
   I2cwbyte Adrw                            ' адрес акселерометра на запись
   I2cwbyte &H16                            ' адрес регистра
  I2cstart
   I2cwbyte Adrr                             ' адрес акселерометра на чтение
   I2crbyte Value                             ' читаем байт в переменную VALUE
  I2cstop                                         ' стоп
  Waitms 50                                    ' пауза на всяк случай
' а теперь сравним VALUE и 00000101 то что мы записывали
' должно сойтись
If Value = &B00000101 Then
L1 = 1                                            ' если сошлось то мигнет светодиод 1
Waitms 300
L1 = 0
Else
L2 = 1                                          ' если не сошлось то мигнет светодиод 2
Waitms 300
L2 = 0
End If
Loop
End
Вложения
7455.txt
(2.51 КБ) 436 скачиваний
Последний раз редактировалось olegkomak Вс янв 09, 2011 12:49:16, всего редактировалось 1 раз.
Талантам надо помогать, бездарности пробьются сами! (Л.Гольдберг)
Реклама
Аватара пользователя
Alex Medvedev
Встал на лапы
Сообщения: 95
Зарегистрирован: Сб мар 01, 2008 12:27:44
Контактная информация:

Re: акселерометр 7455 и MEGA8 на BASCOM

Сообщение Alex Medvedev »

Вывод CS к питанию подтянут?
Аватара пользователя
olegkomak
Встал на лапы
Сообщения: 123
Зарегистрирован: Пт янв 08, 2010 16:21:41
Откуда: Тамбов
Контактная информация:

Re: акселерометр 7455 и MEGA8 на BASCOM

Сообщение olegkomak »

да Alex Medvedev , все строго по вашей схеме (сегодня перепроверял на всякий случай)
cxema1.jpg
(101.04 КБ) 823 скачивания
Талантам надо помогать, бездарности пробьются сами! (Л.Гольдберг)
Аватара пользователя
olegkomak
Встал на лапы
Сообщения: 123
Зарегистрирован: Пт янв 08, 2010 16:21:41
Откуда: Тамбов
Контактная информация:

Re: акселерометр 7455 и MEGA8 на BASCOM

Сообщение olegkomak »

уважаемые пользователи Bascoma посмотрите синтаксических ошибок нет в тексте моей проги ?? мало ли
Талантам надо помогать, бездарности пробьются сами! (Л.Гольдберг)
Аватара пользователя
olegkomak
Встал на лапы
Сообщения: 123
Зарегистрирован: Пт янв 08, 2010 16:21:41
Откуда: Тамбов
Контактная информация:

Re: акселерометр 7455 и MEGA8 на BASCOM

Сообщение olegkomak »

путем нехитрого волшебства выяснил что часть программы которая отвечает за чтение считывает регистр 16 и в нем все биты равны нулям ... наверное следует вывод что не происходит записи в этот регистр...
знатоки Баскома ну гляньте пожалуйста на листинг ? где может быть ошибка ?
Талантам надо помогать, бездарности пробьются сами! (Л.Гольдберг)
Аватара пользователя
olegkomak
Встал на лапы
Сообщения: 123
Зарегистрирован: Пт янв 08, 2010 16:21:41
Откуда: Тамбов
Контактная информация:

Re: акселерометр 7455 и MEGA8 на BASCOM

Сообщение olegkomak »

заработало!!!
Alex Medvedev спасибо подсказал (в личке) что следует писать
I2crbyte Value,Nack
у меня NACK не было.
я по первости так и писал но наверное ошибка была в чем то другом и поэтому я nack стирал зачем то :)
теперь соберу демоборд под акселерометр и детально изучу его возможности . Надеюсь больше тайн не предвидится тогда тут отписывать не вижу смысла . Если кому то захочется (или придется) работать с подобным акселерометром пишите - отвечу :)
всем котам спасибо!
Талантам надо помогать, бездарности пробьются сами! (Л.Гольдберг)
Закрыто

Вернуться в «Микроконтроллеры и ПЛИС»