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

[ Новые сообщения · Участники · Правила форума · Поиск · RSS ]
  • Страница 1 из 1
  • 1
Модератор форума: ivan_fd  
Компас электронный HC5883- вопрос?
conovod Дата: Вт, 27.03.2012, 21:00  |                                                                                                                Сообщение # 1
Группа: Проверенные
Ранг:  Новенький
Сообщений: 6
Репутация: 0   ±
Замечания:   ±
На сайте с 26.03.2012

Статус: Offline

Я работал немного, видно изменение на осях, но надо "причесать" вывод , чтобы в разрядах правильно было.
А так синусоиды видно, но корявые...


?
ЯНДЕКС Дата: 27.03.2012
anatol Дата: Вт, 27.03.2012, 23:42  |                                                                                                                Сообщение # 2
Группа: Проверенные
Ранг:  Помогаю всем
Сообщений: 471
Репутация: 32   ±
Замечания:   ±
На сайте с 10.02.2010

Статус: Offline

Вы сами свои сообщения читаете? Понимаете? Тогда вы телепат.
Я понял что вы работали с микросхемой магнитометра http://www.sparkfun.com/datasheets/Sensors/Magneto/HMC5843.pdf
И какие синусоиды видно при шине IIC?
Пьяный бред да и только.
conovod Дата: Ср, 28.03.2012, 09:51  |                                                                                                                Сообщение # 3
Группа: Проверенные
Ранг:  Новенький
Сообщений: 6
Репутация: 0   ±
Замечания:   ±
На сайте с 26.03.2012

Статус: Offline

Сигналы приходящие от магнитомера, по шине I2C, при занесении в Exel, при построении графика, образуют (должны) две ортогональные синусоиды. Понятно?
Вообще, кто работал с такими датчиками, это знают по-умолчанию.
Похоже, Ваша реплика, содержит и ответ.
Но пообщаться всегда интересно, тем более, что не успеваю сам во всём разобраться, а тема актуальная.
На Arduino всё решается на "раз", за счёт подключаемой библиотеки, но основной проект - на PBP, так что придется
разбираться до конца.


?
anatol Дата: Ср, 28.03.2012, 11:26  |                                                                                                                Сообщение # 4
Группа: Проверенные
Ранг:  Помогаю всем
Сообщений: 471
Репутация: 32   ±
Замечания:   ±
На сайте с 10.02.2010

Статус: Offline

Quote (conovod)
Но пообщаться всегда интересно

При общении тема должна быть понятна всем беседующим.
Quote (conovod)
На Arduino всё решается на "раз", за счёт подключаемой библиотеки, но основной проект - на PBP

Кто мешает модифицировать библиотеку под себя. Тем более и модифицировать нечего - установить режим датчика и считать инфу по регистрам. Далее обработать и отдать куда надо.
И почему PBP? Студенческая работа наверно, особенно учитывая
Quote (conovod)
тема актуальная
.
Лично мне она по шаробану, а работа с датчиком не сложнее чем со знаменитым термодатчиком DS18B20 только вместо SPI шина I2C.
Quote (conovod)
Сигналы приходящие от магнитомера, по шине I2C, при занесении в Exel, при построении графика, образуют (должны) две ортогональные синусоиды. Понятно?

Здесь непонятно. Первое датчик 3-х осевой. Второе - чтобы получить синусоиды надо вращать или датчик или магнитное поле. Третье- важно положение датчика.
Если хотите чтобы кто нибудь вам помог, приведите мысли в порядок и четко обрисуйте ситуацию, а также выложите свои наработки.
conovod Дата: Ср, 28.03.2012, 12:57  |                                                                                                                Сообщение # 5
Группа: Проверенные
Ранг:  Новенький
Сообщений: 6
Репутация: 0   ±
Замечания:   ±
На сайте с 26.03.2012

Статус: Offline

Во первых, благодарю за ответы.
Во вторых, по пунктам:
3-я ось не важна, необходимо только угловое положение по горизонту. Понятно, что положение плоскости датчика(компаса), строго горизонтально...
Вот листинг, конечно, не оптимальный.
Видно, что датчик не переключается в режим непрерывного измерения, - если из общего цикла вынести команды при инициализации, датчик выдает новые угловые данные только при сбросе питания.

Отражена попытка перестановки бит в полученных байтах (их два).
При вращении датчика показания меняются не равномерно, а скачками, связанными (я так думаю) с неправильной
установкой бит в байтах. Пробовал по-разному. Интересно, как однозначно правильно?
@ device pic16F886

'' --------------------Определения (Define)----------------------
DEFINE OSC 8
Define ADC_BITS 8 'число разрядов в результате АЦП'
Define ADC_CLOCK 3
Define ADC_SAMPLEUS 50
define LCD_DREG PORTC
define LCD_DBIT 4
define LCD_RSREG PORTC
define LCD_RSBIT 1
define LCD_EREG PORTC
define LCD_EBIT 0
define LCD_BITS 4
define LCD_LINES 2
define LCD_COMMANDUS 2000
define LCD_DATAUS 50
define I2C_SLOW 1


'переменные
ddr var byte
dan var byte
dan1 var byte
dan2 var byte
dan3 var byte
dann var byte
dann1 var byte
dann2 var byte
dann3 var byte
DPIN var PORTC.4
CPIN var PORTC.3
coor1 var word
coor2 var word
coor3 var word

'инициализация-------------------------------------------------

adcon1 = 7
TRISC = %00000000
portC = %00000000

'основная программа------------------------------------------
start:
loop:

i2cwrite dpin, cpin, $3c, $00, [%01110001]
pause 100
i2cwrite dpin, cpin, $3c, $01, [%01000000]
pause 100
i2cwrite dpin, cpin, $3C, $02, [%00000000]
pause 100




i2cread dpin, cpin, $3D, $03, [dan]
i2cread dpin, cpin, $3D, $04, [dan1]
i2cread dpin, cpin, $3D, $07, [dan2]
i2cread dpin, cpin, $3D, $08, [dan3]
pause 100
dann.bit7 = dan.bit0
dann.bit6 = dan.bit1
dann.bit5 = dan.bit2
dann.bit4 = dan.bit3
dann.bit3 = dan.bit4
dann.bit2 = dan.bit5
dann.bit1 = dan.bit6
dann.bit0 = dan.bit7
pause 1

'ddr = $04
''i2cread dpin, cpin, $3D, $04,[dan1]
'pause 100
dann1.bit7 = dan1.bit0
dann1.bit6 = dan1.bit1
dann1.bit5 = dan1.bit2
dann1.bit4 = dan1.bit3
dann1.bit3 = dan1.bit4
dann1.bit2 = dan1.bit5
dann1.bit1 = dan1.bit6
dann1.bit0 = dan1.bit7
pause 1

'ddr = $07
'i2cread dpin, cpin, $3D, $07,[dan2]
'pause 100
dann2.bit7 = dan2.bit0
dann2.bit6 = dan2.bit1
dann2.bit5 = dan2.bit2
dann2.bit4 = dan2.bit3
dann2.bit3 = dan2.bit4
dann2.bit2 = dan2.bit5
dann2.bit1 = dan2.bit6
dann2.bit0 = dan2.bit7
pause 1

'ddr = $08
'i2cread dpin, cpin, $3D, $08,[dan3]
'pause 100
dann3.bit7 = dan3.bit0
dann3.bit6 = dan3.bit1
dann3.bit5 = dan3.bit2
dann3.bit4 = dan3.bit3
dann3.bit3 = dan3.bit4
dann3.bit2 = dan3.bit5
dann3.bit1 = dan3.bit6
dann3.bit0 = dan3.bit7
pause 1

coor1 = (dann1 << 8) + dann'(dann1 << 8) + dann
lcdout $fe, $80, "coor-X = ", dec3 coor1
'pause 500
coor2 = (dann3 << 8) + dann2'(dann3 << 8) + dann2
lcdout $fe, $c0, "coor-Y = ", dec3 coor2
pause 1200

''lcdout dec ddr
' next
'pause 500
lcdout $fe, 1
dan = dan1 = dan2 = dan3 = 0
coor1 = 0
coor2 = 0
pause 200
'i2cwrite dpin, cpin, $3c, $03

'i2cread dpin, cpin, $3C, $03, [adr1]
'lcdout $FE, $c0, dec adr1
'pause 1000
'lcdout $fe, 1
'pause 100
goto loop


?
anatol Дата: Ср, 28.03.2012, 14:17  |                                                                                                                Сообщение # 6
Группа: Проверенные
Ранг:  Помогаю всем
Сообщений: 471
Репутация: 32   ±
Замечания:   ±
На сайте с 10.02.2010

Статус: Offline

Обрати внимание на это
coor1 = (dann1 << 8) + dann
Мне что то кажется что произойдет циклический сдвиг в dann1 а потом просуммируется с dann.
Наверно лучше coor1 = dann1
coor1 = coor1<< 8
coor1 = coor1 + dann
и второе зачем крутишь байты - читать доку на магнитометр не хочу - своей работы много. И, как указывал, PBP не мой бейсик.
  • Страница 1 из 1
  • 1
Поиск: