1. kkbanton

    Thread Starter New Member

    Jan 20, 2011
    10
    0
    Good day guys!

    I have my PIC16f877A with a 4x3 keypad as an input, LCD and 8LEDs [RC0-RC7] as my output. I can already display my outputs on LCD and 8LEDs. And I also interfaced a potentiometer in RA1 as an analog input and I just want to control the delay of the 8LEDs using the analog potentiometer but I don't know how. Do you have some ideas? Thanks in advance.:)
     
  2. DumboFixer

    Active Member

    Feb 10, 2009
    219
    34
    Can't you use the value from the ADC as a delay factor in a delay loop. For example, each count of the ADC could represent 5ms so assuming that the ADC returns 0 - 1023 then you could have a delay from 0ms (is that a delay?) to around 5 seconds in 5ms steps.
     
  3. kkbanton

    Thread Starter New Member

    Jan 20, 2011
    10
    0
    Thanks DumboFixer. I already have that 0-1023 value. But how will the programs flows? I'm using Proton and here is my current program on that. Thanks.

    Code ( (Unknown Language)):
    1.  
    2. [B]LEDTEST:    
    3.     Print At 1,1, "     LED TEST       "
    4.     Print At 2,1, "[1]Running [4]Blink "
    5.     Print At 3,1, "[2]Meeting [5]Step  "
    6.     Print At 4,1, "[3]Alternating #-Esc"
    7.     GoSub KEYPAD
    8.     If NUMERIC = 12 Then GoSub BEEP : GoTo MAIN
    9.     If NUMERIC = 1 Then GoSub BEEP : GoTo RUN
    10.     If NUMERIC = 2 Then GoSub BEEP : GoTo MEET
    11.     If NUMERIC = 3 Then GoSub BEEP : GoTo ALTERNATE
    12.     If NUMERIC = 4 Then GoSub BEEP : GoTo BLINK
    13.     If NUMERIC = 5 Then GoSub BEEP : GoTo STEF
    14.     GoTo LEDTEST              
    15.  
    16. RUN:
    17.     Print At 1, 1, "     LED TEST       "
    18.     Print At 2, 1, "--------------------"    
    19.     Print At 3, 1, "   RUNNING LIGHTS   "                  
    20.     Print At 4, 1, "               #-Esc"
    21.     GoTo RUNNING
    22.  
    23. RUNNING:
    24.     GoSub KEYPAD
    25.     If NUMERIC = 12 Then  GoSub BEEP : GoTo LEDTEST
    26.      High LED1
    27.      DelayMS 200
    28.      Low LED1
    29.      DelayMS 200
    30.      GoSub KEYPAD
    31.      If NUMERIC = 12 Then  GoSub BEEP : GoTo LEDTEST
    32.      High LED2
    33.      DelayMS 200
    34.      Low LED2
    35.      DelayMS 200
    36.      GoSub KEYPAD
    37.      If NUMERIC = 12 Then  GoSub BEEP :  GoTo LEDTEST
    38.      High LED3
    39.      DelayMS 200
    40.      Low LED3
    41.      DelayMS 200
    42.      GoSub KEYPAD
    43.      If NUMERIC = 12 Then  GoSub BEEP : GoTo LEDTEST
    44.      High LED4
    45.      DelayMS 200
    46.      Low LED4
    47.      DelayMS 200
    48.      GoSub KEYPAD
    49.      If NUMERIC = 12 Then  GoSub BEEP : GoTo LEDTEST
    50.      High LED5
    51.      DelayMS 200
    52.      Low LED5
    53.      DelayMS 200
    54.      GoSub KEYPAD
    55.      If NUMERIC = 12 Then  GoSub BEEP : GoTo LEDTEST
    56.      High LED6
    57.      DelayMS 200
    58.      Low LED6
    59.      DelayMS 200
    60.      GoSub KEYPAD
    61.      If NUMERIC = 12 Then  GoSub BEEP : GoTo LEDTEST
    62.      High LED7
    63.      DelayMS 200
    64.      Low LED7
    65.      DelayMS 200
    66.      GoSub KEYPAD
    67.      If NUMERIC = 12 Then  GoSub BEEP : GoTo LEDTEST
    68.      High LED8
    69.      DelayMS 200
    70.      Low LED8
    71.      DelayMS 200
    72.      GoTo RUNNING
    73.  
    74. [/B]

     
    Last edited by a moderator: Feb 11, 2011
  4. DumboFixer

    Active Member

    Feb 10, 2009
    219
    34
    First of all I'd completely rewrite the program to get rid of those GOTO statements and make it more structured - it currently resembles a plate of spaghetti. Try drawing a flowchart or similar for it.One way of introducing your variable delay is to change your
    Code ( (Unknown Language)):
    1. DelayMS 200
    with
    Code ( (Unknown Language)):
    1. DelayMS ADC-VALUE
    where ADC_VALUE is the value you've read from the ADC. This should give you a delay of between 0 and 1sec (approx).
     
  5. kkbanton

    Thread Starter New Member

    Jan 20, 2011
    10
    0
    This is my declarations, is is right? By the way, I also have an LM35 on RA0 and it works well. I have no problem about that.


    Declare ADIN_RES 10
    Declare ADIN_TAD FRC
    Declare ADIN_STIME 10
    Dim Result1 As Float
    Dim Result2 As DWord
    Dim NUMERIC As Byte

    This is my ADC program:

    ADCREAD:
    GoSub READSENSOR
    GoSub KEYPAD
    If NUMERIC = 12 Then GoSub BEEP : GoTo MAIN
    Print At 1, 1, " ADC TEST "
    Print At 2, 1, "Temp:[",DEC1 Result1,"C] "
    Print At 3, 1, "ADC:[",DEC4 Result2,"] "
    Print At 4, 1, " #-Esc"
    GoTo ADCREAD

    READSENSOR:
    Result1 = ADIn 0
    Result1 = Result1 * 5 / 1023
    Result1 = Result1 * 100
    Result1 = Result1 - 2
    DelayUS 10
    Result2 = ADIn 1
    DelayUS 10
    Return


    Is is right that I used:

    DelayMs DEC4 Result2

    as the delay of my running lights? Because there is a compilation error when I used that.:(
     
  6. DumboFixer

    Active Member

    Feb 10, 2009
    219
    34
    I'm not familiar with this version of BASIC but your compilation error will be due to you giving the DelayMS function 2 parameters when it requires only 1.

    I suspect that you want to use
    Code ( (Unknown Language)):
    1. DelayMS Result2
    The DEC4 looks more like a print formating parameter and not needed in the delay call.

     
  7. kkbanton

    Thread Starter New Member

    Jan 20, 2011
    10
    0
    You're right, because I really don't know what variable will I call for my DelayMs. I've tried ADCON1 and ADIn 1. But it's not working yet.
     
  8. DumboFixer

    Active Member

    Feb 10, 2009
    219
    34
    What isn't working ? Does it compile ?

    It might help if you posted all the code instead of just bits.
     
  9. kkbanton

    Thread Starter New Member

    Jan 20, 2011
    10
    0
    I'm sorry. The speed of LEDs doesn't change even if I rotates the poterntiometer.

    Code ( (Unknown Language)):
    1.  Device = 16F877A
    2. XTAL = 4
    3. ADCON1 = %10000000    ' Set analogue input, Vref is Vdd
    4. TRISA = %111111                ' SETS ALL PORTA PINS TO 1 input , 0 = out
    5. TRISD = %00000111              ' ALL OUTPUT
    6. TRISB = %00000000              '        
    7. TRISC = %00000000              '        
    8. TRISE = %000
    9. PORTC = 0
    10.  
    11. '-----------------------------------------------------------------
    12. ' HARDWARE DEFINES
    13. '-----------------------------------------------------------------
    14. Declare LCD_TYPE 0
    15. Declare LCD_DTPIN PORTB.0
    16. Declare LCD_ENPIN PORTB.5
    17. Declare LCD_RSPIN PORTB.4
    18. Declare LCD_INTERFACE 4
    19. Declare LCD_LINES 4
    20. PORTB_PULLUPS True
    21. '---------------------------------------------------------------------
    22. '     Define Osc 4                   ' We're using a 4 MHz oscillator
    23. '---------------------------------------------------------------------
    24. Symbol SEGMENTclear = PORTE.2
    25. Symbol SEGMENTinc   = PORTE.0
    26. Symbol SEGMENTdec   = PORTE.1
    27. Symbol BUZZ = PORTB.7
    28. Symbol LED1 = PORTC.0
    29. Symbol LED2 = PORTC.1
    30. Symbol LED3 = PORTC.2
    31. Symbol LED4 = PORTC.3
    32. Symbol LED5 = PORTC.4
    33. Symbol LED6 = PORTC.5
    34. Symbol LED7 = PORTC.6
    35. Symbol LED8 = PORTC.7
    36.  
    37.  
    38. Declare ADIN_RES 10      
    39. Declare ADIN_TAD FRC      
    40. Declare ADIN_STIME 10  
    41. Dim Result1 As Float
    42. Dim Result2 As DWord
    43. Dim NUMERIC As Byte
    44.     PORTE = %011
    45.     DelayMS 500
    46.  
    47. GoSub BEEP
    48.      PORTE = %111
    49.     DelayMS 500
    50.  
    51.  
    52. ;---------------------------------------------------  
    53. ;             MCU DEVELOPMENT BOARD
    54. ;---------------------------------------------------
    55. MAIN:  
    56.     Print At 1, 1, "   MCU Dev't Board  "
    57.     Print At 2, 1, "[1]Test ADC  [4]SEG "  
    58.     Print At 3, 1, "[2]Test Keypad      "
    59.     Print At 4, 1, "[3]Test LED         "                                                              
    60.     DelayMS 300
    61.     GoSub KEYPAD
    62.     If NUMERIC = 1 Then GoSub BEEP : GoTo ADCREAD
    63.     If NUMERIC = 2 Then GoSub BEEP : GoTo KEYPADTEST
    64.     If NUMERIC = 3 Then GoSub BEEP : GoTo LEDTEST
    65.     If NUMERIC = 4 Then GoSub BEEP : GoTo SEGMENTTEST
    66.     Print At 1, 1, "   MCU Dev't Board  "
    67.     Print At 2, 1, "[ ]Test ADC  [ ]SEG "  
    68.     Print At 3, 1, "[ ]Test Keypad      "
    69.     Print At 4, 1, "[ ]Test LED         "                                                              
    70.     DelayMS 300
    71.     GoSub KEYPAD
    72.     If NUMERIC = 1 Then GoSub BEEP : GoTo ADCREAD
    73.     If NUMERIC = 2 Then GoSub BEEP : GoTo KEYPADTEST
    74.     If NUMERIC = 3 Then GoSub BEEP : GoTo LEDTEST
    75.     If NUMERIC = 4 Then GoSub BEEP : GoTo SEGMENTTEST
    76.     GoTo MAIN    
    77. ;-------------------------------------------------
    78. ;            SEGMENT TEST
    79. ;-------------------------------------------------
    80. SEGMENTTEST:
    81.     Print At 1, 1, " SEVEN SEGMENT TEST "
    82.     Print At 2, 1, "[1]Increment        "    
    83.     Print At 3, 1, "[2]Decrement        "                  
    84.     Print At 4, 1, "               #-Esc"                          
    85.     GoSub KEYPAD
    86.     If NUMERIC = 12 Then GoSub BEEP : GoTo MAIN
    87.     If NUMERIC = 1 Then GoSub BEEP : GoTo INCCE
    88.     If NUMERIC = 2 Then GoSub BEEP : GoTo DECCE
    89.     GoTo SEGMENTTEST
    90.  
    91. INCCE:
    92.     Print At 1, 1, " SEVEN SEGMENT TEST "
    93.     Print At 2, 1, "     Increment      "    
    94.     Print At 3, 1, "                    "                  
    95.     Print At 4, 1, "               #-Esc"                          
    96.     High SEGMENTclear
    97. GT:
    98.     GoSub KEYPAD
    99.     If NUMERIC = 12 Then GoSub BEEP : GoTo SEGMENTTEST
    100.     PORTE = %110
    101.     DelayMS 300
    102.     PORTE = %111
    103.     DelayMS 300
    104.     GoTo GT
    105.      
    106. DECCE:
    107.     Print At 1, 1, " SEVEN SEGMENT TEST "
    108.     Print At 2, 1, "     Decrement      "    
    109.     Print At 3, 1, "                    "                  
    110.     Print At 4, 1, "               #-Esc"                          
    111.  
    112. FT:
    113.     GoSub KEYPAD
    114.     If NUMERIC = 12 Then GoSub BEEP : GoTo SEGMENTTEST
    115.     PORTE = %101
    116.     DelayMS 300
    117.     PORTE = %111
    118.     DelayMS 300
    119.     GoTo FT
    120. ;-------------------------------------------------
    121. ;             READ ADC    
    122. ;-------------------------------------------------
    123. ADCREAD:    
    124.     GoSub READSENSOR
    125.     GoSub KEYPAD
    126.     If NUMERIC = 12 Then GoSub BEEP : GoTo MAIN
    127.     Print At 1, 1, "     ADC TEST       "
    128.     Print At 2, 1, "Temp:[",DEC1 Result1,"]ßC       "    
    129.     Print At 3, 1, "ADC:[",DEC4 Result2,"]          "                  
    130.     Print At 4, 1, "               #-Esc"                          
    131.     GoTo ADCREAD  
    132.  
    133. READSENSOR:
    134.     Result1 = ADIn 0  
    135.     Result1 = Result1 * 5 / 1023      
    136.     Result1 = Result1 * 100
    137.     Result1 = Result1 - 2
    138.     DelayUS 10            
    139.     Result2 = ADIn 1      
    140.     DelayUS 10            
    141.     Return
    142.  
    143. ;------------------------------------------------
    144. ;                LED TEst          
    145. ;------------------------------------------------
    146. LEDTEST:              
    147.     Print At 1,1, "     LED TEST       "
    148.     Print At 2,1, "--------------------"
    149.     Print At 3,1, "                    "
    150.     Print At 4,1, "               #-Esc"
    151. HERE:
    152.     GoSub KEYPAD
    153.     If NUMERIC = 12 Then  GoSub BEEP : GoTo MAIN
    154.      High LED1
    155.      DelayMS 200
    156.      Low LED1
    157.      DelayMS 200
    158.      GoSub KEYPAD
    159.      If NUMERIC = 12 Then  GoSub BEEP : GoTo MAIN
    160.      High LED2
    161.      DelayMS 200
    162.      Low LED2
    163.      DelayMS 200
    164.      GoSub KEYPAD
    165.      If NUMERIC = 12 Then  GoSub BEEP :  GoTo MAIN
    166.      High LED3
    167.      DelayMS 200
    168.      Low LED3
    169.      DelayMS 200
    170.      GoSub KEYPAD
    171.      If NUMERIC = 12 Then  GoSub BEEP : GoTo MAIN
    172.      High LED4
    173.      DelayMS 200
    174.      Low LED4
    175.      DelayMS 200
    176.      GoSub KEYPAD
    177.      If NUMERIC = 12 Then  GoSub BEEP : GoTo MAIN
    178.      High LED5
    179.      DelayMS 200
    180.      Low LED5
    181.      DelayMS 200
    182.      GoSub KEYPAD
    183.      If NUMERIC = 12 Then  GoSub BEEP : GoTo MAIN
    184.      High LED6
    185.      DelayMS 200
    186.      Low LED6
    187.      DelayMS 200
    188.      GoSub KEYPAD
    189.      If NUMERIC = 12 Then  GoSub BEEP : GoTo MAIN
    190.      High LED7
    191.      DelayMS 200
    192.      Low LED7
    193.      DelayMS 200
    194.      GoSub KEYPAD
    195.      If NUMERIC = 12 Then  GoSub BEEP : GoTo MAIN
    196.      High LED8
    197.      DelayMS 200
    198.      Low LED8
    199.      DelayMS 200
    200.      GoTo LEDTEST
    201.  
    202. ;-------------------------------------------------------------------------
    203. ;                    KEypad  Test
    204. ;-------------------------------------------------------------------------
    205. KEYPADTEST:
    206.   Print At 1,1, "    KEYPAD TEST     "
    207.   Print At 2,1, "--------------------"
    208.   Print At 3,1, "Key:[ ]             "
    209.   Print At 4,1, "               #-Esc"
    210.   DelayMS 100              
    211. CHER1:
    212.   Print $FE, $0F
    213.   Cursor 3 , 6    
    214.   GoSub KEYPAD
    215.   If NUMERIC= 12 Then GoSub BEEP : GoTo CCANCEL
    216.   If NUMERIC = 30 Then GoTo CHER1  
    217.   Print At 3,6, DEC1 NUMERIC
    218.   GoSub BEEP
    219.   GoTo CHER1
    220. CCANCEL:  
    221.   Print $FE, $0C  
    222.   GoTo MAIN
    223. ;-------------------------------------------------------------------------
    224. ;                     SOUNDER          
    225. ;-------------------------------------------------------------------------
    226. BEEP:
    227.     High BUZZ
    228.     DelayMS 200
    229.     Low BUZZ
    230.     DelayMS 100
    231.     Return
    232. ;-------------------------------------------------------------------------
    233. ;                      Keypad Scanning
    234. ;-------------------------------------------------------------------------
    235. KEYPAD:
    236.      NUMERIC = 30
    237.      PORTD=%01110000
    238.      DelayMS 1  
    239.      If PORTD.0=0 Then GoTo one
    240.      If PORTD.1=0 Then GoTo two
    241.      If PORTD.2=0 Then GoTo three
    242.  
    243.      PORTD=%01101000
    244.      DelayMS 1  
    245.      If PORTD.0=0 Then GoTo four
    246.      If PORTD.1=0 Then GoTo five
    247.      If PORTD.2=0 Then GoTo six
    248.  
    249.      PORTD=%01011000
    250.      DelayMS 1    
    251.      If PORTD.0=0 Then GoTo seven
    252.      If PORTD.1=0 Then GoTo eight
    253.      If PORTD.2=0 Then GoTo nine
    254.  
    255.      PORTD=%00111000
    256.      DelayMS 1  
    257.      If PORTD.0=0 Then GoTo aste
    258.      If PORTD.1=0 Then GoTo zero
    259.      If PORTD.2=0 Then GoTo pound
    260.      PORTD=0
    261.      Return
    262.  
    263.  one:
    264.      If PORTD.0=0 Then GoTo one
    265.      NUMERIC = 1
    266.      Return
    267.  two:
    268.      If PORTD.1=0 Then GoTo two
    269.      NUMERIC = 2
    270.      Return
    271.  three:
    272.      If PORTD.2=0 Then GoTo three
    273.      NUMERIC = 3
    274.      Return
    275.  four:
    276.      If PORTD.0=0 Then GoTo four
    277.      NUMERIC = 4
    278.      Return
    279.  five:
    280.      If PORTD.1=0 Then GoTo five
    281.      NUMERIC = 5
    282.      Return
    283.  six:
    284.      If PORTD.2=0 Then GoTo six
    285.      NUMERIC = 6
    286.      Return
    287.  seven:
    288.      If PORTD.0=0 Then GoTo seven
    289.      NUMERIC = 7
    290.      Return
    291.  eight:
    292.      If PORTD.1=0 Then GoTo eight
    293.      NUMERIC = 8
    294.      Return
    295.  nine:
    296.      If PORTD.2=0 Then GoTo nine
    297.      NUMERIC = 9
    298.      Return
    299.  aste:
    300.       If PORTD.0=0 Then GoTo aste
    301.      NUMERIC = 11
    302.      Return
    303.  pound:
    304.      If PORTD.2=0 Then GoTo pound
    305.      NUMERIC = 12
    306.      Return
    307.  zero:
    308.      If PORTD.1=0 Then GoTo zero
    309.      NUMERIC = 0
    310.      Return
    311.  
    312. End
    313.  
     
  10. DumboFixer

    Active Member

    Feb 10, 2009
    219
    34
    In your display does the value of Result2 change when you adjust the potentiometer ?

    In your section of code that deals with turning the LEDs on and off, LEDtest, try changing all the
    Code ( (Unknown Language)):
    1. DelayMS 200
    to
    Code ( (Unknown Language)):
    1. DelayMS Result2
    You should end up with something like this:

    Code ( (Unknown Language)):
    1. ;------------------------------------------------
    2. ;                LED TEst          
    3. ;------------------------------------------------
    4. LEDTEST:              
    5.     Print At 1,1, "     LED TEST       "
    6.     Print At 2,1, "--------------------"
    7.     Print At 3,1, "                    "
    8.     Print At 4,1, "               #-Esc"
    9. HERE:
    10.     GoSub KEYPAD
    11.     If NUMERIC = 12 Then  GoSub BEEP : GoTo MAIN
    12.      High LED1
    13.      DelayMS Result2
    14.      Low LED1
    15.      DelayMS Result2
    16.      GoSub KEYPAD
    17.      If NUMERIC = 12 Then  GoSub BEEP : GoTo MAIN
    18.      High LED2
    19.      DelayMS Result2
    20.      Low LED2
    21.      DelayMS Result2
    22.      GoSub KEYPAD
    23.      If NUMERIC = 12 Then  GoSub BEEP :  GoTo MAIN
    24.      High LED3
    25.      DelayMS Result2
    26.      Low LED3
    27.      DelayMS Result2
    28.      GoSub KEYPAD
    29.      If NUMERIC = 12 Then  GoSub BEEP : GoTo MAIN
    30.      High LED4
    31.      DelayMS Result2
    32.      Low LED4
    33.      DelayMS Result2
    34.      GoSub KEYPAD
    35.      If NUMERIC = 12 Then  GoSub BEEP : GoTo MAIN
    36.      High LED5
    37.      DelayMS Result2
    38.      Low LED5
    39.      DelayMS Result2
    40.      GoSub KEYPAD
    41.      If NUMERIC = 12 Then  GoSub BEEP : GoTo MAIN
    42.      High LED6
    43.      DelayMS Result2
    44.      Low LED6
    45.      DelayMS Result2
    46.      GoSub KEYPAD
    47.      If NUMERIC = 12 Then  GoSub BEEP : GoTo MAIN
    48.      High LED7
    49.      DelayMS Result2
    50.      Low LED7
    51.      DelayMS Result2
    52.      GoSub KEYPAD
    53.      If NUMERIC = 12 Then  GoSub BEEP : GoTo MAIN
    54.      High LED8
    55.      DelayMS Result2
    56.      Low LED8
    57.      DelayMS Result2
    58.      GoTo LEDTEST
    59.  
     
  11. kkbanton

    Thread Starter New Member

    Jan 20, 2011
    10
    0
    Thanks for that. I tried DelayMs Result2 but the speed doesn't change when I'm rotating the potentiometer. Actually, it now slower than 200ms delay. But the potentiometer works when I'm in ADC mode of the program. It has 0-1023 value.
     
  12. thatoneguy

    AAC Fanatic!

    Feb 19, 2009
    6,357
    718
    What dev board are you using (easypic, microchip, etc) and which BASIC compiler?
     
    kkbanton likes this.
  13. kkbanton

    Thread Starter New Member

    Jan 20, 2011
    10
    0
    Microchip PIC16f877A
    Compiler? What do you mean? As I installed Proton IDE, it compiles already. And I'm using PicKit2 to load my program on PIC.
     
  14. DumboFixer

    Active Member

    Feb 10, 2009
    219
    34
    What happens if you go into ADC mode, set the potentiometer to maximum and then go into LEDtest mode ?

    Now go back into ADC mode, set the potentiometer to minimum and then go back into LEDtest mode ?

    What I believe is happening is that the LEDtest code is using whatever value is left over from the ADC mode. If this is the case then add
    Code ( (Unknown Language)):
    1. Result2 = ADIn 1
    to the begining of LEDtest so that it is recalculated each time the LEDs start a new cycle.
     
    kkbanton likes this.
  15. kkbanton

    Thread Starter New Member

    Jan 20, 2011
    10
    0
    Hi DumboFixer, thank you sir! It works, the only thing is that, when I placed

    Code ( (Unknown Language)):
    1.  
    2. Result2 = ADIn 1
    3.  
    in the LEDTEST program, it will update the speed every after its 1 complete loop. If I have the maximum rotation in potentiometer, I'm waiting for too long to change its speed. So I do it this way,

    Code ( (Unknown Language)):
    1.  
    2.      High LED1
    3.      Result2 = ADIn 1
    4.      DelayMS Result2
    5.      Low LED1
    6.      Result2 = ADIn 1
    7.      DelayMS Result2
    8.      High LED2
    9.      Result2 = ADIn 1
    10.      DelayMS Result2
    11.      Low LED2
    12.      Result2 = ADIn 1
    13.      DelayMS Result2
    14.  
    so that the rotation of the potentiometer updates the speed every after each LED blinks. I also applied it on the speed of counting of my 7Segment. Thank you so much sir! Thanks also to thatoneguy. Thank you guys. You really helped me a lot! Thanks!:D:D:D:D:D:)
     
Loading...