1 Attachment(s)
Help please with Assembly (PBPro user)
Hi folks,
I've steered away from Assembly as long as I could but am stuck with an old Application Note (AN715) that is exactly what I need - problem is the code is only available in the pdf complete with a bunch of other stuff in the listing.
I copied this across to a text file and laboriously edited out all the line numbers, etc. but can only get the errors down to about 37 (using MPASM 5.03). I don't know anything about Assembly so don't have a clue how to get any further. Long term plans will be to learn this but so far PBP has proven to be everything I need for a long time now.
Rather than look like a complete idiot contacting Microchip I thought I'd ask the Guru's on the PBP list for some help.
If anyone can offer some suggestions on removing the last of these errors it would be very welcome. I'm sure this is obvious to the educated but I'm completely in the dark here.
Kind regards to all members.
Bill
Tilt trig atan tan-1 arctan atan2
Here is some code to determine tilt using at least a two axis accelerometer. It uses trig.inc
This does not do the a/d conversions, or pulse measurement conversions, that would have to be added.
Code:
define OSC 20
'code working with PIC-MT-USB
include "TRIG.inc"
main:
define LED PortD.3
DEFINE LCD_DREG PORTD ; Set LCD Data port B C D
DEFINE LCD_DBIT 4 ; Set starting Data bit (0 or 4) 4 0
DEFINE LCD_RSREG PORTD ; Set LCD Register Select port A A
DEFINE LCD_RSBIT 0 ; Set LCD Register Select bit 3 2
DEFINE LCD_EREG PORTD ; Set LCD Enable port A A
DEFINE LCD_EBIT 2 ; Set LCD Enable bit 1 5
DEFINE LCD_BITS 4 ; Set LCD bus size (4 or 8 bits) 4 4
DEFINE LCD_LINES 2 ; Set number of lines on LCD 2 2
define LCD_RWREG PORTD
define LCD_RWBIT 1
ADCON1=15
TRISA=%00000011 ' Set PORTA 0-1-3 used for AD
TRISB=%00000000 ' Set PortB
TRISC=%00000000
TRISD=%00000100
' Vdd 5 volts
' Vss Ground
' Vo 20K potentiometer (or ground)
' DB0-3 No connect
a var word
xresult var word 'result of accelerometer sensor in x axis
yresult var word 'result of accelerometer sensor in y axis
zresult var word 'result of accelerometer sensor in z axis
correct var bit 'able to keep equation the same, and flip angle
xdir var bit 'shows direction of x tilt
ydir var bit 'shows direction of y tilt
zdir var bit 'shows direction of z tilt
Lcdout $fe, 1 ' Clear LCD screen
Pause 500 ' Wait for LCD to startup
toggle portD.3
xresult = 553 'is 41 away from center
zresult = 297 'is 215 away from center
'to try it on your calculator tan^-1(41/215) = 10.796543 degrees
'xresult is acceleration allong the x axis
if xresult > 512 then 'get difference from neutral to gravity reading
xresult = xresult - 512 'since we are using 10 bit result, half is 512
xdir = 0
else 'accelerometer reads 512 with no gravity
xresult = 512 - xresult 'and above or below depending on direction tilt
xdir = 1
endif
if yresult > 512 then 'yresult is acceleration allong the y axis
yresult = yresult - 512
ydir = 0
else
yresult = 512 - yresult
ydir = 1
endif
if zresult > 512 then 'zresult is acceleration allong the z axis
zresult = zresult - 512
zdir = 0
else
zresult = 512 - zresult
zdir = 1
endif
if xresult < zresult then 'if x/z is < 1 then x/z
xresult = xresult * 30000 'we will have to correct angle if this is case
y = div32 zresult
correct = 0
else
zresult = zresult * 30000 'else z/x to keep our equation within limits
y = div32 xresult
correct = 1
endif
x = 30000 'multiply this by same value 30000 as above
call atan2
if correct = 0 then y = 9000 - y '90.00 degrees - y = corrected angle
lcdout $FE,1,#y/100,".",#y//100," degrees" 'y = angle 1080 = 10.80 degrees
lcdout $FE,$C0,"x=",#xdir," y=",#ydir," z=",#zdir
end
here is the location of the trig.inc file
http://www.picbasic.co.uk/forum/atta...4&d=1234739854