dijital pot kontrolü

Başlatan huseyin0579, 24 Ocak 2016, 20:00:56

huseyin0579

Hocam simülasyon'daki uyarı mesajlarının artması neden kaynaklanıyor!..

ete

Tam olarak bilemiyorum. Windows uyumsuzlığu olsa gerek. Zira 5-6 yıl evvel uğraşmıştım belkide daha eski böyle hatalar vermiyor idi.

Ete

huseyin0579

#17
Hocam ekranda voltaj ayarını getirdim. Birkaç sorum olacak yazılımda pot ayarının kaydedildiği bölümü bu şekilde kullanmak mecburi bir durum değil herhalde!..başka bir mantık yürütülebilir ilk eklediğim kodlar'daki gibi farklı uygulama deneyecem hocam ilk butonlar sadece tek basış ile çalışıyordu ben eklenti yaptım ve basılı tutulması ile bar artışı while döngüsü ile çalışıyor.
'****************************************************************
'*  Name    : DİJİTALPOTUYGULAMASI.BAS                                      *
'*  Author  : [select VIEW...EDITOR OPTIONS]                    *
'*  Notice  : Copyright (c) 2016 [select VIEW...EDITOR OPTIONS] *
'*          : All Rights Reserved                               *
'*  Date    : 25.01.2016                                        *
'*  Version : 1.0                                               *
'*  Notes   :                                                   *
'*          :                                                   *
'****************************************************************
@ DEVICE pic16F877A
@ DEVICE pic16F877A, WDT_OFF
@ DEVICE pic16f877A, PWRT_ON
@ DEVICE pic16F877A, PROTECT_OFF
@ DEVICE pic16F877A, HS_OSC
@ DEVICE pic16F877A, BOD_ON
@ DEVICE pic16F877A, CPD_ON
@ DEVICE pic16F877A, PROTECT_ON


DEFINE OSC 20
CMCON=7

OPTION_REG.7=0
ADCON1=%10000010

DEFINE ADC_BITS      10
DEFINE ADC_CLOCK      3
DEFINE ADC_SAMPLES   50

'LCDOUT $FE, $40, $00, $0F, $0F, $0F, $0F, $0F, $0F, $0F '
'LCDOUT $FE, $40, $00, $00, $1B, $1B, $1B, $1B, $00, $00 '
'LCDOUT $FE, $40, $00, $00, $00, $00, $1F, $1F, $1F, $1F '
'LCDOUT $FE, $40, $00, $1F, $1F, $1F, $1F, $1F, $1F, $00 '



DEFINE LCD_DREG   PORTB ;LCD  data bacakları hangi porta bağlı?
DEFINE LCD_DBIT   4 ;LCD  data  bacakları hangi bitten başlıyor?
DEFINE LCD_RSREG  PORTB ;LCD  RS Bacağı Hangi Porta bağlı ?
DEFINE LCD_RSBIT   1 ;LCD  RS  bacağı Hangi Bite bağlı ?
define LCD_RWREG  PORTB
define LCD_RWBIT      2
DEFINE LCD_EREG   PORTB ;LCD  Enable Bacağı Hangi Porta bağlı?
DEFINE LCD_EBIT   3 ;LCD  Enable Bacağı Hangi bite bağlı ?
DEFINE LCD_BITS   4 ;LCD 4  bit mi yoksa 8 bit olarak bağlı?
DEFINE LCD_LINES   4 ;LCD 4 sıra yazabiliyor
LOW PORTB.2
PAUSE 500


TRISA=%00000111
TRISB=%00000000
TRISC=%00000000
TRISD=%11111111
TRISE=%00000111



ZAMAN VAR WORD

VOLTHAM VAR WORD
TOP_VOLT VAR WORD
VOLT VAR WORD
MV VAR BYTE

STK VAR BYTE
I VAR BYTE
Y VAR BYTE
TOPLAM VAR word




RAW VAR word
HAM VAR word
BAR VAR BYTE
BAR1 VAR BYTE
BAR2 VAR BYTE
BAR3 VAR BYTE
BAR4 VAR BYTE
BAR5 VAR BYTE

POT_0 VAR BYTE
POT_1 VAR BYTE
POT_2 VAR BYTE
POT_3 VAR BYTE
POT_4 VAR BYTE
POT_5 VAR BYTE
POT_6 VAR BYTE
POT_7 VAR BYTE
E_SIF VAR BYTE
E_BIR VAR BYTE
E_IKI VAR BYTE
E_UC VAR BYTE
E_DORT VAR BYTE
E_BES VAR BYTE
E_ALTI VAR BYTE
E_YEDI VAR BYTE



SYMBOL TUSA=PORTD.0
SYMBOL TUSB=PORTD.1
SYMBOL TUSC=PORTD.2
SYMBOL TUSD=PORTD.3
SYMBOL TUSE=PORTD.4
SYMBOL TUSF=PORTD.5
SYMBOL TUSG=PORTD.6
SYMBOL TUSH=PORTD.7
SYMBOL TUSI=PORTE.0
SYMBOL TUSK=PORTE.1
SYMBOL TUSL=PORTE.2

SYMBOL LED1=PORTB.0
SYMBOL LED2=PORTC.6
SYMBOL LED3=PORTC.7

SYMBOL RST=PORTC.0
SYMBOL CLK=PORTC.1
SYMBOL BILGI=PORTC.2

SYMBOL RST1=PORTC.3
SYMBOL CLK1=PORTC.4
SYMBOL BILGI1=PORTC.5

PORTA=0
PORTB=0
PORTC=0
PORTD=0
PORTE=0

ZAMAN=0
STK=0

POT_0=0:POT_1=0:POT_2=0:POT_3=0:POT_3=0:POT_4=0:POT_5=0:POT_6=0:POT_7=0:GOSUB POT_YAZ
E_SIF=POT_0:E_BIR=POT_1:E_IKI=POT_2:E_UC=POT_3:E_DORT=POT_4:E_BES=POT_5:E_ALTI=POT_6:E_YEDI=POT_7
 
  LCDOUT $FE,$80,"DiJiTAL POT KONTROL"
  LCDOUT $FE,$C0,"     UYGULAMASI    " 
  LCDOUT $FE,1
  PAUSE 300
  LCDOUT $FE,1
  PAUSE 100                                 

BASLA:     
                                                           
           IF TUSA=0 THEN
               POT_0=POT_0+1:PAUSE 50
               IF POT_0=0 then POT_0=255
               POT_1=POT_1+1
               IF POT_1=0 THEN POT_1=255
               BAR=BAR+1
               IF BAR >10 THEN BAR=10             
               while BAR=BAR+1:wend
               GOSUB EKRAN               
               PAUSE 50
               ENDIF   
             
           IF TUSB=0 THEN               
               POT_0=POT_0-1:PAUSE 50
               IF POT_0=255 then POT_0=0
               POT_1=POT_1-1
               IF POT_1=255 THEN POT_1=0
               BAR=BAR-1
               IF BAR=255 THEN BAR=0
               while BAR=BAR-1:wend
               GOSUB EKRAN
               PAUSE 50
               ENDIF
             
               IF TUSC=0 THEN
               POT_2=POT_2+1:PAUSE 100
               IF POT_2=0 then POT_2=255
               POT_3=POT_3+1
               IF POT_3=0 THEN POT_3=255
               BAR1=BAR1+1
               IF BAR1 >10 THEN BAR1=10
               WHILE TUSC=0:WEND
               gosub EKRAN1
               PAUSE 50
               ENDIF
             
           IF TUSD=0 THEN
               POT_2=POT_2-1:PAUSE 100
               IF POT_2=255 then POT_2=0
               POT_3=POT_3-1
               IF POT_3=255 THEN POT_3=0
               BAR1=BAR1-1
               IF BAR1=255 THEN BAR1=0
               WHILE TUSD=0:WEND
               GOSUB EKRAN1
               PAUSE 50           
               ENDIF
             
           IF TUSE=0 THEN
               POT_4=POT_4+1:PAUSE 100
               IF POT_4=0 then POT_4=255
               POT_5=POT_5+1
               IF POT_5=0 THEN POT_5=255
               BAR2=BAR2+1
               IF BAR2 >10 THEN BAR2=10
               WHILE TUSE=0:WEND
               GOSUB EKRAN2
               PAUSE 50                             
               ENDIF
             
           IF TUSF=0 THEN
               POT_4=POT_4-1:PAUSE 100
               IF POT_4=255 then POT_4=0
               POT_5=POT_5-1
               IF POT_5=255 THEN POT_5=0
               BAR2=BAR2-1
               IF BAR2=255 THEN BAR2=0
               WHILE TUSF=0:WEND
               GOSUB EKRAN2
               PAUSE 50           
               ENDIF
             
           IF TUSG=0 THEN
               POT_6=POT_6+1:PAUSE 100
               IF POT_6=0 then POT_6=255
               POT_7=POT_7+1
               IF POT_7=0 THEN POT_7=255
               BAR3=BAR3+1
               IF BAR3 >10 THEN BAR3=10
               WHILE TUSG=0:WEND
               GOSUB EKRAN3
               PAUSE 50                 
               ENDIF
               
           IF TUSH=0 THEN
               POT_6=POT_6-1:PAUSE 100
               IF POT_6=255 then POT_6=0
               POT_7=POT_7-1
               IF POT_7=255 THEN POT_7=0
               BAR3=BAR3-1
               IF BAR3=255 THEN BAR3=0
               WHILE TUSH=0:WEND
               GOSUB EKRAN3
               PAUSE 50
               ENDIF
                                       
           IF TUSI=0 THEN
           GOSUB LEDYAK
           PAUSE 50
           ENDIF
                 
           IF TUSK=0 THEN
           GOSUB LEDYAK1
           PAUSE 50
           ENDIF
             
           IF TUSL=0 THEN
           GOSUB LEDYAK2
           PAUSE 50
           ENDIF
               
   

           TOP_VOLT=0
           FOR Y=0 TO 19
           ADCIN 2, VOLTHAM
           TOP_VOLT=TOP_VOLT+(VOLTHAM+1)
           PAUSEUS 5
           NEXT
           VOLTHAM=TOP_VOLT/20
           VOLT=VOLTHAM*/75
           GOSUB EKRAN4

GOTO BASLA


BAK:             
            RAW=0:HAM=0:TOPLAM=0
            FOR I=1 TO 10
            ADCIN 0,RAW 
            if ADCON0.2=1 then BAK             
            TOPLAM=TOPLAM+RAW
            NEXT I:RAW=TOPLAM/10
           
            TOPLAM=0
            FOR I=1 TO 10
            ADCIN 1, HAM
            IF ADCON0.2=1 THEN YINE
            TOPLAM=TOPLAM+HAM
            NEXT I:HAM=TOPLAM/10
YINE:           
            IF RAW<15 THEN BASLA
            IF HAM<127 THEN
            ZAMAN=(265-RAW)*(4-(127-HAM)/64)
            GOTO CIK
            ENDIF
         
CIK:         
            ZAMAN=(265-RAW)*(4+(HAM-127)/64) 'bu digital pot için kademe atlama pause olacak.
            IF (POT_0=0) AND (POT_1=0) AND (POT_2=0) AND (POT_3=0) AND (POT_4=0)_
            AND (POT_5=0) AND (POT_6=0) AND (POT_7=0) THEN BASLA
           
           
             IF STK=1 THEN
                POT_7=POT_7-1
                GOSUB POT_YAZ:PAUSE ZAMAN /1000
                IF POT_1=0 THEN STK=0
             ENDIF
             
             IF STK=0 THEN 
                POT_6=POT_6-1
                GOSUB POT_YAZ:PAUSE ZAMAN/1000
             ENDIF
             
             IF STK=1 THEN
                POT_4=POT_5-1
                GOSUB POT_YAZ:PAUSE ZAMAN /1000
                IF POT_1=0 THEN STK=0
             ENDIF
             
             IF STK=0 THEN 
                POT_4=POT_4-1
                GOSUB POT_YAZ:PAUSE ZAMAN/1000
             ENDIF
           
             IF STK=1 THEN
                POT_3=POT_3-1
                GOSUB POT_YAZ:PAUSE ZAMAN /1000
                IF POT_1=0 THEN STK=0
             ENDIF
             
             IF STK=0 THEN 
                POT_2=POT_2-1
                GOSUB POT_YAZ:PAUSE ZAMAN/1000
             ENDIF
           
           
            IF STK=1 THEN
                POT_1=POT_1-1
                GOSUB POT_YAZ:PAUSE ZAMAN /1000
                IF POT_1=0 THEN STK=0
             ENDIF
             IF STK=0 THEN 
                POT_0=POT_0-1
                GOSUB POT_YAZ:PAUSE ZAMAN/1000
             ENDIF
     IF (E_SIF=POT_0) AND (E_BIR=POT_1) AND (E_IKI=POT_2) AND (E_UC=POT_3) AND (E_DORT=POT_4) AND (E_BES=POT_5) AND (E_ALTI=POT_6) AND (E_YEDI=POT_7) THEN BASLA   
     GOSUB POT_YAZ 
     GOTO BASLA
             
EKRAN:
     
      LCDOUT $FE,$C0," POT-1 AYARLANIYOR "
      LCDOUT $FE,$94,REP 255\BAR
      LCDOUT REP 32\(10-bar)
      PAUSE 300         
      LCDOUT $FE,1
      PAUSE 100
      GOTO BASLA
EKRAN1:     
     
      LCDOUT $FE,$C0," POT-2 AYARLANIYOR "
      LCDOUT $FE,$D4,rep 255\bar
      LCDOUT rep 32\(10-bar)
      PAUSE 300   
      LCDOUT $FE,1
      PAUSE 100
      GOTO BASLA
     
EKRAN2:

     
      LCDOUT $FE,$C0," POT-3 AYARLANIYOR "
      LCDOUT $FE,$9E,REP 255\BAR
      LCDOUT REP 32\(10-bar)
      PAUSE 300
      LCDOUT $FE,1
      PAUSE 100 
      GOTO BASLA
     
EKRAN3:
     
     
      LCDOUT $FE,$C0," POT-4 AYARLANIYOR "
      LCDOUT $FE,$DE,rep 255\bar
      LCDOUT rep 32\(10-bar)
      PAUSE 300
      LCDOUT $FE,1
      PAUSE 100
      GOTO BASLA
     
EKRAN4:
     
      lcdout $fe,$80,"Volt=",dec2 volt/10,",",dec1 volt//10,"V"
      PAUSE 300
      GOTO BASLA
LEDYAK:   
    TOGGLE LED1         
    RETURN
LEDYAK1:   
    TOGGLE LED2   
    RETURN
LEDYAK2:   
    TOGGLE LED3   
    RETURN
   
POT_YAZ:     
             HIGH RST:PAUSE 1
             low BILGI
             HIGH RST1:PAUSE 1
             LOW BILGI1
             PULSOUT CLK,1
             PULSOUT CLK1,1
             SHIFTOUT BILGI1,CLK1,1,[POT_7]
             SHIFTOUT BILGI1,CLK1,1,[POT_6]
             SHIFTOUT BILGI1,CLK1,1,[POT_5]
             SHIFTOUT BILGI1,CLK1,1,[POT_4]
             SHIFTOUT BILGI,CLK,1,[POT_3]
             SHIFTOUT BILGI,CLK,1,[POT_2]
             SHIFTOUT BILGI,CLK,1,[POT_1]
             SHIFTOUT BILGI,CLK,1,[POT_0]    'Dpot1868-1
             LOW RST:PAUSE 1
             LOW RST1:PAUSE 1                                             
             E_YEDI=POT_7:E_ALTI=POT_6:E_BES=POT_5:E_DORT=POT_4:E_UC=POT_3:E_IKI=POT_2:E_BIR=POT_1:E_SIF=POT_0
             RETURN
             GOTO BASLA 
END



Hocam while döngüsü ile çalışan ilk buton bölümü mantıklı değilmi sizcede?
RAW VAR word
HAM VAR word

bu iki değişkeni word yaptım

IF TUSA=0 THEN
               POT_0=POT_0+1:PAUSE 50
               IF POT_0=0 then POT_0=255
               POT_1=POT_1+1
               IF POT_1=0 THEN POT_1=255
               BAR=BAR+1
               IF BAR >10 THEN BAR=10             
               while BAR=BAR+1:wend
               GOSUB EKRAN               
               PAUSE 50
               ENDIF   
             
           IF TUSB=0 THEN               
               POT_0=POT_0-1:PAUSE 50
               IF POT_0=255 then POT_0=0
               POT_1=POT_1-1
               IF POT_1=255 THEN POT_1=0
               BAR=BAR-1
               IF BAR=255 THEN BAR=0
               while BAR=BAR-1:wend
               GOSUB EKRAN
               PAUSE 50
               ENDIF


Hocam bu işi çözecem tek istediğim sadece bir adet pot entegresi için 8+8+1 kod "artı ve eksi" buton eklentisi yapar'mısın?

huseyin0579

#18
Hocam internet ile bu yardım mesajınızı buldum. Bar için özel karekter oluşturma konusunda yazılımda denedim ve sonuç alamadım. Amacım eklediğiniz bar karekterlerin'den istediğimi rep 255\bar değeri yerine farklı bir karakter kullanmak. Örneğin II, III, IIII bu şekilde tek tek gidecek

Mademki programın bir kısmını yazmışsın gerisinide biraz yol gösterirsem yazarsın diye düşünüyorum.

Önce işin hesap kısmını halledelim.
5V ta karşılık ADC den okunabilecek en yüksek değer 1023 olacaktır.
Sende kendi tabirinle ters mantık uygulanacağı için okunan Ham ADC değerini 1024 'den çıkarman gerekecek. 4 V karşılığı yaklaşık 819 civarında bir ADC değerine karşılık gelecektir. Gerçek ADC değeri ise;
1024 - 819 =205 olacaktır.
Şimdi okunan bu değerlere karşılık ekrandaki bar ların hesaplanması ve gösterilemesini biraz inceleyelim.
2x16 karekterlik LCD de ekranda bir sırada 16 karekter yer almaktadır.
O halde bizim ADC den okuyacağımız 1023 değerine karşılık 16 bar karekteri ekrana yerleştirilebilecektir. Bu durumda (1023+1)/16=64 değerini bulmuş oluruz. O halde okuduğumuz gerçek ADC değerini 64 e bölersek ekrana kaç adet bar yerleştireceğimizi bulmuş oluruz.
Aynı örneğe devam edersek 205/64 =3 adet bara tekabül etmektedir.
Şimdi gelelim bu barları nasıl yerleştireceğiz;
Ama ondan da önce bar karekterini nasıl elde edeceğiz. Bunun için LCD nin kendi karekter hafızasında yer alan 255 karekterini kullanabiliriz. Yada kendimiz bir bar karekteri oluşturabiliriz. Belkide en iyisi budur.
Aşağıdaki bar karekteleri ben oluşturdum. Birbirinden farklı karekterler.
İçlerinden yalnızca birini kullanman gerek. Dene ve beğendiğini kullan.
LCDOUT $FE, $40, $00, $0F, $0F, $0F, $0F, $0F, $0F, $0F '
LCDOUT $FE, $40, $00, $00, $1B, $1B, $1B, $1B, $00, $00 '
LCDOUT $FE, $40, $00, $00, $00, $00, $1F, $1F, $1F, $1F '
LCDOUT $FE, $40, $00, $1F, $1F, $1F, $1F, $1F, $1F, $00 '
Bunlardanbirini programın başında bir yere yerleştir. $40 değeri bu karekterin yerleştirildiği hafıza olup sıfır'ıncı karekter olarak tanımlanmıştır. Ekrana yazdırmak için yalnızca sıfır kullanılacaktır.
Gelelim bu karekterleri ekrana yazdırmaya
Önce varsayımlarımızı belirleyelim;
Değişkenlerimiz;
-Adet (byte)
- ham (word)
- I (byte) döngü değişkeni
Formüllerimiz;
Ham değeri ADC den okunan değer olacak.
Adet=(1023-ham)/64

Ekrana yazdırma;
lcdout $fe,$c0
for I=1 to ADET
lcdout ,0
next

Şayet 255 karekterini kullanmak istersen 0 (sıfır) yerine 255 yazman yeterli olacaktır.

Hepsi bu kadar.
KolayGelsin

ete

Bu işin nasıl yapıldığını zaten anlatmışım. Senin karekterlerin çizgi ise daha farklı bir yöntem kullanmak gerekir. İki farklı karekter tanımlaman gerekecek birisi tek çizgi diğeri çift çizgi. Hesap sonucunda bar adedi tek ise son karekter tek çizgi çift ise son karekter yine çift çizgi olmalı.
Neden iki karekter dersen , karekterler 5x8 nokta matrixde tanımlanır ya çizgiyi tek tanımlayıp ortaya yerleştirmen yada dediğim gibi birini sol tarafta tek ve diğerini sağda ve solda çift tanımlamak gerekir.

Bütün bilgi ortada nerede takılıyorsan onu söyle yardım edeyim ama genel amlamda yardım isteme.

Ete

huseyin0579


BAK:             
            RAW=0:HAM=0:TOPLAM=0
            FOR I=1 TO 10
            ADCIN 0,RAW 
            if ADCON0.2=1 then BAK             
            TOPLAM=TOPLAM+RAW
            NEXT I:RAW=TOPLAM/10
           
            TOPLAM=0
            FOR I=1 TO 10
            ADCIN 1, HAM
            IF ADCON0.2=1 THEN YINE
            TOPLAM=TOPLAM+HAM
            NEXT I:HAM=TOPLAM/10
YINE:           
            IF RAW<15 THEN BASLA
            IF HAM<127 THEN
            ZAMAN=(265-RAW)*(4-(127-HAM)/64)
            GOTO CIK
            ENDIF
         
CIK:         
            ZAMAN=(265-RAW)*(4+(HAM-127)/64) 'bu digital pot için kademe atlama pause olacak.
            IF (POT_0=0) AND (POT_1=0) AND (POT_2=0) AND (POT_3=0) AND (POT_4=0)_
            AND (POT_5=0) AND (POT_6=0) AND (POT_7=0) THEN BASLA
           
           
             IF STK=1 THEN
                POT_7=POT_7-1
                GOSUB POT_YAZ:PAUSE ZAMAN /1000
                IF POT_1=0 THEN STK=0
             ENDIF
             
             IF STK=0 THEN 
                POT_6=POT_6-1
                GOSUB POT_YAZ:PAUSE ZAMAN/1000
             ENDIF
             
             IF STK=1 THEN
                POT_4=POT_5-1
                GOSUB POT_YAZ:PAUSE ZAMAN /1000
                IF POT_1=0 THEN STK=0
             ENDIF
             
             IF STK=0 THEN 
                POT_4=POT_4-1
                GOSUB POT_YAZ:PAUSE ZAMAN/1000
             ENDIF
           
             IF STK=1 THEN
                POT_3=POT_3-1
                GOSUB POT_YAZ:PAUSE ZAMAN /1000
                IF POT_1=0 THEN STK=0
             ENDIF
             
             IF STK=0 THEN 
                POT_2=POT_2-1
                GOSUB POT_YAZ:PAUSE ZAMAN/1000
             ENDIF
           
           
            IF STK=1 THEN
                POT_1=POT_1-1
                GOSUB POT_YAZ:PAUSE ZAMAN /1000
                IF POT_1=0 THEN STK=0
             ENDIF
             IF STK=0 THEN 
                POT_0=POT_0-1
                GOSUB POT_YAZ:PAUSE ZAMAN/1000
             ENDIF
     IF (E_SIF=POT_0) AND (E_BIR=POT_1) AND (E_IKI=POT_2) AND (E_UC=POT_3) AND (E_DORT=POT_4) AND (E_BES=POT_5) AND (E_ALTI=POT_6) AND (E_YEDI=POT_7) THEN BASLA   
     GOSUB POT_YAZ 
     GOTO BASLA


Hocam bu kısımlardaki adc0 ve adc1 kanal'ları kullanılması , bu kısmı tam olarak anlayamadım, kısaca eklediğim kısımdaki mantığı açıklayabilir'misiniz?

ete

İki trimpot yada pot kullanılarak digital potun artım aralığını ayarlayabiliyorsun.
Basitçe anlatmak gerekir ise. Bir tuşa basınca diyelimki digital pot yavaş yavaş artacak. Ama hangi zaman aralığında artacak?
Bir artırım yaptın araya 100 ms gecikme koydun. Böylece pot artırım kademelerini 100 ms lik aralıklarla yapar.
Ama bunu sabit değilde ayarlı isterim dersen bir trimpot yerleştirirsin devrene ve potun konumundan bir zaman hesabı yaparsın.
Maksimum değerde 1000 ms artış yapsın min değerde ise 100 ms artış yapsın dersen potun min ile maksimum değeri arasında 1000-100=900 ms lik bir değer ile ayar yaparsın (900/1023)*256=225 gibi bir değer ile pot dan okuduğun ADC değerini çarparsan sana zaman artış değerini verir. Böylece diyelimki pot orta konumda 511*225/256=449 ms ve buna 100 (min değer) eklersen 549 ms lik süreler ile port değeri artırılmış olur. Yani program sürekli olarak aynı işleri tekrarladığı için pot değeri her 549 ms de bir artar. O potu min değere alırsan artış her 100 ms de bir yapılmış olur. Böylece daha hızlı bir ayar yapmış olursun.

Burada daha hassas bir zamanlama ayarlamak için 2 pot kullanılmış ve ikisinin değeri tek bir zaman değeri bulmak için kullanılmış. Hepsi bu.

Ete

huseyin0579

Hocam kızmayın ama bu eklenti ne işe yarayacak bu dediğiniz yazılımda yapılamazmı yani butonun basılı tutulması süresine bağlı olarak benim asıl öğrenmek istediğim yapılan ayarların pot entegresine gönderilmesi mantığı basit olarak anlatmanız ayrıca daha önce vermiş olduğunuz dosyalarda c dili ile yapılmış uygulama var. Tek entegrede iki ayrı pot kontrolünü portb.5 pinine gelecek olan +5 veya 0v değişimi ile yapıyor. Hocam bu uygulama ilerlemesin diyorsanız karar sizin yani çok uzamasın aklınıza farklı düşünce geliyor galiba anlayabiliyorum. Hocam ben açık konuşmayı severim birileri size hakkımda mesaj v.s göndermiyor değilmi?

ete

Her kesin bir tercihi vardır. Digital pot artma yada azalma işlemi belirli sürelerde yapılacak ise ve bu sürede ayarlı olsun isteniyor ise bu işin iki yolu vardır. Birincisi bir pot kullanmak diğeride artırma azaltma butonu kullanmak. Kim neyi tercih ederse eder. Sen yazılımı tercih ediyorsan keyfinin bileceği iş ama arkadaş burada pot kullanmayı tercih etmiş. Zira muhtemelen bu iş bir veya iki defa yapılacak bir daha oraya dokunmayacaksın. Pot yerine buton kullanınca yine iki pin kullanacaksın. Tek potla halletmek istersen tek pin kullanacaksın. Ama pot'un bir avantajı var. Görsel olarak ne ayarladığını görebilir ve buna bağlı bir süre algısı oluşturabilirsin. Buton kontrolünde bir şey göremezsin. tabiiki ayarladığın değeri ekranda göstermez isen.

Pot değerinin digital pota yollanması meselesine gelince. Sistem SPI modunda çalışıyor.  Kod genel anlamda aşağıdaki şekilde
POTYAZ:      HIGH RST:PAUSE 1
             low BILGI
             PULSOUT CLK,1
             SHIFTOUT BILGI,CLK,1,[POT_1]
             SHIFTOUT BILGI,CLK,1,[POT_0]    'Dpot1868-1
             LOW RST:PAUSE 1                                             
             E_BIR=POT_1:E_SIF=POT_0
             RETURN
             end

Önce RST pinini HIGH yapıyoruz. Bu işlem pota yazma (değer değiştirmek) için gerekli.
Ardından Data hattını LOW a çekiyoruz ve bu işlem Data hattının high da kalmış olacağı ihtimaline karşı bir tedbir.
Sonra bir puls veriyoruz. Bu direk POT shift registerine HIGH olarak yazılıyor. Bu yollanan ilk bilgi oluyor (17 ci bit)
Ardından Shiftout komutunu MSB-First olarak ayarlıyoruz. Komut içinde yer alan ,1 değeri bu işi yapıyor. Böylece POT-1 bilgisinin yollanması 7.ci bitten başlayarak 0.cı bite kadar yapılmış oluyor. Bu yollanan ilk pota ait değer oluyor.
Sonra aynı komut ile ikinci pot değeride benzer şekilde yollanıyor. Sonra RST pini LOW a çekilerek yazma işlemi tamamlanmış oluyor.

Ete

torlaktr

   portc.2 = 0
    shiftout portc.0,portc.1,1,[00,zaman]
    portc.2 = 1
0 numaralı kanaldan zaman değişkenini değiştir ve ayarla

huseyin0579

Arkadaşım sağolasın ama ben adım adım gidiyorum. Tek istediğim yazılımda hata olan yerler için mantık yürütmeniz hem ete hocanın amacıda yerine geliyor "isteyenlere faydası olsun" çok profesyonel olsam burada emek'leyip durmam bana kimse kızmasın bu bilgi ile buraya kadar getirdim yokmu kimse bu işe yardımcı olacak şuan 4 adet potu bu yazılım kontrol ediyor çok az işi kaldı. Sorun pot değerine uyum sağlaması için bar karakteri ve lcd için uygun düzenleme butonlara tek tek basılması veya basılı tutulması ekranda görülüyor fakat kararlı değil 4 x 20 lcd ekranın 3 ve 4 numaralı satırları 4 eşit bölgeye ayarladım ve potlar ile eş zamanlı ayar yapmak istiyorum. Ayar yapılacak pot ismi 2 numaralı satırda çıkıyor kısaca ekran gösterimi için sıkıntı yaşıyorum zamanla  düzeltirim hayır'lısı yavaş yavaş gidiyoruz.

'****************************************************************
'*  Name    : DİJİTALPOTUYGULAMASI.BAS                                      *
'*  Author  : [select VIEW...EDITOR OPTIONS]                    *
'*  Notice  : Copyright (c) 2016 [select VIEW...EDITOR OPTIONS] *
'*          : All Rights Reserved                               *
'*  Date    : 25.01.2016                                        *
'*  Version : 1.0                                               *
'*  Notes   :                                                   *
'*          :                                                   *
'****************************************************************
@ DEVICE pic16F877A
@ DEVICE pic16F877A, WDT_OFF
@ DEVICE pic16f877A, PWRT_ON
@ DEVICE pic16F877A, PROTECT_OFF
@ DEVICE pic16F877A, HS_OSC
@ DEVICE pic16F877A, BOD_ON
@ DEVICE pic16F877A, CPD_ON
@ DEVICE pic16F877A, PROTECT_ON

DEFINE OSC 20
CMCON=7

OPTION_REG.7=0
ADCON1=%10000010

DEFINE ADC_BITS      10
DEFINE ADC_CLOCK      3
DEFINE ADC_SAMPLES   50

'LCDOUT $FE, $40, $00, $0F, $0F, $0F, $0F, $0F, $0F, $0F '
'LCDOUT $FE, $40, $00, $00, $1B, $1B, $1B, $1B, $00, $00 '
'LCDOUT $FE, $40, $00, $00, $00, $00, $1F, $1F, $1F, $1F '
'LCDOUT $FE, $40, $00, $1F, $1F, $1F, $1F, $1F, $1F, $00 '

DEFINE LCD_DREG   PORTB ;LCD  data bacakları hangi porta bağlı?
DEFINE LCD_DBIT   4 ;LCD  data  bacakları hangi bitten başlıyor?
DEFINE LCD_RSREG  PORTB ;LCD  RS Bacağı Hangi Porta bağlı ?
DEFINE LCD_RSBIT   1 ;LCD  RS  bacağı Hangi Bite bağlı ?
define LCD_RWREG  PORTB
define LCD_RWBIT      2
DEFINE LCD_EREG   PORTB ;LCD  Enable Bacağı Hangi Porta bağlı?
DEFINE LCD_EBIT   3 ;LCD  Enable Bacağı Hangi bite bağlı ?
DEFINE LCD_BITS   4 ;LCD 4  bit mi yoksa 8 bit olarak bağlı?
DEFINE LCD_LINES   4 ;LCD 4 sıra yazabiliyor
LOW PORTB.2
PAUSE 500

TRISA=%00000111
TRISB=%00000000
TRISC=%00000000
TRISD=%11111111
TRISE=%00000111

VOLTHAM VAR WORD
TOP_VOLT VAR WORD
VOLT VAR WORD
MV VAR BYTE

I VAR BYTE
Y VAR BYTE
S VAR BYTE
T VAR BYTE
Z VAR WORD
CALIS VAR BYTE
RAW VAR word [2]
RAW1 VAR WORD
BAR VAR BYTE
BAR1 VAR BYTE
BAR2 VAR BYTE
BAR3 VAR BYTE
BAR4 VAR BYTE

BAR5 VAR BYTE

KONUM VAR BYTE
KONUM1 VAR BYTE
KONUM2 VAR BYTE
KONUM3 VAR BYTE
KONUM4 VAR BYTE

SYMBOL TUSA=PORTD.0
SYMBOL TUSB=PORTD.1
SYMBOL TUSC=PORTD.2
SYMBOL TUSD=PORTD.3
SYMBOL TUSE=PORTD.4
SYMBOL TUSF=PORTD.5
SYMBOL TUSG=PORTD.6
SYMBOL TUSH=PORTD.7
SYMBOL TUSI=PORTE.0
SYMBOL TUSK=PORTE.1
SYMBOL TUSL=PORTE.2

SYMBOL LED1=PORTB.0
SYMBOL LED2=PORTC.6
SYMBOL LED3=PORTC.7

SYMBOL RST=PORTC.0
SYMBOL CLK=PORTC.1
SYMBOL BILGI=PORTC.2

SYMBOL RST1=PORTC.3
SYMBOL CLK1=PORTC.4
SYMBOL BILGI1=PORTC.5

PORTA=0
PORTB=0
PORTC=0
PORTD=0
PORTE=0

KONUM=0
KONUM1=0
KONUM2=0
KONUM3=0

I=0
Y=0
T=0
S=0
 
  LCDOUT $FE,$80,"DiJiTAL POT KONTROL"
  LCDOUT $FE,$C0,"     UYGULAMASI    " 
  LCDOUT $FE,1
  PAUSE 300
  LCDOUT $FE,1
  PAUSE 100                                 

BASLA:     
                                                           
           IF TUSA=0 THEN
               KONUM=KONUM+1             
               IF KONUM=0 THEN KONUM=255
               BAR=BAR+1:GOSUB EKRAN:GOTO CIK
               whILE TUSA=0:WEND                         
               PAUSE 50
               ENDIF   
             
           IF TUSB=0 THEN               
           
               KONUM=KONUM-1
               IF KONUM=255 THEN KONUM=0
               BAR=BAR-1:GOSUB EKRAN:GOTO CIK
               WHILE TUSB=0:WEND             
               PAUSE 50
               ENDIF
             
           IF TUSC=0 THEN
               KONUM1=KONUM1+1             
               IF KONUM1=0 THEN KONUM1=255
               BAR=BAR+1:GOSUB EKRAN1:GOTO CIK
               whILE TUSC=0:WEND                         
               PAUSE 50
               ENDIF   
             
           IF TUSD=0 THEN               
               KONUM1=KONUM1-1
               IF KONUM1=255 THEN KONUM1=0
               BAR=BAR-1:GOSUB EKRAN1:GOTO CIK
               WHILE TUSD=0:WEND             
               PAUSE 50
               ENDIF
             
           IF TUSE=0 THEN
               KONUM2=KONUM2+1             
               IF KONUM2=0 THEN KONUM2=255
               BAR=BAR+1:GOSUB EKRAN2:GOTO CIK
               whILE TUSE=0:WEND                         
               PAUSE 50
               ENDIF   
             
           IF TUSF=0 THEN               
               KONUM2=KONUM2-1
               IF KONUM2=255 THEN KONUM2=0
               BAR=BAR-1:GOSUB EKRAN2:GOTO CIK
               WHILE TUSF=0:WEND             
               PAUSE 50
               ENDIF
         
           IF TUSG=0 THEN
               KONUM3=KONUM3+1             
               IF KONUM3=0 THEN KONUM3=255
               BAR=BAR+1:GOSUB EKRAN3:GOTO CIK
               whILE TUSG=0:WEND                         
               PAUSE 50
               ENDIF   
             
           IF TUSH=0 THEN               
               KONUM3=KONUM3-1
               IF KONUM3=255 THEN KONUM3=0
               BAR=BAR-1:GOSUB EKRAN3:GOTO CIK
               WHILE TUSH=0:WEND             
               PAUSE 50
               ENDIF
                   
           IF TUSI=0 THEN
           GOSUB LEDYAK
           WHILE TUSI=0:WEND
           PAUSE 50
           ENDIF
                 
           IF TUSK=0 THEN
           GOSUB LEDYAK1
           WHILE TUSK=0:WEND
           PAUSE 50
           ENDIF
             
           IF TUSL=0 THEN
           GOSUB LEDYAK2
           WHILE TUSL=0:WEND
           PAUSE 50
           ENDIF
           
           TOP_VOLT=0
           FOR Y=0 TO 19
           ADCIN 0, VOLTHAM
           TOP_VOLT=TOP_VOLT+(VOLTHAM+1)
           PAUSEUS 5
           NEXT
           VOLTHAM=TOP_VOLT/20
           VOLT=VOLTHAM*/75
           lcdout $fe,$80,"Volt=",dec2 volt/10,",",dec1 volt//10,"V"
           
           
           
GOTO BASLA                 

CIK:

    IF RAW <> KONUM3+KONUM2+KONUM1+KONUM THEN GOSUB POT_YAZ
    I=0:Y=0:T=0:S=0
    GOTO BASLA
       
     

EKRAN:
      LCDOUT $FE,$C0," POT-1 AYARLANIYOR "
      LCDOUT $FE,$94,REP 255\BAR
      LCDOUT REP 32\(10-bar)
      PAUSE 300         
      RETURN
EKRAN1:     
      LCDOUT $FE,$C0," POT-2 AYARLANIYOR "
      LCDOUT $FE,$D4,rep 255\bar
      LCDOUT rep 32\(10-bar)
      PAUSE 300   
      RETURN 
EKRAN2:     
      LCDOUT $FE,$C0," POT-3 AYARLANIYOR "
      LCDOUT $FE,$9E,REP 255\BAR
      LCDOUT REP 32\(10-bar)
      PAUSE 300 
      RETURN   
EKRAN3:         
      LCDOUT $FE,$C0," POT-4 AYARLANIYOR "
      LCDOUT $FE,$DE,rep 255\bar
      LCDOUT rep 32\(10-bar)
      PAUSE 300
      RETURN
     
LEDYAK:   
    TOGGLE LED1         
    RETURN
LEDYAK1:   
    TOGGLE LED2   
    RETURN
LEDYAK2:   
    TOGGLE LED3   
    RETURN

POT_YAZ:                   
          HIGH RST:HIGH RST1:PAUSE 1           
          low BILGI:LOW BILGI1
          PULSOUT CLK,1:PULSOUT CLK1,1                             
          SHIFTOUT BILGI1,CLK1,1,[KONUM3]
          SHIFTOUT BILGI1,CLK1,1,[KONUM2]
          SHIFTOUT BILGI,CLK,1,[KONUM1]
          SHIFTOUT BILGI,CLK,1,[KONUM]
          LOW RST:LOW RST1:PAUSE 1                     
          RAW=KONUM3+KONUM2+KONUM1+KONUM                                                                               
          RETURN
GOTO BASLA
END

huseyin0579

Bu yazılımda bar karakteri 20 kademeli yani orjinal olan ama pot değerlerine uyum sağlamıyor.

'****************************************************************
'*  Name    : DİJİTALPOTUYGULAMASI.BAS                                      *
'*  Author  : [select VIEW...EDITOR OPTIONS]                    *
'*  Notice  : Copyright (c) 2016 [select VIEW...EDITOR OPTIONS] *
'*          : All Rights Reserved                               *
'*  Date    : 25.01.2016                                        *
'*  Version : 1.0                                               *
'*  Notes   :                                                   *
'*          :                                                   *
'****************************************************************
@ DEVICE pic16F877A
@ DEVICE pic16F877A, WDT_OFF
@ DEVICE pic16f877A, PWRT_ON
@ DEVICE pic16F877A, PROTECT_OFF
@ DEVICE pic16F877A, HS_OSC
@ DEVICE pic16F877A, BOD_ON
@ DEVICE pic16F877A, CPD_ON
@ DEVICE pic16F877A, PROTECT_ON

DEFINE OSC 20
CMCON=7

OPTION_REG.7=0
ADCON1=%10000010

DEFINE ADC_BITS      10
DEFINE ADC_CLOCK      3
DEFINE ADC_SAMPLES   50

'LCDOUT $FE, $40, $00, $0F, $0F, $0F, $0F, $0F, $0F, $0F '
'LCDOUT $FE, $40, $00, $00, $1B, $1B, $1B, $1B, $00, $00 '
'LCDOUT $FE, $40, $00, $00, $00, $00, $1F, $1F, $1F, $1F '
'LCDOUT $FE, $40, $00, $1F, $1F, $1F, $1F, $1F, $1F, $00 '

DEFINE LCD_DREG   PORTB ;LCD  data bacakları hangi porta bağlı?
DEFINE LCD_DBIT   4 ;LCD  data  bacakları hangi bitten başlıyor?
DEFINE LCD_RSREG  PORTB ;LCD  RS Bacağı Hangi Porta bağlı ?
DEFINE LCD_RSBIT   1 ;LCD  RS  bacağı Hangi Bite bağlı ?
define LCD_RWREG  PORTB
define LCD_RWBIT      2
DEFINE LCD_EREG   PORTB ;LCD  Enable Bacağı Hangi Porta bağlı?
DEFINE LCD_EBIT   3 ;LCD  Enable Bacağı Hangi bite bağlı ?
DEFINE LCD_BITS   4 ;LCD 4  bit mi yoksa 8 bit olarak bağlı?
DEFINE LCD_LINES   4 ;LCD 4 sıra yazabiliyor
LOW PORTB.2
PAUSE 500

TRISA=%00000111
TRISB=%00000000
TRISC=%00000000
TRISD=%11111111
TRISE=%00000111

VOLTHAM VAR WORD
TOP_VOLT VAR WORD
VOLT VAR WORD
MV VAR BYTE

I VAR BYTE
Y VAR BYTE
S VAR BYTE
T VAR BYTE
SURE VAR WORD
CALIS VAR BYTE
RAW VAR word [2]
RAW1 VAR WORD
BAR VAR BYTE
BAR1 VAR BYTE
BAR2 VAR BYTE
BAR3 VAR BYTE
BAR4 VAR BYTE

BAR5 VAR BYTE

KONUM VAR BYTE
KONUM1 VAR BYTE
KONUM2 VAR BYTE
KONUM3 VAR BYTE
KONUM4 VAR BYTE

SYMBOL TUSA=PORTD.0
SYMBOL TUSB=PORTD.1
SYMBOL TUSC=PORTD.2
SYMBOL TUSD=PORTD.3
SYMBOL TUSE=PORTD.4
SYMBOL TUSF=PORTD.5
SYMBOL TUSG=PORTD.6
SYMBOL TUSH=PORTD.7
SYMBOL TUSI=PORTE.0
SYMBOL TUSK=PORTE.1
SYMBOL TUSL=PORTE.2

SYMBOL LED1=PORTB.0
SYMBOL LED2=PORTC.6
SYMBOL LED3=PORTC.7

SYMBOL RST=PORTC.0
SYMBOL CLK=PORTC.1
SYMBOL BILGI=PORTC.2

SYMBOL RST1=PORTC.3
SYMBOL CLK1=PORTC.4
SYMBOL BILGI1=PORTC.5

PORTA=0
PORTB=0
PORTC=0
PORTD=0
PORTE=0

KONUM=0
KONUM1=0
KONUM2=0
KONUM3=0

I=0
Y=0
T=0
S=0
 
  LCDOUT $FE,$80,"DiJiTAL POT KONTROL"
  LCDOUT $FE,$C0,"     UYGULAMASI    " 
  LCDOUT $FE,1
  PAUSE 300
  LCDOUT $FE,1
  PAUSE 100                                 

BASLA:     
                                                           
           IF TUSA=0 THEN
               KONUM=KONUM+1             
               IF KONUM=0 THEN KONUM=255
               BAR=BAR+1:GOSUB EKRAN:GOTO CIK
               whILE TUSA=0:WEND                         
               PAUSE 50
               ENDIF   
             
           IF TUSB=0 THEN               
               KONUM=KONUM-1
               IF KONUM=255 THEN KONUM=0
               BAR=BAR-1:GOSUB EKRAN:GOTO CIK
               WHILE TUSB=0:WEND             
               PAUSE 50
               ENDIF
             
           IF TUSC=0 THEN
               KONUM1=KONUM1+1             
               IF KONUM1=0 THEN KONUM1=255
               BAR=BAR+1:GOSUB EKRAN1:GOTO CIK
               whILE TUSC=0:WEND                         
               PAUSE 50
               ENDIF   
             
           IF TUSD=0 THEN               
               KONUM1=KONUM1-1
               IF KONUM1=255 THEN KONUM1=0
               BAR=BAR-1:GOSUB EKRAN1:GOTO CIK
               WHILE TUSD=0:WEND             
               PAUSE 50
               ENDIF
             
           IF TUSE=0 THEN
               KONUM2=KONUM2+1             
               IF KONUM2=0 THEN KONUM2=255
               BAR=BAR+1:GOSUB EKRAN2:GOTO CIK
               whILE TUSE=0:WEND                         
               PAUSE 50
               ENDIF   
             
           IF TUSF=0 THEN               
               KONUM2=KONUM2-1
               IF KONUM2=255 THEN KONUM2=0
               BAR=BAR-1:GOSUB EKRAN2:GOTO CIK
               WHILE TUSF=0:WEND             
               PAUSE 50
               ENDIF
         
           IF TUSG=0 THEN
               KONUM3=KONUM3+1             
               IF KONUM3=0 THEN KONUM3=255
               BAR=BAR+1:GOSUB EKRAN3:GOTO CIK
               whILE TUSG=0:WEND                         
               PAUSE 50
               ENDIF   
             
           IF TUSH=0 THEN               
               KONUM3=KONUM3-1
               IF KONUM3=255 THEN KONUM3=0
               BAR=BAR-1:GOSUB EKRAN3:GOTO CIK
               WHILE TUSH=0:WEND             
               PAUSE 50
               ENDIF
                   
           IF TUSI=0 THEN
           GOSUB LEDYAK
           WHILE TUSI=0:WEND
           PAUSE 50
           ENDIF
                 
           IF TUSK=0 THEN
           GOSUB LEDYAK1
           WHILE TUSK=0:WEND
           PAUSE 50
           ENDIF
             
           IF TUSL=0 THEN
           GOSUB LEDYAK2
           WHILE TUSL=0:WEND
           PAUSE 50
           ENDIF
           
           TOP_VOLT=0
           FOR Y=0 TO 19
           ADCIN 0, VOLTHAM
           TOP_VOLT=TOP_VOLT+(VOLTHAM+1)
           PAUSEUS 5
           NEXT
           VOLTHAM=TOP_VOLT/20
           VOLT=VOLTHAM*/75
           lcdout $fe,$80,"Volt=",dec2 volt/10,",",dec1 volt//10,"V"
           
           
           
GOTO BASLA                 

CIK:

    IF RAW <> KONUM3+KONUM2+KONUM1+KONUM THEN GOSUB POT_YAZ
    I=0:Y=0:T=0:S=0
    GOTO BASLA
       
     

EKRAN:
      LCDOUT $FE,$C0," POT-1 AYARLANIYOR "
      LCDOUT $FE,$94,REP 255\BAR
      LCDOUT REP 32\(20-bar)
      PAUSE 300         
      LCDOUT $FE,1
      RETURN
EKRAN1:     
      LCDOUT $FE,$C0," POT-2 AYARLANIYOR "
      LCDOUT $FE,$D4,rep 255\bar
      LCDOUT rep 32\(20-bar)
      PAUSE 300   
      LCDOUT $FE,1
      RETURN 
EKRAN2:     
      LCDOUT $FE,$C0," POT-3 AYARLANIYOR "
      LCDOUT $FE,$94,REP 255\BAR
      LCDOUT REP 32\(20-bar)
      PAUSE 300 
      LCDOUT $FE,1
      RETURN   
EKRAN3:         
      LCDOUT $FE,$C0," POT-4 AYARLANIYOR "
      LCDOUT $FE,$D4,rep 255\bar
      LCDOUT rep 32\(20-bar)
      PAUSE 300
      LCDOUT $FE,1
      RETURN
     
LEDYAK:   
    TOGGLE LED1         
    RETURN
LEDYAK1:   
    TOGGLE LED2   
    RETURN
LEDYAK2:   
    TOGGLE LED3   
    RETURN

POT_YAZ:                   
          HIGH RST:HIGH RST1:PAUSE 1           
          low BILGI:LOW BILGI1
          PULSOUT CLK,1:PULSOUT CLK1,1                             
          SHIFTOUT BILGI1,CLK1,1,[KONUM3]
          SHIFTOUT BILGI1,CLK1,1,[KONUM2]
          SHIFTOUT BILGI,CLK,1,[KONUM1]
          SHIFTOUT BILGI,CLK,1,[KONUM]
          LOW RST:LOW RST1:PAUSE 1                     
          RAW=KONUM3+KONUM2+KONUM1+KONUM                                                                               
          RETURN
GOTO BASLA
END

huseyin0579

#27
Hocam şu pot kademe zaman aralığını farklı bir şekilde ayarlama işlemi ilgili tuşa basıldığında örneğin tusa=0 için while tusa=0:wend gibi çalışacak, amaç tusa basılı tutulması ile gosub pot_yaz işleminde değeri 2 kademeli olarak değişebilecek olan zaman hız durumu için,while döngüsü içerisinde  for next komutları iş yaparmı? hocam ayrıca max ve min komutları nasıl kullanılıyor.

whıle tusa=0
for a=0 to 2
zaman=zaman+1
next
wend

huseyin0579

#28
Hocam potlar simülasyonda çalışıyor. Devreyi bread board ile deneyecem kodlar için son yazılımı ekliyorum. Bakma şansınız olursa hataları belirt'seniz yeter yada ekran için yapmam gereken tek tek artacak bar eklentisi nasıl olmalı?

 '****************************************************************
'*  Name    : DİJİTALPOTUYGULAMASI.BAS                                      *
'*  Author  : [select VIEW...EDITOR OPTIONS]                    *
'*  Notice  : Copyright (c) 2016 [select VIEW...EDITOR OPTIONS] *
'*          : All Rights Reserved                               *
'*  Date    : 25.01.2016                                        *
'*  Version : 1.0                                               *
'*  Notes   :                                                   *
'*          :                                                   *
'****************************************************************
@ DEVICE pic16F877A
@ DEVICE pic16F877A, WDT_OFF
@ DEVICE pic16f877A, PWRT_ON
@ DEVICE pic16F877A, PROTECT_OFF
@ DEVICE pic16F877A, HS_OSC
@ DEVICE pic16F877A, BOD_ON
@ DEVICE pic16F877A, CPD_ON
@ DEVICE pic16F877A, PROTECT_ON

DEFINE OSC 20
CMCON=7
OPTION_REG.7=0
ADCON1=%10000010

DEFINE ADC_BITS      10
DEFINE ADC_CLOCK      3
DEFINE ADC_SAMPLES   50

'LCDOUT $FE, $40, $00, $0F, $0F, $0F, $0F, $0F, $0F, $0F '
'LCDOUT $FE, $40, $00, $00, $1B, $1B, $1B, $1B, $00, $00 '
'LCDOUT $FE, $40, $00, $00, $00, $00, $1F, $1F, $1F, $1F '
'LCDOUT $FE, $40, $00, $1F, $1F, $1F, $1F, $1F, $1F, $00 '

DEFINE LCD_DREG   PORTB ;LCD  data bacakları hangi porta bağlı?
DEFINE LCD_DBIT   4 ;LCD  data  bacakları hangi bitten başlıyor?
DEFINE LCD_RSREG  PORTB ;LCD  RS Bacağı Hangi Porta bağlı ?
DEFINE LCD_RSBIT   1 ;LCD  RS  bacağı Hangi Bite bağlı ?
define LCD_RWREG  PORTB
define LCD_RWBIT      2
DEFINE LCD_EREG   PORTB ;LCD  Enable Bacağı Hangi Porta bağlı?
DEFINE LCD_EBIT   3 ;LCD  Enable Bacağı Hangi bite bağlı ?
DEFINE LCD_BITS   4 ;LCD 4  bit mi yoksa 8 bit olarak bağlı?
DEFINE LCD_LINES   4 ;LCD 4 sıra yazabiliyor

TRISA=%00011111
TRISB=%00000000
TRISC=%00000000
TRISD=%11111111
TRISE=%00000111

TOPLAM VAR WORD
VOLTHAM VAR WORD
TOP_VOLT VAR WORD
VOLT VAR WORD

A VAR BYTE
B VAR BYTE


RAW VAR WORD [4]
HAM VAR WORD

BAR VAR BYTE
BAR1 VAR BYTE
BAR2 VAR BYTE


KONUM VAR BYTE
KONUM1 VAR BYTE
KONUM2 VAR BYTE
KONUM3 VAR BYTE
KONUM4 VAR BYTE
KONUM5 VAR BYTE
KONUM6 VAR BYTE
KONUM7 VAR BYTE

SYMBOL TUSA=PORTD.0
SYMBOL TUSB=PORTD.1
SYMBOL TUSC=PORTD.2
SYMBOL TUSD=PORTD.3
SYMBOL TUSE=PORTD.4
SYMBOL TUSF=PORTD.5
SYMBOL TUSG=PORTD.6
SYMBOL TUSH=PORTD.7
SYMBOL TUSI=PORTE.0
SYMBOL TUSK=PORTE.1
SYMBOL TUSL=PORTE.2
SYMBOL LED1=PORTB.0
SYMBOL LED2=PORTC.6
SYMBOL LED3=PORTC.7
SYMBOL RST=PORTC.0
SYMBOL CLK=PORTC.1
SYMBOL BILGI=PORTC.2
SYMBOL RST1=PORTC.3
SYMBOL CLK1=PORTC.4
SYMBOL BILGI1=PORTC.5

PORTA=0
PORTB=0
PORTC=0
PORTD=0
PORTE=0

RAW=0
 
  LCDOUT $FE,$80,"DiJiTAL POT KONTROL"
  LCDOUT $FE,$C0,"     UYGULAMASI    " 
  LCDOUT $FE,1
  PAUSE 300
KONUM3=0:KONUM2=0:KONUM1=0:KONUM=0                               

BASLA:     
   LCDOUT $FE,1                                                 
           
           IF TUSA=0 THEN
               KONUM=KONUM+1             
               IF KONUM=0 THEN KONUM=255
               BAR=BAR+1:GOSUB EKRAN:GOTO CIK
               whILE TUSA=0:WEND                         
               PAUSE 50
               ENDIF   
             
           IF TUSB=0 THEN               
               KONUM=KONUM-1
               IF KONUM=255 THEN KONUM=0
               BAR=BAR-1:GOSUB EKRAN:GOTO CIK 
               WHILE TUSB=0:WEND             
               PAUSE 50
               ENDIF
             
           IF TUSC=0 THEN
               KONUM1=KONUM1+1             
               IF KONUM1=0 THEN KONUM1=255
               BAR=BAR+1:GOSUB EKRAN1:GOTO CIK
               whILE TUSC=0:WEND                         
               PAUSE 50
               ENDIF   
             
           IF TUSD=0 THEN               
               KONUM1=KONUM1-1
               IF KONUM1=255 THEN KONUM1=0
               BAR=BAR-1:GOSUB EKRAN1:GOTO CIK
               WHILE TUSD=0:WEND             
               PAUSE 50
               ENDIF
             
           IF TUSE=0 THEN
               KONUM2=KONUM2+1             
               IF KONUM2=0 THEN KONUM2=255
               BAR=BAR+1:GOSUB EKRAN2:GOTO CIK
               whILE TUSE=0:WEND                         
               PAUSE 50
               ENDIF   
             
           IF TUSF=0 THEN               
               KONUM2=KONUM2-1
               IF KONUM2=255 THEN KONUM2=0
               BAR=BAR-1:GOSUB EKRAN2:GOTO CIK
               WHILE TUSF=0:WEND             
               PAUSE 50
               ENDIF
         
           IF TUSG=0 THEN
               KONUM3=KONUM3+1             
               IF KONUM3=0 THEN KONUM3=255
               BAR=BAR+1:GOSUB EKRAN3:GOTO CIK
               whILE TUSG=0:WEND                         
               PAUSE 50
               ENDIF   
             
           IF TUSH=0 THEN               
               KONUM3=KONUM3-1
               IF KONUM3=255 THEN KONUM3=0
               BAR=BAR-1:GOSUB EKRAN3:GOTO CIK
               WHILE TUSH=0:WEND             
               PAUSE 50
               ENDIF
                   
           IF TUSI=0 THEN
           GOSUB LEDYAK
           WHILE TUSI=0:WEND
           PAUSE 50
           ENDIF
                 
           IF TUSK=0 THEN
           GOSUB LEDYAK1
           WHILE TUSK=0:WEND
           PAUSE 50
           ENDIF
             
           IF TUSL=0 THEN
           GOSUB LEDYAK2
           WHILE TUSL=0:WEND
           PAUSE 50
           ENDIF
           
           TOP_VOLT=0
           FOR A=0 TO 19
           ADCIN 2, VOLTHAM
           TOP_VOLT=TOP_VOLT+(VOLTHAM+1)
           PAUSEUS 5
           NEXT
           VOLTHAM=TOP_VOLT/20
           VOLT=VOLTHAM*/75
           lcdout $fe,$80,"Volt=",dec2 volt/10,",",dec1 volt//10,"V"           
           PAUSE 100
         
           

GOTO BASLA                 
CIK:   
      IF RAW <> KONUM3+KONUM2+KONUM1+KONUM THEN gosub pot_yaz
      GOTO BASLA
         
EKRAN:
      LCDOUT $FE,$C0," POT-1 AYARLANIYOR "
      LCDOUT $FE,$94,REP 255\BAR
      LCDOUT REP 32\(20-bar)             
      RETURN
EKRAN1:     
      LCDOUT $FE,$C0," POT-2 AYARLANIYOR "
      LCDOUT $FE,$D4,rep 255\bar
      LCDOUT rep 32\(20-bar)         
      RETURN 
EKRAN2:     
      LCDOUT $FE,$C0," POT-3 AYARLANIYOR "
      LCDOUT $FE,$94,REP 255\BAR
      LCDOUT REP 32\(20-bar)     
      RETURN   
EKRAN3:         
      LCDOUT $FE,$C0," POT-4 AYARLANIYOR "
      LCDOUT $FE,$D4,rep 255\bar
      LCDOUT rep 32\(20-bar)     
      RETURN     

LEDYAK:   
   
    TOGGLE LED1         
    RETURN

LEDYAK1:   
   
    TOGGLE LED2   
    RETURN

LEDYAK2:   
   
    TOGGLE LED3   
    RETURN

POT_YAZ:                   
          HIGH RST:PAUSE 1:HIGH RST1:PAUSE 1           
          low BILGI:LOW BILGI1
          PULSOUT CLK,1:PULSOUT CLK1,1                             
          SHIFTOUT BILGI1,CLK1,1,[KONUM3]
          SHIFTOUT BILGI1,CLK1,1,[KONUM2]
          SHIFTOUT BILGI,CLK,1,[KONUM1]
          SHIFTOUT BILGI,CLK,1,[KONUM]
          LOW RST:PAUSE 1:LOW RST1:PAUSE 1                                                                                                               
          RAW=KONUM3+KONUM2+KONUM1+KONUM
          RETURN         
GOTO BASLA
END

huseyin0579

Arkadaşlar deneme yapılmıştır. 200 ohm kademe aralığında değişim oluyor. Pot değer'leri 10k yerine toplam değer olarak 11k gösteriyor bu  fabrikasyon bir durum veya ölçü aleti yanıl'tıyor olabilir. Pot entegresi kontrol sayısı yazılım içerisinde düzenleme yapılarak çoğaltılabilir.

Powered by EzPortal