Port alias in Port Expanders (MCP23S17)


Closed Thread
Results 1 to 19 of 19

Hybrid View

  1. #1
    Join Date
    Sep 2007
    Location
    Waco, Texas
    Posts
    151


    Did you find this post helpful? Yes | No

    Default Re: Port alias in Port Expanders (MCP23S17)

    Thanks!
    I tried your suggestion:
    Code:
                          OutA=$FFFF                                        'Initial value for word var                      
                          OutA.0=0                                       'Bit mod - WORKS
                          OutA.2=0                                       'Another bit mod - WORKS                      OutA.0=0                                       'Bit mod - WORKS
                          OutA.8=0                                       'Another bit mod - WORKS
                          OutA.10=0                                       'Bit mod - WORKS
                          OutA.12=0                                       'Another bit mod - WORKS
                          OutA_hi=OutA.highbyte                             'Splits into hibyte
                          OutA_lo=OutA.lowbyte                              'And into low byte of the word var
                            OutA_MCPReg = OLATA                             'Sets up PORTA output
                            OutA_DataOut=OutA_lo                            'Sets up data to be pushed to the MCP23S17 as the low byte
                            gosub SEND_OutA_2317                            'Send it
                            pause 10                                        'Wait a bit
                            OutA_MCPReg = OLATB                             'Sets up PORTB output
                            OutA_DataOut=OutA_hi                            'Sets up data to be pushed to the MCP23S17 as the hi byte
                            gosub SEND_OutA_2317                            'Send it
    And it works like a CHAMP!
    However (you knew it might come) how do I resolve a single byte variable which tells me which bit to turn on/off into a word var?
    My need for this home project, is to read a byte var and based on its value turn on/off a bit on the expander?
    Example: Var=$C, so I need to turn on the 12th bit on the expander.
    Regards,
    Steve
    "If we knew what we were doing, it wouldn't be called research"
    - Albert Einstein

  2. #2
    Join Date
    Sep 2007
    Location
    Waco, Texas
    Posts
    151


    Did you find this post helpful? Yes | No

    Default Re: Port alias in Port Expanders (MCP23S17)

    Richard-
    I tried the following:
    Code:
                          OutA=$FFFF                                        'Initial value for word var                      
                          PortDevice=$D                                     'Var from comm link
                          K=PortDevice                                      'Copes var to var for hex to dec converter
                          gosub H2D                                         'Perform sub
                          OutA.K=0     'PBP3 barks with 'Bad variable modifier
                          OutA.0=0                                          'Bit mod - WORKS
                          OutA.2=0                                          'Another bit mod - WORKS                      OutA.0=0                                       'Bit mod - WORKS
                          OutA.8=0                                          'Another bit mod - WORKS
                          OutA.10=0                                         'Bit mod - WORKS
                          OutA.12=0                                         'Another bit mod - WORKS
                          OutA_hi=OutA.highbyte                             'Splits into hibyte
                          OutA_lo=OutA.lowbyte                              'And into low byte of the word var
                            OutA_MCPReg = OLATA                             'Sets up PORTA output
                            OutA_DataOut=OutA_lo                            'Sets up data to be pushed to the MCP23S17 as the low byte
                            gosub SEND_OutA_2317                            'Send it
                            pause 10                                        'Wait a bit
                            OutA_MCPReg = OLATB                             'Sets up PORTB output
                            OutA_DataOut=OutA_hi                            'Sets up data to be pushed to the MCP23S17 as the hi byte
                            gosub SEND_OutA_2317                            'Send it
    In an effort to get from the single byte to the pointer, but PBP3 barks with the bad variable modifier.......
    There a ought to be a way to do this.......
    "If we knew what we were doing, it wouldn't be called research"
    - Albert Einstein

  3. #3
    Join Date
    Sep 2007
    Location
    Waco, Texas
    Posts
    151


    Did you find this post helpful? Yes | No

    Default Re: Port alias in Port Expanders (MCP23S17)

    OK, it is working!
    Thanks to all who helped and provided some food for thought.....
    Code below for any others who need to do this:
    Code:
                          OutA=$FFFF                                        'Initial value for word var - everything is OFF                      
                          PortDevice=$A                                     'Var from comm link
                          OutA.0[PortDevice]=0                              'This works!
    '                      OutA.2=0                                          'Manual bit mod - works though  
    '                      OutA.12=0                                         'Manual bit mod - works though
                          OutA_hi=OutA.highbyte                             'Splits into hibyte
                          OutA_lo=OutA.lowbyte                              'And into low byte of the word var
                            OutA_MCPReg = OLATA                             'Sets up PORTA output
                            OutA_DataOut=OutA_lo                            'Sets up data to be pushed to the MCP23S17 as the low byte
                            gosub SEND_OutA_2317                            'Send it
                            pause 10                                        'Wait a bit
                            OutA_MCPReg = OLATB                             'Sets up PORTB output
                            OutA_DataOut=OutA_hi                            'Sets up data to be pushed to the MCP23S17 as the hi byte
                            gosub SEND_OutA_2317                            'Send it
    Happy New Year!
    -Steve
    "If we knew what we were doing, it wouldn't be called research"
    - Albert Einstein

  4. #4
    Join Date
    May 2013
    Location
    australia
    Posts
    2,635


    Did you find this post helpful? Yes | No

    Default Re: Port alias in Port Expanders (MCP23S17)

    Code:
    OutA var word
    
    
    asm
    
    OutA_hi=OutA
    OutA_lo=OutA+1
    
    endasm
    
    OutA_hi var byte EXT
    OutA_lo var byte EXT

    the easy way

    ps I hope I got the endianness correct if not swap the hi byte low byte definitions
    Last edited by richard; - 2nd January 2016 at 23:33.

  5. #5
    Join Date
    May 2013
    Location
    australia
    Posts
    2,635


    Did you find this post helpful? Yes | No

    Default Re: Port alias in Port Expanders (MCP23S17)

    yep I did get it wrong (choice of two I will pick the wrong one every time)

    found my endianness note

    MyVar =$AABB would be stored little-endian. I.E. if the address
    of MyVar starts at 30h, then $BB will be stored at 30h followed by $AA at 31h


    so

    Code:
    asm
    OutA_hi=OutA+1
    OutA_lo=OutA
    endasm

  6. #6
    Join Date
    Sep 2007
    Location
    Waco, Texas
    Posts
    151


    Did you find this post helpful? Yes | No

    Default Re: Port alias in Port Expanders (MCP23S17)

    Thanks, I will give that a try.
    Now if I could write both bytes at the same SPI communication, that would be an even bigger win!
    "If we knew what we were doing, it wouldn't be called research"
    - Albert Einstein

  7. #7
    Join Date
    Aug 2011
    Posts
    453


    Did you find this post helpful? Yes | No

    Default Re: Port alias in Port Expanders (MCP23S17)

    If you have the MCP23S17 IOCON register set to it's default setting of $00 that sets the chip to 16-bit mode (BANK=0) with auto address increment enabled (SEQOP=0).

    In that mode you can send register address byte = $14 (OLATA) and then write the two data bytes and they'll go to OLATA and OLATB.

Similar Threads

  1. I2C question w/ MCP23017 Port Expanders
    By dsicon in forum mel PIC BASIC Pro
    Replies: 5
    Last Post: - 26th December 2012, 05:47
  2. 18F2520 - problem configuring fuse for port B as digital port.
    By hwhisperer in forum mel PIC BASIC Pro
    Replies: 2
    Last Post: - 11th October 2010, 11:41
  3. LCD R/S works on Port A but not Port B
    By TDonBass in forum mel PIC BASIC Pro
    Replies: 4
    Last Post: - 10th February 2009, 12:41
  4. RB port sequencer
    By freelancebee in forum mel PIC BASIC
    Replies: 0
    Last Post: - 17th August 2005, 19:58
  5. Duplicating port input to port output
    By lwindridge in forum mel PIC BASIC Pro
    Replies: 0
    Last Post: - 26th April 2004, 21:43

Members who have read this thread : 1

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