cd4051 kontrolü

Başlatan huseyin0579, 02 Temmuz 2016, 23:33:04

huseyin0579

Hocam cd4051 entegresini ileri ve geri yönde çalıştırmak istiyorum. Bu konuda sadece açık şema isis eklentisi yapıyorum ve entegre ile daha önce çalışmadım. Hocam ileri sayımda son bit'e gelince duracak ve geri sayımda aynı şekilde çalışacak...

ete

CD4051 analog multiplexer diye isimlendirilen ve tamamen analog çalışanbir entegre. 8 bit alışıyor ve adres bacaklarına verdiğin 0-7 adres değerine bağlı olarak X pini ile Xn pinlerini birleştiriyor.
Bu durumda X0 dan başlayıp X7 pinine kadar sıralı bir şekilde LOW çıkarmasını istiyor isek Adres bacaklarına 0-7 arasında sırası ile değer vermek gerekir. Ne yazıkki adres bacaklarını Port'un en üst bitlerine bağlamışsın. Bu durumda adres değerini shift ettirmen gerekecektir.
FOR ADRES=0 to 7
  PORTB=ADRES<<5
Pause 100
Next
satırları ile sıralı olarak 7 ci bite kadar çıkış verdirebilirsin.
Bu aşamadan sonra tekrar geri dönmek için ise
FOR ADRES=7 to 0 Step -1
   PORTB=ADRES<<5
   pause 100
Next
şeklinde geri döndürmen gerekir.
Ete

 

huseyin0579

ALLAH razı olsun Hocam çok teşekkür ediyorum. Programı yazabilir'sem örnek kod eklerim.

huseyin0579

Hocam kod derlerken adres var byte için hata veriyor.

@ DEVICE pic16F628A                      'işlemci 16F628                                
@ DEVICE pic16F628A, WDT_OFF              'Watch Dog timer açık
@ DEVICE pic16F628A, PWRT_ON             'Power on timer açık
@ DEVICE pic16F628A, PROTECT_OFF         'Kod Protek kapalı
@ DEVICE pic16F628A, MCLR_OFF             'MCLR pini kullanılıyor.
@ DEVICE pic16F628A, INTRC_OSC_NOCLKOUT  'Dahili osilatör kullanılacak

PORTA=0
PORTB=0
TRISA=%00000011
TRISB=%00000000
CMCON=7    '16F628 de komparatör pinleri iptal hepsi giriş çıkış
OPTION_REG.7=1  'portB deki dahili PULL-UP lar iptal edildi.

ADRES VAR BYTE

SYMBOL BUTONA=PORTA.0
SYMBOL BUTONB=PORTA.1

basla:
     
     IF BUTONA=0 THEN:GOSUB EFEKT1
     IF BUTONB=0 THEN:GOSUB EFEKT2
     GOTO BASLA
     
EFEKT1:
     FOR ADRES=0 TO 7
     PORTB=ADRES<<5
     PAUSE 100
     NEXT
     RETURN
EFEKT2:
     FOR ADRES=7 TO 0 STEP-1
     PORTB=ADRES<<5
     PAUSE 100
     NEXT
     RETURN
END

ete

Adres basic komut listesinde yer alıyor. Bu nedenle adres yerine başka bir değişken adı kullan.
Ete

huseyin0579

Hocam hatayı buldum adres var byte şeklinde yazılmasını program kabul etmiyor. Tanımlama adress var byte olunca derledi bu şekilde birçok tecrübe yaşıyoruz. Örnek olarak lcd için pin tanımlamaları veya default pini ile yapılan bağlantılarda pin isimlerdirmelerine dikkat edilmeli!
@ DEVICE pic16F628A                      'işlemci 16F628                                
@ DEVICE pic16F628A, WDT_OFF              'Watch Dog timer açık
@ DEVICE pic16F628A, PWRT_ON             'Power on timer açık
@ DEVICE pic16F628A, PROTECT_OFF         'Kod Protek kapalı
@ DEVICE pic16F628A, MCLR_OFF             'MCLR pini kullanılıyor.
@ DEVICE pic16F628A, INTRC_OSC_NOCLKOUT  'Dahili osilatör kullanılacak
define OSC 4
PORTA=0
PORTB=0
TRISA=%00000011
TRISB=%00000000
CMCON=7    '16F628 de komparatör pinleri iptal hepsi giriş çıkış
OPTION_REG.7=1  'portB deki dahili PULL-UP lar iptal edildi.

ADRESS VAR byte

SYMBOL BUTONA=PORTA.0
SYMBOL BUTONB=PORTA.1

basla:
     
     IF BUTONA=0 THEN:GOSUB EFEKT1
     IF BUTONB=0 THEN:GOSUB EFEKT2
     GOTO BASLA
     
EFEKT1:
     FOR ADRESS=0 TO 7
     PORTB=ADRESS<<5
     PAUSE 100
     NEXT
     RETURN
EFEKT2:
     FOR ADRESS=7 TO 0 STEP-1
     PORTB=ADRESS<<5
     PAUSE 100
     NEXT
     RETURN
END


Bu kodları derliyor simülasyonda denemedim. Sonuç alırsam doğru eklentiyi yaparım. Hocam 4051 control pinlerini portb son pinlerine bağladığım şeklinde uyarı yapmış'tınız. İlk pinlerde bağlantı olsaydı farklı bir mantık ile yapılabilirdi. Bu duruma örnek kod eklentisi verebilir'misiniz. Teşekkür ederim hocam sağolasın...

huseyin0579

Hocam başka bir mantık ile yapılabilir derken port maskeleme işlemini ifade etmek istedim.

huseyin0579

Hocam butona ayrı ayrı basıldığında adım adım gitmiyor. Birkez basılınca 0-7 pin kendi kendine sayıyor.

huseyin0579

Kod ekliyorum önceki isis şemasında porta.0 butonu hatalı bağlanmış düzelt'tim.

huseyin0579

Hocam ileri butonu ile sayım yaparken cd4051 son pininde duracak aynı şekilde geri sayım yaparken ilk pine geldiğinde duracak sürekli çalışmamalı...

ete

Biraz kendini zorla bakalım. İstediğin şeyler zor değil. Mantığı çalıştır kendinde yaparsın.
Ete

F®T

ete hocamın dediği gibi biraz düşünürsen çok kolay bulucaksın aslında bir komut var ve bu komut senin istemediğin işi yaptırıyor.bil bakalım bu nedir. ;)
"Hakk" şerleri hayr eyler Zannetme ki gayr eyler Ârif anı seyreyler Mevlâ görelim neyler Neylerse güzel eyler.

huseyin0579

Hocam azdaha uğraşırsam beyin gövdeden ayrılacak yani kayış kopacak yedek parçamızda yok  :-[vallahi mantığı çözmüş olsam sıkıntı olmam hocam ricam'dır. Kafa nerelerde bir bilseniz programa adapte olamıyorum. Verdiğiniz örnek işimi kolaylaş'tırıyor. Hocam samimi olarak yapamadığımı ifade etmek istiyorum.

huseyin0579

not komutu nedir hocam gerçekten kafa durdu

huseyin0579

Hocam adress var byte değişken tanımlaması adress var bit bu şekilde mi olacak, hocam bu şekilde olmaz derseniz 0 ile 7 arasında sayım yapacak eklenti için ;
sayac var byte
Adress var byte

Efekt alt programda;

sayac=sayac+1
If sayac >9 then sayac=0
sayac=adress
Portb=adress <<5
Pause 100
Return

Hocam rica ediyorum. Ayrıca düşündüğünüz alternatif yani port maskeleme örneği verebilir'misiniz.

Powered by EzPortal