The UK Home Automation Archive

Archive Home
Group Home
Search Archive


Advanced Search

The UKHA-ARCHIVE IS CEASING OPERATIONS 31 DEC 2024


[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

Comments to the Webmaster are always welcomed, please use this contact form . Note that as this site is a mailing list archive, the Webmaster has no control over the contents of the messages. Comments about message content should be directed to the relevant mailing list.