Write Onewire data toa I2C memory / read ASCI


Closed Thread
Results 1 to 40 of 68

Hybrid View

  1. #1
    Join Date
    May 2008
    Location
    Italy
    Posts
    825


    Did you find this post helpful? Yes | No

    Default

    You wrote:

    "LCDOUT $FE, $C0, DEC TEMPERATURE
    I'll be reading 2555 "

    Now:

    ByteInteger = TEMPERATURE/100

    ByteDecimal = TEMPERATURE-(ByteInteger*100)

    LCDOUT $FE, $C0, DEC ByteInteger,",",ByteDecimal

    You will see on your display 25,55.

    You don't need to store the comma (separator) but you will store only ByteInteger and ByteDecimal in a location that can be recalled to read back the values. Than after the reading you will add the separator as above.

    Al.

  2. #2
    Join Date
    May 2008
    Location
    Italy
    Posts
    825


    Did you find this post helpful? Yes | No

    Default

    Sorry I have forgotten a Dec. Please read......

    LCDOUT $FE, $C0, DEC ByteInteger,",",DEC ByteDecimal

  3. #3
    Join Date
    Nov 2007
    Posts
    60


    Did you find this post helpful? Yes | No

    Default

    Dear MEN !

    I do not use a LCD display . I have make only a comparision .

    I use in front of my program this line to write text "

    I2Cwrite I2CDAT, I2CCLK, $A0, adr,[" Temperature is _________________ "]

    late in program , in free space I wish to write DATA of temperature

    adr = 15( where is free space )
    I2Cread I2CDAT, I2CCLK, $A0, adr,[ temperature DATA ]

    In finish, I wish to can read all - text and temperature DATA as ASCI CODE such as

    Temperatura is 25,55(for example) .

    from this formula :

    i2cread I2CDAT , I2CCLK , $A0,J,[caracter]

    program read for every adrress (j) a sign (caracter ) in ASCI Code , and this CODE i'll translate in leds on .But where I write temperature DATA , program read other signs not ASCI CODE for 25,55 ( for example )

    Now understand me ?

    I 'll try to write only text with quote and temperature DATA except quote
    Last edited by Eugeniu; - 17th October 2008 at 08:40.

  4. #4
    Join Date
    Nov 2007
    Posts
    60


    Did you find this post helpful? Yes | No

    Default

    Quote Originally Posted by Eugeniu View Post

    I 'll try to write only text with quote and temperature DATA except quote
    Not work . Data from DS1820 temperature sensor is in binary . Do you know how can convert it in decimal and use in formula ? Except use DEC .

  5. #5
    Join Date
    May 2008
    Location
    Italy
    Posts
    825


    Did you find this post helpful? Yes | No

    Default

    YOU WROTE:
    -------------------------------------------------------------------------
    I do not use a LCD display . I have make only a comparision .
    I use in front of my program this line to write text "
    I2Cwrite I2CDAT, I2CCLK, $A0, adr,[" Temperature is _________________ "]
    late in program , in free space I wish to write DATA of temperature
    adr = 15( where is free space )
    I2Cread I2CDAT, I2CCLK, $A0, adr,[ temperature DATA ]
    ------------------------------------------------------------------------

    I assume you have grounded pin 1 , pin 2 and pin 3 of your 24LC01 chip and that you have pulled up pin 6 and pin 5 with a 4.7K resistors (see page 85 of the manual)

    Just use the following code:

    'set these variable

    WriteDev con %10100000
    ReadDev con %10100001
    Celsius VAR BYTE [32]

    Fix text in the array

    Celsius[0]=84
    Celsius[1]=101
    Celsius[2]=109
    Celsius[3]=112
    Celsius[4]=101
    Celsius[5]=114
    Celsius[6]=97
    Celsius[7]=116
    Celsius[8]=117
    Celsius[9]=114
    Celsius[10]=32
    Celsius[11]=105
    Celsius[12]=115
    Celsius[13]=32
    Celsius[14]=0
    Celsius[15]=44
    Celsius[16]=0


    Now in your program you read temperature from your device and you have the value in the variable TEMPERATURE!

    write:

    Celsius[14] = TEMPERATURE/100
    Celsius[16] = TEMPERATURE - (Celsius[14]*100)

    So you will have the integer part of your value in Celsius[14] and the decimal part in Celsius[16]. Celsius[15]=44 is your separator.

    Now write to your memory at address 0
    adr=0

    I2CWRITE I2CDAT, I2CCLK, WriteDev , adr,[ Str Celsius\32]
    PAUSE 10

    Now if your hardware works properly, you should have stored in your memory the string and the values.

    To recall them back:

    adr=0
    I2CREAD I2CDAT, I2CCLK, ReadDev , adr,[ Str Celsius\32]
    Pause 10

    At this point you send the array to your display

    For A0=0 to 16
    single byte (Celsius[A0]) can be sent to your display
    Next A0

    If you need to store more than on single value you have to increment your Address (adr) by a multiple of 32, and with two values you have filled one page (64 bytes)

    Al.

  6. #6
    Join Date
    Nov 2007
    Posts
    60


    Did you find this post helpful? Yes | No

    Default

    QUOTE=aratti;
    -------------------------------------------------------------------------
    I do not use a LCD display . I have make only a comparision .
    I use in front of my program this line to write text "
    I2Cwrite I2CDAT, I2CCLK, $A0, adr,[" Temperature is _________________ "]
    late in program , in free space I wish to write DATA of temperature
    adr = 15( where is free space )
    I2Cread I2CDAT, I2CCLK, $A0, adr,[ temperature DATA ]
    ------------------------------------------------------------------------

    I assume you have grounded pin 1 , pin 2 and pin 3 of your 24LC01 chip and that you have pulled up pin 6 and pin 5 with a 4.7K resistors (see page 85 of the manual)

    I use this display NOW , and scroll a simple text , but a long text , what is writing in a 24FC512 menory . It has pins 1,2,3,4 and 7 to ground .


    Just use the following code:

    'set these variable

    What doing this ?

    WriteDev con %10100000
    ReadDev con %10100001
    Celsius VAR BYTE [32]

    Fix text in the array

    I use a long text ......with caps.letters only ( you can see this in my programe ).


    Celsius[0]=84 = T
    Celsius[1]=101 = e
    Celsius[2]=109 = m
    Celsius[3]=112 = p
    Celsius[4]=101 = e
    Celsius[5]=114 = r
    Celsius[6]=97 = a
    Celsius[7]=116 = t
    Celsius[8]=117 =u
    Celsius[9]=114 =r
    Celsius[10]=32 = blank
    Celsius[11]=105 = i
    Celsius[12]=115 = s
    Celsius[13]=32 = blank
    Celsius[14]=0 this is not 0
    Celsius[15]=44 = ,
    Celsius[16]=0


    Now in your program you read temperature from your device and you have the value in the variable TEMPERATURE!

    write:

    Celsius[14] = TEMPERATURE/100
    Celsius[16] = TEMPERATURE - (Celsius[14]*100)

    So you will have the integer part of your value in Celsius[14] and the decimal part in Celsius[16]. Celsius[15]=44 is your separator.

    Now write to your memory at address 0
    adr=0

    I2CWRITE I2CDAT, I2CCLK, WriteDev , adr,[ Str Celsius\32]
    PAUSE 10

    Now if your hardware works properly, you should have stored in your memory the string and the values.

    To recall them back:

    Look back in message , I must to use only this formula , only one .
    I2Cread I2CDAT , I2CCLK , $A0 , J ,[caracter]


    adr=0
    I2CREAD I2CDAT, I2CCLK, ReadDev , adr,[ Str Celsius\32]
    Pause 10

    At this point you send the array to your display

    For A0=0 to 16
    single byte (Celsius[A0]) can be sent to your display
    Next A0

    If you need to store more than on single value you have to increment your Address (adr) by a multiple of 32, and with two values you have filled one page (64 bytes)


    Thank you !

  7. #7
    skimask's Avatar
    skimask Guest


    Did you find this post helpful? Yes | No

    Red face

    Either there is still a serious language barrier here or you're not getting what we're trying to say... In either case, I wish I spoke whatever language you speak so we could get this all straightened out a lot faster...

    I use this display NOW , and scroll a simple text , but a long text , what is writing in a 24FC512 menory . It has pins 1,2,3,4 and 7 to ground .
    And is it working the way you want it to work?

    What doing this ?
    Shouldn't have to use 2 different 'codes' for reading and writing to an I2C eeprom. PBP handles the Read/Write bit (bit0 in the 'code') for you. Should only need to use $A0 when addressing a standard 24xxxxx serial eeprom.

    I use a long text....with caps.letters only (you can see this in my programe)
    Are you storing the entire string, along with the temperature data in the eeprom or just the temperature?

    Look back in message , I must to use only this formula , only one .
    That may be so, but to store a temperature, with a whole part and a fractional part, along with any other characters, you are going to need more than one byte of storage and will need more than one I2CWRITE command...

  8. #8
    Join Date
    Nov 2007
    Posts
    60


    Did you find this post helpful? Yes | No

    Default

    skimask;64321 Either there is still a serious language barrier here or you're not getting what we're trying to say... In either case, I wish I spoke whatever language you speak so we could get this all straightened out a lot faster...

    I am from Bucharest , ROMANIA .

    And is it working the way you want it to work?

    It work OK with a simle text . But I wish to add in the fututre more options such : temperature out , temperature in house , time , date ...


    Shouldn't have to use 2 different 'codes' for reading and writing to an I2C eeprom. PBP handles the Read/Write bit (bit0 in the 'code') for you. Should only need to use $A0 when addressing a standard 24xxxxx serial eeprom.

    Of course , I use this " $A0 "

    Are you storing the entire string, along with the temperature data in the eeprom or just the temperature?

    I wish to store only result ( I think that I understand exactly what you say ??)

    That may be so, but to store a temperature, with a whole part and a fractional part, along with any other characters, you are going to need more than one byte of storage and will need more than one I2CWRITE command...

    Is not important how many I2Cwrite command will be use ,if PIC16F876 support lenght of code . Important is to can used only one command I2Cread to read all - text and data -

Similar Threads

  1. I2C Master/Slave 16F88/16F767 working code
    By DanPBP in forum Code Examples
    Replies: 2
    Last Post: - 23rd October 2012, 22:31
  2. Cleaning up code
    By Tobias in forum mel PIC BASIC Pro
    Replies: 3
    Last Post: - 2nd December 2009, 07:14
  3. HARDWARE I2C SAMPLE CODE question
    By Michael Wakileh in forum Code Examples
    Replies: 2
    Last Post: - 16th June 2009, 21:07
  4. Need the code to write to a memory
    By Hamlet in forum General
    Replies: 0
    Last Post: - 20th August 2007, 00:22
  5. Sinus calculating !
    By Don Mario in forum mel PIC BASIC Pro
    Replies: 29
    Last Post: - 28th November 2004, 23:56

Members who have read this thread : 0

You do not have permission to view the list of names.

Posting Permissions

  • You may not post new threads
  • You may not post replies
  • You may not post attachments
  • You may not edit your posts