Picproje Elektronik Sitesi

DERLEYİCİLER => PICBasic => Konuyu başlatan: kotan04 - 16 Mart 2011, 09:05:49

Başlık: pbp pin dizilimi
Gönderen: kotan04 - 16 Mart 2011, 09:05:49
mrb arkadaşlar pbp 16f628a kullanarak çeşitli led efektleri yapıyorum fakat bendeki pin dizilimi farklı olduğu için kodları kısaltmanın yolunu bulamadım bendeki pin dizilimi

ra1 ra0 ra7 ra6 rb7 rb6 rb5 rb4 rb3 rb2 rb1 rb0 ra4 ra3 ra2

portb=%00000001 : porta=%00000001 gosub bekle

şeklinde yaptığımda inanılmaz uzun oluyor ben bunu arıtmatik işlemler veya for next ile yapmak istiyorum bu seferde pin dizilimim farklı yukarda yazdığım gibi nasıl bir yol izlemem lazım arkadaşlar bin dizilimini düzeltemem bilginize iyi çalışmalar
Başlık: Ynt: pbp pin dizilimi
Gönderen: My75 - 16 Mart 2011, 09:29:57
LEDA   VAR PORTA
LEDB   VAR PORTB


porta.4  (min.470ohm - max.1k pullup yapmalısın)

LEDA=0
LEDB=0

BASLA:

'Sendeki dizilime göre desimal değer vererek en basit olarak,

leda=2    ' porta=%00000010
leda=1    ' porta=%00000001
leda=64  ' porta=%01000000
leda=32  ' porta=%00100000
ledb=64  ' portb=%01000000
ledb=32  ' portb=%00100000

Bu mantıkda istediğin gibi oluştur.  128-64-32-16-8-4-2-1
Başlık: Ynt: pbp pin dizilimi
Gönderen: kotan04 - 16 Mart 2011, 09:54:46
peki hocam mesela sağa sola kaydırmalı yapmak istersem nasıl bir yol izleyerek yapabilirim ? mesela

i var byte
j var byte
trisb=0
basla:
j=1
for i=0 to 7
  portb=j
  j=j*2
  pause 150
next i
goto basla


forum sayfalarında arkadaşın biri port b içinde böyle bir  yöntem ile yapmış ben bunu port a ve port b de bendeki pin dizilimine göre yapmak istersem nasıl yapmam gerekir ?
Başlık: Ynt: pbp pin dizilimi
Gönderen: Nedenler - 16 Mart 2011, 10:22:25
Sağa sola kaydırmayı kaydırma operatörüyle yapacaksın.

<< yada >> Örneğin PortB=%00000001 olsun.

Sen PortB=PortB<<1 yaparsan o 1 olan biti sola doğru birer tane kaydırırsın. Kayma sırasında 1 bitinin bulunduğu eski konuma bir arkasaında ki bit yerleştirilir. Bu işlemin sonunda PortB 00000010 olur. Birdaha kayma uyguladığında 00000100 olur. Böylece ledleri kaydırarak sırayla yakmış olursun.

Düzenliyorum ilk mesajını okumamıştım. Word tipinde bir değişken tanımla örneğin Ledler olsun. Ledler değişkenini anlattığım şekilde for ile döngüye sokarak kaydır. Daha sonra şunu yap;

ra1 ra0 ra7 ra6 rb7 rb6 rb5 rb4 rb3 rb2 rb1 rb0 ra4 ra3 ra2

PortA,2=Ledler,0
PortA,1=Ledler,14
PortA,0=Ledler,13
PortB,1=Ledler,4

Basicde bunları yapabiliyormuydun tan hatırlamıyorum ama yanlışlık varsa kusura bakma
Başlık: Ynt: pbp pin dizilimi
Gönderen: kotan04 - 16 Mart 2011, 10:29:28
merhaba kaydırma oparatörüyle yapacağım ama
bendeki pin dizilimi bu şekilde ra1 ra0 ra7 ra6 rb7 rb6 rb5 rb4 rb3 rb2 rb1 rb0 ra4 ra3 ra2  buna nasıl uyarlayabilirim?
Başlık: Ynt: pbp pin dizilimi
Gönderen: My75 - 16 Mart 2011, 10:30:31
Ordaki formül yine bcd karşılığını alacak şekilde yapılmış,her döngüde 2 ile çarparak değerleri artırmış.

x    var   byte
led var   byte

basla:

for  x=0 to 3   'porta.1,0,7,6  için

lookup x,[2,1,64,32],led
porta=led
pause 200
next
porta=0

for  x=0 to 7   'portb.7,6,5,4,3,2,1,0 için

lookup x,[128,64,32,16,8,4,2,1],led
portb=led
pause 200
next
portb=0

for  x=0 to 2   'porta.4,3,2 için

lookup x,[16,8,4],led
porta=led
pause 200
next
porta=0

goto basla

Senin pin dizilimine göre kayan led ama çok uğraşırsın..Orjinal sıralamayı kullansan arkadaşın gösterdiği şekilde kolay olurdu..






Başlık: Ynt: pbp pin dizilimi
Gönderen: kotan04 - 16 Mart 2011, 11:54:07
Alıntı yapılan: My75 - 16 Mart 2011, 10:30:31
Ordaki formül yine bcd karşılığını alacak şekilde yapılmış,her döngüde 2 ile çarparak değerleri artırmış.

x    var   byte
led var   byte

basla:

for  x=0 to 3   'porta.1,0,7,6  için

lookup x,[2,1,64,32],led
porta=led
pause 200
next
porta=0

for  x=0 to 7   'portb.7,6,5,4,3,2,1,0 için

lookup x,[128,64,32,16,8,4,2,1],led
portb=led
pause 200
next
portb=0

for  x=0 to 2   'porta.4,3,2 için

lookup x,[16,8,4],led
porta=led
pause 200
next
porta=0

goto basla

Senin pin dizilimine göre kayan led ama çok uğraşırsın..Orjinal sıralamayı kullansan arkadaşın gösterdiği şekilde kolay olurdu..
programı derledim fakat ra 7 high olmadı diğerlerinde normal çalışıyor demiştim hocam gözden kaçan kısmı düzelttim

fakat şimdi hatanın ne olduğunu buldum
lookup x,[2,1,128,64],led
porta=led
pause 200
next
porta=0

Başlık: Ynt: pbp pin dizilimi
Gönderen: My75 - 16 Mart 2011, 11:58:55
:) Doğrudur,o kadar iş içinde gözden kaçmış..sanırım mantığı anladın,gerisini halledersin artık..kolay gelsin..
Başlık: Ynt: pbp pin dizilimi
Gönderen: kotan04 - 16 Mart 2011, 12:03:07
simüle ettim tamamdır düzelttim hocam

lookup x,[2,1,128,64],led bu kısımı düzelttim
porta=led
pause 500
next
porta=0


sayın hocam birde ben şu şekilde bir düzenlemede yapmak istiyorum verdiğiniz referans kodla mümkün olabilirmi?

ra1 ra0 ra7 ra6 rb7 rb6 rb5 rb4 rb3 rb2 rb1 rb0 ra4 ra3 ra2

arttırarak kayma olursa
örneğin

1
11
111
1111
11111
111111
1111111
ayrıca yardımlarınızdan dolayı çok teşekür ederim..

Başlık: Ynt: pbp pin dizilimi
Gönderen: My75 - 16 Mart 2011, 12:09:48
Tabiki olur,indeks içindeki rakamları yapmak istediğin şekilde düzenle mesela verdiğin örnek için

lookup x,[1,3,7,15,31,63,127,255],led   'orjinal port için geçerli,kendi pin yapına göre aşağıdaki gibi toplayıp düzenleyeceksin.

Bak mesela sadece a7 ve a0 yakmak istiyoruzsak desimal karşılıklarını toplayacaksın,128+1=129 yazdınmı sadece porta' nın 7 ve 0 pinleri high olur.Fakat portlar arası geçişleri yine yukarıdaki gibi yapmalısın...Yani A 'dan B'ye geçerken A'yı sıfırlaman,tekrar A'ya geçerkende B'yi sıfırlaman şart.

Tüm çıkış portları için geçerli

porta.0   'high desimal değeri 1
porta.1   'high desimal değeri 2
porta.2   'high desimal değeri 4
porta.3   'high desimal değeri 8
porta.4   'high desimal değeri 16
porta.5   'high desimal değeri 32    'Çıkış olarak kullanılmaz porta için geçerli durum.
porta.6   'high desimal değeri 64
porta.7   'high desimal değeri 128

Bunlara karşılık gelen hangi portu high yapmak istersen o değerleri toplayacaksın..
Başlık: Ynt: pbp pin dizilimi
Gönderen: kotan04 - 16 Mart 2011, 12:13:41
evt hocam dediğiniz gibi deniyorum şimdi oluyor
Başlık: Ynt: pbp pin dizilimi
Gönderen: ete - 16 Mart 2011, 12:41:04
Geri plandan bakıyordum. Yardım gelince ses etmedim. Bir iki şey ekleyeyim.
İşin mantığını çözmüş görünüyorsun ama bilgin pekişsin diye yeniden açıklayayım.
8 bitlik bir port pinlerinin her birinin high olması durumunda aldığı desimal değer vardır.  Bu değerler sağdan sola doğru 1 sonar 2 sonra 4 sonra 8 sonra 16 sonra 32 sonra 64 ve sonunda 128 olarak devam eder.  Aynı anda birden fazla pinin high olması durumunda her bir pine karşlık gelen desimal değerler toplanır.  Örneğin %00000011 şeklindeki bir ifadede PortX.1 ve PORTX.0 pinleri high dır. Bunların değerleri 1 ve 2 olduğundan porta verilecek toplam değer 1+2 =3 şeklinde hesaplanır.

Bu açıklamadan sonra artırarak kaydırma soruna cevap bulalım;

Önce pin sıralamanı yeniden yazalım;
ra1 ra0 ra7 ra6 rb7 rb6 rb5 rb4 rb3 rb2 rb1 rb0 ra4 ra3 ra2
Şimdi ilk değer =1 olacak . Bunu Ra2=1 şeklinde de yapabilirsin yada RA.1=1 şeklinde de yapabilirsin.
Sıralama rakamlarını sola yaslı hazırladığına göre ikinci geçerli sanırım.
1   değeri için RA.1=1 olması gerek.  ..............................Yani Porta=2
11 değeri için  RA.1=1 ve RA.0=1 olması gerek ..............Yani PORTA=3
111 değeri için  portA=%10000011  ..............................yani PortA=131  (128+2+1)
1111 değeri için  PortA=%11000011 .............................yani PortA=195   (128+64+2+1)
11111 değeri için  PortA=%11000011 ve PortB=%10000000,  .........yani PortA=195 ve PortB=128 (128)
111111 değeri için PortA=%11000011 ve PortB=%11000000...........yani PorTA=195 ve PortB=192  (128+64)
1111111 değeri için PortA=%11000011 ve PortB=%11100000.........yani PortA=195 ve PortB=224 (128+64+32)
11111111 değeri için PortA=%11000011 ve PortB=%11110000.......yani PortA=195 ve PortB=240 (128+64+32+16)
şeklinde devam edip gider. Dikkat edersen   her iki port için high olan bitlerin rakam karşılıkları toplanarak porta verilecek toplam değer elde edilmiş olmaktadır.
Bu kaydırmayı yapabilmek için yine bir lookup tablosu kullanabilirsin. Yada A portu için bir tablo ve B portu için ayrı bir tablo kullanman gerekir.
Dikkat edersen B portu  dördüncü bitden itibaren devreye girmektedir. O halde
For X=0 to 6
  GOSUB LOOKUP_A
  PORTA=LEDA
  IF X>3 then
     GOSUB LOOKUP_B
     BORTB=LEDB
  ENDIF
  PAUSE 200
NEXT
goto basla

BAK_A:
LOOKUP X,[2,3,131,195,195,195,195,195],LEDA:RETURN

BAK_B:
LOOKUP X,[128,192,224,240],LEDB : RETURN

şeklinde çözüm bulunur.

Ete


Başlık: Ynt: pbp pin dizilimi
Gönderen: kotan04 - 16 Mart 2011, 16:26:08
çok güzel oluyor :) saolun hocam 
.... gibi kaydırmayı arıtmatik oparatörle bendeki pin dizilimine göre yapabilmem mümkünmü arkadaşlar?

011111111111111
101111111111111
110111111111111
111011111111111
111101111111111
111110111111111
111111011111111
111111101111111
111111110111111
111111111011111
111111111101111
111111111110111
111111111111011
111111111111101
111111111111110
111111111111101
111111111111011
111111111110111
111111111101111
111111111011111
111111110111111
111111101111111
111111011111111
111110111111111
111101111111111
111011111111111





Başlık: Ynt: pbp pin dizilimi
Gönderen: My75 - 16 Mart 2011, 17:20:23
Sana mantığını güzelce anlattık,Ete hocamda onaylamış artık istediğin animasyonu kendin oluştur yukarda her şey açık ve net.Takıldığın yer olursa yine yardımcı oluruz..Senin bu sevincini görünce 20 sene önce ilk yaptığım flip-flop devresinde ne büyük bir haz almıştım o aklıma geldi..O zamanlar Pic yok,toner baskı yok,internet yok..Valla ne günlerdi,neler çektik..Neyse
Başlık: Ynt: pbp pin dizilimi
Gönderen: kotan04 - 16 Mart 2011, 17:39:38
evet hocam çok saolun mantığını anlattığınız gibi yapıyorum çok iyi ilerliyor merak ettiğim kodu kısaltmanın yolu olarak arıtmetik oparatörlerle yapabilirmiyim mesela kaydırmada bu işaret > kullanılan bir komut vardı onu sormak istedimde en azından port b de bu şekilde yaparım die düşündüm  :)
Başlık: Ynt: pbp pin dizilimi
Gönderen: My75 - 16 Mart 2011, 17:57:07
Bu karışık pin olayı bir port içinde olsaydı bir kaç formül ile yönlendirme yapabilirdin,2 port ilede olur ama uğraşmak lazım,enazından fazla animasyon yapmayacaksan uğraşılabilir.
Başlık: Ynt: pbp pin dizilimi
Gönderen: omereliusuk - 16 Mart 2011, 22:55:39
mesela bir byte veya word oluştur. bu 'msn' olsun. '

dim msn as byte
Dim  MSN0  As  MSN.0    '
Dim  MSN1  As  MSN.1    '
Dim  MSN2  As  MSN.2    '
Dim  MSN3  As  MSN.3    '
Dim  MSN4  As  MSN.4    '
Dim  MSN5  As  MSN.5    '
Dim  MSN6  As  MSN.6    '
Dim  MSN7  As  MSN.7    '

'*****************************************

buraya byte veya word üzerinden istediğin işlemi yap...
mesela;
msn=0
gosub gonder
msn=1
gosub gonder
veya;
msn=0
for i=0 to 255
msn=msn+1
gosub gonder
next
'*****************************************
gonder:
PORTB.7=MSN0      '
PORTD.4=MSN1
PORTC.7=MSN2 
PORTD.5=MSN3
porta.5=MSN4
portc.2=MSN5
PORTB.5=MSN6
PORTB.6=MSN7
return

bilmiyorum belki işini görür....
Başlık: Ynt: pbp pin dizilimi
Gönderen: kotan04 - 17 Mart 2011, 12:52:06
merhaba arkadaşlar şimdilik çalışmam güzel ilerliyor ir sorum daha olacak
ra1 ra0 ra7 ra6 rb7 rb6 rb5 rb4 rb3 rb2 rb1 rb0 ra4 ra3 ra2

bu dizilime göre  ra1 bitinde gelen 1 sayısı sağa doğru kayacak ve son bitte sola doğru toplanacak bunu yapmanın bir yolu varmı acaba? port isimlerini yazdığım zaman çok uzun oluyor? şimdi alttakini düzenledim fakat en sonda toplanmaya başlayadcak soladoğru  soldan bir gececek en sağda 1 duracak geln diğer 1 bunun yanında bu şekilde sola doğru gidecek :s nasıl olabilir bu örnek koda son bite geleni 1 arttır dememiz mümkünmü kafam allak bullak oldu help

for  kutu=0 to 3  'porta.1,0,7,6  için                'sola tek kayar
lookup kutu,[2,1,128,64],led
porta=led
pause 500
next
porta=0
for  kutu=0 to 7   'portb.7,6,5,4,3,2,1,0 için
lookup kutu,[128,64,32,16,8,4,2,1],led
portb=led
pause 500
next
portb=0
for  kutu=0 to 2   'porta.4,3,2 için
lookup kutu,[16,8,4],led
porta=led
pause 500
next
Başlık: Ynt: pbp pin dizilimi
Gönderen: kotan04 - 17 Mart 2011, 16:03:48
arkadaşlar yardımcı olabilirmisiniz?
Başlık: Ynt: pbp pin dizilimi
Gönderen: My75 - 17 Mart 2011, 16:13:52
Program sonuna ekle..

For KUTU=0 To 2
LookUp KUTU,[4,12,28],LED
PORTA=LED
PAUSE 500
Next

For KUTU=0 To 7
LookUp KUTU,[1,3,7,15,31,63,127,255],LED
PORTB=LED
PAUSE 500
Next

For KUTU=0 To 3
LookUp KUTU,[92,220,221,223],LED
PORTA=LED
PAUSE 500
Next
Başlık: Ynt: pbp pin dizilimi
Gönderen: kotan04 - 17 Mart 2011, 16:31:00
Alıntı yapılan: My75 - 17 Mart 2011, 16:13:52
Program sonuna ekle..

For KUTU=0 To 2
LookUp KUTU,[4,12,28],LED
PORTA=LED
PAUSE 500
Next

For KUTU=0 To 7
LookUp KUTU,[1,3,7,15,31,63,127,255],LED
PORTB=LED
PAUSE 500
Next

For KUTU=0 To 3
LookUp KUTU,[92,220,221,223],LED
PORTA=LED
PAUSE 500
Next

Sayın hocam benim bahsettiğim ra1 den led sırayla yanmaya başlayacak en sonda durarak toplanacak örneğin




100000000000000

010000000000000

001000000000000

000010000000000

000000000000001 en sonu 

100000000000000

010000000000000

001000000000000

000010000000000

000000000000011 en sonu 

010000000000000

001000000000000

000010000000000

000000000000111 en sonu   bu şekilde ra1e kadar toplanacak
soldan gelecek sağdaki bitte toplayacak :(

(http://i1103.hizliresim.com/2011/3/18/1193.gif) ben hepsini çizmedim ama hepsi bu şekilde sonda toplanmaya başlayacak  :(
Başlık: Ynt: pbp pin dizilimi
Gönderen: kotan04 - 17 Mart 2011, 21:49:34
Merhaba arkadaşlar bir fikri olan varmı burada tıkandım yardımlarınızı bekliyorum :s
Başlık: Ynt: pbp pin dizilimi
Gönderen: kotan04 - 18 Mart 2011, 10:54:06
Sayın hocam benim bahsettiğim ra1 den led sırayla yanmaya başlayacak en sonda durarak toplanacak örneğin




100000000000000

010000000000000

001000000000000

000010000000000

000000000000001 en sonu 

100000000000000

010000000000000

001000000000000

000010000000000

000000000000011 en sonu 

010000000000000

001000000000000

000010000000000

000000000000111 en sonu   bu şekilde ra1e kadar toplanacak
soldan gelecek sağdaki bitte toplayacak :(

(http://i1103.hizliresim.com/2011/3/18/1193.gif) ben hepsini çizmedim ama hepsi bu şekilde sonda toplanmaya başlayacak  :(
Başlık: Ynt: pbp pin dizilimi
Gönderen: My75 - 18 Mart 2011, 16:34:12
Benim pc'de pbp derlemiyor o yüzden protonda yazdım..


Device 16F628A
TRISA = %00100000
TRISB = %00000000
ALL_DIGITAL TRUE
PORTB_PULLUPS On
Config INTRC_OSC_NOCLKOUT, WDT_OFF, PWRTE_ON, BODEN_OFF, LVP_OFF, MCLRE_OFF,CP_ON

Dim KUTU        As Byte
Dim LED         As Byte
Dim SAYAC       As Byte
Dim A0          As Byte
Dim A1          As Byte
Dim A2          As Byte
Dim A3          As Byte
Dim A4          As Byte
Dim A6          As Byte
Dim A7          As Byte
Dim B0          As Byte
Dim B1          As Byte
Dim B2          As Byte
Dim B3          As Byte
Dim B4          As Byte
Dim B5          As Byte
Dim B6          As Byte
Dim B7          As Byte
Dim A           As Byte
Dim B           As Byte
Dim C           As Byte

RESETLED:
A=4:B=8:C=3
A1=2:A0=1:A7=128:A6=64:B7=128:B6=64:B5=32:B4=16:B3=8:B2=4:B1=2:B0=1:A4=16:A3=8:A2=4
PORTA=0
PORTB=0

BASLA:
For SAYAC=1 To 15
                                   
If SAYAC=2  Then C=2:  A1=6 :A0=5 :A7=132:A6=68:A4=20:A3=12     :EndIf
If SAYAC=3  Then C=1:  A1=14:A0=13:A7=140:A6=76:A4=28           :EndIf 
If SAYAC=4  Then C=0:  A1=30:A0=29:A7=156:A6=92:                :EndIf

If SAYAC=5  Then B=7:  B7=129:B6=65:B5=33:B4=17:B3=9 :B2=5:B1=3 :EndIf
If SAYAC=6  Then B=6:  B7=131:B6=67:B5=35:B4=19:B3=11:B2=7      :EndIf
If SAYAC=7  Then B=5:  B7=135:B6=71:B5=39:B4=23:B3=15           :EndIf
If SAYAC=8  Then B=4:  B7=143:B6=79:B5=47:B4=31                 :EndIf
If SAYAC=9  Then B=3:  B7=159:B6=95:B5=63                       :EndIf
If SAYAC=10 Then B=2:  B7=191:B6=127                            :EndIf
If SAYAC=11 Then B=1:  B7=255                                   :EndIf

If SAYAC=12 Then B=0:  A1=30:A0=29:A7=156:A6=92                 :EndIf
If SAYAC=13 Then A=3:  A1=94:A0=93:A7=220                       :EndIf
If SAYAC=14 Then A=2:  A1=222:A0=221                            :EndIf
If SAYAC=15 Then A=1:  A1=255                                   :EndIf

   

For KUTU=1 To A
LookUpL KUTU,[0,A1,A0,A7,A6],LED
PORTA=LED
DelayMS 500
Next

If B<>0 Then
For KUTU=1 To B
PORTA.6=0
LookUpL KUTU,[0,B7,B6,B5,B4,B3,B2,B1,B0],LED
PORTB=LED
DelayMS 500
Next
EndIf

If C<>0 Then
PORTB=0
For KUTU=1 To C
LookUpL KUTU,[0,A4,A3,A2],LED
PORTA=LED
DelayMS 500
Next
EndIf

If SAYAC=15 Then PORTA=0:PORTB=0:DelayMS 500:GoTo RESETLED:EndIf
Next SAYAC

GoTo BASLA

End

Başlık: Ynt: pbp pin dizilimi
Gönderen: kotan04 - 18 Mart 2011, 17:09:05
hemen inceliyorum hocam çok teşekürler..
Başlık: Ynt: pbp pin dizilimi
Gönderen: kotan04 - 18 Mart 2011, 21:23:16
merhaba arkadaşlar protonda hazırlanmış kodları elimden geldiğince basic pro kodlarına çevirdim ama basic proda derleyemedim

acaba hata nerede bir bakabilirmisiniz?
@ DEVICE pic16F628A                      'işlemci 16F628                               
@ DEVICE pic16F628A, WDT_on              '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
trisb=%00000000
TrisA=%00100000
portb=0
porta=0
CMCON=7

KUTU        var Byte
LED         var Byte
SAYAC       var Byte
A0          var Byte
A1          var Byte
A2          var Byte
A3          var Byte
A4         var Byte
A6          var Byte
A7          var Byte
B0         var Byte
B1         var Byte
B2          var Byte
B3          var Byte
B4          var Byte
B5          var Byte
B6          var Byte
B7          var Byte
A           var Byte
B          var Byte
C           var Byte

RESETLED:
A=4:B=8:C=3
A1=2:A0=1:A7=128:A6=64:B7=128:B6=64:B5=32:B4=16:B3=8:B2=4:B1=2:B0=1:A4=16:A3=8:A2=4
PORTA=0
PORTB=0

BASLA:
For SAYAC=1 To 15
                                   
If SAYAC=2  Then C=2 
A1=6 :A0=5 :A7=132:A6=68:A4=20:A3=12     :EndIf
If SAYAC=3  Then C=1
  A1=14:A0=13:A7=140:A6=76:A4=28           :EndIf
If SAYAC=4  Then C=0
  A1=30:A0=29:A7=156:A6=92:                :EndIf

If SAYAC=5  Then B=7
  B7=129:B6=65:B5=33:B4=17:B3=9 :B2=5:B1=3 :EndIf
If SAYAC=6  Then B=6
  B7=131:B6=67:B5=35:B4=19:B3=11:B2=7      :EndIf
If SAYAC=7  Then B=5
  B7=135:B6=71:B5=39:B4=23:B3=15           :EndIf
If SAYAC=8  Then B=4
  B7=143:B6=79:B5=47:B4=31                 :EndIf
If SAYAC=9  Then B=3
  B7=159:B6=95:B5=63                       :EndIf
If SAYAC=10 Then B=2
  B7=191:B6=127                            :EndIf
If SAYAC=11 Then B=1
  B7=255                                   :EndIf

If SAYAC=12 Then B=0
  A1=30:A0=29:A7=156:A6=92                 :EndIf
If SAYAC=13 Then A=3
  A1=94:A0=93:A7=220                       :EndIf
If SAYAC=14 Then A=2
  A1=222:A0=221                            :EndIf
If SAYAC=15 Then A=1
  A1=255                                   :EndIf

next   

For KUTU=1 To A
LookUp2 KUTU,[0,A1,A0,A7,A6],LED
PORTA=LED
pause 500
Next

If B<>0 Then
For KUTU=1 To B
PORTA.6=0
LookUp2 KUTU,[0,B7,B6,B5,B4,B3,B2,B1,B0],LED
PORTB=LED
pause 500
Next
EndIf



If C<>0 Then
PORTB=0
For KUTU=1 To C
LookUp2 KUTU,[0,A4,A3,A2],LED
PORTA=LED
pause 500
Next
EndIf

If SAYAC=15 Then PORTA=0:PORTB=0
pause 500
GoTo RESETLED
EndIf
Next SAYAC

GoTo BASLA

End
Başlık: Ynt: pbp pin dizilimi
Gönderen: My75 - 19 Mart 2011, 12:59:01
Çok hata vardı,pbp için yeniden düzenledim..

@ DEVICE pic16F628A                                             
@ DEVICE pic16F628A, WDT_OFF           
@ DEVICE pic16F628A, PWRT_ON             
@ DEVICE pic16F628A, PROTECT_OFF       
@ DEVICE pic16F628A, MCLR_OFF           
@ DEVICE pic16F628A, INTRC_OSC_NOCLKOUT
TRISA=%00100000
TRISB=%00000000
CMCON=7

KUTU        var Byte
LED         var Byte
SAYAC       var Byte
A0          var Byte
A1          var Byte
A2          var Byte
A3          var Byte
A4          var Byte
A6          var Byte
A7          var Byte
B0          var Byte
B1          var Byte
B2          var Byte
B3          var Byte
B4          var Byte
B5          var Byte
B6          var Byte
B7          var Byte
A           var Byte
B           var Byte
C           var Byte
'******************************************************************************
RESETLED:
A=4:B=8:C=3:A1=2:A0=1:A7=128:A6=64:B7=128:B6=64
B5=32:B4=16:B3=8:B2=4:B1=2:B0=1:A4=16:A3=8:A2=4
PORTA=0
PORTB=0
'*******************************************************************************
BASLA:
For SAYAC=1 To 15

SELECT CASE SAYAC
CASE 2
C=2:A1=6:A0=5 :A7=132:A6=68:A4=20:A3=12
CASE 3
C=1:A1=14:A0=13:A7=140:A6=76:A4=28
CASE 4
C=0:A1=30:A0=29:A7=156:A6=92
CASE 5
B=7:B7=129:B6=65:B5=33:B4=17:B3=9:B2=5:B1=3
CASE 6
B=6:B7=131:B6=67:B5=35:B4=19:B3=11:B2=7
CASE 7
B=5:B7=135:B6=71:B5=39:B4=23:B3=15
CASE 8
B=4:B7=143:B6=79:B5=47:B4=31
CASE 9
B=3:B7=159:B6=95:B5=63
CASE 10
B=2:B7=191:B6=127
CASE 11
B=1:B7=255
CASE 12
B=0:A1=30:A0=29:A7=156:A6=92
CASE 13
A=3:A1=94:A0=93:A7=220
CASE 14
A=2:A1=222:A0=221
CASE 15
A=1:A1=255
END SELECT
'*******************************************************************************
FOR KUTU=1 TO A
LookUp2 KUTU,[0,A1,A0,A7,A6],LED
PORTA=LED
PAUSE 50
NEXT
'******************************************************************************
IF B<>0 THEN
FOR KUTU=1 TO B
PORTA.6=0
LookUp2 KUTU,[0,B7,B6,B5,B4,B3,B2,B1,B0],LED
PORTB=LED
PAUSE 50
NEXT
ENDIF
'******************************************************************************
If C<>0 Then
PORTB=0
For KUTU=1 To C
LookUp2 KUTU,[0,A4,A3,A2],LED
PORTA=LED
pause 50
Next
EndIf
'******************************************************************************
If SAYAC=15 Then
PORTA=0:PORTB=0
pause 50
GoTo RESETLED
EndIf
'******************************************************************************

Next SAYAC
End
Başlık: Ynt: pbp pin dizilimi
Gönderen: kotan04 - 19 Mart 2011, 13:17:33
çok saolun hocam hemen incelemeye koyuldum allah razı olsun..
Başlık: Ynt: pbp pin dizilimi
Gönderen: omereliusuk - 19 Mart 2011, 18:30:50
eğer bunun için bunca kod yazarsanız geriye bir şey kalmıyor ki... sadece bu yaptığınız işlem entegreyi doldurur geriye bir şey kalmaz.
Başlık: Ynt: pbp pin dizilimi
Gönderen: kotan04 - 19 Mart 2011, 20:39:36
:S evet farkına vardım şimdi çözüm yolu arıyorum ama bulamadım kafayı sıyıracam:(
Başlık: Ynt: pbp pin dizilimi
Gönderen: My75 - 19 Mart 2011, 21:37:54
Sıyırmana gerek yok,16F648A kullan 2 katı kod alanın olur.

PIC16F627A 1024  'word
PIC16F628A 2048
PIC16F648A 4096

Yazdığım program 556 word..Basit bir animasyon gibi görünüyor ama öyle değil,karışık pin ile hiç değil.
Başlık: Ynt: pbp pin dizilimi
Gönderen: kotan04 - 19 Mart 2011, 21:54:46
evet hocam bende ilk gördüğümde hemen yaparım dedim ama patlıcan gibi oldum şimdi:) benim bunu 628a da çözmem lazım :S
Başlık: Ynt: pbp pin dizilimi
Gönderen: omereliusuk - 19 Mart 2011, 22:26:18
Alıntı yapılan: kotan04 - 19 Mart 2011, 21:54:46
evet hocam bende ilk gördüğümde hemen yaparım dedim ama patlıcan gibi oldum şimdi:) benim bunu 628a da çözmem lazım :S
hocam bitlerle bir uğraş bak formülleştirebilirsin...
ben de önce kolay gibi gördüm baktım olmuyor bunun böyle olmaması gerekir daha kolay bir yolu olmalı dedim. sağa toplayanı da sola toplayanı da toplam 362 word tuttu<senin anlattığın şekilde ve anlattığının tam tersi şekil dahil olmak üzere>. ama önce eline kağıt kalem al  <mümkünse kareli olsun> yoksa bu iş olmaz... en azından benim için olmadı.
Başlık: Ynt: pbp pin dizilimi
Gönderen: My75 - 19 Mart 2011, 22:27:40
Anladığım kadarı ile pcb ve malzemeleri hazırlamışsın ki hata yapmışsın,bir projeye başlamadan önce ilk yapacağın iş doğru işlemciyi seçmektir.Kullanacağın pic'in flash belleği ve eeprom özelliklerine çok dikkat etmek gerekir.Ben bir ara 60 adet 16F73 aldım elimde çakılı kaldı sadece eeprom' u olmadığı için,nasılda gözümden kaçmış. :D

Üstelik karışık pin ile çizim yapmışsın ki işi zorlaştırmıssın.Bu tip işlerde port sıralamasını kullanmak işi kolaylaştırır.Birde bu işler için port çoklamada düşünebilirdin mesela senin bu proje bir adet 12F629 ve 2 adet 74HC595 ilede çok rahat yapılabilirdi.

Alandan kazanmak için pause için gosub return yapabilirsin sanırım her defasında pause kullanmıyorsun..Eğer çok adet almadıysan 16F648 kullan ama sanırım sana oda yetmeyecek..
Başlık: Ynt: pbp pin dizilimi
Gönderen: kotan04 - 19 Mart 2011, 22:28:46
butondan gönderilen bilgiye göre  animasyonları düşürecektim fakat bellek yetmedi ne güzel buton kontrolu ve animasyonların hepsi tamamdı şimdide bellek çıktı karşıma  vallaha çok kötü moralim sıfırlandı..
Başlık: Ynt: pbp pin dizilimi
Gönderen: My75 - 19 Mart 2011, 22:31:32
Kodları bir gönder bakalım yapabileceğimiz bir şey varmı.
Başlık: Ynt: pbp pin dizilimi
Gönderen: kotan04 - 19 Mart 2011, 22:41:45
Alıntı yapılan: omereliusuk - 19 Mart 2011, 22:26:18
Alıntı yapılan: kotan04 - 19 Mart 2011, 21:54:46
evet hocam bende ilk gördüğümde hemen yaparım dedim ama patlıcan gibi oldum şimdi:) benim bunu 628a da çözmem lazım :S
hocam bitlerle bir uğraş bak formülleştirebilirsin...
ben de önce kolay gibi gördüm baktım olmuyor bunun böyle olmaması gerekir daha kolay bir yolu olmalı dedim. sağa toplayanı da sola toplayanı da toplam 362 word tuttu<senin anlattığın şekilde ve anlattığının tam tersi şekil dahil olmak üzere>. ama önce eline kağıt kalem al  <mümkünse kareli olsun> yoksa bu iş olmaz... en azından benim için olmadı.

aslında şimdi formülleşmiş gibi ama işte sadece bu kodlar yok 6-7 farklı animasyon var butondan gelen bilgiye görede aynı animasyonların kanal sayısı düşecek dolayısı ile kod cümbüşü yaşanıyor
Başlık: Ynt: pbp pin dizilimi
Gönderen: omereliusuk - 19 Mart 2011, 22:58:12
tarif et onları da formülleştirelim tabi becerebilirsek. ;)
Başlık: Ynt: pbp pin dizilimi
Gönderen: My75 - 19 Mart 2011, 23:03:14
Bu 6-7 animasyon sürekli tekrarlıyormu? Kanal dediğin ledlermi? O zaman kanalları düşürüyorsan ledlerin geçişinede müdahale ediyorsun demektir.1 den 15 kadar değil de 6 ya kadar gibi.
Başlık: Ynt: pbp pin dizilimi
Gönderen: kotan04 - 19 Mart 2011, 23:12:06
Alıntı yapılan: My75 - 19 Mart 2011, 23:03:14
Bu 6-7 animasyon sürekli tekrarlıyormu? Kanal dediğin ledlermi? O zaman kanalları düşürüyorsan ledlerin geçişinede müdahale ediyorsun demektir.1 den 15 kadar değil de 6 ya kadar gibi.

kanal derken led demek istedim pardon
şimdi devreyi anlatım devreye 15 led bağlı içinde 6 farklı led efektleri var enerji verdiğimde 10 sn bekliyor ve efekler başlıyor sürekli dönüyor  diyelimki ben bu animasyonların 14 kanalda aynı şekilde çalışmasını istiyorum ozaman şöyle yapıyorum enerjiyi kesiyorum enerjiyi tekrar veriyorum ve butona 14 defa basıyorım ve tüm animasyonlar 14 led içinde oynamaya başlıyor ve bunu 11 kanala kadar bu şekilde müdahale ederek yapıyorum gerçi böyle yapmasını istiyorum ama ben 13.led için animasyonu yazim dedim ama kodlar okadar çok olduki bellek yetmedi buda bendeki pin diziliminin azizliği
Başlık: Ynt: pbp pin dizilimi
Gönderen: My75 - 19 Mart 2011, 23:21:07
Hala anlamış değilim,sen şimdi her animasyonu her defasında kanal sayısına göre tekrarmı yazıyorsun? Yoksa program içinden eksilen kanallara göre geçişlerimi düzenliyorsun?
Başlık: Ynt: pbp pin dizilimi
Gönderen: kotan04 - 19 Mart 2011, 23:26:55
Alıntı yapılan: My75 - 19 Mart 2011, 23:21:07
Hala anlamış değilim,sen şimdi her animasyonu her defasında kanal sayısına göre tekrarmı yazıyorsun? Yoksa program içinden eksilen kanallara göre geçişlerimi düzenliyorsun?

ben şimdi malesef her kanal sayısına göre tekrar yazıyorum ondan bellek yetmiyor aslında sellect case içine yerleştiriyorum animasyonları düşürerek ama bunun doğru olmadığının farkındayım ama farklı bir yol bulamadım :(
Başlık: Ynt: pbp pin dizilimi
Gönderen: omereliusuk - 19 Mart 2011, 23:33:07

gonder:
PORTB.7=MSN.0      '
PORTD.4=MSN.1
PORTC.7=MSN.2 
PORTD.5=MSN.3
porta.5=MSN.4
portc.2=MSN.5
PORTB.5=MSN.6
PORTB.6=MSN.7
return

hocam bir word oluştur. bunun adı msn olsun veya led olsun. sen 16 bitlik sayını led adını verdiğimiz word tipi değişkene aktar.
yani şöyle led=$3f33 mesela sonra gosub gonder
bitti. illa ki sırasıyla olacak diye bir şey yok. zaten gönderdiğin bilginin 'gonder' bölümündeki aktarımlarını kimsenin gözleri algılayamaz.
yukarıda msn.0 demek msn adlı word tipi bilginin 0. bitini portb.7 bacağına aktarır.
Başlık: Ynt: pbp pin dizilimi
Gönderen: kotan04 - 19 Mart 2011, 23:43:17
Alıntı yapılan: omereliusuk - 19 Mart 2011, 23:33:07

gonder:
PORTB.7=MSN.0      '
PORTD.4=MSN.1
PORTC.7=MSN.2 
PORTD.5=MSN.3
porta.5=MSN.4
portc.2=MSN.5
PORTB.5=MSN.6
PORTB.6=MSN.7
return

hocam bir word oluştur. bunun adı msn olsun veya led olsun. sen 16 bitlik sayını led adını verdiğimiz word tipi değişkene aktar.
yani şöyle led=$3f33 mesela sonra gosub gonder
bitti. illa ki sırasıyla olacak diye bir şey yok. zaten gönderdiğin bilginin 'gonder' bölümündeki aktarımlarını kimsenin gözleri algılayamaz.
yukarıda msn.0 demek msn adlı word tipi bilginin 0. bitini portb.7 bacağına aktarır.
hımm bir inceleyim hocam 
for  kutu=0 to 3  'porta.1,0,7,6  için                'sola artarak +
lookup kutu,[2,3,131,195],led
porta=led:pause 300
next
for  kutu=0 to 7   'portb.7,6,5,4,3,2,1,0 için
lookup kutu,[128,192,224,240,248,252,254,255],led
portb=led:pause 300
next
for  kutu=0 to 1   'porta.4,3,2 için
lookup kutu,[211,219],led
porta=led:pause 300
next


bu animasyonlardan biri pendeki pin dizilimine göre desimal sayı yolladım  bunu verdiğiniz word tipi değişkenle nasıl ilşkilendirebilirim?
Başlık: Ynt: pbp pin dizilimi
Gönderen: My75 - 20 Mart 2011, 00:08:06
Alıntı yapılan: omereliusuk - 19 Mart 2011, 23:33:07

gonder:
PORTB.7=MSN.0      '
PORTD.4=MSN.1
PORTC.7=MSN.2 
PORTD.5=MSN.3
porta.5=MSN.4
portc.2=MSN.5
PORTB.5=MSN.6
PORTB.6=MSN.7
return

hocam bir word oluştur. bunun adı msn olsun veya led olsun. sen 16 bitlik sayını led adını verdiğimiz word tipi değişkene aktar.
yani şöyle led=$3f33 mesela sonra gosub gonder
bitti. illa ki sırasıyla olacak diye bir şey yok. zaten gönderdiğin bilginin 'gonder' bölümündeki aktarımlarını kimsenin gözleri algılayamaz.
yukarıda msn.0 demek msn adlı word tipi bilginin 0. bitini portb.7 bacağına aktarır.



Bu şekildede olur..Bu durumu ile sadece yürüyen ışık,ama iş toplanarak çoğalmaya gelince yine arap saçı oluyor.


BASLA:
LED=LED<<1  'yada   led=led*2
DelayMS 100
If LED=32768 Then LED=1    'YADA PORTA.2=1 THEN LED=1
GoSub GONDER

GoTo BASLA


GONDER:
PORTA.1=LED.0
PORTA.0=LED.1
PORTA.7=LED.2
PORTA.6=LED.3
PORTB.7=LED.4
PORTB.6=LED.5
PORTB.5=LED.6
PORTB.4=LED.7
PORTB.3=LED.8
PORTB.2=LED.9
PORTB.1=LED.10
PORTB.0=LED.11
PORTA.4=LED.12
PORTA.3=LED.13
PORTA.2=LED.14
Return
Başlık: Ynt: pbp pin dizilimi
Gönderen: omereliusuk - 20 Mart 2011, 13:00:40
bir başka değişken yap. o değişkenle or kullan. o zaman oluyor. hem de formülleşiyor.
Başlık: Ynt: pbp pin dizilimi
Gönderen: omereliusuk - 20 Mart 2011, 13:26:54
bu da sana kıyağım olsun..saga_topla:
led=$0001 :GoSub gonder   : a=0 :y=0:x=0
For i=0 To 15
b=14-a
If b=0 Then
led=led<<1
led=led|y
GoSub gonder
DelayMS 10
led=$ffff
GoSub gonder
DelayMS 10
Return
EndIf
For w=0 To b
led=led<<1
led=led|y
GoSub gonder: DelayMS 10
Next
x=((x<<1)+1)<<(15-a)
y=y|x
a=a+1 :led=$0001|y
GoSub gonder
DelayMS 10
Next
Return
Başlık: Ynt: pbp pin dizilimi
Gönderen: kotan04 - 20 Mart 2011, 13:28:21
wow :) hemen bakacağım hocam çok saolun ilgilendiğiniz için
Başlık: Ynt: pbp pin dizilimi
Gönderen: omereliusuk - 20 Mart 2011, 14:21:52
dediğin gibi 16 bite göre ayarlandı. ama sen 14 bit kullanacağım diyorsun. o halde 14 bite göre ayarlarsın. bir de delayms 10 ları delayms 100 yap. hareketleri daha rahat görürsün. :)saga_topla:
led=$0001 :GoSub gonder   : a=0 :y=0:x=0
For i=0 To 12'15
b=12-a'14-a
If b=0 Then
led=led<<1
led=led|y
GoSub gonder
DelayMS 100
led=$ffff
GoSub gonder
DelayMS 100
Return
EndIf

For w=0 To b
led=led<<1
led=led|y
GoSub gonder: DelayMS 100
Next
x=((x<<1)+1)<<(14-a)
y=y|x
a=a+1 :led=$0001|y
GoSub gonder
DelayMS 100
Next
Return
Başlık: Ynt: pbp pin dizilimi
Gönderen: kotan04 - 20 Mart 2011, 14:29:10
hocam düzelttim kodlar aşşağıda  sağa toplanma görünmüyor yani toplanırken ledler yanmıyor sönük vaziyette toplanıyor :)


@ DEVICE pic16F628A, WDT_on              '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
trisb=%00000000:TrisA=%00100000
buton var PortA.5:portb=0:porta=0:CMCON=7
led var word
a var byte
b var byte
y var byte
x var byte
i var byte
w var byte
porta=0:portb=0
led=1
BASLA:





                 

     
     led=led*2
     PAUSE 100
     IF led<1 THEN led=1
     GoSub GONDER

saga_topla:
led=$0001 :GoSub gonder   : a=0 :y=0:x=0
For i=0 To 14
b=13-a
If b=0 Then
led=led<<1
led=led|y
GoSub gonder
pause 100
led=$ffff
GoSub gonder
pause 100
Return
EndIf
For w=0 To b
led=led<<1
led=led|y
GoSub gonder: pause 100
Next
x=((x<<1)+1)<<(14-a)
y=y|x

a=a+1 :led=$0001|y
GoSub gonder
pause 100
Next
Return

     



GONDER:
PORTA.1=LED.0
PORTA.0=LED.1
PORTA.7=LED.2
PORTA.6=LED.3
PORTB.7=LED.4
PORTB.6=LED.5
PORTB.5=LED.6
PORTB.4=LED.7
PORTB.3=LED.8
PORTB.2=LED.9
PORTB.1=LED.10
PORTB.0=LED.11
PORTA.4=LED.12
PORTA.3=LED.13
PORTA.2=LED.14
Return
Başlık: Ynt: pbp pin dizilimi
Gönderen: omereliusuk - 20 Mart 2011, 14:50:04
TRISA=0   
TRISB=0
PORTA=0
PORTB=0
sen giriş yaptığın pini daha sonra çıkış olarak kullanmışsın. bundan dolayı bazı yerlerde sorun var diyebilirim. denedim çok da güzel çalışıyor. ayrıca ra4 pinini bir dirençle +5 volta çek. yoksa ra4 pini çıkışını hep 0 da veya boşta görürsün.
ayrıca;
basla:
gosub saga_topla
goto basla
end
Başlık: Ynt: pbp pin dizilimi
Gönderen: omereliusuk - 20 Mart 2011, 17:27:33
@kotan04
adresimi profile ekledim