Decoder

Başlatan erdemefe, 11 Mayıs 2011, 00:52:03

erdemefe

Arkadaşlar bir projemde kullanmak için pic ile 4 bit bi decoder yapmam gerekiyor ama bir türlü beceremedim en basitinden portanın ilk dört bitinden sayıyı girip portbden çıkışları gözlemlemek için aşağıdaki gibi kodları yazıyorum ama ilk sayı geldiğinde o sayıya ait çıkış high oluyor sayı 0 veya başka bir sayı olsa bile çıkış o çıkış hep high kalıyor diğerleri hep lowda sanki takılıp kalıyor.

BASLA:
SAYI=PORTA

IF SAYI=1 THEN
HIGH PORTB.0
ELSE
LOW PORTB.0
ENDIF

IF SAYI=2 THEN
HIGH PORTB.1
ELSE
LOW PORTB.1
ENDIF
.
.
.
.
.
GOTO BASLA

burak1000

merhaba öncelikle kolay gelsin :D
sanırım yapmaya çalıştığın sistem:



ilk olarak:
IF SAYI=1 THEN
HIGH PORTB.0
ELSE
LOW PORTB.0
ENDIF
.
.
. şeklinde kullanmak kod kalabalığı olur :)  ayrıca doğru çıkış değerini bulana kadar PORTB binbir şekile girer. çünki her değeri ayrı ayrı sorgulayıp portb üzerinde oynama yapıyorsun eğer karşı taraftaki alıcı bir pic  yada yüksek hızlı dijital bir cihaz ise bu değişimleri hissedecektir. bu yüzden portb yi tek seferde değiştirmelisin.  biraz daha pratik düşünürsek.:
@ DEVICE pic16F628


CMCON=7       'tüm çıkışlar dijital
TRISA=255      'PORTa giriş
TRISB=0          'PORTB çıkış
SAYI VAR BYTE ' portb'ye atanacak olan değişken
PORTB=0         'portb'den hep kormuşumdur bu yüzden program başında sıfırlarım


BASLA:                                        'başla bakalım :D
SAYI=1                                        ' sayı içerisine 1 yani %00000001 at
PORTB= SAYI << (PORTA)       'sayı içerisindeki değeri PORTA'nın toplam değeri kadar sola kaydır ve PORTB'ye yaz
GOTO BASLA                               ' sonsuza kadar aynısını yap (he he ne kadar acımasızca :)

şeklinde basit bir kod ile işi çözebilirsin :D tekrar kolay gelsin .

z

Standart basic ile asagidaki gibi yapilabilir.

Dim D[4]
D[1]=1: D[2]=2: D[3]=4: D[4]=8

BASLA:
PORTB=D[((PORTA) AND 3)+1]
GOTO BASLA
Bana e^st de diyebilirsiniz.   www.cncdesigner.com

ete


BASLA:
SAYI=PORTA

PORTB=DCD SAYI
veya LCDOUT $fe,$80,BIN4 (DCD SAYI)
GOTO BASLA


Ete
Bilgi hazinedir paylaştıkça büyür.            http://etepic.com

burak1000

Alıntı yapılan: ete - 11 Mayıs 2011, 09:45:10

BASLA:
SAYI=PORTA

PORTB=DCD SAYI
veya LCDOUT $fe,$80,BIN4 (DCD SAYI)
GOTO BASLA


Ete

çok iyi ya :D süpersin  hocam dcd kullanmak hiç aklıma gelmemişti çok daha basit birşey daha öğredik

erdemefe

arkadaslar cok tesekkur ederim su anda okuldayim eve gidince ilk is dediklerinizi deneyecegim tekrar sagolun.

erdemefe

DCD kod parçasını denedim aynen istenilen gibi oluyor fakat bana 12 tane çıkış lazım yani 1 port yetersiz geliyor 2. porta nasıl geçebilirim, bir diğer soruda çıkışlar şu anda momantary benim bir koşula göre momantary veya latch olarak seçmem gerekiyor

erdemefe

arkadaşlar yokmu bunun bir çözümü?

erdemefe

arkadaslar proje yarim bekliyo yokmu bunun bi cozumu

ferit06

iki port kullanacak isen,

birinci port PORTB, ikincisi PORTC  olsun;



if sayi<8 then
PORTC=0
PORTB= DCD sayi
else
sayi=sayi-7
PORTB=0
PORTC=dcd sayi
endif

bu şekilde bulabilirsiniz ancak sonuç için portb ve portc ler arasında 1 saat vuruşu kadar süre oluşur. Uygulamanızda bunu maskelemeye ihtiyaç duyacakmısınız?

erdemefe

geçen sürenin hiçbir önemi yok fakat ben 1. portun hepsini ikinci portun son 4 bitini kullanmak istiyorum bu mümkün olmazmı 2. olarak çıkışlar dcd komutunu kullanınca momantary oluyor latch yapmam için nasıl bir yol izlemeliyim?

ferit06

ikinci portun son dört bitini kullanma sorunu bir toplama işlemi ile çözülebilir ancak sizin momantary/latch dan kastınız nedir açık olarak yazarsanız ona göre çözüm üretilebilir.