+ Reply to Thread
Results 1 to 18 of 18
  1. #1
    Join Date
    Jun 2006
    Posts
    60

    Default read/write eeprom

    First give credit to Peter Olsen who wrote these programs for a picaxe. I'm trying to convert using a 12F683 to write to a 24LC256 and read back from it. The Angel file downloads file to 24lc256 from PC. Newtoyshop is suppose to read from the 24lc256 and output to 2 74hc595's. When I write to eeprom then read back I get jumbled up mess. The Angel file runs in power basic.


    Hi, we are pleased to see that you are using our forum.

    We'd like you to become a member of our community. Membership is FREE, please REGISTER and view our forums without these annoying reminders!

    Once registered you may post on the forums, download from the file areas and use the WIKI without interruption.




    Attached Files Attached Files

  2. #2
    Join Date
    Nov 2003
    Location
    Wellton, U.S.A.
    Posts
    5,805

    Default

    In my opinion..
    You would be better off not wasting time trying to convert a program that may or may not have worked for another platform.

    You know what you want the program to do?
    Write from scratch. In PBP...
    Dave
    Always wear safety glasses while programming.

  3. #3
    Join Date
    Jun 2006
    Posts
    60

    Default

    It did work on a picaxe. I'm trying to write it in PBP with the other program as a reference, being new at this having a heck of a time. Not giving up.

  4. #4
    Join Date
    Nov 2003
    Location
    Wellton, U.S.A.
    Posts
    5,805

    Default

    Not giving up is good!

    To learn how to work with external eeproms try the I2C sample here
    http://www.melabs.com/resources/samples.htm

    Or wait till someone comes along that knows picaxe...

    and this may help with the 595s.
    http://www.picbasic.co.uk/forum/showthread.php?t=10200

    Put something together in PBP and we will help you debug it.
    Dave
    Always wear safety glasses while programming.

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

    Default

    Tray adding the following two defines:

    DEFINE I2C_SLOW 1
    DEFINE I2C_HOLD 1


    Al.
    All progress began with an idea

  6. #6
    Join Date
    Nov 2003
    Location
    Wellton, U.S.A.
    Posts
    5,805

    Default

    DOH!!!

    My apologies...
    The way I read the first post I did not think you had any code of your own.

    And I hate opening attachments...

    Use code tags in the future.
    Dave
    Always wear safety glasses while programming.

  7. #7
    Join Date
    Jun 2006
    Posts
    60

    Default

    I'll try the Defines and whenever I use code tags the code jumbles up or leaves stuff out, tried this a couple times on other questions and it left parts of the code out.

  8. #8
    Join Date
    Aug 2006
    Location
    La La Land, where errant code runs by.
    Posts
    2,552

    Default

    Quote Originally Posted by mel4853 View Post
    I'll try the Defines and whenever I use code tags the code jumbles up or leaves stuff out, tried this a couple times on other questions and it left parts of the code out.
    replace the word magic with the word code

    [magic] your code goes here [/magic]
    Anti virus software seems a little like hiring the Mafia to protect you.
    The Devil's advocate is not a supporter,
    He simply wants to be sure he has no grounds for appeal.



  9. #9
    Join Date
    Jun 2006
    Posts
    60

    Default

    The Defines worked!!! Couple other little changes and I believe it works, except for when I download from PC it just hangs. Cycle power and all takes off and works fine. Seems to get stuck in interrupt. Here's the code now trying Joe S. method.

    [magic] Include "modedefs.bas"
    INCLUDE "DT_INTS-14.bas" ' Base Interrupt System
    INCLUDE "ReEnterPBP.bas" ' Include if using PBP interrupts
    define osc 8
    define DEBUGIN_REG GPIO
    define DEBUGIN_BIT 3
    define DEBUGIN_BAUD 2400
    define DEBUGIN_MODE 1
    define I2C_SLOW 1
    define I2C_HOLD 1

    Dpin var GPIO.2 'Data pin
    Cpin var GPIO.0 'Clock pin
    Lpin var GPIO.1 'Latch pin
    Dapin var GPIO.4 '24LC256 data pin
    Clpin var GPIO.5 '24lc256 clock pin
    serialin var GPIO.3 'Input from PC
    cont con $A0
    addr var word
    CMCON0=$07 'Shut off comparators
    ANSEL=$00 'Set all digital
    ADCON0=$00 'Shut off A/D Converter
    TRISIO=$08 'Set all to outputs except GPIO.3 is input
    INTCON.7=1 'Enable all unmasked interrupts
    IOC=$08 'Enable interrupts on input3
    GPIO=$00
    b1 var byte
    b2 var byte
    chipnum var byte
    thischip var byte


    ASM
    INT_LIST macro ; IntSource, Label, Type, ResetFlag?
    INT_Handler GPC_INT, _ToggleLED1, PBP, yes
    endm
    INT_CREATE ; Creates the interrupt processor

    INT_ENABLE GPC_INT ; enable external (INT) interrupts
    ENDASM

    Start:
    addr=0

    loop:
    I2Cread dapin,clpin,cont,addr,[b1,b2] 'Read from 24lc256
    if b2=$FF then goto Start 'If b2=FF start over
    for chipnum=0 to 1 'Load into 74hc595
    lookup2 chipnum,[b2,b1],thischip 'Load into 74hc595
    shiftout dpin,cpin,LSBFIRST,[thischip] 'Put out onto chips
    next chipnum
    pulsout lpin,10 'Latch data onto 74hc595
    addr=addr+2 'Next eeprom location
    pause 600
    goto loop

    '---[INT - interrupt handler]---------------------------------------------------
    ToggleLED1:
    addr=0 'Start writing at eeprom location 0
    NEXTSTEP:
    debugin[#b1,#b2] 'Read input
    i2cwrite dapin,clpin,cont,addr,[b1,b2] 'Store in eeprom
    pause 10 'Wait between writes
    addr=addr+2 'Next eeprom loc
    if b2 <> $FF then nextstep 'FF means end of data
    low serialin
    Finish:
    @ INT_RETURN
    end [/magic]

  10. #10
    Join Date
    Nov 2003
    Location
    Wellton, U.S.A.
    Posts
    5,805

    Default

    Joe said to replace the word magic with the word code
    Dave
    Always wear safety glasses while programming.

  11. #11
    Join Date
    Jun 2006
    Posts
    60

    Default

    Sorry trying to fix supper for my daughter and was reading to fast.
    Code:
    Include "modedefs.bas"
    INCLUDE "DT_INTS-14.bas"     ' Base Interrupt System
    INCLUDE "ReEnterPBP.bas"     ' Include if using PBP interrupts
    define osc 8
    define DEBUGIN_REG GPIO
    define DEBUGIN_BIT 3
    define DEBUGIN_BAUD 2400
    define DEBUGIN_MODE 1
    define I2C_SLOW 1
    define I2C_HOLD 1 
    
    Dpin var GPIO.2       'Data pin
    Cpin var GPIO.0       'Clock pin
    Lpin var GPIO.1       'Latch pin
    Dapin var GPIO.4      '24LC256 data pin
    Clpin var GPIO.5      '24lc256 clock pin
    serialin  var GPIO.3  'Input from PC
    cont con $A0          
    addr var word
    CMCON0=$07            'Shut off comparators
    ANSEL=$00             'Set all digital
    ADCON0=$00            'Shut off A/D Converter
    TRISIO=$08            'Set all to outputs except GPIO.3 is input
    INTCON.7=1            'Enable all unmasked interrupts
    IOC=$08               'Enable interrupts on input3
    GPIO=$00
    b1 var byte
    b2 var byte
    chipnum  var byte
    thischip var byte
    
    
    ASM
    INT_LIST  macro    ; IntSource,        Label,  Type, ResetFlag?
            INT_Handler    GPC_INT,  _ToggleLED1,   PBP,  yes
        endm
        INT_CREATE               ; Creates the interrupt processor
    
        INT_ENABLE   GPC_INT     ; enable external (INT) interrupts
    ENDASM
    
    Start:
      addr=0
      
    loop:
      I2Cread dapin,clpin,cont,addr,[b1,b2]      'Read from 24lc256
      if b2=$FF then goto Start                  'If b2=FF start over
      for chipnum=0 to 1                         'Load into 74hc595
      lookup2 chipnum,[b2,b1],thischip           'Load into 74hc595
      shiftout dpin,cpin,LSBFIRST,[thischip]     'Put out onto chips
      next chipnum
      pulsout lpin,10                            'Latch data onto 74hc595
      addr=addr+2                                'Next eeprom location
      pause 600
      goto loop
    
    '---[INT - interrupt handler]---------------------------------------------------
    ToggleLED1:
       addr=0                                    'Start writing at eeprom location 0
    NEXTSTEP: 
        debugin[#b1,#b2]                         'Read input
        i2cwrite dapin,clpin,cont,addr,[b1,b2]   'Store in eeprom
        pause 10                                 'Wait between writes
        addr=addr+2                              'Next eeprom loc
        if b2 <> $FF then nextstep               'FF means end of data
        low serialin
    Finish:
    @ INT_RETURN
      end

  12. #12
    Join Date
    Aug 2006
    Location
    La La Land, where errant code runs by.
    Posts
    2,552

    Default

    Quote Originally Posted by mel4853 View Post
    The Defines worked!!! Couple other little changes and I believe it works, except for when I download from PC it just hangs. Cycle power and all takes off and works fine. Seems to get stuck in interrupt.
    I am thinking it is looping @ nexstep maybe it is not seeing $FF as there is no way out of the loop until it does = $FF
    Anti virus software seems a little like hiring the Mafia to protect you.
    The Devil's advocate is not a supporter,
    He simply wants to be sure he has no grounds for appeal.



  13. #13
    Join Date
    Jun 2006
    Posts
    60

    Default

    At the end of PC download (Angel.bas) it puts out 255 on all

  14. #14
    Join Date
    May 2008
    Location
    Italy
    Posts
    775

    Default

    How many bytes you need to tx?

    This piece of code is not working properly, since the delay due to the instructions to be executed plus the pause will surely make you loose Tx data.

    Code:
    NEXTSTEP: 
        debugin[#b1,#b2]                         'Read input
        i2cwrite dapin,clpin,cont,addr,[b1,b2]   'Store in eeprom
        pause 10                                 'Wait between writes
        addr=addr+2                              'Next eeprom loc
        if b2 <> $FF then nextstep             'FF means end of data 
    Think about to tx the whole packet in one go using array.

    Replace pause 600 with For A0=1 to 120 :Pause 5:Next A0


    Al.
    Last edited by aratti; - 28th February 2010 at 08:45.
    All progress began with an idea

  15. #15
    Join Date
    Jun 2006
    Posts
    60

    Default

    I'm sending a varible amount of bytes, so far have lost none. The pause 600 is up where I read from eeprom. There's a pause 10 in interrupt routine to give time to write to eeprom. Everything works but doesn't seem to want to exit interrupt routine.

  16. #16
    Join Date
    May 2008
    Location
    Italy
    Posts
    775

    Default

    Everything works but doesn't seem to want to exit interrupt routine.
    Because you have a problem with the timing in serial TX/RX.(as mentioned in post#14)

    Use a timeout to exit from DEBUGIN because you get stack there.

    Al.
    All progress began with an idea

  17. #17
    Join Date
    Jun 2006
    Posts
    60

    Default

    Shouldn't it exit when b2=$FF? I send a $FF at the end of all the data I want sent.
    if b2 <> $FF then nextstep 'FF means end of data
    That's the way I understand, but I've been wrong alot of times.(As my wife says) If not I'll sure put in a timeout. Thanks.

  18. #18
    Join Date
    Jun 2006
    Posts
    60

    Default

    Put in the timeout and works perfectly. Thanks to all that helped.

    Mike

Similar Threads

  1. Can't read sequential addresses in external EEPROM
    By tjkelly in forum mel PIC BASIC Pro
    Replies: 2
    Last Post: - 18th February 2010, 14:46
  2. External EEPROM can't read/write
    By coyotegd in forum mel PIC BASIC Pro
    Replies: 16
    Last Post: - 16th May 2008, 22:13
  3. How to write/read strings EEPROM/LCD
    By g-hoot in forum mel PIC BASIC Pro
    Replies: 22
    Last Post: - 11th February 2007, 06:26
  4. Internal EEPROM Read/write Addressing Errors with 18F PIC's
    By Melanie in forum FAQ - Frequently Asked Questions
    Replies: 18
    Last Post: - 12th July 2005, 19:42
  5. word variable to 25lc640
    By TONIGALEA in forum mel PIC BASIC Pro
    Replies: 5
    Last Post: - 6th July 2004, 19:59

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