16f877 ile 30 led animasyon

Başlatan ufuk0106, 07 Nisan 2015, 10:18:07

ufuk0106

16f877 ile 30 led animasyon yapmak istiyorum.
port komutuyla tek tek yakıp söndürerek değişik animasyonlar için -3 çeşit- çok fazla satır harcanıyor.
başka komutlar ile daha kısa nasıl yapabiliriz.
(bütün bacakları tanımladık diyelim. L1 var PortE.0   L2 var PortB.0 gibi.)
BİR AĞAÇ GİBİ TEK VE HÜR VE BİR ORMAN GİBİ KARDEŞÇESİNE.

ete

Yapılması düşünülen animasyona göre değişiklik gösteren bir konu bu. Ancak her zaman tek tek pin komutu vermekten daha iyi yöntemler olduğu kesin.

örnek verelim. PORB de 8 adet pin var ve bunlara birer led bağladığımızı düşünelim. Sırası ile bunları yakıp söndürmek için pin yönteminde;
PORTB.0=1 
Pause 100
PORTB.0=0
Pause 100
PortB.1=1
Pause 100
...
..

şeklinde koda yazmak gerekir. her pin için gecikmeleride dahil olmak üzere 4 satır kod yazman gerekiyor. 8 pin için 4x8=32 satır komut yazman gerekecek.
Aynı işi yapan daha kısa komut şöyle olurdu
SAYAC=1
FOR I=0 to 7
PORTB=SAYAC
SAYAC=SAYAC<<1
Pause 100
PORTB=0
PAuse 100
Next

Bir başka yöntem,

BASLA:
Sayac=1
BIR:
PORTB=SAYAC
pause 100
SAYAC=SAYAC*2
portb=0
pause 100
IF SAYAC<255 then BIR
GOTO BASLA

Kısaca anlamamız gereken şey şu olmalı. Bit bazında değilde byte bazında kontrol yapmanın yolu araştırılmalıdır.

Ete

ufuk0106

BİR AĞAÇ GİBİ TEK VE HÜR VE BİR ORMAN GİBİ KARDEŞÇESİNE.

ufuk0106

Lookup tablosuyla yapmaya çalışsak nasıl olurdu acaba? Portları sembol ile tanımlayıp. look up tan istediğimiz sırayla çağırma yöntemi olur mu?
BİR AĞAÇ GİBİ TEK VE HÜR VE BİR ORMAN GİBİ KARDEŞÇESİNE.

ete

Fikir olarak evet ama uygulama olarak hayır derim. Zira yapmadan bu fikri tartışmak anlamsız yapınca programı ne kadar meşgul edeceğini görürsün. Gerçi ortada ne yapılacağı da belli olmadan konuşmamak daha uygun olur sanırım. Zira öyle bir şey yaparsınki Lookup tablosundan okuma belkide daha uygun olur.
Dene ve gör demek daha uygun düşecek.

Ete

ufuk0106

#5
TRISA=0
TRISB=0
PORTA=0
PORTB=0

SYMBOL L1=PORTA.0
SYMBOL L2=PORTA.1
SYMBOL L3=PORTA.2
SYMBOL L4=PORTA.3
SYMBOL L5=PORTA.4
SYMBOL L6=PORTB.3
SYMBOL L7=PORTB.1
SYMBOL L8=PORTB.0
SYMBOL L9=PORTB.4
SYMBOL L10=PORTB.5
SYMBOL L11=PORTB.6
SYMBOL L12=PORTB.7


P VAR BYTE
K VAR BYTE
X VAR word
AL VAR BYTE
sayac var byte
P=200

'led sırası baskı devrede sıralı yapılmadığı için yukarıdaki mantık uymuyor:(
böyle yaptığımızda da B.0 yanıyor ve öyle kalıyor.



TRISA=0
TRISB=0
PORTA=0
PORTB=0

SYMBOL L1=PORTA.0
SYMBOL L2=PORTA.1
SYMBOL L3=PORTA.2
SYMBOL L4=PORTA.3
SYMBOL L5=PORTA.4
SYMBOL L6=PORTB.3
SYMBOL L7=PORTB.1
SYMBOL L8=PORTB.0
SYMBOL L9=PORTB.4
SYMBOL L10=PORTB.5
SYMBOL L11=PORTB.6
SYMBOL L12=PORTB.7


P VAR BYTE
K VAR BYTE
X VAR byte

P=200

BASLA:

for x=0 to 11
LOOKUP2 X,[l1,l2,l3,l4,l5,L6,L7,L8,L9,L10,L11,l12],K
HIGH K
PAUSE P
LOW K
next x
GOTO BASLA
BİR AĞAÇ GİBİ TEK VE HÜR VE BİR ORMAN GİBİ KARDEŞÇESİNE.

ufuk0106

#6
:) Bu çalıştı



TRISA=0
TRISB=0
PORTA=0
PORTB=0

SYMBOL L1=PORTA.0     '1
SYMBOL L2=PORTA.1     '2
SYMBOL L3=PORTA.2     '4
SYMBOL L4=PORTA.3     '8
SYMBOL L5=PORTA.4     '16
SYMBOL L6=PORTB.3      '8
SYMBOL L7=PORTB.1      '2
SYMBOL L8=PORTB.0      '1
SYMBOL L9=PORTB.4       '16
SYMBOL L10=PORTB.5      '32
SYMBOL L11=PORTB.6      '64
SYMBOL L12=PORTB.7      '128


P VAR BYTE
K VAR BYTE
X VAR byte
P=100



BASLA:

for x=0 to 4
LOOKUP2 X,[1,2,4,8,16,8,2,1,16,32,64,128],K
PORTA=K
PAUSE P
PORTA=0
PAUSE P
NEXT X

for x=5 to 11
LOOKUP2 X,[1,2,4,8,16,8,2,1,16,32,64,128],K
PORTB=K
PAUSE P
PORTB=0
PAUSE P
NEXT X

GOTO BASLA
BİR AĞAÇ GİBİ TEK VE HÜR VE BİR ORMAN GİBİ KARDEŞÇESİNE.

ufuk0106

#7
Lookup ile karışık bağlantılı pinler için çalıştı. kullanmaök isteyen arkadaşlara:

TRISA=0
TRISB=0
PORTA=0
PORTB=0

P VAR BYTE
K VAR BYTE
X VAR byte
D VAR BYTE
P=60

BASLA:
FOR D=0 TO 4
GOSUB Tek_tek
NEXT D

FOR D=0 TO 4
GOSUB Uclu_Karasimsek
NEXT D

FOR D=0 TO 4
GOSUB DOLDURMALI
NEXT D

FOR D=0 TO 4
GOSUB Uclu_Karasimsek_1
NEXT D

FOR D=0 TO 4
GOSUB DOLDURMALI_1
NEXT D

GOTO BASLA

'LOOKUP2 X,[1,3,7,14,28,24,16,0,8,10,11,19,49,112,224,192,128],K
       
Uclu_Karasimsek:
for x=0 to 4
LOOKUP2 X,[1,3,7,14,28],K
PORTA=K
PAUSE P
NEXT X

for x=0 to 1
LOOKUP2 X,[24,16,8,10],K
PORTA=K
X=x+2
LOOKUP2 X,[24,16,8,10],K
PORTB=K
PAUSE P
X=X-2
NEXT X

for x=0 to 7
PORTA=0
LOOKUP2 X,[11,19,49,112,224,192,128,0],K
PORTB=K
PAUSE P
NEXT X
RETURN

Tek_Tek:
for x=0 to 4
LOOKUP2 X,[1,2,4,8,16,8,2,1,16,32,64,128],K
PORTA=K
PAUSE P
PORTA=0
PAUSE P
NEXT X

for x=5 to 11
LOOKUP2 X,[1,2,4,8,16,8,2,1,16,32,64,128],K
PORTB=K
PAUSE P
PORTB=0
PAUSE P
NEXT X
return

...................................gibi
BİR AĞAÇ GİBİ TEK VE HÜR VE BİR ORMAN GİBİ KARDEŞÇESİNE.

F®T

ufuk0106 tebrikler güzel çalışma olmuş.fakat kodları koyarken kod ekle seçeneğini seçip kod ları oraya koyarsan sitenin düzeni için ve kodları kullanacak arkadaşlar için daha büyük iyilik yapmış olursun.iyi çalışmalar.
"Hakk" şerleri hayr eyler Zannetme ki gayr eyler Ârif anı seyreyler Mevlâ görelim neyler Neylerse güzel eyler.

ufuk0106

dikkat etmemisim, kusura bakmayin. bilgi paylasimında emegi gecen herkese teşekkürler.
BİR AĞAÇ GİBİ TEK VE HÜR VE BİR ORMAN GİBİ KARDEŞÇESİNE.

bilsisco

https://www.youtube.com/watch?v=nmY3S9k_if8

https://www.youtube.com/watch?v=BYtrFZbEWdw

tabelayı 18 led yakan bir devre(18 harfli tabela) olarak bord üzerinde tasarladıktan sonra yapıma geçmiştim
ekte yaptığım tabelanın resim ve tüm dosyaları mevcut

http://halit.etemlisesi.com/Tabela_2.rar

ufuk0106

#11
Yazmışken tüm dosyaları da arkadaşlarla paylaşalım.

Proteus 7.7 baskı devresi, bas dosyası ekte sunulmuştur. pic 16f84'ün 12 çıkış VE 36 led ile yapılmış animasyon devresi.
BİR AĞAÇ GİBİ TEK VE HÜR VE BİR ORMAN GİBİ KARDEŞÇESİNE.

Powered by EzPortal