[Message Prev][Message
Next][Thread Prev][Thread Next][Message
Index][Thread Index]
RE: [OT] Some pic asm code help
- Subject: RE: [OT] Some pic asm code help
- From: "Ian Davidson" <ian@xxxxxxxxxxxxxxxx>
- Date: Sun, 9 Sep 2007 19:09:51 +0100
Hi Frank
>From your post I take it the new numbers have already been rotated
right
by three places. If so they work out as
-53.078mV for the first one and
-56.250mV for the second one.
So not a large difference there.
The code looks ok other than the mask nibble part. To mask the upper
nibble the best way is to logical AND it with $0f. Only the bits that
both contain a 1 will be set so:
10101010 when AND with
00001111 will equal
00001010 which is what you require.
The code seems fine. If you add the AND part for the mask hopefully you
should get the numbers I worked out at the top. If so then at least the
code is doing what it should.
Good luck,
Ian D
-----Original Message-----
From: ukha_d@xxxxxxx [mailto:ukha_d@xxxxxxx] On Behalf
Of Frank Mc Alinden
Sent: 09 September 2007 12:16
To: Ian
Subject: Re: [ukha_d] [OT] Some pic asm code help
Hi Ian
I forgot to rotate the MSB so those values in my last post are way
out....
try these MSB D2h .....LSB BBh................MSB D1h.....LSB F0h
Heres a copy of my current code which is suppose to convert the raw dat
to
16 bit
Thanks agian
Frank
CEL2760
bcf neg ;clear negative flag
btfss DS_DATA1,7 ;negative ? if yes , skip next
goto cel2 ;no
bsf neg ;set negative flag
cel2 ;rotate LSB
bcf C_bit ;clear carry flag
rrf DS_DATA0,1 ;Data0 holds LSB data (0F)
bcf C_bit ;clear carry flag
rrf DS_DATA0,1 ;
bcf C_bit ;clear carry flag
rrf DS_DATA0,1
;SHIFT AND ROTATE MSB
chec_msb_bit0
btfss DS_DATA1,0 ;Check MSB Byte bit 0
goto set_lsb_5_lo ;
bsf DS_DATA0,5 ;set bit 5 of lsb byte
goto chec_msb_1 ;
set_lsb_5_lo
bcf DS_DATA0,5 ;
chec_msb_1
btfss DS_DATA1,1 ;Check MSB Byte bit 1
goto set_lsb_6_lo ;
bsf DS_DATA0,6 ;set bit 6 of lsb byte
goto chec_msb_2 ;
set_lsb_6_lo
bcf DS_DATA0,6 ;
chec_msb_2
btfss DS_DATA1,2 ;Check MSB Byte bit 2
goto set_lsb_7_lo ;
bsf DS_DATA0,7 ;set bit 7 of lsb byte
goto shift_data1 ;
set_lsb_7_lo
bcf DS_DATA0,7 ;
shift_data1
bcf DS_DATA1,0 ;
bcf DS_DATA1,1 ;
bcf DS_DATA1,2 ;
bcf C_bit ;clear carry flag
rrf DS_DATA1,1 ;
bcf C_bit ;clear carry flag
rrf DS_DATA1,1 ;
bcf C_bit ;clear carry flag
rrf DS_DATA1,1 ;
btfss neg ;check sign status
goto mask_up_nib ;
comf DS_DATA1,1 ;yes , 2,s compliment
comf DS_DATA0,1 ;yes , 2,s compliment
incf DS_DATA0,1 ;
btfsc C_bit ;
incf DS_DATA1,1 ;
mask_up_nib
movlw 0fh ;mask upper nibble
subwf DS_DATA1,1 ;
cely return ;
----- Original Message -----
From: "Ian Davidson" <ian@xxxxxxx>
To: <ukha_d@xxxxxxx>
Sent: Sunday, September 09, 2007 6:45 PM
Subject: RE: [ukha_d] [OT] Some pic asm code help
> Hi Frank
>
> As a first test I would read the device and output the actual raw word
> value you read. Then manually convert this. This will prove if you are
> actually reading the correct value and converting wrong or if the raw
> value is wrong in the first place. If you want to post the raw values
I
> can convert them here and let you know what I get the result to be.
>
> Ok just reading your post again.
>
> I can see where this is going wrong. You need to do the rotating
first.
> If you don't then when you add the 1 and later rotate you rotate it
> straight off the end. In your case the bit 0 position starts at bit 3
so
> instead of adding 1 you would have to add 8 but it is easier just to
> rotate first then do the complementing. Also treat the two bytes as
one
> value so when you complement and add 1 only add 1 to the LSB. The only
> other point to watch out for is after you complement you can mask off
> the top nibble of the MSB as after rotating the first three are not
used
> and the next is just the sign bit which is not part of the 2's
> complement.
>
> I hope that made sense it far easier to talk it than write it!
>
> Ian D
>
>
> -----Original Message-----
> From: ukha_d@xxxxxxx [mailto:ukha_d@xxxxxxx] On Behalf
> Of Frank Mc Alinden
> Sent: 09 September 2007 08:31
> To: Ian
> Subject: Re: [ukha_d] [OT] Some pic asm code help
>
> Hi Ian
>
> Firstly thanks for your feedback much appreciated...
>
> What i have done is this firstly is test bit 7 of the MSB 0E and if it
> is
> set i compliment each byte and add 1 to each of them...??
>
> I then rotate right the LSB register OF 3 times each time clearing
the
> carry flag........
>
> I then shift bits 0,1,2 of the MSB into bits 5,6 +7 of the LSB and
> rotate
> the MSB 3 times.........???
>
> With the result im using existing sub routines that i use to convert
> the
> ds18s20 results into temperature readings....
>
> The results im getting do not tally up with readings im getting using
> another device (opnode) which also has moisture sensors attached to
> it.........
>
> The moisture sensors use an external resistor so the range should go
> from
> +64mV to -64mV
>
> Thanks again
> Frank
>
>
> ----- Original Message -----
> From: "Ian Davidson" <ian@xxxxxxx>
> To: <ukha_d@xxxxxxx>
> Sent: Sunday, September 09, 2007 12:11 PM
> Subject: RE: [ukha_d] [OT] Some pic asm code help
>
>
>> Hi Frank
>>
>> I've not used that ic before but looking at the data sheet it
works
> like
>> this.
>>
>> The value you read from the ic will be a word value. It is left
>> justified so you need to rotate the value right three times to get
the
>> LSB into the bit 0 position.
>>
>> Say you read
>> 00000000 01010000
>>
>> By rotating it 3 times it will become
>> 00000000 00001010
>>
>> Now you need to test bit 12, in the example it is a zero which
means
> the
>> number is a positive number. You can therefore just use that
number
in
>> this case decimal 10. If you are using the internal resistor then
the
>> resolution is 0.625mA. 10 x 0.625mA is 6.25mA which is the current
the
>> device is seeing.
>>
>> Now if bit 12 was a 1
>>
>> I.e.
>> 00011111 11110110
>> Then that is a negative number. In two complement you need to
invert
> all
>> the bits and add one for all the bits below bit 12 so
>>
>> 00000000 00001001
>>
>> Add 1
>>
>> 00000000 00001010
>>
>> Which is 10 decimal times by 0.625mA equals -6.25mA
>>
>> I hope that made sense Frank.
>>
>> Ian D
>>
>>
>> -----Original Message-----
>> From: ukha_d@xxxxxxx [mailto:ukha_d@xxxxxxx] On
Behalf
>> Of Frank Mc Alinden
>> Sent: 08 September 2007 23:45
>> To: Ian
>> Subject: [ukha_d] [OT] Some pic asm code help
>>
>> Hi Guys
>>
>> Sorry for the OT post but im hoping some of the pic coders can
help
>> me....Im
>> trying to add support for the Hobby Boards moisture sensor to my
Probe
>> system and im stuck trying to write some code to convert the
readings
>> from
>> the "current registers (OE +OF) " of the DS2760...(The
mositure
sensor
>> uses
>> the current sense) ...I can read the DS2760 and get the values i
just
>> cant
>> work out how to convert it to mVolts.......Any help much
>> appreciated......If
>> i get this sorted i will then have a crack at their Humidity
>> sensor.......
>> Heres a link to the hobby boards sensor and the DS2760 PDF
>> http://datasheets.maxim-ic.com/en/ds/DS2760.pdf
>>
>>
>
http://www.hobby-boards.com/catalog/product_info.php?cPath=22&products_i
>> d=70
>>
>> Thanks
>> Frank
>> www.armaghelectrical.com.au
>>
>>
>>
>>
>>
>>
>>
>>
>>
>>
>>
>>
>>
>>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
UKHA_D Main Index |
UKHA_D Thread Index |
UKHA_D Home |
Archives Home
|