How to use For Next Loop to run sequence light ?


Closed Thread
Results 1 to 14 of 14

Hybrid View

  1. #1
    Join Date
    Aug 2010
    Posts
    7

    Default How to use For Next Loop to run sequence light ?

    Code:
    @ DEVICE pic16F628A, INTRC_OSC_NOCLKOUT, MCLR_OFF
    CMCON = 7
     
    Counter var Byte
    Counter = 0
     
    Routine:
     
    For Counter = 0 to 6
    High PortB.Counter
    Next Counter
     
    pause 500
     
    For Counter = 0 to 6
    Low PortB.Counter
    Next Counter
     
    pause 500
     
    GoTo Routine

    Apparently:
    Code:
    High PortB.Counter
    and
    Code:
    Low PortB.Counter
    is giving me errors, I could have done this with no errors:
    Code:
    For Counter = 0 to 6
    High Counter
    Next Counter
    but this will be a PICBasic command and I will not be able to control PortA.

    How do I use the For Next Loop to handle PortA too ?

    Hi,

    PortA.something ... something must be a CONSTANT ...

    so, try indexing PortA

    Code:
    PortA.0[counter] = 1 
    ; OR
    HIGH PortA.0[counter]
    Should compile fine.
    Alain
    Last edited by Acetronics2; - 29th August 2010 at 10:33.

  2. #2
    Join Date
    Aug 2010
    Posts
    7


    Did you find this post helpful? Yes | No

    Default

    I've tried it, and it does compile

    Unfortunately, when I put it in my circuit, only PortB.0 Blinks!
    Ooo Nooooo!!!!

    Code:
    @ DEVICE pic16F628A, INTRC_OSC_NOCLKOUT, MCLR_OFF
    CMCON = 7
    
    Counter var Byte
    
    SubRoutine:
    
    For Counter = 0 to 2
    high PortB.0[Counter]
    high PortA.0[Counter]
    Next Counter
    
    Pause 500
    
    For Counter = 0 to 2
    Low PortB.0[Counter]
    Low PortA.0[Counter]
    Next Counter
    
    pause 800
    Goto SubRoutine

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


    Did you find this post helpful? Yes | No

    Default

    Quote Originally Posted by Bracer View Post
    I've tried it, and it does compile

    Unfortunately, when I put it in my circuit, only PortB.0 Blinks!
    Ooo Nooooo!!!!
    Include this lines in your program

    Code:
    TRISA = 0 ' Make them all outputs
    TRISB = 0
    Robert
    "No one is completely worthless. They can always serve as a bad example."

    Anonymous

  4. #4
    Join Date
    Aug 2010
    Posts
    7


    Did you find this post helpful? Yes | No

    Default

    Thanks.

    Ok Now all the LEDs light up.

    BUT only PortB.0 and PortB.1 Blinks.

    Again, this the code:
    Code:
    @ DEVICE pic16F628A, INTRC_OSC_NOCLKOUT, MCLR_OFF
    CMCON = 7
    TRISA = 0 ' Make them all outputs
    TRISB = 0
    
    Counter var Byte
    
    SubRoutine:
    
    For Counter = 0 to 2
    high PortB.0[Counter]
    high PortA.0[Counter]
    Next Counter
    
    Pause 600
    
    For Counter = 0 to 2
    Low PortB.0[Counter]
    Low PortA.0[Counter]
    Next Counter
    
    pause 100
    Goto SubRoutine

  5. #5
    Join Date
    May 2004
    Location
    NW France
    Posts
    3,648


    Did you find this post helpful? Yes | No

    Default

    Quote Originally Posted by Bracer View Post
    Thanks.

    Ok Now all the LEDs light up.

    BUT only PortB.0 and PortB.1 Blinks.

    Again, this the code:
    Code:
    @ DEVICE pic16F628A, INTRC_OSC_NOCLKOUT, MCLR_OFF
    CMCON = 7
    TRISA = 0 ' Make them all outputs
    TRISB = 0
     
    Counter var Byte
     
    SubRoutine:
     
    For Counter = 0 to 2
    high PortB.0[Counter]
    high PortA.0[Counter]
    Next Counter
     
    Pause 600
     
    For Counter = 0 to 2
    Low PortB.0[Counter]
    Low PortA.0[Counter]
    Next Counter
     
    pause 100
    Goto SubRoutine
    Hi, Bracer

    I suspect a RMW issue ... as HIGH and LOW already cares of driving inputs and outputs

    How much current do you send to your Leds ???

    try to limit it to 5 mA per Led ... as a first try.

    as a second try ...

    Code:
    @ DEVICE pic16F628A, INTRC_OSC_NOCLKOUT, MCLR_OFF
    CMCON = 7
    TRISA = 0 ' Make them all outputs
    TRISB = 0
     
    Counter var Byte
     
    SubRoutine:
     
    PORTA = PORTA | % 00000111
    PORTB = PORTB | % 00000111
    Pause 600
     
    PORTA = PORTA & % 11111000
    PORTB = PORTB & % 11111000
     
    pause 100
     
    Goto SubRoutine
    a scheme of your circuit really would be welcome ...

    Alain
    Last edited by Acetronics2; - 29th August 2010 at 17:03.
    ************************************************** ***********************
    Why insist on using 32 Bits when you're not even able to deal with the first 8 ones ??? ehhhhhh ...
    ************************************************** ***********************
    IF there is the word "Problem" in your question ...
    certainly the answer is " RTFM " or " RTFDataSheet " !!!
    *****************************************

  6. #6
    Join Date
    Aug 2010
    Posts
    7


    Did you find this post helpful? Yes | No

    Default

    I am getting a
    Code:
    WARNING Line 20: Bad token "%".
    WARNING Line 21: Bad token "%".
    WARNING Line 24: Bad token "%".
    WARNING Line 25: Bad token "%".
    WARNING Line 24: 11111000 Numeric overflow, value truncated. (Test.pbp)
    WARNING Line 25: 11111000 Numeric overflow, value truncated. (Test.pbp)
    When I copy and paste the code your exact codes.


    You are right Acetronics, I am using a +6V, but I did try the manual "High PortA.0" way to manually set each pin and it works.
    Every single pins are all functional, so it couldn't have been a pin damage issue.

    The schematic is really empty, Pin 5 to the negative and Pin 14 to the positive,
    PortB.0 ~ PortB.2 to LEDs.
    PortA.0 ~PortA.2 to LEDs, that's all.

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