dijital pot kontrolü

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

huseyin0579

Ete hocam sağolasın yardımların için çok teşekkür ederim hocam, yardımcı olurum derseniz sonkez şu bar işine küçük bir örnek "<<<<<<<<<<|" adc.0 girişine 0-5volt arasında gelen gerilim ile 10 kademeli artış adc.1 girişine gelen 0-5volt ile "|>>>>>>>>>>" 10 kademeli artış için ben yapabilir'sem uğraşıyorum,referans olması için örnek kod parçası ekler'misiniz!....

ete

Bu işi yapmak çok zor değil aslında.
Önce pot okuması yapıyoruz.
ADCIN 0,HAM
Sonra okunan bu 0-1023 arasındaki adc değerinden 0-10 arası bir değer üretmemiz gerekecek.
O halde formül 10/1023*256=2,5 çıkar. Bunu 25 olarak kullanacağız ve sonucu 10 a böleceğiz .
BAR_SOL=(HAM*/25)/10 şeklinde hesapladık. Diyelimki HAM değerimiz 512 ve BAR_SOL=(512*/25)/10=5 değerini buluruz.
BAR_SOL aslında ekrana kaç adet ">" karekteri yazdıracağımızı bize hesaplamış oldu. Bunu yazdıracak komut REP ">"\BAR_SOL
Şimdi bunu ekrana verelim. Soldan sağa doğru vereceğiz . Ama ilk karekter "|" olacağı için önce onu yazdırıp peşine komutu vereceğiz.
LCDOUT $fe,$80,"|",rep ">"\BAR_SOL
işte bu komut ekrana şu bilgiyi yazdıracaktır |>>>>> istediğimizde bu değilmi?

Şimdi aynı işi tersten BAR_SAG için yapalım Bu şekilde ADC 1 kanalını okumuş olalım.
ADCIN 1,HAM
Şimdi Bar sayısını aynı şekilde hesaplayalım BAR_SAG=(HAM*/25)/10
Şimdi bunu ekrana verelim. Ama bu sefer ikinci satırı kullanalım.
LCDOUT $fe,$C0,REP "<"\BAR_SAG,"|"
Bu sistemde son karekter "|" olacağı için son da bu karekteri tırnak içinde yazdırmış olduk.
Diyelimki bu karekter dizisi en sondan ortaya (sola) doğru bar sayısına bağlı olarak uzamış olsun.
Yapacağımız işlem önce karekterleri yerleştireceğimiz ekran adresini hesaplamak olmalı.
Ekran satır başına 20 karekter veriyor ise (4x20 LCD kullanıyoruz) Başlangıç adresimiz (20-BAR_SAG) şeklinde hesaplanır.
Ancak sonda fazladan bir karekter daha olacağı için 20 değil 19 dan çıkarmamız gerekecektir. Bu durumda ekran komutu;
LCDOUT $fe,$C0+(19-BAR_SAG), rep "<"\BAR_SAG,"|"
şeklinde olacaktır.
Ete

huseyin0579

#32
Hocam böyle yaptım ama olmadı.   
   ADCIN 0, HAM1
           IF HAM1<512 THEN
           BAR1=((ham*/25)/10)
           bar1=bar1+1
           ELSE
           BAR1=0
           ENDIF
           LCDOUT $FE,$C9,"|",REP ">"\BAR1                                 
           LCDOUT REP 32\(10-bar) 
           
           ADCIN 1, HAM2
           IF HAM2<512 THEN
           BAR2=((ham*/25)/10)
           BAR2=BAR2+1
           ELSE
           BAR2=0
           ENDIF
           LCDOUT $FE,$C9,"|",REP "<"\BAR2
           LCDOUT REP 32\(10-bar)
           
Hocam ayrıca pot entegresine bilgi gönderme kısmı doğrumu?

POT_YAZ:                   
      HIGH RST:PAUSEus 1:HIGH RST1:PAUSEus 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:PAUSEus 1:LOW RST1:PAUSEus 1                                                                                                               
      RAW=KONUM3+KONUM2+KONUM1+KONUM         
      return
      GOTO BASLA

bilgi göndermeyi böyle yapıyorum, c dili ile yazılmış farklı bir uygulamada pause 1 gecikmesini pauseus 1 olarak kullanmışlar. Bende bu şekilde düzelt'tim uygulamayı bread board ile sizin verdiğin gecikme ile derlediğim kodu kullanarak çalıştır'dım. Hocam merak ettiğim kısım bu pot entegresi 17 bit ile çalışıyor. Ben bilgiyi word olarak gönderiyorum. 17'.ci bit görevi tam pot seçimi içinmi? böyle ise bunu " SHIFTOUT BILGI,CLK,1,[KONUM] " clk sonrasındaki 1 sinyalimi yapıyor. Hocam bu çalışma bitmek üzere sizden ricam şu bilgi gönderme için ve eklediğim bar hatalarına bakar'mısınız sadece bunlar için hatalarım nedir bunları düzeltmek için yardım istiyorum programın tamamı için değil matematik zayıf bunu anlamışsınız'dır!...Hocam benim kullandığım gnd akünün ortak +12v ucu dc-dc konverter ile ürettiğim +5v gerilimi pic, lcd ve pot entegresi için kullanıyorum, pot entegresi +vcc gerilimi +5v gnd gerilimi 1 ve 7 numaralı ayak ile ortak kullanıyorum. Pot değişikliğini ölçü aleti ile görebiliyorum volüm kanalı bağlantısında normal bir pot çalışması gibi sesin ayarını yapamıyorum. Bu kararsızlık neden kaynaklanıyor? Ses açılacak gibi oluyor ve sonrası malum olduğu gibi kalıyor ama ölçü aletinde pot değişikliğini görüyorum.

huseyin0579

Hocam 10 kademeli sağ ve sol bar artışları için 0-5v gerilim değeri var. 500milivolt kademe aralığında artış göstermesi için yapılacak eklenti nasıl olacak!...

ete

Bar konusunda amacının ne olduğunu gerçekten anlamadım. Pot değerinin neden yarısını kullanıyorsun.
Madem 10 barlık hesaplama yapıyorsun sonradan neden bir bar ekliyorsun.
Ben böyle açıklamalar vermedim. Olmadı derken ne olmadı.
Dolayısıyla hiç anlamadığım bir konuya cevap vermem mümkün değil.

Ete

huseyin0579

Hocam kodu ekliyorum simülasyon dosyasınıda ekliyorum deneme yaparmısınız?
 '****************************************************************
'*  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



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

'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 '

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
HAM VAR WORD
HAM1 VAR WORD
HAM2 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
KONUM3=0:KONUM2=0:KONUM1=0:KONUM=0   
  LCDOUT $FE,$80,"DiJiTAL POT KONTROL"
  LCDOUT $FE,$C0,"     UYGULAMASI    " 
  PAUSE 2000
  LCDOUT $FE,1

                             

BASLA:     
                                               
           GOSUB VOLT_AL
           
           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

GOTO BASLA             

VOLT_AL:
           TOP_VOLT=0
           FOR A=0 TO 19
           ADCIN 2, VOLTHAM
           TOP_VOLT=TOP_VOLT+(VOLTHAM+1)
           PAUSEUS 500
           NEXT
           VOLTHAM=TOP_VOLT/20
           VOLT=VOLTHAM*/75
           lcdout $fe,$80,"Volt=",dec2 volt/10,",",dec1 volt//10,"V"           
           
         
           ADCIN 0, HAM1
           IF HAM1<512 THEN
           BAR1=((ham*/25)/10)
           bar1=bar1+1
           ELSE
           BAR1=0
           ENDIF
           LCDOUT $FE,$C9,"|",REP ">"\BAR1                                 
           LCDOUT REP 32\(10-bar) 
           
           ADCIN 1, HAM2
           IF HAM2<512 THEN
           BAR2=((ham*/25)/10)
           BAR2=BAR2+1
           ELSE
           BAR2=0
           ENDIF
           LCDOUT $FE,$C9,"|",REP "<"\BAR2
           LCDOUT REP 32\(10-bar)
           RETURN
                   
    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\(10-bar)             
      LCDOUT $FE,1
      RETURN
EKRAN1:     
      LCDOUT $FE,$C0," POT-2 AYARLANIYOR "
      LCDOUT $FE,$D4,rep 255\bar
      LCDOUT rep 32\(10-bar)         
      LCDOUT $FE,1
      RETURN 
EKRAN2:     
      LCDOUT $FE,$C0," POT-3 AYARLANIYOR "
      LCDOUT $FE,$94,REP 255\BAR
      LCDOUT REP 32\(10-bar)     
      LCDOUT $FE,1
      RETURN   
EKRAN3:         
      LCDOUT $FE,$C0," POT-4 AYARLANIYOR "
      LCDOUT $FE,$D4,rep 255\bar
      LCDOUT rep 32\(10-bar)     
      LCDOUT $FE,1
      RETURN           
LEDYAK:       
      TOGGLE LED1         
      RETURN
LEDYAK1:     
      TOGGLE LED2   
      RETURN
LEDYAK2:       
      TOGGLE LED3   
      RETURN
POT_YAZ:                   
      HIGH RST:PAUSEus 1:HIGH RST1:PAUSEus 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:PAUSEus 1:LOW RST1:PAUSEus 1                                                                                                               
      RAW=KONUM3+KONUM2+KONUM1+KONUM         
      return
      GOTO BASLA
END

huseyin0579

Hocam 2'.ci satırın orta noktasında "|" bu işaret ve sonrasında iki ayrı 0-5v gerilim ile sağ veya sola artış gösteriyor. 0-5volt arasında değişen voltaj 10 kademeli artış için, her kademede 500milivolt artış 5volt ve toplamda 10 kademe yapıyor bu şekilde çalışacak!...

0+500milivolt  = | >
0+1volt           = | >>
0+1.5volt        = | >>>
0+2volt           = | >>>>

böyle artış gösterecek, diğer konumda tam tersi olacak!...

ete

Ama "|" işaretinide kullanıyorsun hem sağda hem solda birer tane bu işaret var ise 10 değil her bir taraf için 9 karekter kullanmak zorunda kalıyorsun demektir.
Hangi ADC kanalı LCD nin hangi satırında ve hangi tarafında yer alacak?

Ete

huseyin0579

Hocam adc0 girişine gelen sinyal ile "<<<<<<<<<|" sola haraket adc1 kanalına gelen sinyal ile "|>>>>>>>>>" sağa dayalı sinyal yok iken ekran boş kalıyor.

Powered by EzPortal