How to write/read strings EEPROM/LCD


Closed Thread
Results 1 to 23 of 23

Hybrid View

  1. #1
    Join Date
    Dec 2005
    Posts
    46


    Did you find this post helpful? Yes | No

    Default

    Man, this thing is a pain in the booty. Using eeprom works great until i get more that about 30 characters saven in it. Then my LCD just displays black rectangles/blanks. If I delete all of the charcters from eeprom and just leave about 50, it works fine? I dunno, maybe the pic nees a pause somewhere at startup to read the eeprom? Here's the sub:

    EEtext:
    LCDtextNm = 0
    For EEnum = EEnum TO EEnum+7
    Read EEnum, LCDtext[LCDtextNm]
    LCDtextNm=LCDtextNm+1
    Next EEnum
    LCDOut STR LCDtext
    Return

  2. #2
    Join Date
    Sep 2004
    Location
    montreal, canada
    Posts
    6,898


    Did you find this post helpful? Yes | No

    Default

    this one is dangerous and you trick the compiler
    Code:
    For EEnum = EEnum TO EEnum+7
    doing that you'll jump in an endless loop. i don't know what's around your sub but i think this one make much sense

    Code:
    EEtext:
        For CharAddress = EEnum TO EEnum+7
             Read CharAddress, Char
             LCDOUT Char
             Next 
        
        Return
    Steve

    It's not a bug, it's a random feature.
    There's no problem, only learning opportunities.

  3. #3
    Join Date
    Dec 2005
    Posts
    46


    Did you find this post helpful? Yes | No

    Default

    This is getting plain silly. If I have this:
    EEPROM 30,["R","e","a","d","y"," "," "," "]
    EEPROM 38,["D","e","l","a","y"," "," "," "]
    EEPROM 46,["1","5"," ","S","e","c"," "," "]
    EEPROM 54,["2","0"," ","S","e","c"," "," "]

    The run through the sub:

    EEtext:
    LCDtextNm = 0
    EnumC = EEnum
    For EEnum = EnumC TO EnumC+7
    Read EEnum, LCDtext[LCDtextNm]
    LCDtextNm=LCDtextNm+1
    Next
    LCDOut STR LCDtext
    Return

    Ready will display, but the other 3 strings produce a blank screen. If I replace the "e" in ready with a space " " then it works fine, except for the fact that it now says "R ady". ;-) I have had lots of strange happenings with the LCD, like for instance, I can't display a number ending in "0". Also can't display the name "MCKELLOP". Who knows?....
    Gary

  4. #4
    Join Date
    Dec 2005
    Posts
    46


    Did you find this post helpful? Yes | No

    Default

    Hold the phone! I added a Pause 10 right after the Read statement and it seems to be working now.

  5. #5
    Join Date
    Aug 2006
    Location
    Look, behind you.
    Posts
    2,818


    Did you find this post helpful? Yes | No

    Default Just curious

    G-HOOT!
    I like that handle, sounds very celtic, anyway on to business . . .
    I was curious, about the quantity of text strings you are attempting to store and recall, and how you intend to call them up, also curious what chip you chose to use. I made up a device which does essentialy this and I stored all my strings in codespace, using a 16f648A. In fact I still have not used eprom in a project yet. Still mastering the basics.
    JS
    If you do not believe in MAGIC, Consider how currency has value simply by printing it, and is then traded for real assets.
    .
    Gold is the money of kings, silver is the money of gentlemen, barter is the money of peasants - but debt is the money of slaves
    .
    There simply is no "Happy Spam" If you do it you will disappear from this forum.

  6. #6
    Join Date
    Dec 2005
    Posts
    46


    Did you find this post helpful? Yes | No

    Default

    Quote Originally Posted by Joe S. View Post
    G-HOOT!
    I like that handle, sounds very celtic, anyway on to business . . .
    I was curious, about the quantity of text strings you are attempting to store and recall, and how you intend to call them up, also curious what chip you chose to use. I made up a device which does essentialy this and I stored all my strings in codespace, using a 16f648A. In fact I still have not used eprom in a project yet. Still mastering the basics.
    JS
    Hmm, the 16f648A is what I'm using too, since that's as much memory as I can find in an 18 pin chip, but I read that to do the code space thing, that you have to enable "Flash Program Write", but that option is disabled when I choose that chip? Maybe I got that mixed up with something else I was reading about. If I do another board layout, I'm going with probably the 16f916. It has more pins and I think it was 8K of memory. Also, there are several others that I can swap out with it to get a ton of memory if needed....Live and learn. Let me show you what you guys have helped me do though. I have went from way out of space down to 3344 words.

    Here's the EEPROM statements:

    EEPROM 0, [1,1,10,0,0,0,24,1,1,150,0,250,0,1,1,0]
    EEPROM 30,["R","e","a","d","y",0]
    EEPROM 36,["D","e","l","a","y",0]
    EEPROM 42,["1","5"," ","S","e","c",0]
    EEPROM 49,["2","0"," ","S","e","c",0]
    EEPROM 57,["1"," ","M","i","n","u","t","e"]
    EEPROM 65,["2"," ","M","i","n","u","t","e"]
    EEPROM 73,["5"," ","M","i","n","u","t","e"]
    EEPROM 81,["E","n","t","e","r",0]
    EEPROM 87,["A","c","t","i","v","i","t","y"]
    EEPROM 95,["D","b","l","e"," ","P","i","c"]
    EEPROM 103,["S","e","n","s","t","v","t","y"]
    EEPROM 111,["H","i","g","h",0]
    EEPROM 116,["M","e","d","i","u","m",0]
    EEPROM 123,["L","o","w",0]
    EEPROM 127,["D","a","y","N","i","g","h","t"]
    EEPROM 135,["2","4"," ","H","o","u","r"," "]
    EEPROM 143,["D","a","y"," ","O","n","l","y"]
    EEPROM 151,["D","a","r","k","O","n","l","y"]
    EEPROM 159,["W","a","l","k","T","e","s","t"]
    EEPROM 167,["S","t","r","t","W","a","l","k"]
    EEPROM 175,["E","x","i","t",0]
    EEPROM 180,["C","a","m"," ","T","y","p","e"]
    EEPROM 188,["O","N","/","O","F","F","-","1"]
    EEPROM 196,["O","N","/","O","F","F","-","2"]
    EEPROM 204,["A","l","w","a","y","s","O","n"]
    EEPROM 212,["R","e","f","r","e","s","h"," "]
    EEPROM 220,["S","h","u","t","t","e","r"," "]
    EEPROM 228,["S","l","v","R","f","r","s","h"]
    EEPROM 236,["S","l","v","O","n","T","m","e"]
    EEPROM 244,["3","0"," ","S","e","c",0]
    EEPROM 251,["7"," ","M","i","n"]

    'The vars:
    LCDtext VAR BYTE[8]
    EEnum VAR BYTE
    LCDtextNm VAR BYTE
    LCDtemp VAR BYTE
    LCDnum VAR BYTE
    EnumC VAR BYTE

    'Some of the code:
    Select Case Mode
    Case 1
    Delay = Delay + 1
    IF Delay > 7 Then Delay = 1
    delmode:
    Select Case Delay
    GoSub lcdone ' Position cursor at home
    EEnum = 36
    GoSub EEtext
    ' LCDOut "Delay"
    GoSub lcdsec ' Move to 2nd line on LCD
    Case 1
    GoSub TENsec
    ' LCDOut "10 Sec"
    TimeDely = 10
    Case 2
    EEnum = 42
    GoSub EEtext
    ' GoSub fteenSec
    ' LCDOut "15 Sec"
    TimeDely = 15
    Case 3
    EEnum = 49
    GoSub EEtext
    ' LCDOut "20 Sec"
    TimeDely = 20
    Case 4
    EEnum = 57
    GoSub EEtext
    'LCDOut "1 Minute"
    TimeDely = 60
    Case 5
    EEnum = 65
    GoSub EEtext
    'LCDOut "2 Minute"
    TimeDely = 120
    Case 6
    EEnum = 73
    GoSub EEtext
    'LCDOut "5 Minute"
    TimeDely = 300
    Case 7
    GoSub TenMin
    'LCDOut "10 Min"
    TimeDely = 600
    End Select
    Pause 400


    'The SUB:

    EEtext: LCDtextNm = 0
    Pause 10
    LCDnum = 0
    EnumC = EEnum
    For EEnum = EnumC TO EnumC+7
    Read EEnum, LCDtext[LCDtextNm]
    Read EEnum, LCDtemp
    Pause 10
    IF LCDtemp = 0 Then
    LCDnum = 1
    EndIF
    IF LCDnum = 1 Then
    LCDtext[LCDtextNm] = " "
    EndIF
    LCDtextNm=LCDtextNm+1
    Next
    LCDOut STR LCDtext
    Return

    Thank you all for the help! This will get me down the road a ways.
    Gary

  7. #7
    Join Date
    Dec 2005
    Posts
    46


    Did you find this post helpful? Yes | No

    Default

    Well, I thought this was gonna work, and I'll bet it will, but it's giving me fits. It looks like it may have something to do with using the "0" to know where the end of my string is in EEPROM. My screen goes blank (most of the time), when the program try to display one of those on the 2nd line of the display. Since I've never been able to get the display to show a number ending in "0" (zero), I thought maybey that had something to do with it, so I cahnged it to "99". With "99" in there, now it won't display a string that has a "c" in it past the string. For examle "Activity" is displayed ad "A"..."PicPrEvt" is displayed as "Pi". So I changed it to "1" and then "Ready" was displayed as "eady", so I just shut it off without going further through the menu.

    I'm using portB interrupts to detect when i push a couple of push buttons to set it up. This has never been a problem in the past since I haven't been sing EEPROM to store the strings, but i wonder if that could have something to do with it?

    Here's the subs that I call before doing an LCDOUT for line one and two:
    lcdone: LCDOut $fe, 1 : LCDOut $fe, 2 ' Position cursor at home
    Return
    lcdsec: LCDOut $fe, $C0 ' Move to 2nd line on LCD
    Return

    Again, this has always worked fine too before using the EEPROM, so not sure that it has anything to do with it either. Do I need to somehow check and see if the EEPROM actually go read before placing the results in the LCDOUT command? If so, how would I do that without having to compare it to a string and then end up using all of that space again? Any help would be much apreciated..it's driving me wacky. ;-)

  8. #8
    Join Date
    Dec 2005
    Posts
    46


    Did you find this post helpful? Yes | No

    Default

    Thought I would keep adding info to my post as I progress in case there are other "programming challenged" readers trying to do what I'm trying to do. ;-) All of the strings that I'm storing that have a space at the end like this:

    EEPROM 212,["R","e","f","r","e","s","h"," "]
    EEPROM 220,["S","h","u","t","t","e","r"," "]

    "seem" to be the problem, even though they're not any where near the strings that were having problems like:

    EEPROM 103,["S","e","n","s","t","v","t","y"]

    I replaced the spaces with 0 and that so far has been working. Since I've seen several posts wanting to do this, once my other changes are complete, and if it still works, then I'm going to do a new post for wanna be's like me to have an "easy" starting place for storing strings to be displayed on an LCD. Also, I guess it's common knowledge, but with the 0 in there on shorter strings, you don't have to keep looping through to fill the rest of the strings with spaces. I guess that's what is meant by a "terminator" that I've read about in a few places.
    Gary

  9. #9
    Join Date
    Aug 2006
    Location
    Look, behind you.
    Posts
    2,818


    Did you find this post helpful? Yes | No

    Default

    Quote Originally Posted by g-hoot View Post
    Hmm, the 16f648A is what I'm using too, since that's as much memory as I can find in an 18 pin chip, but I read that to do the code space thing, that you have to enable "Flash Program Write", but that option is disabled when I choose that chip?
    Flash Program Write?
    I just do it this way:
    Code:
    LCDOUT 254,1    ' Clears Display
    LCDOUT 254,128,"Here's how to output"
    LCDOUT 254,192,"Strings from code"
    LCDOUT 254,148,"space easily !"
    LCDOUT 254,212,"Where you put it"
    If you do not believe in MAGIC, Consider how currency has value simply by printing it, and is then traded for real assets.
    .
    Gold is the money of kings, silver is the money of gentlemen, barter is the money of peasants - but debt is the money of slaves
    .
    There simply is no "Happy Spam" If you do it you will disappear from this forum.

  10. #10
    Join Date
    Dec 2005
    Posts
    46


    Did you find this post helpful? Yes | No

    Default

    Joe,
    Here's a post taliking about the "Flash Program Write". It's disabled when I select 16F648A I the EPIC Programmer, and the setting is completley taken away when I select this chip in Melabs Programmer 3.31, but maybe I don't really need it.

    http://www.picbasic.co.uk/forum/showthread.php?t=1076

    I've read some about using code space, but don't really understand. So is that part of the 4k space that is used when programing the chip? If so, then I would start storing strings at say space 3500 and then just have to make sure that the program doesn't get any bigger than 3499?

    I don't unserstand this:

    LCDOUT 254,1 ' Clears Display
    LCDOUT 254,128,"Here's how to output"
    LCDOUT 254,192,"Strings from code"
    LCDOUT 254,148,"space easily !"
    LCDOUT 254,212,"Where you put it"

    Isn't that just standard LCDOUT commands in decimal rather than hex? Sorry for all of the questions...this stuff is confusing since I don't know assembly language, and most of the examples use it.

Similar Threads

  1. Parsing Strings...
    By TerdRatchett in forum mel PIC BASIC Pro
    Replies: 23
    Last Post: - 15th February 2009, 04:13
  2. Please help with storing strings in codespace
    By g-hoot in forum mel PIC BASIC Pro
    Replies: 3
    Last Post: - 16th May 2008, 01:02
  3. Processing lengthy strings
    By sougata in forum mel PIC BASIC Pro
    Replies: 1
    Last Post: - 21st March 2006, 05:27
  4. I2CWRITE writing Strings to EEPROM
    By NavMicroSystems in forum mel PIC BASIC Pro
    Replies: 9
    Last Post: - 27th March 2005, 19:45
  5. reading 2c strings
    By beto in forum mel PIC BASIC Pro
    Replies: 12
    Last Post: - 22nd December 2004, 15:26

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