PDA

View Full Version : Bit conversion



lerameur
- 4th November 2006, 15:17
HI,

i am geting error in compiling my program. I think its because I am doing a subtracion with a binary number and a decimal number

C:\PBP>pbp -p16f876a lcd3
PicBasic Pro Compiler 2.46, (c) 1998, 2005 microEngineering Labs, Inc.
All Rights Reserved.
PM Assembler 4.07, Copyright (c) 1995, 2004 microEngineering Labs, Inc.
Error PBPPIC14.LIB 2048 : [202] Illegal Character 'æ'
Error PBPPIC14.LIB 2064 : [202] Illegal Character 'æ'
*** 2 Errors ***

here is the code:

if right > left Then 'left and right are from sensor reading
temp =right-left
temp= temp/right
temp= temp * 254
HPWM 1,255-temp,1000
HPWM 2,255,1000

k

lerameur
- 4th November 2006, 15:39
my question is how do i convert my binary value to a decimal so i can work with it.

k

sayzer
- 4th November 2006, 16:18
Hi lerameur,

In your code piece here, first you are missing ENDIF. For now say it is there, then;

Your variables are all decimal already.


Also, say that Right = 5 and Left = 2.

Then,

IF Right > Left statement will be executed; then

Temp = Right - Left
(Temp = 3)
Temp = Temp/Right
(Temp = 3/5)
(Temp = 0)
Temp = Temp*254
(Temp = 0)

In this case, you will get TEMP as zero, because you will always be dividing a small number by a bigger number.


Also, if you run your code alone, it will not give you any errors.



IF Right > Left THEN 'left and right are from sensor reading
Temp =Right-Left
Temp= Temp/Right
Temp= Temp * 254
HPWM 1,255-temp,1000
HPWM 2,255,1000
ENDIF

'No errors !!





Thus, you should check the rest of your code. It seems that you have no problem with your IF statement.

-------------------------------

lerameur
- 4th November 2006, 16:45
ok but how do i get the 0.6 from 3/5
maybe (3/5)*254 ?
i do not want zero

also,

I removed these lines and it now compiles:
I thought I needed them...

'DEFINE CCP1_REG PORTC ‘ Hpwm 1 pin port, RIGHT
'DEFINE CCP1_BIT 2 ‘ Hpwm 1 pin bit
'DEFINE CCP2_REG PORTC ‘ Hpwm 2 pin port, LEFT
'DEFINE CCP2_BIT 1 ‘ Hpwm 2 pin bit
'DEFINE HPWM1_TIMER 1
'DEFINE HPWM2_TIMER 1

k

mister_e
- 4th November 2006, 18:23
why not 30/5 ?

OR (or i'm right) 3//5?



'DEFINE CCP1_REG PORTC ‘ Hpwm 1 pin port, RIGHT
'DEFINE CCP1_BIT 2 ‘ Hpwm 1 pin bit
'DEFINE CCP2_REG PORTC ‘ Hpwm 2 pin port, LEFT
'DEFINE CCP2_BIT 1 ‘ Hpwm 2 pin bit

There's a Huge difference between a apostroph ' and the other thing ‘

sayzer
- 4th November 2006, 18:35
Floating point is not supported by PBP lerameur. Thus you can not use parenthesis; still zero.

There are still ways to go around it though, take mister_e's example.

Multiplying by 10 could work but
if the difference is too big then need to multiply by 100.
and then if the difference is very big, word size variable may be, then multiply by 1000 shall work.

Ex:
Right = 240 and Left = 235;
then Temp=5.
Now, 5/240 or 50/240 will not work.
You will need to multiply by 100 and have 500/240.

Thus you need to multiply temp by 10 or 100 or 1000 based on your values.



-----------------------------
-------------------------------

lerameur
- 4th November 2006, 18:52
Argg

''''''

thanks
Mister_e

lerameur
- 4th November 2006, 18:53
PBP do not take signed intergers

HenrikOlsson
- 5th November 2006, 09:38
Lerameur,

Multiplications with negative numbers works but if you need division you need to do a little "manual" work:


Sign VAR Word 'This will hold the sign of our value.
Left VAR Word
Right VAR Word
Temp VAR Word

Left = 100
Right = 200

Temp = Left - Right 'Temp is now -100 (or 65436)

If Temp.15 = 1 then 'Highest bit set means value is negative
Sign = -1
Else
Sign = 1
Endif

'We cant divide a negative number so we have to use the ABS operator.
Temp = ABS(Temp) / 2 'Temp is now 50 (positve)

Temp = Temp * Sign 'Re-apply sign, Temp is now -50 (or 65486)


/Henrik Olsson.

sayzer
- 5th November 2006, 09:45
hi Henrik,

I am not sure how lerameur will implement this information into his problem.


---------------------------

HenrikOlsson
- 5th November 2006, 10:45
Hi Sayzer,
He said PBP don't 'take' signed integers and I showed him a way to get around it. I guess I didn't understand the problem, still don't then....

Sorry if I made more confusing.

/Henrik Olsson.

sayzer
- 5th November 2006, 11:11
NP Henrik,

His problem is with floating point issue that PBP does not support.

As you said he still needs to do some manual work.



He will take care of his problem with a few more code lines.
-----------------------------