Slideshow

Thursday 24 May 2012

PIC Project - PICBASIC - Poor Man's Scope

PICBASIC - Poor Man's Scope

TESTED OK PROJECT

A project "Micro picscope" a simple visual signal monitor.
It shows a representation of the signal waveform using an alfanumeric 16*2 lcd display.
Here a PBP version with PIC16F690

Diagram is given below :

 

 

 

Obviously the performance are very limited; i consider this project a toy.
A graphic area of 8*40 pixels is inadequate to show anything with an acceptable accuracy.

 

 

 

 The bandwidth is limited to 4-5KHz
The frequency counter is limited to 6 digit, the precision depends by the internal oscillator frequency.

 

Necessary files are given below : (assembly file and HEX code)

 

: : :file start: : :

 

'
'
'*********************************
'*  Name    : Pr_SCOPE.pbp       *
'*  Author  : Pratik Gohel       *
'*  Date    : 24/05/2012         *
'*  Version : 2.0                *
'*********************************
'
'
 @ DEVICE PIC16F690,INTOSCIO,WDT_OFF,PWRT_ON,MCLR_OFF,PROTECT_OFF
 @ DEVICE PIC16F690,BOD_OFF,CPD_OFF,IESO_OFF,FCMEN_OFF
'
 DEFINE OSC 8           'internal oscillator
'
' DEFINE INTHAND Myint   'define interrupt handler
 DEFINE LCD_BITS 4      ' Set LCD bus size (4 or 8 bits)
 DEFINE LCD_LINES 2     ' linee display
'
 DEFINE LCD_DREG  PortC
 DEFINE LCD_DBIT  0     ' bit 0-3  bus x display
 DEFINE LCD_RSREG PortC '
 DEFINE LCD_RSBIT 4     ' R/S  PortC.4
 DEFINE LCD_EREG PortC  '
 DEFINE LCD_EBIT 7      ' En  PortC.7
'
'    NON cambiare l'ordine obbligatorio per la conversione bin>BCD
reg0        var   byte $74         'lsd del valore binario da convertire
reg1        var   byte $75         'vengono tutti portati ad FF
reg2        var   byte $76
reg3        var   byte $77         'msd
'         risultato conversione 32bit bcd
Dig0        var   byte $78        'BCD lsd
Dig1        var   byte $79        'rappresentazione in BCD del contatore 32 bit
Dig2        var   byte $7a
Dig3        var   byte $7b
Dig4        var   byte $7c        'BCD msd
'
Wsave       var   byte $7D  SYSTEM      'uso interrupt  sono visibili sempre
Ssave       var   byte $7E  SYSTEM      'nei 3 banchi
Psave       var   byte $7F  SYSTEM      'fino a 7F
'
'
TmpW        var   word
TmpW2       var   word
NumW        var   word
Dum1        var   word
'
Hicntr      var   word            '32bit frequency counter
Locntr      var   word
'
'
Timbase     var   byte            'copia sampling rate A/D
Rate        var   byte            'counter sampling rate
'
Index       var   byte
Vmin        var   byte
Vpp         var   byte
Voffset     var   byte
Previous    var   byte
Row         var   byte
IndxBT      var   byte            'pointer tabella base tempi
'
Tmp1        var   byte            'temporanee
Tmp2        var   byte
Sbr1        var   byte            'uso in sub
Sbr2        var   byte
Sbr3        var   byte
'
'
Flag_V      var   byte        'flag vari
'
Fl_Tmp      var   Flag_V.0      '
'l_1        var   Flag_V.1      '
'l_2        var   Flag_V.2      '
'l_3        var   Flag_V.3      '
'l_4        var   Flag_V.4      '
'           var   Flag_V.5      '
'           var   Flag_V.6      '
'           var   Flag_V.7      '
'
BufABcd     var   byte[09]      'bank0    'buffer Ascii conversione 32bit
Adbuf       var   byte[63] bank1    'deposito acquisizioni A/D & lcd user char.
Pixi        var   byte[39] bank2    'buffer bit map
'
'
'Vcc                        pin 1
'Gnd                        pin 20
'                PortA.7   'na
'                PortA.6   'na
TrigIN      var  PortA.5   'pin 2   input Timer1 counter
'           var  PortA.4   'pin 3   output
Push_But    var  PortA.3   'pin 4   input Button
'           var  PortA.2   'pin 17  output
LedB        var  PortA.1   'pin 18  output Led
'           var  PortA.0   'pin 19  analog input A/D
'
'Tx         var  PortB.7   'pin 10  output
'           var  PortB.6   'pin 11  output
'Rx         var  PortB.5   'pin 12  input
'           var  PortB.4   'pin 13  output
'                PortB.3   'na
'                PortB.2   'na
'                PortB.1   'na
'                PortB.0   'na
'
'           var  PortC.7   'pin 9   output display En
'           var  PortC.6   'pin 8   output
'           var  PortC.5   'pin 5   output
'           var  PortC.4   'pin 6   output display R/S
'           var  PortC.3   'pin 7   output display D7
'           var  PortC.2   'pin 14  output    "    D6
'           var  PortC.1   'pin 15  output    "    D5
'           var  PortC.0   'pin 16  output    "    D4
'
'
'---------- COSTANTI
'
Cr          con   13
Lf          con   10
Negativo    con   128
LedOn       con   1
LedOFF      con   0
'
'posizioni memoria valori in eeprom
VrefAD      con   2            'posizione eeprom v.alimentazione
AdjFreq     con   4            'adj frequency measure
Rates       con   16           'start sample rate table
'--------------------------------
'
'
        Goto inizio            ' Skip around interrupt handler
'
asm
;
;valore da convertire in reg0-4 risultato in dig4-0
;conversione a 32bit da binario a bcd
_cv_bi2bcd
        movlw   32
        movwf   r0              ;bit counter
        clrf    _dig0           ;lsd
        clrf    _dig1
        clrf    _dig2
        clrf    _dig3
        clrf    _dig4           ;msd
b2bcdl
        movlw   _dig0            ;point at first bcd
        movwf   FSR
b2bcdil
        movlw   33h
        addwf   INDF,f          ;add to low and high nybbles
        btfsc   INDF,3
        andlw   0f0h            ;low result >7 . OK (take the 3 out)
        btfsc   INDF,7
        andlw   0fh             ;hi > 7 OK.
        subwf   INDF,f          ;any results <=7, subtract back.
        incf    FSR,f           ;Inc. pointer for next time
        movlw   Wsave
        subwf   FSR,w
        btfss   STATUS,C
        goto    b2bcdil         ;If not done, do the inner loop again.
;
        rlf     _reg0,f
        rlf     _reg1,f
        rlf     _reg2,f
        rlf     _reg3,f         ;Get another bit out of bin.
        rlf     _dig0,f         ;Put bit into bcd.
        rlf     _dig1,f
        rlf     _dig2,f
        rlf     _dig3,f
        rlf     _dig4,f
        decfsz  r0,f            ;Do more?
        goto    b2bcdl          ;Yes.
        return
;
endasm
'
Pk_Pk:
      Index = 0
      Sbr1 = 255        'min --> max
      Sbr2 = 0          'max --> min
      repeat
            Sbr3 = Adbuf[Index]              'ricerca max,min
            if Sbr3 > Sbr2 then Sbr2 = Sbr3  'attuale > max
            if Sbr3 < Sbr1 then Sbr1 = Sbr3  'attuale < min
            Index = Index + 1
      until Index > 39
      Vpp = Sbr2 - Sbr1                      'calcola delta
      Voffset = Sbr1                         'save offset
'toglie offset ai valori acquisiti
      Index = 0
      repeat
            Sbr3 = Adbuf[Index] - Sbr1       'scala valori acquisiti
            Adbuf[Index] = Sbr3              'save again
            Index = Index + 1
      until Index > 39
      return
'
'crea una immagine bitmap trova il punto da mettere sul grafico
' punto =  Ad*8/256   adatto per scala 0-255
'ritorna valori tra 0 e 7
'N.B. le letture sono scalate dell'offset per avere massima risoluzione
'         TmpW = Adbuf[Index] * 8           'riporta lettura in range x pixel
'         tmpW = tmpW >> 8                  'scala 0 255
'         Tmpw = TmpW /(Vpp+1)              'scala dinamica
Make_Bit_Map:
'ricerca fattore scala x adattare valori
                        if Vpp < 32 then
                           Dum1 = 32
                        else
                           Dum1 = Vpp + 1
                        endif
      Index = 0
      repeat
         Sbr1 = (Adbuf[Index] * 8) / Dum1
'deve avere un valore da 0 a 7 che indica il pixel da accende
         lookup Sbr1,[1,2,4,8,16,32,64,128],Sbr2
'sostituisce il pixel con il suo peso binario
         Pixi[Index] = Sbr2
         Index = Index + 1
      until Index > 39
'join punti sul grafico
      Previous = Pixi[0]                  'primo punto
      Index = 1
      repeat
         Sbr1 = Pixi[Index]               'punto attuale
         if Sbr1 = Previous then Succ_t   'orrizzontale  skip test
         if Sbr1 > Previous then          'linea in salita
'line up
            Sbr2 = Sbr1                   'copia x fill bit risultato
            Sbr3 = Previous << 1          'inizia da un punto sopra al precedente
            while Sbr3 < Sbr1             'fino a raggiungere l'attuale
               Sbr2 = Sbr2 | Sbr3         'aggiunge nuovo pixel
               Sbr3 = Sbr3 << 1           'sale
            wend
         else                             'linea in discesa
'line down
            Sbr2 = Sbr1                   'copia x fill bit risultato
            Sbr3 = Previous >> 1          'inizia da un punto sotto al preced.
            while  Sbr3 > Sbr1            'fino a raggiungere l'attuale
               Sbr2 = Sbr2 | Sbr3         'aggiunge nuovo pixel
               Sbr3 = Sbr3 >> 1           'scende
            wend
         endif
         Pixi[Index] = Sbr2               'aggiorna immagine
Succ_t:
         Previous = Sbr1                  'punto attuale diventa precedente
         Index = Index + 1
      until Index > 39                    'scan tutte locazioni
'
'converte rappresentazione grafica della forma d'onda
'in formato compatibile per display. scandisce in orrizzontale la bitmap
'a gruppi di 5 colonne e costruisce il pattern per custom user characters
'produce 64 bytes per gli 8 caratteri definibili dall'utente
Make_user_char:
     Row = 0                       ' pointer char da inviare a display
     Index = 0                     'pointer lettura
     repeat
       Sbr1 = 128                  'inizia da pixel in alto
       repeat
         Tmp2 = 0                  'dato da inviare
         Sbr3 = Index              'usa una copia
         Sbr2 = 16                 'scansione orriz. dei bit
         repeat
            Tmp1 = Pixi[Sbr3]
            Tmp1 = Tmp1 & Sbr1     'isola bit da d7 a d0
            if Tmp1 > 0 then
               Tmp2 = Tmp2 | Sbr2     'produce dato uscita
            endif
            Sbr2 = Sbr2 >> 1        '16,8,4,2,1
            Sbr3 = Sbr3 + 1         'x 5 colonne
         until Sbr2 = 0
'in Tmp2 pronto dato  del primo carattere
         AdBuf(row) = Tmp2
         row = row + 1              'scende di una riga
         Sbr1 = Sbr1 >> 1           '128,64,32,16,8,4,2,1
       until Sbr1 = 0
       Index = Index + 5            'al gruppo  seguente
     until Index > 39
     return
'
'Quick explanation on how to implement user-defined characters:
'First you will need to make a pixel definition for the characters
'you want to use.  Below is the pixel definition for an underlined
'0' (char code 0x30) based on a 5x7 dots character definition:
'       |   bits    | byte
'  row  | 76543210  | value
'  ------------------------
'  000  |     xxx   | 0x0E
'  001  |    x   x  | 0x11
'  010  |    x  xx  | 0x13
'  011  |    x x x  | 0x15
'  100  |    xx  x  | 0x19
'  101  |    x   x  | 0x11
'  110  |     xxx   | 0x0E
'  111  |    xxxxx  | 0x1F
'The byte values need to be loaded into CGRAM address 00cccrrr
'-  ccc = user-defined character number (0..7)
'-  rrr = row number of the user-defined character (0..7)
'
Update_CGRAM:
      Row = 0                 'buffer pointer
      Sbr3 = 0                'user definable counter
      repeat
         Sbr2 = Sbr3 + 64     'comando scrittura cgram
         lcdout $FE,Sbr2      'N^ user defined to command register
         Sbr2 = 0
         repeat
            Sbr1 = AdBuf(Row)
            lcdout Sbr1       'user defined
            Row = Row + 1
            Sbr2 = Sbr2 + 1
         until Sbr2 > 7       'x 8 row
         Sbr3 = Sbr3 + 8      'next character
      until Sbr3 > 56
'      lcdout 0,1,2,3,4,5,6,7
      return
'
'
Cls:
      lcdout $FE,1
      return
'
'==========================================
' misura frequenza usando tmr1 come contatore e tmr0 come gate di misura
Freqy:
         LedB = LedON
         Hicntr = 0
'         option_reg = %11000111     'prescaler 256
         read AdjFreq,TmpW2.byte1   'recupera aggiustamento gate time
         read (AdjFreq+1),TmpW2.byte0
'adjust for precise 1sec. gate time
'tmr0 tic = 2e6 / 32768 = 16,384mS   0,999424S + 576uS = 1S   61tic
'           2e6 / 65536 = 32,768mS   0,98304S + 16,96mS = 1S  30tic
'
'no gate control no prescale no sync  external clock source
         t1con = 000010             'stop tmr1
         Sbr1 = 0                      'gate counter
         tmr0 = 0
         tmr1l = 0
         tmr1h = 0                     'clr counter
         intcon.2 = 0                  'clr tmr0if
         pir1.0 = 0                    'clr tmr1if
         tmr0 = 0                      'start gate misura
         t1con.0 = 1                   'start tmr1
         repeat
               if pir1.0 = 1 then      'tmr1 overflow ?
                   pir1.0 = 0          'clr overflow
                   Hicntr = Hicntr + 1
               endif
               if intcon.2 = 1 then    'Tmr0 overflow ?
                   intcon.2 = 0        'clr overflow
                   Sbr1 = Sbr1 + 1     'gate counter
               endif
         until Sbr1 > 29               '32,768mS * 30 = 0,98304S.
         pauseus TmpW2                 '0,98304 + 16960uS = 1S
         t1con.0 = 0                   'stop tmr1
         if pir1.0 = 1 then            'tmr1 overflow ?
               Hicntr = Hicntr + 1
         endif
         Locntr.byte0 = tmr1l
         Locntr.byte1 = tmr1h
         LedB = LedOFF
         return
'
'converte in mv la lettura dell' A/D
Make_volt:
       read VrefAD,TmpW2.byte1            'recupera vref da eeprom
       read (VrefAd+1),TmpW2.byte0
       numW = TmpW * TmpW2               'tutto in mv.
       TmpW2 = DIV32 256                 '(A/D*5000)/256
       Lcdout dec TmpW2 dig 3,".",dec TmpW2 dig 2
       return
'
'
Zero_blank:
     Index = 0
     Sbr1 = dig0         'lsd
     gosub Bcd_split
     Sbr1 = Dig1
     gosub Bcd_split
     Sbr1 = dig2
     gosub Bcd_split
     Sbr1 = dig3
     gosub Bcd_split
     Sbr1 = dig4         'msd
     gosub Bcd_split
     Index = 9
     Fl_Tmp = 0
     while index > 0
           if BufAbcd[Index] > 0 or Fl_Tmp = 1 then
              BufAbcd[Index] = BufAbcd[Index] + "0"   'ascii 0
              Fl_Tmp = 1
           else
              BufAbcd[Index] = " "         'space
           endif
           index = index - 1
     wend
     BufAbcd[Index] = BufAbcd[Index] + "0"   'lsd non blank
     return
'
Bcd_split:
     BufAbcd[Index] = Sbr1 & 001111
     Index = Index + 1
     Sbr1 = Sbr1 >> 4
     BufAbcd[Index] = Sbr1
     Index = Index + 1
     return
'
'
'==========================================
Inizio:
'
        TRISA = %11101001        'portA configura direzione
        TRISB = 101111        'portB configura direzione  0=out 1=in
        TRISC = 000000        'portC configura direzione
        PortA = %11111111        '
        PortB = %10111111        'preset uscite
        PortC = 000000
        Osccon = %01110001       'select 8MHz internal clock source
'disable pullup
        WpuA = 000000
        WpuB = 000000
'disable comparators
        CM1CON0 = 0
        CM2CON0 = 0
        CM2CON1 = 0
'Init timer1
        T1CON = 000000         'prescale=1,Internal source,Tmr1 stop
'Init eusart
'        RCSTA = %10010000        'Enable serial port and continuous receive
'        TXSTA = 100000        'Enable transmit  BRGH = 0
'        SPBRGH = 00              '
'        SPBRG = 12               '38400 @8MHz
'        BAUDCTL.3 = 1            ' Enable 16 bit baudrate generator
'Init A/D
        Ansel = 000001        'portA digital  An0
        AnselH = 000000       'portC digital
'        Adcon1 = %01010000       'clock conversione Fosc/16 = 2uS
        Adcon0 = 000000       'left justified,Vref = Vdd,An0,ADC stop
'no pullup,rising edge, fosc/4, prescaler=1:256
        option_reg = %11000111
        intcon = 0               'no interrupt
'        Tmp1 = RCREG             'scarica uart receiver
'        Tmp1 = RCREG             'scarica uart receiver
        pause 200                'wait for display
        gosub cls
        lcdout " Poor SCOPE v.2"
        pause 1000
        lcdout $FE,12              'cursor off
        Adcon0 = 000001          'adc on
'        Adcon1 = 010000         'clock conversione Fosc/8 = 1uS
        Adcon1 = %01010000          'clock conversione Fosc/16 = 2uS
        IndxBT = 0                  'pointer Time Base divider  Max speed
        Timbase = 0                 'Max speed
'--------------
P_scope:
         pause 20
         if Push_But = 0 then             'Button On
            IndxBT = IndxBT + 1
            if IndxBT > 09 then IndxBT = 0
            Sbr1 = IndxBT + Rates         'add offset
            read Sbr1,Timbase             'get sampling rate divider
            gosub cls
            lcdout " S. Rate = ",dec Timbase
            pause 400                    'display
            while Push_But = 0           'rilascia tasto
               pause 10
            wend
        endif
        Index = 0                      'A/D buffer pointer
        Dum1 = 0                       'timeout
'wait for level 0 or timeout
         repeat
              if Push_But = 0 then P_scope     'user quit
              Dum1 = Dum1 + 1             'timeout counter
              LedB = Tmr0.7               'flash led
         until Trigin = 0 or Dum1 = 0     'attende livello 0  o timeout
         Dum1 = 0                          'timeout
'wait for rising edge trigger or timeout
         repeat                            'loop su livello 0
            if Push_But = 0 then P_scope   'user quit
             LedB = Tmr0.7                 'flash led
             Dum1 = Dum1 + 1               'timeout counter
         until Trigin = 1  or Dum1 = 0    'triggered or timeout
'start acquisizione
         ADCON0.1 = 1
         repeat
              Rate = 0                'sample rate divider
              repeat
                  while ADCON0.1 = 1      'A/D ready ?
                  wend                    'wait eoc
                  Rate = Rate + 1
                  ADCON0.1 = 1            'start new conversion
              until Rate > Timbase
              Adbuf[Index] = ADRESH       'get & save  8 bit
              Index = Index + 1
         until Index > 39                 'fill buffer 40 samples
'acquisizione completata
         gosub Pk_Pk                     'rileva Vpp
         gosub Make_Bit_Map              'crea immagine
         gosub Make_user_char            'converte per display
         gosub Update_CGRAM              'invia bitmap al display
         gosub Freqy                     'misura frequenza
'---
         gosub Cls
         lcdout "Vpp          Vof"
         lcdout $FE,132                  'locate cursor
         lcdout 0,1,2,3,4,5,6,7          'display bitmap
         lcdout $FE,$C0                  'locate cursor
         TmpW = Vpp
         gosub Make_volt                 'convert to mV  & display Vpp
         lcdout $FE,$CD                  'locate cursor
         TmpW = Voffset
         gosub Make_volt                 'convert to mV  & display Voffset
         reg3=hicntr.byte1               'binary to string conversion
         reg2=hicntr.byte0
         reg1=locntr.byte1
         reg0=locntr.byte0
         call cv_bi2bcd                  'binary 2 bcd
         gosub Zero_Blank
         lcdout $FE,$C4                  'locate cursor
         Index = 5                       'display 6 digit
         repeat
            lcdout BufAbcd[Index]       'display frequency
            index = Index - 1
         until Index > negativo          '5-4-3-2-1-0
'       lcdout hex2 dig2,hex2 dig1,hex2 dig0
'       lcdout hex4 hicntr,hex4 locntr
         lcdout "Hz"
         pause 100
         goto P_scope
'
'
        data @00 ,$FF   'non usato
        data @01 ,$FF   'non usato
' Vref conv. A/D nominale 5000mV  V. alimentazione
        eeprom VrefAD,[$13,$88]    ' hi,lo  5000
'Frequency counter gate time adj
        eeprom AdjFreq,[$42,$40]    'hi,lo  16960
'A/D Sample rate divider
        eeprom Rates,[0,1,2,4,8,16,32,64,128,192]
'
        eeprom [255,255,255]       'non usato
'

 

: : :END: : : 


HEX code :


: : :start: : :


:10000000B2012C290408A7008713071207128316D0
:10001000871307120712F030870583122708B218DA
:100020002F283A30A100983097203330A600442082
:100030001330A1008830972044206430962044205B
:10004000643096202230A600442028302E200C3028
:100050002E2006302E20B21427082F283214A60096
:10006000321C3D280712033C031C42284220073063
:10007000A100D0309720031408003214FE3C03196D
:1000800027290716A60E321C32108717F030870575
:1000900026080F3987048713A60E321844283230F9
:1000A000962003140800B31329080319B317053069
:1000B000A8002730A300103069200330A300E830E7
:1000C0006920A30164306920A3010A306920240853
:1000D0007028A2002508A1002408A000F020200814
:1000E000A000A8030319B313290803197A282802CA
:1000F000031808002008031DB313B31B0800303E8B
:10010000222903178D0083168C130C1483120C08FC
:100110002729A301A200FF30A207031CA307031C89
:1001200027290330A100E33097208B28A101F43E5A
:10013000A000A109FE30031CA028A00703189D28D9
:10014000A0076400A10F9D2800002018A7282018F0
:10015000A9280800013EA7000A30A200A301F02050
:10016000A70BAF28240808000310A00DA10DFF3E27
:100170000318B428200827290310A10CA00CFF3E67
:100180000318BC2820082729A101A301A2000230DE
:10019000CE28A101A301A2000130CE28A800230887
:1001A0002102031DD5282208200204300318013043
:1001B000031902302805031DFF3027290404031DFD
:1001C000FF302729A2002008A6002408A000260846
:1001D000A4002108A6002508A1002608A500F228F1
:1001E000A501A4011030A600210DA40DA50D220823
:1001F000A4022308031C230FA502031806292208C2
:10020000A40723080318230FA5070310A00DA10DB1
:10021000A60BF428200827291030A800A101A0016E
:10022000A70CA60C031C1A292208A00723080318F0
:10023000230FA107A10CA00CA50CA40CA80B10293E
:1002400024082729840031088A003008820083139B
:1002500003138312640008008A11902B2030A00041
:10026000F801F901FA01FB01FC0178308400333018
:1002700080078019F039801B0F398002840A7D3095
:100280000402031C3729F40DF50DF60DF70DF80DDA
:10029000F90DFA0DFB0DFC0DA00B35290800D2015C
:1002A000FF30D700D8015208A03E84000008D900D2
:1002B0006400590858028A11031860295908D800A7
:1002C0006400570859028A11031868295908D70091
:1002D000D20A6400283052028A11031C532957089D
:1002E0005802DF005708DE00D2015208A03E840009
:1002F0000008C90057084902D9005208A03E8400EE
:1003000059088000D20A6400283052028A11031C66
:1003100075290800640020305F028A1103189529AE
:100320002030C100C2018A119A2901305F07C10043
:10033000C201C20DD2015208A03E84000008C900CB
:100340004908A600A7010830A200A3018A010C21D8
:10035000C9002508CA004908A0004A08A1004108B0
:10036000A2004208A3008A01F020D7005708073CEA
:100370008A11031CCC298A11C021D8008A11CC29EA
:1003800001308A00570882070134023404340834EB
:1003900010342034403480345208203E84008317C7
:1003A000580880008313D20A6400283052028A1150
:1003B000031C9B29031720080313D4000130D2002B
:1003C0005208203E840083170008D700831364007E
:1003D000570854028A1103191E2A64005708540250
:1003E0008A110318062A5708D8000310540DD900A3
:1003F0006400570859028A110318042A5908D804BE
:100400000310D90D8A01F8298A11172A5708D80034
:100410000310540CD9006400590857028A110318BC
:10042000172A5908D8040310D90C8A010B2A52083C
:10043000203E840083175808800083135708D40097
:10044000D20A6400283052028A11031CE029D60126
:10045000D2018030D700DC015208D9001030D8001A
:100460005908203E840083170008DB0083135708D7
:10047000DB05640001305B028A11031C412A580825
:10048000DC040310D80CD90A64005808003C8A1117
:10049000031D302A5608A03E84005C088000D60A5E
:1004A0000310D70C64005708003C8A11031D2B2A47
:1004B0000530D2076400283052028A11031C292A11
:1004C0000800D601D90140305907D800FE308A0112
:1004D000032058088A010320D8015608A03E840052
:1004E0000008D70057088A010320D60AD80A6400FA
:1004F000083058028A11031C6D2A0830D90764009D
:10050000393059028A11031C632A0800FE308A011F
:10051000032001308A01032008008514C301C401AF
:1005200004308A018120D00005308A018120CF006B
:1005300002309000D70181018E018F010B110C1048
:100540008101101464008A110C1CAA2A0C10C30A21
:100550000319C40A64008A110B1DB02A0B11D70AB3
:1005600064001E3057028A11031CA22A5008A10001
:100570004F088A019720101064008A110C1CC32AAE
:10058000C30A0319C40A0E08C5000F08C600851067
:10059000080002308A018120D00003308A018120C6
:1005A000CF004D08A6004E08A7004F08A200500833
:1005B000A3008A010C21C7002508C8000130A30050
:1005C00000308A01E220CF002108D000A9014F08A5
:1005D000A0005008A10003308A01AA20C900CA0166
:1005E0004908A4004A08A5000230B000B1018A0100
:1005F00053202E308A010320A9014F08A000500883
:10060000A10002308A01AA20C900CA014908A40039
:100610004A08A5000230B000B1018A015320080049
:10062000D2017808D7008A1178237908D7008A1177
:1006300078237A08D7008A1178237B08D7008A119B
:1006400078237C08D7008A1178230930D200511012
:100650006400013052028A11031C682B5208383E94
:1006600084000008C9004908A00000308A01C920A0
:10067000C900003051180130A00001308A01C420A7
:10068000CB00490884004B088A01DE20CB00CC0057
:1006900064004B084C048A110319602B5208383E41
:1006A00084000008C90030304907C900CA01CA0DDA
:1006B0005208383E84004908800051148A11652B85
:1006C0005208383E840020308000D2038A01282B53
:1006D0005208383E84000008C90030304907C9007C
:1006E000CA01CA0D5208383E84004908800008003B
:1006F0000F305705C900CA015208383E8400490826
:100700008000D20A5708A000A10104308A01BF204E
:10071000D7005208383E840057088000D20A0800EB
:100720008316E93085002F30860087018312FF3061
:100730008500BF3086008701831671308F009501D8
:1007400083120317950199019A019B0103139001EC
:10075000031701309E009F0103139F018316C730CA
:10076000810083128B01C8308A0189208A01862288
:1007700020308A01032050308A0103206F308A0123
:1007800003206F308A01032072308A010320203059
:100790008A01032053308A01032043308A01032059
:1007A0004F308A01032050308A01032045308A01EE
:1007B000032020308A01032076308A0103202E3066
:1007C0008A01032032308A0103200330A300E8307D
:1007D0008A018A20FE308A0103200C308A0103201E
:1007E00001309F00831650309F008312D301DA013D
:1007F00014308A01892064008A118519482CD30A93
:1008000064000A3053028A11031C072CD3011030F4
:100810005307D70057088A018120DA008A0186220F
:1008200020308A01032053308A0103202E308A01B0
:10083000032020308A01032052308A0103206130D6
:100840008A01032074308A01032065308A01032065
:1008500020308A0103203D308A01032020308A01A4
:100860000320A9015A08A400A5010230B000B1017B
:100870008A0153200130A30090308A018A2064004D
:100880008A118519482C0A308A0189208A013F2C57
:10089000D201C101C20164008A11851DF82BC10A71
:1008A0000319C20A811B8514811F85100030851A27
:1008B0000130A00000308A01C420C9004108A00016
:1008C0004208A100A30100308A01C620CB004908DC
:1008D00084004B088A01DE20CB00CC0064004B086A
:1008E0004C048A1103194B2CC101C20164008A1106
:1008F000851DF82B811B8514811F8510C10A0319E2
:10090000C20A0030851A0130A00001308A01C420DB
:10091000C9004108A0004208A100A30100308A01DB
:10092000C620CB00490884004B088A01DE20CB009A
:10093000CC0064004B084C048A110319762C9F14D8
:10094000D50164008A119F1CA72C8A01A12CD50A0D
:100950009F14640055085A028A110318A12C5208EA
:10096000A03E84001E088000D20A64002830520293
:100970008A11031CA02C8A014F218A018A218A0135
:1009800027228A0161228A018D228A01862256301D
:100990008A01032070308A01032070308A0103200D
:1009A00020308A01032020308A01032020308A0170
:1009B000032020308A01032020308A0103202030C8
:1009C0008A01032020308A01032020308A0103207D
:1009D00020308A01032020308A01032056308A010A
:1009E00003206F308A01032066308A010320FE3025
:1009F0008A01032084308A01032000308A01032009
:100A000001308A01032002308A01032003308A0169
:100A1000032004308A01032005308A0103200630B8
:100A20008A01032007308A010320FE308A01032057
:100A3000C0308A0103205F08CD00CE018A01C9229F
:100A4000FE308A010320CD308A0103205E08CD00EC
:100A5000CE018A01C9224408F7004308F60046087F
:100A6000F5004508F4008A012E218A011023FE308A
:100A70008A010320C4308A0103200530D2005208C5
:100A8000383E84000008C90049088A010320D203C7
:100A90006400813052028A11031C3F2D48308A01C4
:100AA00003207A308A01032064308A0189208A0178
:020AB000F82B21
:02400E00C430BC
:0C420000FF00FF00130088004200400097
:10422000000001000200040008001000200040000F
:0A4230008000C000FF00FF00FF0047
:00000001FF


: : :END: : :


Enjoy it


post by Pratik Gohel...:))



No comments:

Post a Comment