Today 21:07
Forum: The Lounge
Starter: charliecoultas
Views: 0
Replies: 2
Today 16:26
Forum: Proton Plus Compiler v3
Starter: rcurl
Views: 0
Replies: 13
Today 16:25
Forum: Proton Plus Compiler v3
Starter: evoortman
Views: 0
Replies: 11
Today 10:31
Forum: New devices and techniques
Starter: normnet
Views: 0
Replies: 0
Today 10:08
Forum: Proton Plus Compiler v3
Starter: palamont
Views: 0
Replies: 2
Closed Thread
Page 1 of 3 123 LastLast
Results 1 to 10 of 21

Thread: Problem in pulse per second meter208 days old

  1. #1
    Junior Member amod's Avatar
    Join Date
    Mar 2018
    Posts
    51
    Thumbs Up
    Received: 34
    Given: 4
    Total Downloaded
    5.95 MB

    2 Not allowed!

    Default Problem in pulse per second meter

    Iam making pulse per second meter.My problem is that all four seven segment displays blinks,the are not stable.My program is below.


    Device = 16F886


    Config1 FOSC_INTRC_CLKOUT, WDTE_OFF, PWRTE_OFF, MCLRE_ON, CP_OFF, CPD_OFF, BOREN_OFF, IESO_OFF, FCMEN_OFF, LVP_OFF, DEBUG_OFF
    Config2 BOR4V_BOR21V, WRT_OFF


    ;**** End of Fuse Configurator Settings ****
    ;-------------------------------------------------------------------------------








    Xtal=4




    Dim DG As Byte
    Dim DIGIT As Byte
    Dim n As Word
    Dim NUMB As Word
    Dim countt As Byte
    Dim dg1 As Byte
    Dim dg2 As Byte
    Dim DG3 As Byte
    Dim dg4 As Byte

    Symbol pin =PORTA.2




    ADCON1=%10000000
    ADCON0=%01000011
    TRISA=%01111101
    TRISB=0
    TRISC=%00010000
    ANSELH=%00000001
    ANSEL=%00000001
    CM1CON0=0
    CM2CON0=0
    VRCON=0





    main:


    NUMB=Counter pin,1000
    n=NUMB




    GoSub DISPLAY
    GoSub DIGITCALC


    GoTo main


    DISPLAY: ;breaking digits into 4 display


    For countt=0 To 99


    PORTB=dg1
    PORTC.3=0
    DelayUS 100
    PORTC.3=1


    PORTB=dg2
    PORTC.2=0
    DelayUS 100
    PORTC.2=1


    PORTB=DG3
    PORTC.1=0
    DelayUS 100
    PORTC.1=1

    PORTB=dg4
    PORTC.0=0
    DelayUS 100
    PORTC.0=1


    Next countt


    Return


    '_________________________________________________ _______________






    '_________________________________________________ _________________________
    DIGITCALC: ;data to each display ones,tens,hundred,thousands


    DIGIT=0
    LP1:
    If n<1000 Then DS1
    n=N-1000
    DIGIT=DIGIT+1
    GoTo LP1
    DS1:
    GoSub FND
    dg1=DG



    DIGIT=0
    LP2:
    If n<100 Then DS2
    n=N-100
    DIGIT=DIGIT+1
    GoTo LP2


    DS2:
    GoSub FND
    dg2=DG


    DIGIT=0
    LP3:
    If n<10 Then DS3
    n=N-10
    DIGIT=DIGIT+1
    GoTo LP3


    DS3:
    GoSub FND
    DG3=DG


    DIGIT=n
    GoSub FND
    dg4=DG

    Return






    '_________________________________________________ _________________________




    '_________________________________________________ _________________________
    FND: ;data for each segment.


    FND0: ;zero
    If DIGIT>0 Then FND1
    DG=%00000011
    GoTo FNDEND


    FND1: ;one
    If DIGIT>1 Then FND2
    DG=%10011111
    GoTo FNDEND


    FND2: ;two
    If DIGIT>2 Then FND3
    DG=%00100101
    GoTo FNDEND


    FND3: ;three
    If DIGIT>3 Then FND4
    DG=%00001101
    GoTo FNDEND


    FND4: ;four
    If DIGIT>4 Then FND5
    DG=%10011001
    GoTo FNDEND


    FND5: ;five
    If DIGIT>5 Then FND6
    DG=%01001001
    GoTo FNDEND


    FND6: ;six
    If DIGIT>6 Then FND7
    DG=%01000001
    GoTo FNDEND


    FND7:
    If DIGIT>7 Then FND8 ;seven
    DG=%00011111
    GoTo FNDEND


    FND8: ;eight
    If DIGIT>8 Then FND9
    DG=%00000001
    GoTo FNDEND


    FND9:
    DG=%00011001 ;nine


    FNDEND:
    Return
    '_____________________________

  2. #2
    Senior Member Stephen Moss's Avatar
    Join Date
    Jan 2006
    Posts
    406
    Thumbs Up
    Received: 28
    Given: 5
    Total Downloaded
    1.86 GB

    0 Not allowed!

    Default Re: Problem in pulse per second meter

    Search the manual for the Dig command to extract the digit you want to display and using that in you DIGITCALC routine, it may make for more readable code and save a few instructions.

    If you intend to keep the current code structure for your FND function your should really add End IF to the end of each If statement as it makes it more readable (know where the end if the section is) and will prevent any unintended overflow into the next section. Additionally, I would suggest replacing "Goto FNDEND" with Return as you are wasting instruction cycles jumping to label that than performs a return when you could just form where you are.
    If you have not seen it the manual the Select Case statements will do a good of the FND section of code, read up on it in the manual and cosider using that instead of your current structure it may save you a few instruction cycles.

    I am not sure what the issue is as I am finding your code a little hard to read but usually if a 7 segment display is flickering it is either because it is being updated with value that are changing to quickly or more likely that the entire 4 digit display is not being updated quickly enough, remember for persistence of vision all four segment need to be updated at least once every 20mS (more like 16mS or 4mS per digit allowing for instruction execution) so ensure your code is compact enough or that small enough chunks are being executed between switching digits to allow the display to be updated at the necessary speed.

  3. #3
    Junior Member amod's Avatar
    Join Date
    Mar 2018
    Posts
    51
    Thumbs Up
    Received: 34
    Given: 4
    Total Downloaded
    5.95 MB

    0 Not allowed!

    Default Re: Problem in pulse per second meter

    I changed the code but digits blinks with 1 second delay.
    If I change NUMB=COUNTER PIN,500 .then digits blinks with half second delay.

  4. #4
    Prolific Poster See_Mos's Avatar
    Join Date
    Feb 2004
    Posts
    1,198
    Thumbs Up
    Received: 16
    Given: 0
    Total Downloaded
    603.66 MB

    0 Not allowed!

    Default Re: Problem in pulse per second meter

    NUMB=Counter pin,1000
    The program stops for 1 second to count the number of pulses. In this time the display is blank.

    You need to find another way to count pulses.
    My RAM is failing

  5. #5
    Prolific Poster bill9399's Avatar
    Join Date
    Aug 2004
    Posts
    1,698
    Thumbs Up
    Received: 8
    Given: 0
    Total Downloaded
    969.44 MB

    0 Not allowed!

    Default Re: Problem in pulse per second meter

    To avoid blinking have a look at incorporating a 7 segment driver MAX7219 or MAX7221.
    To see how to drive these ICs, look for MAX7219.bas in the sample files in Proton.
    These are inexpensive IC.s especially from Ebay sources. The led display is maintained until next reading is sent via the Max IC and uploaded to the display leds..
    Last edited by bill9399; 30th March 2018 at 17:33.
    [B][SIZE=1]A wise man may listen and say nothing. A fool may listen and have nothing to say. Which one are you???[/SIZE][/B]

  6. #6
    Prolific Poster towlerg's Avatar
    Join Date
    Mar 2012
    Posts
    1,803
    Thumbs Up
    Received: 159
    Given: 153
    Total Downloaded
    3.04 GB

    0 Not allowed!

    Default Re: Problem in pulse per second meter

    Think interupt to count pulses and a timer to start stop counting. This uses very little PIC device cpu time, loads of time left over to dedicate to maintaining seven segs.
    George

  7. #7
    Member tumbleweed's Avatar
    Join Date
    May 2011
    Posts
    377
    Thumbs Up
    Received: 67
    Given: 0
    Total Downloaded
    118.16 MB

    0 Not allowed!

    Default Re: Problem in pulse per second meter

    If you setup the display scanning to be done by a timer interrupt, the display will be pretty much rock solid and won't vary.
    TMR2 is probably the easiest since you can set it up and it'll run continuously without having to reload it.

    All your main routine has to do is load DG1-DG4 and the rest is done automatically.

    Code:
    Dim digitno As Byte
    Dim DG1 As Byte
    Dim DG2 As Byte
    Dim DG3 As Byte
    Dim DG4 As Byte
    
    On_Hardware_Interrupt GoTo tmr_interrupt
    GoTo main
    
    tmr_interrupt:
        Context Save
    
        'clear timer IF
        PIR1bits_TMR2IF = 0
    
        'set PORTC.3-PORTC.0 scan lines high
        PORTC = PORTC | 0x0F
    
        ' increment digitno (0 to 3)
        digitno = digitno + 1
        digitno = digitno & 0x03
    
        ' output digit
        If digitno = 0 Then
            PORTB = DG1
            PORTC.3 = 0
        ElseIf digitno = 1 Then
            PORTB = DG2
            PORTC.2 = 0
        ElseIf digitno = 2 Then
            PORTB = DG3
            PORTC.1 = 0
        Else
            PORTB = DG4
            PORTC.0 = 0
        EndIf
        Context Restore
    I'll leave it up to you to setup the timer and the rest of the hardware

  8. #8
    Fanatical Contributor Les's Avatar
    Join Date
    Feb 2002
    Posts
    3,003
    Thumbs Up
    Received: 306
    Given: 109
    Total Downloaded
    1.50 GB

    2 Not allowed!

    Default Proton Compiler, Pulse Counter with a multiplexed 7-segment LED display

    Here's a simple program I knocked together that counts the pulses on the INT pin (PORTB.0) and displays the pulses per second on 4 7-segment displays.

    It uses an interrupt for the display multiplexing and pulse counting, and it also zero blanks the display.

    I've only tested it within the simulator, but it seems to work well, and there's not a lot to it, so any changes you want to make to it will be easily accomplished. It's not 100% accurate all the time, but for such a simple program, it works nicely. 100% accuracy can be accomplished by using the interrupt as the timing window as well, instead of the simple DelayMs command used, which will never be 100% accurate because it has interrupts running behind it, slowing it down a little.


    Code:
    '
    ' A simple pulse counter on PORTB.0 and displayed on a 7 segment display
    ' For use with a Common Cathode display
    '
    ' Written by Les Johnson for the Proton BASIC Compiler
    '
    Declare Hints = Off
    
        Device = 16F886                             ' Use a standard 14-bit core device
        Declare Xtal = 20                           ' Use a 20MHz crystal
        Declare Optimiser_Level = 1                 ' Increase optimisation
    
        On_Hardware_Interrupt GoTo ISR_Handler      ' Point to the interrupt handler
    
        Dim bOnes       As Byte                     ' The value for the 1st right LED display
        Dim bTens       As Byte                     ' The value for the 2nd right LED display
        Dim bHundreds   As Byte                     ' The value for the 3rd right LED display
        Dim bThousands  As Byte                     ' The value for the 4th right LED display
        Dim bTimeShare  As Byte                     ' Used by the interrupt for time sharing
        Dim wPulseCount As Word                     ' The amount of pulses detected    
    '
    ' Setup the pins used
    '
    $define Segment_Pins PORTC                      ' Connects to the Segment pins of the display
    $define Display1_Pin PORTB.1                    ' Connects to display 1
    $define Display2_Pin PORTB.2                    ' Connects to display 2
    $define Display3_Pin PORTB.3                    ' Connects to display 3
    $define Display4_Pin PORTB.4                    ' Connects to display 4
    $define Signal_Pin   PORTB.0                    ' INT pin that accepts the pulses
    '
    ' Individual segment values for a Common Cathode 7 segment display (change these for a Common Anode type)
    '
    $define Segment_A 1                             ' The value to send to illuminate segment A on the Common Cathode 7 segment display
    $define Segment_B 2                             ' The value to send to illuminate segment B on the Common Cathode 7 segment display
    $define Segment_C 4                             ' The value to send to illuminate segment C on the Common Cathode 7 segment display
    $define Segment_D 8                             ' The value to send to illuminate segment D on the Common Cathode 7 segment display
    $define Segment_E 16                            ' The value to send to illuminate segment E on the Common Cathode 7 segment display
    $define Segment_F 32                            ' The value to send to illuminate segment F on the Common Cathode 7 segment display
    $define Segment_G 64                            ' The value to send to illuminate segment G on the Common Cathode 7 segment display
    '
    ' Seven Segment data
    '
        Dim SevenSeg_Data As Code = Segment_A | Segment_B | Segment_C | Segment_D | Segment_E | Segment_F,_     ' The segments to illuminate a digit 0
                                    Segment_B | Segment_C,_                                                     ' The segments to illuminate a digit 1
                                    Segment_A | Segment_B | Segment_D | Segment_E | Segment_G,_                 ' The segments to illuminate a digit 2
                                    Segment_A | Segment_B | Segment_C | Segment_D | Segment_G,_                 ' The segments to illuminate a digit 3
                                    Segment_B | Segment_C | Segment_F | Segment_G,_                             ' The segments to illuminate a digit 4
                                    Segment_A | Segment_C | Segment_D | Segment_F | Segment_G,_                 ' The segments to illuminate a digit 5
                                    Segment_C | Segment_D | Segment_E | Segment_F | Segment_G,_                 ' The segments to illuminate a digit 6
                                    Segment_A | Segment_B | Segment_C,_                                         ' The segments to illuminate a digit 7
                                    Segment_A | Segment_B | Segment_C | Segment_D | Segment_E | Segment_F | Segment_G,_ ' The segments to illuminate a digit 8
                                    Segment_A | Segment_B | Segment_C | Segment_D | Segment_F | Segment_G       ' The segments to illuminate a digit 9
    '
    ' Timer0 prescaler values
    '                         
    $define Prescaler_2   0
    $define Prescaler_4   1
    $define Prescaler_8   2
    $define Prescaler_16  3
    $define Prescaler_32  4
    $define Prescaler_64  5
    $define Prescaler_128 6
    $define Prescaler_256 7
              
    '---------------------------------------------------------------------------------------
        GoTo Main                                       ' Jump to the main program
    
    '---------------------------------------------------------------------------------------
    ' Adjust the prescaler for Timer0
    ' Input     : pValue holds the prescaler rate
    '           :   000 = 1:2
    '           :   001 = 1:4
    '           :   010 = 1:8
    '           :   011 = 1:16
    '           :   100 = 1:32
    '           :   101 = 1:64
    '           :   110 = 1:128
    '           :   111 = 1:256
    ' Output    : None
    ' Notes     : None
    '    
    $define OPTION_REGbits_PS(pValue) ' 
        OPTION_REG = OPTION_REG & $F8 '
        OPTION_REG = OPTION_REG | pValue      
                                                                           
    '---------------------------------------------------------------------------------------
    ' Interrupt Handler
    ' Multiplexes the 7-segment displays
    ' Increments wPulseCount when a low to high signal is detected on the INT pin (PORTB.0)
    '
    ISR_Handler:
        Context Save
        
        If INTCONbits_INTF = 1 Then                     ' Is it an INT that has triggered the interrupt?
            Inc wPulseCount                             ' Yes. So increment the wPulseCount variable
            Clear INTCONbits_INTF                       ' Reset the INT interrupt flag
        EndIf
    
        If INTCONbits_T0IF = 1 Then                     ' Is it a Timer0 overflow that has triggered the interrupt?
            If bTimeShare = 0 Then                      ' Yes. So is it Display 1's turn?
                Set Display4_Pin                        ' Yes. So turn Off the fourth LED
                Segment_Pins = bOnes                    ' Place the digit pattern on PORTC
                Clear Display1_Pin                      ' Turn On the first LED
            ElseIf bTimeShare = 1 Then                  ' Is it Display 2's turn?
                Set Display1_Pin                        ' Yes. So turn Off the first LED
                Segment_Pins = bTens                    ' Place the digit pattern on PORTC
                Clear Display2_Pin                      ' Turn On the second LED
            ElseIf bTimeShare = 2 Then                  ' Is it Display 3's turn?
                Set Display2_Pin                        ' Yes. So turn Off the second LED
                Segment_Pins = bHundreds                ' Place the digit pattern on PORTC
                Clear Display3_Pin                      ' Turn On the third LED
            ElseIf bTimeShare = 3 Then                  ' Is it Display 4's turn?
                Set Display3_Pin                        ' Yes. So turn Off the third LED
                Segment_Pins = bThousands               ' Place the digit pattern on PORTC
                Clear Display4_Pin                      ' Turn On the fourth LED
            EndIf
    
            Inc bTimeShare                              ' Increment the time share counter
            If bTimeShare = 4 Then Clear bTimeShare     ' If it reaches 4 then clear it
            Clear INTCONbits_T0IF                       ' Reset the Timer0 interrupt flag
        EndIf
        Context Restore
    
    '---------------------------------------------------------------------------------------
    ' Build up the seperate digits of variable wPulseCount
    ' Input     : pValue holds the value to display
    ' Output    : None
    ' Notes     : Zero suppression is implemented
    '
    $define Build_Displays(pValue) '
        wPulseCount = pValue       '
        GoSub _Build_Displays
    
    _Build_Displays:
    
        bOnes = CRead SevenSeg_Data + Dig wPulseCount, 0            ' Read the first digit from the value to display
        If wPulseCount < 10 Then                                    ' Is the value to display less than 10?
            bTens = 0                                               ' Yes. So blank the Tens Display
        Else                                                        ' Otherwise...
            bTens = CRead SevenSeg_Data + Dig wPulseCount, 1        ' Read the second digit from the value to display
        EndIf
        If wPulseCount < 100 Then                                   ' Is the value to display less than 100?
            bHundreds = 0                                           ' Yes. So blank the Hundreds Display
        Else                                                        ' Otherwise...
            bHundreds = CRead SevenSeg_Data + Dig wPulseCount, 2    ' Read the third digit from the value to display
        EndIf
        If wPulseCount < 1000 Then                                  ' Is the value to display less than 100?
            bThousands = 0                                          ' Yes. So blank the Thousands Display
        Else                                                        ' Otherwise...
            bThousands = CRead SevenSeg_Data + Dig wPulseCount, 3   ' Read the fourth digit from the value to display
        EndIf
        Return
        
    '---------------------------------------------------------------------------------------
    ' Setup the variables and peripherals
    ' Input     : None
    ' Output    : None
    ' Notes     : None
    '
    $define Setup() GoSub _Setup
    
    _Setup:
        High Segment_Pins                   ' Clear all the 7 segment segments
        High Display1_Pin                   ' Disable the first 7 segment display
        High Display2_Pin                   ' Disable the second 7 segment display
        High Display3_Pin                   ' Disable the third 7 segment display
        High Display4_Pin                   ' Disable the fourth 7 segment display
        Input Signal_Pin                    ' Make the INT pin an input
        
        Clear bTimeShare                    ' Clear the display time share variable
        Clear wPulseCount                   ' Clear the pulse counter variable
    '
    ' Setup Timer0 to interrupt on rollover
    '       
        OPTION_REG = 128                    ' Disable the pullup resistors on PORTB          
        OPTION_REGbits_PS(Prescaler_32)     ' Set the prescaler for Timer0 to give a 625HZ refresh rate at 20MHz operation
        Clear TMR0                          ' Clear Timer0
        Set INTCONbits_T0IE                 ' Enable a Timer0 overflow
    '
    ' Setup an INT interrupt
    '                                    
        Set OPTION_REGbits_INTEDG           ' Set for rising edge on pin INT       
        Set INTCONbits_INTE                 ' Enable an INT interrupt
        
        Set INTCONbits_GIE                  ' Enable global interrupts
        Return  
                             
    '---------------------------------------------------------------------------------------
    ' The main program loop starts here
    ' Count the pulses per second and display them on a seven segment display
    '
    Main:
           
        Setup()    
           
        Do                                  ' Create a loop
            Clear wPulseCount               ' Clear the pulse counter before we start the interrupt
            Clear INTCONbits_INTF           ' Clear the INT flag before enabling the interrupt
            Set INTCONbits_INTE             ' Enable the INT interrupt to count the pulses
            DelayMS 992                     ' Create a delay to measure within (Taking into account the interrupt running in the background)
            Clear INTCONbits_INTE           ' Disable the INT interrupt
            Build_Displays(wPulseCount)     ' Create the value to display on the 7 segment LEDs
        Loop                                ' Loop forever
    Here's a screenshot of it working within the Isis simulator:
    PulseCounter.jpg
    Last edited by Les; 1st April 2018 at 14:25.
    For more example programs for Proton and Proton24 or updates, please visit: Proton WIKI or Proton Files

  9. #9
    Junior Member amod's Avatar
    Join Date
    Mar 2018
    Posts
    51
    Thumbs Up
    Received: 34
    Given: 4
    Total Downloaded
    5.95 MB

    0 Not allowed!

    Default Re: Proton Compiler, Pulse Counter with a multiplexed 7-segment LED display

    As iam new to proton.I am not able to understand how to change this program for common anode display.pls help


    • $define Segment_A 1 ' The value to send to illuminate segment A on the Common Cathode 7 segment display$define Segment_B 2 ' The value to send to illuminate segment B on the Common Cathode 7 segment display$define Segment_C 4 ' The value to send to illuminate segment C on the Common Cathode 7 segment display$define Segment_D 8 ' The value to send to illuminate segment D on the Common Cathode 7 segment display$define Segment_E 16 ' The value to send to illuminate segment E on the Common Cathode 7 segment display$define Segment_F 32 ' The value to send to illuminate segment F on the Common Cathode 7 segment display$define Segment_G 64 ' The value to send to illuminate segment G on the Common Cathode 7 segment display'' Seven Segment data' Dim SevenSeg_Data As Code = Segment_A | Segment_B | Segment_C | Segment_D | Segment_E | Segment_F,_ ' The segments to illuminate a digit 0 Segment_B | Segment_C,_ ' The segments to illuminate a digit 1 Segment_A | Segment_B | Segment_D | Segment_E | Segment_G,_ ' The segments to illuminate a digit 2 Segment_A | Segment_B | Segment_C | Segment_D | Segment_G,_ ' The segments to illuminate a digit 3 Segment_B | Segment_C | Segment_F | Segment_G,_ ' The segments to illuminate a digit 4 Segment_A | Segment_C | Segment_D | Segment_F | Segment_G,_ ' The segments to illuminate a digit 5 Segment_C | Segment_D | Segment_E | Segment_F | Segment_G,_ ' The segments to illuminate a digit 6 Segment_A | Segment_B | Segment_C,_ ' The segments to illuminate a digit 7 Segment_A | Segment_B | Segment_C | Segment_D | Segment_E | Segment_F | Segment_G,_ ' The segments to illuminate a digit 8 Segment_A | Segment_B | Segment_C | Segment_D | Segment_F | Segment_G




  10. #10
    Fanatical Contributor Les's Avatar
    Join Date
    Feb 2002
    Posts
    3,003
    Thumbs Up
    Received: 306
    Given: 109
    Total Downloaded
    1.50 GB

    1 Not allowed!

    Default Re: Problem in pulse per second meter

    You have a full program that does the job, so for common anode displays, alter the segment_A to segment_G constants and make some high pins to low pins, or set pins to clear pins, because the only difference is that they are inverted.

    It's not difficult, and an hour's study is all you will need to make the program common anode. It will also help you understand the differences and learn the compiler a bit better. IMO, that's the joy of programming and electronics... The feeling of learning and doing.
    Last edited by Les; 2nd April 2018 at 13:53.
    For more example programs for Proton and Proton24 or updates, please visit: Proton WIKI or Proton Files

Thread Information

Users Browsing this Thread

There are currently 1 users browsing this thread. (0 members and 1 guests)

     

Similar Threads

  1. MAX35101 ultrasonic heat meter and flow meter demo board
    By normnet in forum New devices and techniques
    Replies: 5
    Last Post: 3rd February 2015, 07:24
  2. MAX35102 ultrasonic heat meter and flow meter
    By normnet in forum New devices and techniques
    Replies: 0
    Last Post: 2nd February 2015, 11:24
  3. how to use a pulse to make another pulse
    By furqankaimkhani in forum Timer Modules
    Replies: 1
    Last Post: 9th February 2012, 19:24
  4. pulse generator
    By john burke in forum Labcenter Proteus VSM
    Replies: 31
    Last Post: 22nd December 2005, 01:48
  5. Pulse detection
    By Richard in forum The Lounge
    Replies: 4
    Last Post: 17th May 2004, 08:34

Tags for this Thread

Posting Permissions

  • You may not post new threads
  • You may not post replies
  • You may not post attachments
  • You may not edit your posts