working with external memory


Closed Thread
Results 1 to 16 of 16

Hybrid View

  1. #1
    malc-c's Avatar
    malc-c Guest


    Did you find this post helpful? Yes | No

    Default

    Quote Originally Posted by mackrackit View Post
    LOL - yeah right !!

    Interesting and seems a simple project... the only thing is that I don't have 6 pins available, at least not without changing the package to a 44 pin package and even then I still think it would be tight or short of a pin.... not to mention the re-design of the PCB

    Thanks for the link though...

    I've opted to do the logging in the PC application, for now

  2. #2
    Join Date
    Mar 2003
    Location
    Commerce Michigan USA
    Posts
    1,166


    Did you find this post helpful? Yes | No

    Default

    malc-c , Why on earth would you need 6 pins for external eeprom storage? I currently use 4, 24LC1025's to store data for a little over a month @ 1 minute intervals. The data is stored for approx. 750 minutes a day during daylight. The data stored is 16 bits per variable of: pointer,azminuth,elevation,up,down,east west and status words. The amount of data you are trying to store isn't much. besides, I only use 2 pins for the 4, 24lc1025's giving me a little over 4 Migabits...

    Dave Purola,
    N8NTA

  3. #3
    Join Date
    Nov 2003
    Location
    Wellton, U.S.A.
    Posts
    5,924


    Did you find this post helpful? Yes | No

    Default

    Six pins for an SD card.
    Dave
    Always wear safety glasses while programming.

  4. #4


    Did you find this post helpful? Yes | No

    Default Character delimiters recommended

    Your suggested data output string needs comma delimiters since you cannot be certain of the character length of each value. You could serout each word as Dec3 mYvAR to force them all to a known length but that can complicate the end use of the data. If you comma delimit each value, terminate the line with <cr><lf> and label the file as MyLog.csv then Excel can open the file and graphing the data is a breeze.

    I use word variables for TemperatureLogged = 1000 + (10*MeasuredTemperature) and depending on actual temperatures the number can have two or three digits. By adding 1000 I can send negative values without needind a sign bit. e.g 890 means -1.1C and 1234 +23.4C

    My data loggers record date & time, temperature, pressure, accelerometers for an activity indication and heart rate. I log the data to M25P128 serial memory chips.

    HTH
    BrianT

  5. #5
    malc-c's Avatar
    malc-c Guest


    Did you find this post helpful? Yes | No

    Default

    Brian, thanks for the input.

    As Dave has already mentioned, the 6 pins were for the SSD card shown in his link.

    I gather that using I2C type memory chips I could use the same CLK and DTA lines that hook up to the DS1307 RTC chip, and just give the memory chip a different address, so that would save me a couple of pins?

    Given that all I really want to store is date, time, temp1, temp2, temp3, temp4 probably every two minutes what would be the ideal memory chip to get to hold a minimum of 7 days worth of data (if longer so much the better). I was also thinking of a rolling data process, so that when full it would simply delete the oldest data to make space for the most current set, ie so it retails the past 7 days (or what every it amount to) worth. Any suggestions of code to do this would be welcome.

  6. #6
    Join Date
    Aug 2004
    Posts
    64


    Did you find this post helpful? Yes | No

    Default read M25P128 ?

    Brian:
    Do you can share the read routines for the M25P128 ?. I am using the M25P16 but my reading
    is a little erratic.
    Thanks in advance...
    Ruben de la Pena V.

  7. #7


    Did you find this post helpful? Yes | No

    Default Code to read and write to M25P128

    Hi Ruben,

    Try this. I have several methods for reading and writing to the M25Pxxx family. All work but the ones not commented out are the fastest. In some infrequent calls I have left the slow routines in place as they don't add any significan time to the download of data from the M25Pxxx memory.

    [code]
    ReadFromM25P128:
    memclk = 0 'data change point
    memclk = 1 : reply.7 = memq : memclk = 0
    memclk = 1 : reply.6 = memq : memclk = 0
    memclk = 1 : reply.5 = memq : memclk = 0
    memclk = 1 : reply.4 = memq : memclk = 0
    memclk = 1 : reply.3 = memq : memclk = 0
    memclk = 1 : reply.2 = memq : memclk = 0
    memclk = 1 : reply.1 = memq : memclk = 0
    memclk = 1 : reply.0 = memq : memclk = 0
    'takes 50 uSecs per character
    debug #reply, ", " 'Debug takes 6.7 mSecs
    return


    RDSRWIP: 'reads the Status Register - waits for WIP bit to go low
    'Data from M25P128 changes on fall of clock so sample on rise of clock.
    code = $05 'Read Status Register code
    gosub sendcode
    WIPclr:
    for shift = 7 to 0 step -1 'read 8 bit reply
    high memclk : reply.0[shift] = memq : low memclk : pauseus 1
    next shift
    if reply.0 = 1 then wipclr
    return

    SendCode: 'Serial MSB first sends the CODE byte from PIC to M25P128
    TRISE.0 = 0 : PortE.0 = 0 : memclk = 0 'MemClk
    TRISC.0 = 0 : PortC.0 = 0 : memd = 0 'MemD
    ' for shift = 7 to 0 step -1 'send MSB first
    ' memclk = 0 : memd = code.0[shift] : memclk = 1: pauseus 1 : memclk = 0
    ' next shift 'this is SLOW ~500 uSecs per character
    memclk = 0
    memclk = 0 : memd = code.7 : memclk = 1
    memclk = 0 : memd = code.6 : memclk = 1
    memclk = 0 : memd = code.5 : memclk = 1
    memclk = 0 : memd = code.4 : memclk = 1
    memclk = 0 : memd = code.3 : memclk = 1
    memclk = 0 : memd = code.2 : memclk = 1
    memclk = 0 : memd = code.1 : memclk = 1
    memclk = 0 : memd = code.0 : memclk = 1
    ' much faster, takes about 52 uSecs per character
    return
    /[code]

    You can see here I have several methods for reading from the M25P128. The decrementing loop "... for shift = 7 to 0 step -1..." works and is simple BUT it takes about 500 uSecs per character.

    HTH
    BrianT

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