activating i/o ports according to variable value


Closed Thread
Results 1 to 13 of 13
  1. #1
    Join Date
    Jul 2010
    Posts
    6

    Default activating i/o ports according to variable value

    Hi all, I am trying to work out a way to generate a variable using a for .. to .. next loop and then send the i/o port (let's say b for arguments sake) corresponding to the numeric variable value high .. eg (for x=0 to 4: high portb.x: next x). Now this doesn't work one little bit but I was wondering if there was a way to do it ( different code ) same outcome....

    Cheers

  2. #2
    Join Date
    Nov 2004
    Posts
    61


    Did you find this post helpful? Yes | No

    Default

    Code:
    FOR x = 0 to 5
    HIGH PORTB.0[x]
    Pause 100
    Next x

  3. #3
    Join Date
    Jul 2010
    Posts
    6


    Did you find this post helpful? Yes | No

    Default Thanks..but still no go :)

    Thanks JEC .. gave it a whirl but got a comiling error...

  4. #4
    Join Date
    Jul 2003
    Posts
    2,405


    Did you find this post helpful? Yes | No

    Default

    Did you declare X VAR BYTE? Should work fine otherwise. What error do you get?
    Regards,

    -Bruce
    tech at rentron.com
    http://www.rentron.com

  5. #5
    Join Date
    Sep 2005
    Location
    Campbell, CA
    Posts
    1,107


    Did you find this post helpful? Yes | No

    Default

    Here is a program I posted some time ago. It can be used as an example to do what you are trying to do.

    http://www.picbasic.co.uk/forum/show...highlight=port
    Charles Linquist

  6. #6
    Join Date
    Jul 2010
    Posts
    6


    Did you find this post helpful? Yes | No

    Smile I'll see what happens

    Thanks Charles, I haven't had time to run a test but maybe I've spotted my problem whilst checking your code.

    IF PortValue = 4 THEN
    HSEROUT [10,13,"Port A4 is Open Collector!",13,10]
    ENDIF
    ADCON1 = $FF
    TRISA.0(PortValue)= 0 'Make it an output
    PauseUs 20
    PORTA.0(PortValue) = 0 'Write a '0'
    GOTO StateCheck
    ENDIF


    My understanding, according to the code, is that I should use round brackets not square brackets as I misunderstood? JEC's code to show???? I'll try and see if it works

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


    Did you find this post helpful? Yes | No

    Default

    What port and chip are you using?
    Have you shut the ADC off if the port has one.
    Dave
    Always wear safety glasses while programming.

  8. #8
    Join Date
    Jul 2010
    Posts
    6


    Did you find this post helpful? Yes | No

    Smile 16F's

    I'm using mainly 16f628a's or a spare f84a I found lying around...all been tested and humming nicely.
    With the code for 16f628a I am setting porta.4 to standard i/o with CMCON = 7 ... but I tested with ports b 1 through 5 earlier when I got the compiler error.
    Am I right about the brackets? (round vs square)??

  9. #9
    Join Date
    Jul 2003
    Posts
    2,405


    Did you find this post helpful? Yes | No

    Default

    It works with [] or () for the bit index variable, but the high & low commands won't work with a variable bit index.

    For bit indexing port pins you need to assign a 0 or 1 to the pin like this;
    Code:
    Main:
      for x = 0 to 7
        portb.0[x] = 1
        pauseus 200
        portb.0[x] = 0
        pauseus 200
      next
     
      GOTO Main
    Regards,

    -Bruce
    tech at rentron.com
    http://www.rentron.com

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


    Did you find this post helpful? Yes | No

    Default

    If you are using LEDs to see what is happening you may want to change
    PAUSEUS
    to
    PAUSE
    in the Bruce's code.
    Dave
    Always wear safety glasses while programming.

  11. #11
    Join Date
    Jul 2010
    Posts
    6


    Did you find this post helpful? Yes | No

    Smile High Low Vs 1/0 value

    Well that's great news - I will try the new code tonight assigning binary values as opposed to using the 'high' or 'low' statements.

    Here is the test code I was using:

    device = 16f628a
    x var byte
    loop:
    for x=0 to 5
    high portb.(x)
    pause 500
    low portb.(x)
    pause 500
    next x
    goto loop

    and here is the error message:

    Error at line [9] in file [84test.bas] ***Unrecognised characters '(x)'! ***
    Error at line [11] in file [84test.bas] ***Unrecognised characters '(x)'! ***

    Hopefully assigning a value will work...I'll try it out in about 3 hours when I get the kids to bed and I'm sensing a breakthrough here

  12. #12
    Join Date
    Jul 2010
    Posts
    6


    Did you find this post helpful? Yes | No

    Unhappy oh no

    Still no joy. Now I get a missing operator '=' error at both the lines where I assign portvalues.. sorry about not posting code however my programming terminal has no net access and I forgot to put it into my flashdrive.)

  13. #13
    Join Date
    Jul 2003
    Posts
    2,405


    Did you find this post helpful? Yes | No

    Default

    Cut & paste the example in post #9. It definitely works. And I would avoid the use of loop as a lable since this is a reserved word in version 2.6 and up.
    Regards,

    -Bruce
    tech at rentron.com
    http://www.rentron.com

Members who have read this thread : 2

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