cd4051 kontrolü

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

ete

Aslında o kadar çok mesaj attınki ne istediğini anlamakta zorlanıyorum doğrusu.
Birinci istediğin, programın adım adım ilerlemesi ve bunuda tuşların yapması herhalde.
Peki programa tuş kontrolü koymaz isen nereden kontrol yapacaksın. Bu noktada for döngüsünü tuşa basarak ilerletmek gerekir. İleri sayma kısmında olanı ben yapayım diğerini sen yap.
For Adress=0 to 7
   PortB=Adress<<5
İşte bu noktada tuş kontrolünü koymak gerekir.
While ButonA=1:wend
Pause 100
Next

Bu sistemle tuşa her basışta ledler konum değiştirecektir.
Diğer soruna gelince maskeleme meselesi, Cd4051 adres pinlerini baştaki ilk üç pine verdiğinde direk portb=Adress diyerek bu işi yaptırabilirsin. Maskeleme aslında ilk üç pinin haricinde pin kullandığın zaman gerekir. Yani sondaki 3 pini kullandığın zaman bu işi maskeleme yaparak adresleme yapmak istersek,
Önce portb yi okuyup sonra okunan değer üzerine adres değerini yerleştirmek gerekir.
PortB=(PortB & %00011111) +(Adress<<5)
Komut satırıda bu işi yapar.
Ete

F®T

#16
Yada tek tek ileri geri istiyorsan ki bence bu şekil kullanım için daha uygun olabilir.Çünkü 4051  genelde 8 analog veriyi tek çıkıştan seçip kullanma modunda kullanımakta.sende ileri geri yapıp istediğin girişi çıkışa aktarabilirsin.

basla:
     
     IF BUTONA=0 THEN:GOSUB EFEKT1
     IF BUTONB=0 THEN:GOSUB EFEKT2
     GOTO BASLA
     
EFEKT1:
     ADRESS=ADRESS+1
     IF ADRESS>7 THEN ADRESS=0
     PORTB=ADRESS<<5 
     E1:   
     IF BUTONA=0 THEN GOTO E1
     RETURN
EFEKT2:
     ADRESS=ADRESS-1
     IF ADRESS=255 THEN ADRESS=7     
     PORTB=ADRESS<<5
     E2:
     IF BUTONB=0 THEN GOTO E2     
     RETURN
END
"Hakk" şerleri hayr eyler Zannetme ki gayr eyler Ârif anı seyreyler Mevlâ görelim neyler Neylerse güzel eyler.

huseyin0579

Çok teşekkür ediyorum. ALLAH razı olsun emeğinize sağlık geriye kalanı ben hallederim ve yeni bir eklenti program örnek olması için eklerim.

huseyin0579

#18
Ete hocam birşey sorsam, güzel bir kitap yazsanız fiyatı 100 tl de olsa alırım hiç düşündünüz mü böyle bir projeniz varmı. Hocam bu işin bol örnekli projeler ile öğrenilmesi daha kolay olur. Özellikle mantık komutları ile yapılmış güzel projeler Hocam patent hakkı v.s yani kitabı alan kesinlikle kopyalamayacak bu çalışmaya farklı nasıl önlem alınabilir bu duruma fazla yorum yapamıyorum. Hocam youtube için bile müzisyenler hakkını arıyor malum işin ticari boyutu var. Hocam ülkemizdeki bu konuda benim bildiğim bilgili ve zeki  maaşallah diyorum tek kişisiniz diğer arkadaşlar alınmasın onlarda değerlidir ama birçok arkadaşa yardımınız var ve kısa sürede sonuç alıp malum geri dönmeyende oluyor. Herşeyi sizden beklemek de doğru değil f.t hocamız da sağolsun konuya yardımcı oldu. Hocam işte problem burada başka arkadaşlar yokmu diye sormadan da olmuyor neyse hocam benim dediğim gibi özellikle şu mantık komutları önceki dersleriniz de güzel ama çalışan programı inceleyip yeni birşeyler yapmak bana daha anlaşır geliyor.

F®T

ete hoca gibi idealist olmaya çalışmak lazım.Eğitim gönüllüsü vatan sever sabırlı bir insan.Bana göre ondan birşeyler öğrenen herkesin bence o çizgide devam etmesi lazım.Bu forumdada en azından bazı durumlarda bunları gözlemlemeliyiz.Asıl olan budur diye düşünüyorum bu şekilde belki bazı sorunlarımızı aşabiliriz.
"Hakk" şerleri hayr eyler Zannetme ki gayr eyler Ârif anı seyreyler Mevlâ görelim neyler Neylerse güzel eyler.

huseyin0579

Hocam beni çok iyi anlamış'sınız çok teşekkür ediyorum. Bu yaklaşımınız da doğru herşeyi oluruna bırakmak gerekiyor, belki ete hoca süpriz yapabilir ilerleyen zamanlarda hayırlı günler...

huseyin0579

Ete hocam bahsettiğiniz düzenlemeyi yaptım ama butona bastıkça birden fazla bit kayması oluyor.

F.t hocam sizin eklediğiniz örnek kodlara göre düzenleme yaptım ve kodlar ektedir. Sorun sayımda son bit'e gelince durmaması bunun için ne yapmalıyım, örneğin cd4051 ileri sayımda sonuncu bit'e geldiğinde duracak aynen tersi durumda geri sayımda ilk bit'e gelince duracak hocam butonların basılı tutulduğu sürece çalışması için whıle wend eklentisi yapacağım.
'****************************************************************
'*  Name    : UNTITLED.BAS                                      *
'*  Author  : [select VIEW...EDITOR OPTIONS]                    *
'*  Notice  : Copyright (c) 2016 [select VIEW...EDITOR OPTIONS] *
'*          : All Rights Reserved                               *
'*  Date    : 03.07.2016                                        *
'*  Version : 1.0                                               *
'*  Notes   :                                                   *
'*          :                                                   *
'****************************************************************
@ 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:   
     
     ADRESS=ADRESS+1
     IF ADRESS>7 THEN ADRESS=0
     PORTB=ADRESS<<5
     E1:
     IF BUTONA=0 THEN GOTO E1
     RETURN
EFEKT2:
     ADRESS=ADRESS-1
     IF ADRESS=255 THEN ADRESS=7
     PORTB=ADRESS<<5
     E2:
     IF BUTONB=0 THEN GOTO E2 
     RETURN
END

Burak

IF BUTONA=0 THEN:GOSUB EFEKT1
IF BUTONB=0 THEN:GOSUB EFEKT2
GOTO BASLA


Bu blokta bir düzenleme yapmamız gerekiyor ..

if butona=0 then
  while butona=0
  pause 5
  wend
  gosub efekt1
endif


Şeklinde ... Bunu aynı şekilde butonb bloğu içinde yapman gerek ..

Burak
Ω Gens Una Sumus Ω

huseyin0579

Ustam sağolasınız ama esas sorun sayım sonundaki son bite geldiğinde sayım işlemi duracak bu her iki yön sayım için geçerli 0 ile 7 + sayımda 7'.ci bit'e geline duracak aynı şekilde 7 ile 0 arasında geri sayımda 0.'cı bit'e gelince duracak bu şekilde çalışması gerekiyor.

huseyin0579

f.t hocamızın verdiği kod istediğim gibi çalışıyor fakat bir önceki mesaj ile belirttiğim şekilde olmalı!...

huseyin0579

Bu düzenlemede porta.0 pinine bağlı butona basıldıkça sayım son bit'e geldiğinde duruyor. Diğer buton porta.1 butonunda yani gosub efekt2 alt programında sürekli sayım var bu kısmı düzeltmedim. While wend önerdiğiniz şekilde işlem görmüyor farklı bir mantık yürütmek gerekiyor ve ben bunu yapamadım. Kodları yeniden ekliyorum...

'****************************************************************
'*  Name    : UNTITLED.BAS                                      *
'*  Author  : [select VIEW...EDITOR OPTIONS]                    *
'*  Notice  : Copyright (c) 2016 [select VIEW...EDITOR OPTIONS] *
'*          : All Rights Reserved                               *
'*  Date    : 03.07.2016                                        *
'*  Version : 1.0                                               *
'*  Notes   :                                                   *
'*          :                                                   *
'****************************************************************
@ 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:   
     
     ADRESS=ADRESS+1
     IF ADRESS>7 THEN ADRESS=7
     PORTB=ADRESS<<5
     E1:
     IF BUTONA=0 THEN GOTO E1
     RETURN
EFEKT2:
     ADRESS=ADRESS-1
     IF ADRESS<0 THEN ADRESS=7
     PORTB=ADRESS<<5
     E2:
     IF BUTONB=0 THEN GOTO E2
     RETURN

END
     

huseyin0579

Arkadaşlar sorun IF ADRESS=255 THEN ADRESS=0 bu şekilde tanımlama yapamadığımdan oluyormuş düzelt'tim sadece whıle wend döngüsü kaldı onuda yaparım herhalde denemelere devam emeği geçenlere teşekkür ediyorum.
'****************************************************************
'*  Name    : UNTITLED.BAS                                      *
'*  Author  : [select VIEW...EDITOR OPTIONS]                    *
'*  Notice  : Copyright (c) 2016 [select VIEW...EDITOR OPTIONS] *
'*          : All Rights Reserved                               *
'*  Date    : 03.07.2016                                        *
'*  Version : 1.0                                               *
'*  Notes   :                                                   *
'*          :                                                   *
'****************************************************************
@ 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:   
     
     ADRESS=ADRESS+1
     IF ADRESS>7 THEN ADRESS=7
     PORTB=ADRESS<<5
     E1:
     IF BUTONA=0 THEN GOTO E1
     RETURN
EFEKT2:
     ADRESS=ADRESS-1
     IF ADRESS=255 THEN ADRESS=0
     PORTB=ADRESS<<5
     E2:
     IF BUTONB=0 THEN GOTO E2
     RETURN

END
     

huseyin0579

Hocam tek sorun while wend döngüsü başka problem yok!...

'****************************************************************
'*  Name    : UNTITLED.BAS                                      *
'*  Author  : [select VIEW...EDITOR OPTIONS]                    *
'*  Notice  : Copyright (c) 2016 [select VIEW...EDITOR OPTIONS] *
'*          : All Rights Reserved                               *
'*  Date    : 03.07.2016                                        *
'*  Version : 1.0                                               *
'*  Notes   :                                                   *
'*          :                                                   *
'****************************************************************
@ 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
    while butona=0:wend
    pause 100
    endif
    if butonb=0 then
    gosub efekt2
    while butonb=0:wend
    pause 100
    endif
   
GOTO BASLA
     
EFEKT1:   
     
     ADRESS=ADRESS+1 
     IF ADRESS>7 THEN ADRESS=7     
     PORTB=ADRESS<<5     
     RETURN
EFEKT2:
     ADRESS=ADRESS-1
     IF ADRESS=255 THEN ADRESS=0
     PORTB=ADRESS<<5
     while butonb=0:wend   
     RETURN

END

F®T

#28
whıle wend demekle ne kastediyorsun anlamadım... ;D

butona basılı tutayım en sona tektek gitsin dursun.butona basılı tutayım en başa tek tek gelsin dursun.butona tek tek basayım tek tek saysın vs....
"Hakk" şerleri hayr eyler Zannetme ki gayr eyler Ârif anı seyreyler Mevlâ görelim neyler Neylerse güzel eyler.

Burak

Ne istedigini lutfen bir seferde acik bir sekilde yaz .. De ki , senaryo şöyle şöyle olacak .. Aksi takdirde boşu boşuna yorum yapiyormuşum gibi geliyor ..

Burak
Ω Gens Una Sumus Ω

Powered by EzPortal