proton kodlarını basic çevirme

Başlatan eyt, 02 Ocak 2019, 11:16:31

eyt

merhaba proton bilmiyorum bu kodları basic çevirmeme yardımcı olurmusunuz?

Device 18F2520
Xtal 10
Config_Start
   OSC = HSPLL ; HS oscillator, PLL enabled (Clock Frequency = 4 x FOSC1)
   FCMEN = OFF ; Fail-Safe Clock Monitor disabled
   IESO = OFF ; Oscillator Switchover mode disabled
   PWRT = OFF ; PWRT disabled
   BOREN = OFF ; Brown-out Reset disabled in hardware and software
   WDT = OFF ; WDT disabled (control is placed on the SWDTEN bit)
   MCLRE = On ; MCLR pin enabled; RE3 input pin disabled
   LPT1OSC = OFF ; Timer1 configured for higher power operation
   PBADEN = OFF ; PORTB pins are configured as digital I/O on Reset
   CCP2MX = PORTC ; CCP2 input/output is multiplexed with RC1
   STVREN = OFF ; Stack full/underflow will not cause Reset
   LVP = OFF ; Single-Supply ICSP disabled
   XINST = OFF ; Instruction set extension and Indexed Addressing mode disabled (Legacy mode)
   Debug = OFF ; Background debugger disabled, RB6 and RB7 configured as general purpose I/O pins
Config_End

Declare PLL_Req TRUE '40mhz
Declare All_Digital = FALSE
Declare PortB_Pullups =0
CMCON =7
Declare  LCD_Type ALPHA   ' Alphanumeric LCD type
Declare  LCD_DTPin  PORTC.4   ' LCD data port
Declare  LCD_ENPin  PORTC.3   ' E line
Declare  LCD_RSPin  PORTC.1   ' RS line
Declare  LCD_Interface  4   ' 4-line or 8-line interface
'Declare  LCD_CommandUs  100   ' Time to wait (in uS) between commands sent to the LCD
'Declare  LCD_DataUs  10   ' Time to wait (in microseconds) between data sent to the LCD
Declare  LCD_Lines   4   ' How many lines the LCD has
Cls
DelayMS 100




TRISA =%00100001  :PORTA =0                     
TRISB =%00000000 :PORTB =0                     
TRISC =%00000000  :PORTC =0                                         
'Symbol mEnU =PORTE.2                           
'Symbol YuKaRI  =PORTE.1                         
'Symbol AsAgI =PORTE.0                           
Symbol GrOuNd =PORTA.5                         
Symbol PulSe =PORTC.0                           
'Symbol OrNeK =PORTC.3                           
'Symbol LaMbA =PORTB.5                           
'Input mEnU                                     
'Input YuKaRI                                   
'Input AsAgI                                     
Input GrOuNd                                   
Output PulSe                                   
'Output OrNeK                                   
'Output LaMbA
ADCON0 =%00000011                                 
ADCON1 =%00001110                                 
ADCON2.7 =1                                       
'adcon2 =%10111010                               
''Symbol TMR0IF = adcon1.                         
'Symbol TMR0IE = INTCON.5'adcon1 =%00001011       
''Symbol GIE = INTCON.7   ''adcon2.7 =1           
Declare Adin_Res = 12 ' 12-bit result required     
Declare Adin_Tad = 32_FOSC ' RC OSC chosen   
Declare Adin_Delay = 20 ' Allow 50us sample time 

                                   
'//////////////KESME configrasyonu /////////////////////////// 
Symbol TMR0IF = INTCON.2 ' TMR0 Overflow Interrupt Flag         
Symbol TMR0IE = INTCON.5 ' TMR0 Overflow Interrupt Enable       
Symbol GIE = INTCON.7    ' Global Interrupt Enable             
T0CON  =%11000000             'TIMER0=8 BİT VE PRESCALE 1/2     

GIE =1
TMR0IF =1
TMR0IE =1
GIE =0

Dim SaYaC As Byte
SaYaC =0
Dim A As Word
Dim tP As Byte
Dim tOpRaK As Word
Dim fArK As Word


On_Hardware_Interrupt GoTo KESME
GIE =1
GoTo OnMaIn
KESME:
Context Save
        Inc SaYaC
        If SaYaC =200 Then SaYaC =0 '10,25 mS =98 hertz
        TMR0IF=0
        GIE=1             
       
 
Context Restore




OnMaIn:
Print At 1,1,"MERHABA"
tP =0
MaIn:
If SaYaC =1 Then GoTo GoNdEr

GoTo MaIn

GoNdEr:
PulSe =1
DelayUS 250
PulSe =0
DelayUS 380
PORTB.0 =1
ADIn 0,A
While ADCON0.1 ==1 :Wend
PORTB.0 =0
Print At 3,1,Dec A," "
If GrOuNd =0 Then tP =0
If tP

ete

Hangi Basic olduğunu belirtmemişsin (PBP2.6 veya PBP3.x veya Mikrobasic)
Ben PB3'e gre düzenledim.
Aşağıdadır. Ayrıca programın tamamını vermemişsin umarım çevirdiğimiz kısım yeterli olur.
2.6 için yalnızca Sigorta ayarlarının formatı değişecektir.

DEFINE OSC 40  'Xtal 10 yerine 40 yazdım çünki son frekans buraya yazılmalıdır. PLL aktif olduğuna göre 10Mhz kristal ile 40 Mhz alırsın.
#CONFIG
    CONFIG  OSC = HSPLL           
    CONFIG  FCMEN = OFF           ; Fail-Safe Clock Monitor disabled
    CONFIG  IESO = OFF            ; Oscillator Switchover mode disabled
    CONFIG  PWRT = OFF            ; PWRT disabled
    CONFIG  BOREN = OFF ;SBORDIS       ; Brown-out Reset enabled in hardware only (SBOREN is disabled)
    CONFIG  BORV = 3              ; Minimum setting
    CONFIG  WDT = OFF              ; WDT disabled
    CONFIG  WDTPS = 512           ; 1:512
    CONFIG  CCP2MX = PORTC        ; CCP2 input/output is multiplexed with RC1
    CONFIG  PBADEN = OFF          ; PORTB<4:0> pins are configured as digital I/O on Reset
    CONFIG  LPT1OSC = OFF         ; Timer1 configured for higher power operation
    CONFIG  MCLRE = ON            ; MCLR pin enabled; RE3 input pin disabled
    CONFIG  STVREN = OFF           ; Stack full/underflow will cause Reset
    CONFIG  LVP = OFF             ; Single-Supply ICSP disabled
    CONFIG  XINST = OFF           ; Instruction set extension and Indexed Addressing mode disabled (Legacy mode)
    CONFIG  DEBUG = OFF           ; Background debugger disabled, RB6 and RB7 configured as general purpose I/O pins
    CONFIG  CP0 = OFF             ; Block 0 (000800-001FFFh) not code-protected
    CONFIG  CP1 = OFF             ; Block 1 (002000-003FFFh) not code-protected
    CONFIG  CP2 = OFF             ; Block 2 (004000-005FFFh) not code-protected
    CONFIG  CP3 = OFF             ; Block 3 (006000-007FFFh) not code-protected
    CONFIG  CPB = OFF             ; Boot block (000000-0007FFh) not code-protected
    CONFIG  CPD = OFF             ; Data EEPROM not code-protected
    CONFIG  WRT0 = OFF            ; Block 0 (000800-001FFFh) not write-protected
    CONFIG  WRT1 = OFF            ; Block 1 (002000-003FFFh) not write-protected
    CONFIG  WRT2 = OFF            ; Block 2 (004000-005FFFh) not write-protected
    CONFIG  WRT3 = OFF            ; Block 3 (006000-007FFFh) not write-protected
    CONFIG  WRTC = OFF            ; Configuration registers (300000-3000FFh) not write-protected
    CONFIG  WRTB = OFF            ; Boot block (000000-0007FFh) not write-protected
    CONFIG  WRTD = OFF            ; Data EEPROM not write-protected
    CONFIG  EBTR0 = OFF           ; Block 0 (000800-001FFFh) not protected from table reads executed in other blocks
    CONFIG  EBTR1 = OFF           ; Block 1 (002000-003FFFh) not protected from table reads executed in other blocks
    CONFIG  EBTR2 = OFF           ; Block 2 (004000-005FFFh) not protected from table reads executed in other blocks
    CONFIG  EBTR3 = OFF           ; Block 3 (006000-007FFFh) not protected from table reads executed in other blocks
    CONFIG  EBTRB = OFF           ; Boot block (000000-0007FFh) not protected from table reads executed in other blocks
#ENDCONFIG

ADCON1=%00001110 'Declare All_Digital = FALSE
INTCON2.7=1 'PULLUP LAR KAPALI Declare PortB_Pullups =0
CMCON =7
DEFINE LCD_DREG PORTC 'LCD data port
DEFINE LCD_DBIT 4 'LCD data starting bit 0 or 4
DEFINE LCD_RSREG PORTC 'LCD register select port
DEFINE LCD_RSBIT 1 'LCD register select bit
DEFINE LCD_EREG PORTC 'LCD enable port
DEFINE LCD_EBIT 3 'LCD enable bit 
DEFINE LCD_BITS 4 'LCD bus size 4 or 8
DEFINE LCD_LINES 4 'Number lines on LCD
DEFINE LCD_COMMANDUS 2000 'Command delay time in us
DEFINE LCD_DATAUS 50 'Data delay time in us

LCDOUT $FE,1
PAUSE 200

TRISA =%00100001  :PORTA =0                     
TRISB =%00000000 :PORTB =0                     
TRISC =%00000000  :PORTC =0                                         
'Symbol mEnU =PORTE.2                           
'Symbol YuKaRI  =PORTE.1                         
'Symbol AsAgI =PORTE.0                           
Symbol GrOuNd =PORTA.5                         
Symbol PulSe =PORTC.0                           
'Symbol OrNeK =PORTC.3                           
'Symbol LaMbA =PORTB.5                           
'Input mEnU                                     
'Input YuKaRI                                   
'Input AsAgI                                     
Input GrOuNd 
Output PulSe 
'Output OrNeK                                   
'Output LaMbA

DEFINE ADC_BITS 10     ' ADCIN resolution  (Bits)
DEFINE ADC_CLOCK 6     ' ADC clock source  (Fosc/64)
DEFINE ADC_SAMPLEUS 11 ' ADC sampling time (uSec)                               
ADCON2.7 =1
                                     
'adcon2 =%10111010                               
''Symbol TMR0IF = adcon1.                         
'Symbol TMR0IE = INTCON.5'adcon1 =%00001011       
'Symbol GIE = INTCON.7   ''adcon2.7 =1           
'Declare Adin_Res = 12 ' 12-bit result required BU İŞLEMCİDE adc OKUMASI 10 BİT DİR FAZLASI OLMAZ   
                                   
'//////////////KESME configrasyonu /////////////////////////// 
Symbol TMR0IF = INTCON.2 ' TMR0 Overflow Interrupt Flag         
Symbol TMR0IE = INTCON.5 ' TMR0 Overflow Interrupt Enable       
Symbol GIE = INTCON.7    ' Global Interrupt Enable             
T0CON  =%11000000             'TIMER0=8 BİT VE PRESCALE 1/2     

GIE =1
TMR0IF =1
TMR0IE =1
GIE =0

SaYaC VAR Byte
SaYaC =0
A var Word
tP var Byte
tOpRaK var Word
fArK var Word


on INTERRUPT GoTo KESME
GIE =1
GoTo OnMaIn
DISABLE
KESME:
        GIE=0
        SaYaC=sayac+1
        If SaYaC =200 Then SaYaC =0 '10,25 mS =98 hertz
        TMR0IF=0
        GIE=1             
        RESUME
        ENABLE


OnMaIn:     
LCDOUT $FE,$80,"MERHABA"
tP =0
MaIn:
If SaYaC =1 Then GoTo GoNdEr

GoTo MaIn

GoNdEr:
PulSe =1
PAUSEUS 250
PulSe =0
PAUSEUS 380
PORTB.0 =1
ADCIN 0,A

PORTB.0 =0
LCDOUT $FE,$94,Dec A," "
If GrOuNd =0 Then tP =0




eyt

Çok teşekkür ederim ete hocam kodun algoritması kısaca yazmanız mümkünmüdür?

ete

Algoritmayı sen yaz artık. Anladığım kadarı ile bu nir ödev ve sen hiç bir şey yapmamış olacaksın.
Ete

eyt

Yok hocam ödev tarzı bir şey değil sadece kendi uğraşım. Anladığım kadarıyla 98hz bir çıkış mevcut diğer bir çıkışta isede puls ölçümü gerçekleştiriyor fakat puls ölümü hangi yöntem ile yapıyor tam olayların nasıl işlediğini kavrayamadım.

ete

Bu programda TMR0 sayacını kullanarak her (256*2*0,1=51,2 us de bir kesme yaratıyor ve kesme içinde Sayac=sayac+1 yapıyor.
200 kesme yani 200 * 51,2 us=10.240 us yada 10,24 ms lik peryot sonunda gönderme işlemi yapıyor.
Gönderme dediği işlem ise;
PORTC.0 pininden 250us süre ile HIGH çıkartıyor ardından 380us süre ile LOW çıkartıyor ardından PORTA.0 kanalından ADC okuması yapıp bunu ekranın 3. cü satırına yazdırıyor. Gerisi anlam kazanmamış eksik olan kısım bir anlam çıkartamıyorum.

10.240us lik süreyi frekans olarak düşünmemek gerek çünki onu frekansa dönüştüren hiç bir işlem yok programda.
Frekans çıkışı gönder kısmında mevcut oda pulse adı verilmiş PORTC.0 pininden  (250+380=630us) olup bunun frekans karşılığı ise 1.000.000/630=1587 hz dir. Sinyal değişmez sabit bir sinyaldir. Ama yaklaşık olarak her 10,s4 ms de bir bu işlem tekrarlanmış oluyorki buna garip frekans demek gerekir bence.

Ete

eyt

Sayaç yerine pulseın komutu ile aynı iş yapılabilir mi hocam


DIM Var1 AS BYTE
DIM HAM              AS WORD 'BYTE


Loop:
Var1 = PULSEIN PORTB.0, 1 ' Measure a pulse on pin 0 of PortB.
PRINT AT 1,2," ADC : " ,DEC5 Var1
GOTO Loop
/code]

ete

PULSIN komutu bir pinden gelen puls süresini ölçer. Komut parametresinde verilen 1 veya 0 değeri ise hangi peryodun ölçüleceğine karar verir. 1 girilmiş ise (PULSIN PORTC.0 , 1, VAR) sinyalin HIGH peryodu ölçülerek VAR isimli değişkene aktarılır. Ancak ölçümde 10 un katları sistemi uygulanır. OSC frekansı 4 Mhz ise ölçülen süre 10'un katları şeklinde olur. 200 us için 20 değeri alınır. 100us için 10 değeri 1200us için ise 120 değeri alınır.
Bu programda SAYAC saydırma sistemi belirli bir gecikme yaratarak sinyal oluşturma esasına dayanıyor. PULSIN ise sinyal süresini ölçer.  Karıştırmamak gerekir.

Ete

Powered by EzPortal