conovod |
Дата: Вт, 27.03.2012, 21:00 | Сообщение # 1 |
Группа:
Проверенные
Ранг:
Новенький
Сообщений:
6
Замечания:
±
На сайте с 26.03.2012
Статус:
Offline
|
Я работал немного, видно изменение на осях, но надо "причесать" вывод , чтобы в разрядах правильно было. А так синусоиды видно, но корявые...
?
|
|
|
|
anatol |
Дата: Вт, 27.03.2012, 23:42 | Сообщение # 2 |
Группа:
Проверенные
Ранг:
Помогаю всем
Сообщений:
471
Замечания:
±
На сайте с 10.02.2010
Статус:
Offline
|
Вы сами свои сообщения читаете? Понимаете? Тогда вы телепат. Я понял что вы работали с микросхемой магнитометра http://www.sparkfun.com/datasheets/Sensors/Magneto/HMC5843.pdf И какие синусоиды видно при шине IIC? Пьяный бред да и только.
|
|
|
|
conovod |
Дата: Ср, 28.03.2012, 09:51 | Сообщение # 3 |
Группа:
Проверенные
Ранг:
Новенький
Сообщений:
6
Замечания:
±
На сайте с 26.03.2012
Статус:
Offline
|
Сигналы приходящие от магнитомера, по шине I2C, при занесении в Exel, при построении графика, образуют (должны) две ортогональные синусоиды. Понятно? Вообще, кто работал с такими датчиками, это знают по-умолчанию. Похоже, Ваша реплика, содержит и ответ. Но пообщаться всегда интересно, тем более, что не успеваю сам во всём разобраться, а тема актуальная. На Arduino всё решается на "раз", за счёт подключаемой библиотеки, но основной проект - на PBP, так что придется разбираться до конца.
?
|
|
|
|
anatol |
Дата: Ср, 28.03.2012, 11:26 | Сообщение # 4 |
Группа:
Проверенные
Ранг:
Помогаю всем
Сообщений:
471
Замечания:
±
На сайте с 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
Замечания:
±
На сайте с 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
Замечания:
±
На сайте с 10.02.2010
Статус:
Offline
|
Обрати внимание на это coor1 = (dann1 << 8) + dann Мне что то кажется что произойдет циклический сдвиг в dann1 а потом просуммируется с dann. Наверно лучше coor1 = dann1 coor1 = coor1<< 8 coor1 = coor1 + dann и второе зачем крутишь байты - читать доку на магнитометр не хочу - своей работы много. И, как указывал, PBP не мой бейсик.
|
|
|
|