Haberler:

Forum kuralları güncellendi LÜTFEN  okuyunuz:  https://bit.ly/2IjR3ME

Ana Menü

3 girişli voltmetre

Başlatan MC_Skywalker, 01 Temmuz 2005, 15:29:29

MC_Skywalker

Merhaba;  

Pic basic öğreniyoruzdaki volmatre yi birazcık geliştirip 3 girişli bir hale getirmey çalıştım fakat

For k To 10
        ADCIN 0,R_in                    '0 nolu kanaldan Analog değeri oku ve R_in değişkenine aktar. 
        ADCIN 1,S_in                    '1 nolu kanaldan Analog değeri oku ve S_in değişkenine aktar.
        ADCIN 3,T_in                    '3 nolu kanaldan Analog değeri oku ve T_in değişkenine aktar.
        Toplam1=Toplam1+R_in
        Toplam2=Toplam2+S_in
        Toplam3=Toplam3+T_in
       NEXT k


döngüsünde for için komut dizimi hatası veriyor. sebebini bulmadım. acaba neden ola bilir.

tam kod

'*******************************************************************************************************
'*  Name    : 3giriş.BAS                                                                               *
'*  Author  : MC_Skywalker                                                                             *
'*  Notice  : Copyleft (c) 2005                                                                        *
'*  Date    : 30.06.2005                                                                               *
'*  Version : 1.0                                                                                      *
'*  Notes   : 16F877 3 girişli LCD Voltmetre                                                           *
'*          : L1, L2, L3                                                                               *
'*******************************************************************************************************
TRISA=%00001011
TRISB=0
TRISC=0
TRISD=0
'------------Tanımlar-----------------------------------------------------------------------------------
@ DEVICE pic16F877
@ DEVICE pic16F877, WDT_ON
@ DEVICE pic16F877, PWRT_ON
@ DEVICE pic16F877, PROTECT_OFF
@ DEVICE pic16F877, XT_OCS
'-------------------------------------------------------------------------------------------------------
DEFINE OSC 20
'-------------------------------------------------------------------------------------------------------
DEFINE LCD_DREG         PORTD           'LCD data portu
DEFINE LCD_DBIT         4               'LCD 4 bit veri yolu
DEFINE LCD_RSREG        PORTD           'LCD Register seçme portu
DEFINE LCD_RSBIT        3               'LCD Register biti
DEFINE LCD_EREG         PORTD           'LCD Enable seçme portu
DEFINE LCD_EBIT         0               'LCD Enable biti
DEFINE LCD_LINES        4               'LCD satır sayısı
DEFINE LCD_RWREG        PORTD           'LCD R/W Portu
DEFINE LCD_RWBIT        2               'LCD R/W biti
'-------------------------------------------------------------------------------------------------------
DEFINE ADC_BITS         10              'A/D çevirim kaç bit olacak
DEFINE ADC_SAMPLEPLEUS  100             'örnekleme zamanı (50-100 arası olmalı)
DEFINE ADC_CLOCK        3               'Saat (Eğer 4Mhz Xt ise 1)
'---------------Here we go------------------------------------------------------------------------------
ADCON1=%10001110                        '10 bit ADCON1 register 7. bit 1 olmalı 
R_in        VAR WORD                    'ADC'den okunan digital verilerin tutulacağı
S_in        VAR WORD                    'değişkenler
T_in        VAR WORD
R_VOLT      VAR WORD                    'Hesaplama işleminde kullanılacaklar değişkenler
S_VOLT      VAR WORD
T_VOLT      VAR WORD
ModVoltR    VAR BYTE                    'MOD alma yani (//) kalan bulma değişkenleri
ModVoltS    VAR BYTE
ModVoltT    VAR BYTE
'-------------------------------------------------------------------------------------------------------
k           VAR BYTE
Toplam1     VAR WORD                    'Örnekleme sayısını fazlalaştırmak için
Toplam2     VAR WORD
Toplam3     VAR WORD
'-------------------------------------------------------------------------------------------------------
LOW PORTB.2                             'LCD R/W line Low (W), 
LCDOUT $FE,1                            'LCD temizle
PAUSE 200                               'LCD yi bekle


BASLA:
       For k To 10
        ADCIN 0,R_in                    '0 nolu kanaldan Analog değeri oku ve R_in değişkenine aktar. 
        ADCIN 1,S_in                    '1 nolu kanaldan Analog değeri oku ve S_in değişkenine aktar.
        ADCIN 3,T_in                    '3 nolu kanaldan Analog değeri oku ve T_in değişkenine aktar.
        Toplam1=Toplam1+R_in
        Toplam2=Toplam2+S_in
        Toplam3=Toplam3+T_in
       NEXT k
       R_in=Toplam1/10
       S_in=Toplam2/10
       T_in=Toplam3/10


BAK:   IF ADCON0.2=1 THEN BAK           'Çevirme işlemi tamamlanınca Adcon0.2=0 olacak.
       LCDOUT $FE,1,"R VOLT  S VOLT   T VOLT"
       R_in=R_in+1                      
           
       R_VOLT=(R_in */ 1250)/100         'R_in ile 1250 yi 32 bit olarak çarp ve 100'böl
       ModVoltR=R_VOLT // 10             'R_VOLT=R_VOLT  MOD  10
       R_VOLT=R_VOLT/10
      
       S_VOLT=(S_in */ 1250)/100         'S_in ile 1250 yi 32 bit olarak çarp ve 100'böl
       ModVoltS=S_VOLT // 10             'S_VOLT=S_VOLT  MOD  10
       S_VOLT=S_VOLT/10
      
       T_VOLT=(T_in */ 1250)/100         'T_in ile 1250 yi 32 bit olarak çarp ve 100'böl
       ModVoltT=T_VOLT // 10             'T_VOLT=T_VOLT  MOD  10
       T_VOLT=T_VOLT/10
      
      
      LCDOUT $FE,$C0," ",#R_VOLT,", ",#S_VOLT,", ",#R_VOLT 
      PAUSE 500
      GOTO BASLA

Veli B.

Alıntı yapılan: "PBP Help"FOR Count = Start TO End {STEP {-} Inc}
  {Body}
NEXT {Count}

ahmet2004

Değişiklik:

'****************************************************************
'*  Name    : UNTITLED.BAS                                      *
'*  Author  : [select VIEW...EDITOR OPTIONS]                    *
'*  Notice  : Copyright (c) 2005 [select VIEW...EDITOR OPTIONS] *
'*          : All Rights Reserved                               *
'*  Date    : 02.09.2005                                        *
'*  Version : 1.0                                               *
'*  Notes   :                                                   *
'*          :                                                   *
'****************************************************************

'******************************************************************************************************* 
'*  Name    : 3giriş.BAS                                                                               * 
'*  Author  : MC_Skywalker                                                                             * 
'*  Notice  : Copyleft (c) 2005                                                                        * 
'*  Date    : 30.06.2005                                                                               * 
'*  Version : 1.0                                                                                      * 
'*  Notes   : 16F877 3 girişli LCD Voltmetre                                                           * 
'*          : L1, L2, L3                                                                               * 
'******************************************************************************************************* 
TRISA=%00001011 
TRISB=0 
TRISC=0 
TRISD=0 
'------------Tanımlar----------------------------------------------------------------------------------- 
@ DEVICE pic16F877 
@ DEVICE pic16F877, WDT_ON 
@ DEVICE pic16F877, PWRT_ON 
@ DEVICE pic16F877, PROTECT_OFF 
@ DEVICE pic16F877, XT_OSC 
'------------------------------------------------------------------------------------------------------- 
DEFINE OSC 20 
'------------------------------------------------------------------------------------------------------- 
DEFINE LCD_DREG         PORTD           'LCD data portu 
DEFINE LCD_DBIT         4               'LCD 4 bit veri yolu 
DEFINE LCD_RSREG        PORTD           'LCD Register seçme portu 
DEFINE LCD_RSBIT        3               'LCD Register biti 
DEFINE LCD_EREG         PORTD           'LCD Enable seçme portu 
DEFINE LCD_EBIT         0               'LCD Enable biti 
DEFINE LCD_LINES        4               'LCD satır sayısı 
DEFINE LCD_RWREG        PORTD           'LCD R/W Portu 
DEFINE LCD_RWBIT        2               'LCD R/W biti 
'------------------------------------------------------------------------------------------------------- 
DEFINE ADC_BITS         10              'A/D çevirim kaç bit olacak 
DEFINE ADC_SAMPLEPLEUS  100             'örnekleme zamanı (50-100 arası olmalı) 
DEFINE ADC_CLOCK        3               'Saat (Eğer 4Mhz Xt ise 1) 
'---------------Here we go------------------------------------------------------------------------------ 
ADCON1=%10001110                        '10 bit ADCON1 register 7. bit 1 olmalı 
R_in        VAR WORD                    'ADC'den okunan digital verilerin tutulacağı 
S_in        VAR WORD                    'değişkenler 
T_in        VAR WORD 
R_VOLT      VAR WORD                    'Hesaplama işleminde kullanılacaklar değişkenler 
S_VOLT      VAR WORD 
T_VOLT      VAR WORD 
ModVoltR    VAR BYTE                    'MOD alma yani (//) kalan bulma değişkenleri 
ModVoltS    VAR BYTE 
ModVoltT    VAR BYTE 
'------------------------------------------------------------------------------------------------------- 
k           VAR BYTE 
Toplam1     VAR WORD                    'Örnekleme sayısını fazlalaştırmak için 
Toplam2     VAR WORD 
Toplam3     VAR WORD 
'------------------------------------------------------------------------------------------------------- 
LOW PORTB.2                             'LCD R/W line Low (W), 
LCDOUT $FE,1                            'LCD temizle 
PAUSE 200                               'LCD yi bekle 

BASLA: 
       For k = 1 To 10 
        ADCIN 0,R_in                    '0 nolu kanaldan Analog değeri oku ve R_in değişkenine aktar. 
        ADCIN 1,S_in                    '1 nolu kanaldan Analog değeri oku ve S_in değişkenine aktar. 
        ADCIN 3,T_in                    '3 nolu kanaldan Analog değeri oku ve T_in değişkenine aktar. 
        Toplam1=Toplam1+R_in 
        Toplam2=Toplam2+S_in 
        Toplam3=Toplam3+T_in 
       NEXT k 
       R_in=Toplam1/10 
       S_in=Toplam2/10 
       T_in=Toplam3/10 


BAK:   IF ADCON0.2=1 THEN BAK           'Çevirme işlemi tamamlanınca Adcon0.2=0 olacak. 
       LCDOUT $FE,1,"R VOLT  S VOLT   T VOLT" 
       R_in=R_in+1                      
            
       R_VOLT=(R_in */ 1250)/100         'R_in ile 1250 yi 32 bit olarak çarp ve 100'böl 
       ModVoltR=R_VOLT // 10             'R_VOLT=R_VOLT  MOD  10 
       R_VOLT=R_VOLT/10 
      
       S_VOLT=(S_in */ 1250)/100         'S_in ile 1250 yi 32 bit olarak çarp ve 100'böl 
       ModVoltS=S_VOLT // 10             'S_VOLT=S_VOLT  MOD  10 
       S_VOLT=S_VOLT/10 
      
       T_VOLT=(T_in */ 1250)/100         'T_in ile 1250 yi 32 bit olarak çarp ve 100'böl 
       ModVoltT=T_VOLT // 10             'T_VOLT=T_VOLT  MOD  10 
       T_VOLT=T_VOLT/10 
      
      
      LCDOUT $FE,$C0," ",#R_VOLT,", ",#S_VOLT,", ",#R_VOLT 
      PAUSE 500 
      GOTO BASLA