hmc5883l на 16f877
|
|
DNM |
Дата: Пт, 02.01.2015, 12:08 | Сообщение # 1 |
Группа:
Проверенные
Ранг:
Понимаю
Сообщений:
75
Замечания:
±
На сайте с 29.09.2011
Статус:
Offline
|
Здравствуйте! результатом освоения hmc5883l получился отличный гироскоп, однако, чтобы сделать из него компас, нужно взять арктангенс, а в 12,16 сериях - эта функция отсутствует, есть только с 18 серии контроллеров.
как быть? как организовать x=arct [y]? может кто сталкивался с проблемой?
Более подробно здесь: http://asemlab.net/
|
|
|
|
xvovanx |
Дата: Пт, 02.01.2015, 14:06 | Сообщение # 2 |
Группа:
Модераторы
Ранг:
Помогаю всем
Сообщений:
327
Замечания:
±
На сайте с 02.05.2013
Статус:
Offline
|
Цитата DNM ( ) нужно взять арктангенс, а в 12,16 сериях - эта функция отсутствует, есть только с 18 серии контроллеров 16 cерия же считает синусы, косинусы. А тангенсы, арктангенсы математически выразить через соотношение синусов косинусов, "как два пальца об асфальт". Ой извините, на этом форуме говорят по другому - "как два бита передать"
Сообщение отредактировал
xvovanx - Пт, 02.01.2015, 14:07
|
|
|
|
DNM |
Дата: Пт, 02.01.2015, 14:40 | Сообщение # 3 |
Группа:
Проверенные
Ранг:
Понимаю
Сообщений:
75
Замечания:
±
На сайте с 29.09.2011
Статус:
Offline
|
Цитата xvovanx ( ) А тангенсы, арктангенсы математически выразить через соотношение синусов косинусов, "как два пальца об асфальт". Ой извините, на этом форуме говорят по другому - "как два бита передать" ой! как же мы забыли об этом? пожалуйста, если у Вас нет ответа, или ответ приблизительный, или Вы думаете,, что он у Вас есть, то лучше храните молчание.
вопрос остается. но с корректировкой: нужен asm - код (встраиваемый в проект на picbasic) для быстрого расчета. Спасибо.
Более подробно здесь: http://asemlab.net/
Сообщение отредактировал
DNM - Пт, 02.01.2015, 14:44
|
|
|
|
ivan_fd |
Дата: Пт, 02.01.2015, 15:57 | Сообщение # 4 |
Группа:
Модераторы
Ранг:
Специалист
Сообщений:
894
Замечания:
±
На сайте с 12.01.2009
Статус:
Offline
|
На счет АСМ не помогу, но может это Вам поможет. http://www.protonbasic.co.uk/showthr....devices
|
|
|
|
holyuser |
Дата: Пт, 02.01.2015, 20:02 | Сообщение # 5 |
Группа:
Проверенные
Ранг:
Могу и подсказать
Сообщений:
228
Замечания:
±
На сайте с 12.12.2007
Статус:
Offline
|
Вобщем, CORDIC в помощ ... Подпрограмма вычисляет арктангенс отношения y/x. где y и x входные переменные, на выходе результат - z_ в угловых градусах, а длина вектора - x .
Сообщение отредактировал
holyuser - Пт, 02.01.2015, 21:01
|
|
|
|
DNM |
Дата: Пт, 02.01.2015, 22:32 | Сообщение # 6 |
Группа:
Проверенные
Ранг:
Понимаю
Сообщений:
75
Замечания:
±
На сайте с 29.09.2011
Статус:
Offline
|
Цитата ivan_fd ( ) но может это Вам поможет спасибо вам! буду разбираться
Более подробно здесь: http://asemlab.net/
|
|
|
|
xvovanx |
Дата: Сб, 03.01.2015, 11:36 | Сообщение # 7 |
Группа:
Модераторы
Ранг:
Помогаю всем
Сообщений:
327
Замечания:
±
На сайте с 02.05.2013
Статус:
Offline
|
Цитата DNM ( ) пожалуйста, если у Вас нет ответа, или ответ приблизительный, или Вы думаете,, что он у Вас есть, то лучше храните молчание. вопрос остается. но с корректировкой: нужен asm - код (встраиваемый в проект на picbasic) С этого и надо было начинать...
|
|
|
|
DNM |
Дата: Сб, 03.01.2015, 15:18 | Сообщение # 8 |
Группа:
Проверенные
Ранг:
Понимаю
Сообщений:
75
Замечания:
±
На сайте с 29.09.2011
Статус:
Offline
|
арктангенс считает отлично, а вот Cos - коряво наверное для косинуса так же нужен свой алгоритм
Более подробно здесь: http://asemlab.net/
|
|
|
|
holyuser |
Дата: Пн, 05.01.2015, 14:02 | Сообщение # 9 |
Группа:
Проверенные
Ранг:
Могу и подсказать
Сообщений:
228
Замечания:
±
На сайте с 12.12.2007
Статус:
Offline
|
По ссылке ниже примеры реализации CORDIC на бейсике BS-II, который очень близок к PicBasic Pro, только, "перевод" на Протон немного осложняет дело из-за отсуствия у Протона некоторых функций. http://www.emesystems.com/BS2mathC.htm atn.bpe считает арктангенс, а sincos.bpe считает синус/косинус
Сообщение отредактировал
holyuser - Пн, 05.01.2015, 14:06
|
|
|
|
DNM |
Дата: Чт, 08.01.2015, 13:34 | Сообщение # 10 |
Группа:
Проверенные
Ранг:
Понимаю
Сообщений:
75
Замечания:
±
На сайте с 29.09.2011
Статус:
Offline
|
Цитата holyuser ( ) близок к PicBasic что касается арктангенса, то ниже работающий код Код Device = 16F877 Config XT_OSC , WDT_OFF , PWRTE_ON , BODEN_OFF , LVP_OFF , CP_OFF , DEBUG_OFF
'Include "PROTON_4.INC" ' Demo on the Proton Development Board using a 16F877 Xtal 4
' ================================Настройка LCD ===============================================
Declare LCD_Type=0 ' Тип ЖКИ - буквенно-цифровой Declare LCD_DTPin PORTB.4 ' Порт данных ЖКИ Declare LCD_ENPin PORTB.3 ' Управление цепью E Declare LCD_RSPin PORTB.2 ' Управление цепью RS Declare LCD_Interface 4 ' 4-х битная разрядность шины данных Declare LCD_CommandUs 2000 ' Задержка перед посылкой команды Declare LCD_DataUs 50 ' Задержка перед посылкой данных Declare LCD_Lines 2 ' Количество строк ЖКИ
TRISD = %00000000 TRISB = %00000000 TRISC = %00000000
' -----[ Pins/Constants/Variables ]------------------------------------------- Symbol SDA = PORTC.3 'P0 transceives to/from SDA Symbol SCL = PORTC.2 'P1 sends clock pulses Symbol Pi = 3.14159265359
Dim X As Word 'x sensor measured value Dim Y As Word 'y sensor measured value Dim Z As Word 'z sensor measured value Dim brads As Word 'angle in brads Dim degr As Word 'angle in degrees Dim Xc As Float Dim Yc As Float Dim ATAN2 As Float Dim azimuth As Float 'value calculated using X ATN -Y
Dim SCALEFACTOR As 4081 'SCALEFACTOR = 65536 * (255/4095) = 4081 Dim SCALEOFFSET As 2048 'The output range of the HMC5883L is -2048 to 2047; therefore to get a 0 (LOWRANGE)to 4095 range 'to 4095 (HIGHRANGE) range 2048 must be added to the sensor value. Dim ATNFACTOR As 127 'the ATN function input range is -127 TO 127. In order to get the positive scaled range of '0 to 255 into the range of -127 to 127, 127 must be subtracted. Dim LOWRANGE As 0 'see SCALEOFFSET Dim HIGHRANGE As 4095 'see SCALEOFFSE
Dim ATANResult As Float Dim ATANValue As ATANResult Dim ATANTempFloat1 As Float Dim ATANTempFloat2 As Float Dim ATANFlags As Byte Dim ATAN_SignBit As ATANFlags.0 Dim ATAN_FlagBit As ATANFlags.1 Dim s As Float 'z sensor measured value
main: Cls ATANValue = 12 GoSub ARCTAN ' Calculate the ArcTangent of ATANValue Print 1,1, Dec ATANResult DelayMS 1000 GoTo main
'------------------------------------------------------------------------------------- ' Floating Point ARCTAN ' Returns the arctangent value of a floating point variable ' ' Input : ATANValue holds the floating point value to calculate ' Output : ATANResult holds the result of the ArcTan ' ARCTAN: ATANFlags = 0 ATANTempFloat1 = ATANValue
If ATANValue < 0 Then ATAN_SignBit = 1 ATANTempFloat1 = -ATANTempFloat1 EndIf
If ATANTempFloat1 > 1.0 Then ATANTempFloat1 = 1.0 / ATANTempFloat1 ATAN_FlagBit = 1 EndIf
ATANResult = 0.17630401 * ATANTempFloat1 * ATANTempFloat1 ATANResult = ATANResult + 5.6710795 ATANResult = ATANResult * ATANTempFloat1 * ATANTempFloat1 ATANResult = ATANResult + 22.376096 ATANResult = ATANResult * ATANTempFloat1 * ATANTempFloat1 ATANResult = ATANResult + 19.818457
ATANTempFloat2 = 1.0 * ATANTempFloat1 * ATANTempFloat1 ATANTempFloat2 = ATANTempFloat2 + 11.368190 ATANTempFloat2 = ATANTempFloat2 * ATANTempFloat1 * ATANTempFloat1 ATANTempFloat2 = ATANTempFloat2 + 28.982246 ATANTempFloat2 = ATANTempFloat2 * ATANTempFloat1 * ATANTempFloat1 ATANTempFloat2 = ATANTempFloat2 + 19.818457
ATANResult = ATANResult * ATANTempFloat1 / ATANTempFloat2
If ATAN_FlagBit = 1 Then ATANResult = 1.57079632 - ATANResult If ATAN_SignBit = 1 Then ATANResult = -ATANResult Return
'------------------------------------------------------------------------------------- ' The Main Program Starts Here
что касается косинуса - то разбираюсь...
Более подробно здесь: http://asemlab.net/
Сообщение отредактировал
DNM - Чт, 08.01.2015, 13:36
|
|
|
|
доцент2 |
Дата: Чт, 13.04.2017, 21:39 | Сообщение # 11 |
Группа:
Проверенные
Ранг:
Помогаю всем
Сообщений:
291
Замечания:
±
На сайте с 13.09.2011
Статус:
Offline
|
можно посмотреть код для работы с hmc5883l?
|
|
|
|
доцент2 |
Дата: Пт, 14.04.2017, 17:09 | Сообщение # 12 |
Группа:
Проверенные
Ранг:
Помогаю всем
Сообщений:
291
Замечания:
±
На сайте с 13.09.2011
Статус:
Offline
|
накидал наспех. конфигурацию проца пока не писал. пока не подключал к дисплею. давно не работал с I2C - есть некоторые сомнения. посмотрите плиз. ткните в ошибки.
|
|
|
|
доцент2 |
Дата: Пн, 17.04.2017, 22:28 | Сообщение # 13 |
Группа:
Проверенные
Ранг:
Помогаю всем
Сообщений:
291
Замечания:
±
На сайте с 13.09.2011
Статус:
Offline
|
Поставил pic18f252. Компас работает. Мысли пока в хаосе! Полученный результат не является углами. Например: х=130 Y=-26 Z=-347 Библиотек на Си полно, но ни как не соображу как перевезти полученные данные в углы. Нужна помощь!
Сообщение отредактировал
доцент2 - Вт, 18.04.2017, 10:50
|
|
|
|
holyuser |
Дата: Вт, 18.04.2017, 12:31 | Сообщение # 14 |
Группа:
Проверенные
Ранг:
Могу и подсказать
Сообщений:
228
Замечания:
±
На сайте с 12.12.2007
Статус:
Offline
|
В прикреплении подпрограмма для вычисления арктангенса по методу CORDIC.
|
|
|
|
доцент2 |
Дата: Вт, 18.04.2017, 15:22 | Сообщение # 15 |
Группа:
Проверенные
Ранг:
Помогаю всем
Сообщений:
291
Замечания:
±
На сайте с 13.09.2011
Статус:
Offline
|
Цитата holyuser ( ) В прикреплении подпрограмма для вычисления арктангенса по методу CORDIC Пока не совсем понял, а что дает длина вектора по Х? Для pic18 можно ли использовать команду a=ATan(Y/X) с последующим переводом радиан в градусы а*180/Пи? (Пока у меня получается ерунда, то 90 град, то 180, то 0) Это угол относительно какой оси? Наверное туплю!!! Но как получить углы поворота относительно осей Х,У,Z?
|
|
|
|