Shuffling variables


Closed Thread
Results 1 to 18 of 18

Hybrid View

  1. #1
    Join Date
    Jan 2010
    Posts
    88

    Default Shuffling variables

    OK, spent the better part of the night sorting through threads, but haven't found exactly what I was looking for. The process seems simple, but the pic finds it very complex. Here's what I'm trying to do. I have a large amount of code that pulses 4 outputs. Two outputs vs. the other two outputs. What I would like to do is be able to change the pairings of these outputs (i.e. 1 and 2 vs. 3 and 4, to 1 and 4 vs. 2 and 3 to 1 and 3 vs. 2 and 4).

    I've tried using variables, variable on variables, if..then statements, select case and even include files. The pics don't like this. I even looked at Darrel's virtualport code, but unless I'm mistaken, it's only for bits to ports. How can I change the ports, or their assignments around?

    Thanks,
    Tony

  2. #2


    Did you find this post helpful? Yes | No

    Default Re: Shuffling variables

    Could you draw a picture of what you're try to achieve and approx speed of pulses?

    George
    Last edited by towlerg; - 29th November 2014 at 09:48. Reason: old , stupid and can't spell

  3. #3
    Join Date
    Apr 2011
    Location
    Welches, Oregon
    Posts
    198


    Did you find this post helpful? Yes | No

    Default Re: Shuffling variables

    Yes, I too think more description, and perhaps, some code would help. For one thing there are many ways to do the same thing and by knowing which path you've taken it might be less obtrusive to follow along rather than reinvent the wheel, so to speak. Also, are you designing - and might have room or to add external circuitry (say a logic gate or mux chip) - or must this be exclusively software?

  4. #4
    Join Date
    Jan 2010
    Posts
    88


    Did you find this post helpful? Yes | No

    Default Re: Shuffling variables

    It must be strictly code. The following code is just a small, simple example of pulsing four outputs.

    Code:
      a  var  portb.0
      b  var  portb.1
      c  var  portb.2
      d  var  portb.3
    
    action:
    
      for x = 1 to 5
    
        a = 1
        b = 1
        c = 0
        d = 0
    
      pause 200
    
        a = 0
        b = 0
        c = 0
        d = 0
    
      pause 200
    
      next x
    
      for x = 1 to 5
    
        a = 0
        b = 0
        c = 1
        d = 1
    
      pause 200
    
        a = 0
        b = 0
        c = 0
        d = 0
    
      pause 200
    
      next x
    
      goto action
    What I want to do with the code is be able to change the assignment of the ports when an external input is received, therefore to be able to change the assignment as follows:

    Code:
      a  var  portb.3
      b  var  portb.2
      c  var  portb.1
      d  var  portb.0
    or
    Code:
      a  var  portb.0
      b  var  portb.3
      c  var  portb.2
      d  var  portb.1
    or
    Code:
      a  var  portb.0
      b  var  portb.2
      c  var  portb.1
      d  var  portb.3
    This is the only part I'm struggling with. I can do the rest of the code, but to change the assignment, I am having great difficulty.

    As I said, I tried using if..then statements, select case, the above variables won't work once they've been set. I even tried using other variable to substitute for the port aliases. My setup didn't like it. To me it looks like it should work, but the pic might not see it that way.

    Don't judge where the returns are and missing code. That was done just so you know that they didn't flow into each other. The way it works is that when action is run, it runs through its code continuously until a button is pressed. Once pressed, it jumps to an on..gosub command where it advances the pairing change option by one. When the pairs have been reassigned, it goes back to action and runs the code with the new pairing assignment.

    Code:
      a  var  portb.0
      b  var  portb.1
      c  var  portb.2
      d  var  portb.3
      e  var  word
      f  var  word 
      g  var  word
      h  var  word
    
    pair1:
    '  1 and 2 vs. 3 and 4
    
      e = a
      f = b
      g = c
      h = d
    
      return                         ' return to pairing change
    
    pair2:
    '  1 and 4 vs. 2 and 3
    
      e = a
      f = d
      g = b
      h = c
    
      return                         ' return to pairing change
    
    action:
    ' alternating flash
    
      for x = 1 to 5
    
        e = 1
        f = 1
        g = 0
        h = 0
    
        pause 200
    
        e = 0
        f = 0
        g = 0
        h = 0
    
        pause 200
    
      next x
    
      for x = 1 to 5
    
        e = 0
        f = 0
        g = 1
        h = 1
    
        pause 200
    
        e = 0
        f = 0
        g = 0
        h = 0
    
        pause 200
    
      next x
    Does any of this make any sense and am I at all on the right track or at least headed in the right direction or did I hit a dead end?

  5. #5


    Did you find this post helpful? Yes | No

    Default Re: Shuffling variables

    I'm not sure that helped. All I got from that was at different times the mapping between the bit variables A,B,C and D and the physical bits 0 thro 3 of PortB varies according to some rule.
    Is that correct?

    George

  6. #6
    Join Date
    Jan 2009
    Location
    Miami, Florida USA
    Posts
    699


    Did you find this post helpful? Yes | No

    Default Re: Shuffling variables

    Quote Originally Posted by ERMEGM View Post
    This is the only part I'm struggling with. I can do the rest of the code, but to change the assignment, I am having great difficulty.
    Well, you are having great difficulty because you cannot reassign ports like that in the program. Ports are only assigned to variables at the beginning of the program.
    "No one is completely worthless. They can always serve as a bad example."

    Anonymous

  7. #7
    Join Date
    May 2013
    Location
    australia
    Posts
    2,644


    Did you find this post helpful? Yes | No

    Default Re: Shuffling variables

    Does any of this make any sense and am I at all on the right track or at least headed in the right direction or did I hit a dead end?
    looks like a dead end to me . try this way
    code is for a 12f1822 so uses porta and porta.3 is input only . but you get the idea

    Code:
    '****************************************************************
    '*  Name    : UNTITLED.BAS                                      *
    '*  Author  : [select VIEW...EDITOR OPTIONS]                    *
    '*  Notice  : Copyright (c) 2014 [select VIEW...EDITOR OPTIONS] *
    '*          : All Rights Reserved                               *
    '*  Date    : 29/11/2014                                        *
    '*  Version : 1.0                                               *
    '*  Notes   :                                                   *
    '*          :   pic12f1822                                                *
    '****************************************************************
    #CONFIG
    cfg1 = _FOSC_INTOSC
    cfg1&= _WDTE_ON
    cfg1&= _PWRTE_OFF
    cfg1&= _MCLRE_ON
    cfg1&= _CP_OFF
    cfg1&= _CPD_OFF
    cfg1&= _BOREN_ON
    cfg1&= _CLKOUTEN_OFF
    cfg1&= _IESO_ON
    cfg1&= _FCMEN_ON
      __CONFIG _CONFIG1, cfg1
    cfg2 = _WRT_OFF
    cfg2&= _PLLEN_OFF
    cfg2&= _STVREN_ON
    cfg2&= _BORV_19
    cfg2&= _LVP_OFF
      __CONFIG _CONFIG2, cfg2
    #ENDCONFIG
    
       osccon=$6a    '4 mhz
       anselA=0  
       trisa=000
       
      a  var  byte
      b  var  byte
      c  var  byte
      d  var  byte
      pin_mode var byte
      x var byte
      
      a=0
      b=1
      c=2
      d=4
      pin_mode=0
     
     action:
      for x = 1 to 5
      lata.0[a] = 1
      lata.0[b] = 1
      lata.0[c]= 0
      lata.0[d]= 0
      pause 200
      lata.0[a] = 0
      lata.0[b] = 0
      lata.0[c]= 0
      lata.0[d]= 0
      pause 200
      next x
      for x = 1 to 5
      lata.0[a] = 0
      lata.0[b] = 0
      lata.0[c]= 1
      lata.0[d]= 1
      pause 200
      lata.0[a] = 0
      lata.0[b] = 0
      lata.0[c]= 0
      lata.0[d]= 0
      pause 200
      next x
      gosub shuffle
      goto action
      
       shuffle :
       pin_mode=pin_mode+1
      select case pin_mode
      case 1
       a=4  ;a  var  portb.3
       b=2  ;b  var  portb.2
       c=1   ;c  var  portb.1
       d=0    ;d  var  portb.0
      case 2
       a=0  ;a  var  portb.0
       b=4  ;b  var  portb.3
       c=2   ;c  var  portb.2
       d=1    ;d  var  portb.1
      case 3
       a=0  ;a  var  portb.0
       b=2  ;b  var  portb.2
       c=1   ;c  var  portb.1
       d=4    ;d  var  portb.3 
      case 4
       a=0  ;a  var  portb.0
       b=1  ;b  var  portb.1
       c=2   ;c  var  portb.2
       d=4    ;d  var  portb.3 
       pin_mode=0
      end select
      return

  8. #8
    Join Date
    May 2013
    Location
    australia
    Posts
    2,644


    Did you find this post helpful? Yes | No

    Default Re: Shuffling variables

    another approach
    Code:
    '*  Name    : UNTITLED.BAS                                      *
    '*  Author  : [select VIEW...EDITOR OPTIONS]                    *
    '*  Notice  : Copyright (c) 2014 [select VIEW...EDITOR OPTIONS] *
    '*          : All Rights Reserved                               *
    '*  Date    : 29/11/2014                                        *
    '*  Version : 1.0                                               *
    '*  Notes   :                                                   *
    '*          :   pic12f1822                                                *
    '****************************************************************
    #CONFIG
    cfg1 = _FOSC_INTOSC
    cfg1&= _WDTE_ON
    cfg1&= _PWRTE_OFF
    cfg1&= _MCLRE_ON
    cfg1&= _CP_OFF
    cfg1&= _CPD_OFF
    cfg1&= _BOREN_ON
    cfg1&= _CLKOUTEN_OFF
    cfg1&= _IESO_ON
    cfg1&= _FCMEN_ON
      __CONFIG _CONFIG1, cfg1
    cfg2 = _WRT_OFF
    cfg2&= _PLLEN_OFF
    cfg2&= _STVREN_ON
    cfg2&= _BORV_19
    cfg2&= _LVP_OFF
      __CONFIG _CONFIG2, cfg2
    #ENDCONFIG
    
       osccon=$6a    '4 mhz
       anselA=0  
       trisa=000
       
      a  var  byte
      b  var  byte
      c  var  byte
      d  var  byte
      pin_mode var byte
      x var byte
      all_off var byte
      
      pins_on var byte
      
     
      
      
      
      a=1        ;portb.0
      b=2         ;portb.1
      c=4         ;portb.2
      d=16        ;portb.4
      pin_mode=0
      
      all_off=!(a+b+c+d)
     
      lata =   lata & all_off
     action:
      pins_on=a+b
      for x = 1 to 5
      lata =   lata | pins_on
      
      
      pause 200
      lata =   lata & all_off
      
      pause 200
      next x
      pins_on=c+d
      for x = 1 to 5
       lata =   lata | pins_on
      pause 200
      lata =   lata & all_off
      pause 200
      next x
      gosub shuffle
      goto action
      
       shuffle :
       pin_mode=pin_mode+1
      select case pin_mode
      case 1
       a=16  ;a  var  portb.3
       b=4  ;b  var  portb.2
       c=2   ;c  var  portb.1
       d=1    ;d  var  portb.0
      case 2
       a=1  ;a  var  portb.0
       b=16  ;b  var  portb.3
       c=4   ;c  var  portb.2
       d=2    ;d  var  portb.1
      case 3
       a=1  ;a  var  portb.0
       b=2  ;b  var  portb.2
       c=2   ;c  var  portb.1
       d=16    ;d  var  portb.3 
      case 4
       a=1  ;a  var  portb.0
       b=2 ;b  var  portb.1
       c=4   ;c  var  portb.2
       d=16    ;d  var  portb.3 
       pin_mode=0
      end select
      return

Similar Threads

  1. How about String Variables?
    By mytekcontrols in forum PBP Wish List
    Replies: 40
    Last Post: - 20th January 2015, 12:53
  2. Replies: 2
    Last Post: - 12th November 2014, 07:57
  3. IF - WHILE and variables
    By flotulopex in forum mel PIC BASIC Pro
    Replies: 5
    Last Post: - 15th April 2009, 13:01
  4. Using Variables with Debug
    By krohtech in forum mel PIC BASIC Pro
    Replies: 2
    Last Post: - 17th December 2007, 02:47
  5. Help with using variables
    By jessey in forum mel PIC BASIC Pro
    Replies: 2
    Last Post: - 19th June 2005, 16:03

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