hmc5883l на 16f877 - Форум Picbasic.ru
Регистрация | Вход
[ Новые сообщения · Участники · Правила форума · Поиск · RSS ]
Страница 1 из 11
Модератор форума: demanik 
Форум Picbasic.ru » Программирование МК » Proton PicBasic » hmc5883l на 16f877 (акселерометр_гироскоп)
hmc5883l на 16f877
DNM Дата: Пт, 02.01.2015, 12:08  |                                                                                                                Сообщение # 1
Группа: Проверенные
Ранг:  Понимаю
Сообщений: 76
Репутация: 0   ±
Замечания:   ±
На сайте с 29.09.2011

Статус: Offline

Здравствуйте!
результатом освоения hmc5883l получился отличный гироскоп, однако, чтобы сделать из него компас, нужно взять арктангенс, а в 12,16 сериях - эта функция отсутствует, есть только с 18 серии контроллеров. sad

как быть? как организовать x=arct [y]?
может кто сталкивался с проблемой?
ЯНДЕКС Дата: 02.01.2015
xvovanx Дата: Пт, 02.01.2015, 14:06  |                                                                                                                Сообщение # 2
Группа: Проверенные
Ранг:  Могу и подсказать
Сообщений: 247
Репутация: 12   ±
Замечания:   ±
На сайте с 02.05.2013

Статус: Offline

Цитата DNM ()
нужно взять арктангенс, а в 12,16 сериях - эта функция отсутствует, есть только с 18 серии контроллеров

16 cерия же считает синусы, косинусы. А тангенсы, арктангенсы математически выразить через соотношение синусов косинусов, "как два пальца об асфальт". Ой извините, на этом форуме говорят по другому - "как два бита передать" smile

Сообщение отредактировал xvovanx - Пт, 02.01.2015, 14:07
DNM Дата: Пт, 02.01.2015, 14:40  |                                                                                                                Сообщение # 3
Группа: Проверенные
Ранг:  Понимаю
Сообщений: 76
Репутация: 0   ±
Замечания:   ±
На сайте с 29.09.2011

Статус: Offline

Цитата xvovanx ()
А тангенсы, арктангенсы математически выразить через соотношение синусов косинусов, "как два пальца об асфальт". Ой извините, на этом форуме говорят по другому - "как два бита передать"
 ой! как же мы забыли об этом? smile
пожалуйста, если у Вас нет ответа, или ответ приблизительный, или Вы думаете,, что он у Вас есть, то лучше храните молчание.  angry

вопрос остается. но с корректировкой: нужен asm  - код (встраиваемый в проект на picbasic) для быстрого расчета.
Спасибо.

Сообщение отредактировал DNM - Пт, 02.01.2015, 14:44
ivan_fd Дата: Пт, 02.01.2015, 15:57  |                                                                                                                Сообщение # 4
Группа: Модераторы
Ранг:  Специалист
Сообщений: 881
Репутация: 47   ±
Замечания:   ±
На сайте с 12.01.2009

Статус: Offline

На счет АСМ не помогу, но может это Вам поможет.
http://www.protonbasic.co.uk/showthr....devices


Меня все время преследуют умные мысли...но я быстрее!!!
holyuser Дата: Пт, 02.01.2015, 20:02  |                                                                                                                Сообщение # 5
Группа: Проверенные
Ранг:  Могу и подсказать
Сообщений: 233
Репутация: 5   ±
Замечания:   ±
На сайте с 12.12.2007

Статус: Offline

Вобщем, CORDIC в помощ ...
Подпрограмма вычисляет арктангенс отношения y/x. где y и x входные переменные, на выходе результат -  z_ в угловых градусах, а длина вектора - x .
Прикрепления: Arctangent.bas(2Kb)

Сообщение отредактировал holyuser - Пт, 02.01.2015, 21:01
DNM Дата: Пт, 02.01.2015, 22:32  |                                                                                                                Сообщение # 6
Группа: Проверенные
Ранг:  Понимаю
Сообщений: 76
Репутация: 0   ±
Замечания:   ±
На сайте с 29.09.2011

Статус: Offline

Цитата ivan_fd ()
но может это Вам поможет

спасибо вам!
буду разбираться icecream
xvovanx Дата: Сб, 03.01.2015, 11:36  |                                                                                                                Сообщение # 7
Группа: Проверенные
Ранг:  Могу и подсказать
Сообщений: 247
Репутация: 12   ±
Замечания:   ±
На сайте с 02.05.2013

Статус: Offline

Цитата DNM ()
пожалуйста, если у Вас нет ответа, или ответ приблизительный, или Вы думаете,, что он у Вас есть, то лучше храните молчание.  вопрос остается. но с корректировкой: нужен asm  - код (встраиваемый в проект на picbasic)

С этого и надо было начинать... poor
DNM Дата: Сб, 03.01.2015, 15:18  |                                                                                                                Сообщение # 8
Группа: Проверенные
Ранг:  Понимаю
Сообщений: 76
Репутация: 0   ±
Замечания:   ±
На сайте с 29.09.2011

Статус: Offline

арктангенс считает отлично, а вот Cos -  коряво 
наверное для косинуса так же нужен свой алгоритм
holyuser Дата: Пн, 05.01.2015, 14:02  |                                                                                                                Сообщение # 9
Группа: Проверенные
Ранг:  Могу и подсказать
Сообщений: 233
Репутация: 5   ±
Замечания:   ±
На сайте с 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
Группа: Проверенные
Ранг:  Понимаю
Сообщений: 76
Репутация: 0   ±
Замечания:   ±
На сайте с 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


что касается косинуса - то разбираюсь... nocomp

Сообщение отредактировал DNM - Чт, 08.01.2015, 13:36
Форум Picbasic.ru » Программирование МК » Proton PicBasic » hmc5883l на 16f877 (акселерометр_гироскоп)
Страница 1 из 11
Поиск: