K

74HC595

Başlatan kuserm, 03 Mart 2012, 13:02:56

kuserm

hocam ben yeni üyelerinizden biriyim.Benim bir tez calışmam ve bu tezde klavye ontrollü kyayn yazı yapmak istiyoruz.dotmtrisleri 74hc595 ile sürmeye karar verdik ama bilgyi nasıl gönderecegimizi bilmiyoruz,daha dogrusu gönderemedik.clok gönderiyotuz ama bir türlü istedigimiz gibi olmadı.
yardım ederseniz cok sevinim......

Mucit23

Ne yaptığınıza dair hiçbirşey yok ortada bu şekilde yardımcı olmamız ancak deneme yanılma ile olur. Devre şeması, kod vs eklemeniz gerekir.
Bir ulusu yok etmenin En iyi yolu o ulusun dilini yok etmektir.

www.arectron.com/

meyer

 Aşağıdaki linkte forumumuzda yapmış olduğumuz bir kayan yazı devresi mevcuttur.Virtual terminal aracılığıyla klavyeden girdiğimiz yazıları ve saati,tarihi,sıcaklığı gösteren bir devredir.PS/2 klavye kısmı henüz devreye eklenmedi ama 74hc595'lerin nasıl sürülmesi gerektiği hakkında size bilgi verecektir..
http://etepic.com/index.php?topic=214.0

ete

#3
İlişikte bir isis devresi veriyorum. Burada bir birine seri bağlanmış iki 74HC595 göreceksiniz.
Sistem normal kullanılış biçiminde bağlanmış durumda. Sizde aynı şekilde kullanacaksınız.
Şimdi Devreye bakarsanız bir CLK girişi Bir DATA girişi ve birde KILIT girişi mevcut.
74HC595 bir Shift Registerdir. Anlamı şu her CLK palsi verildiğinde data girişindeki bilgiyi sırası ile Q0, Q1 ....Q7 ye geçer.
Ancak unutmayın registere verilenbilgi hemen çıkışa verilmez. Önce dahili hafızaya yazılır. Kilit ucuna bir puls verilirse dahili hafızadaki bilgi çıkışa aktarılır.
Şimdi deneme yapalım.
- Önce Data girişini HIGH yapın.
- Clok anahtarına bir kere tıklayın. Bu bir puls uygulayacaktır.
- Şimdi Data dan giriline HIGH ilk çıkışa aktarılacak ama kili'e bir puls verirseniz elbette. Bunun için Kilit anahtarına bir tıklayın.
  Göreceğiniz gibi Q0 çıkışı HIGH oldu.
- Şayet data girişini LOW yapmaz iseniz her tıkladığınızda bir HIGH bilgisi registere aktarılır. Ama Data girşini LOW yaparsanız ilk girilen HIGH , her CLK palsi ile birlikte bir sonraki çıkışa aktarılır.  Bunu denemek için ilk girişten sonra Data girişini LOW yapın. Sonra bir CLK palsi verin ve bir Kilit palsi verin ve durumu gözlemleyin.
- Şayet arada kilit palsi vermeden 8 adet CLK palsi verirseniz bir byte lık bilgiyi registere yazmış olursunuz. Data ucundan ne giriliyorsa registere o yazılmış olur. 8 bit sonunda bir kere kilit ucuna puls uygularsanız 8 bitlik bilgi Q0-Q7 çıkışlarına aktarılmış olacaktır.
Umarım bu deney sonunda 74HC595 in nasıl çalıştığını anlar ve uygularsınız.

Ete

kuserm

#4
HOCAM 74HC595 İN CALIŞMA MANTIGINI BİR NEPSEDE OLSUN ANLADIM.ISI DE DEVREYİ KURDUM VE KAREKTER OLUŞTURMAYA CALIŞTIM MALESEF YAPAMADIM.....YARDIMLARINIZI BEKLİYORUM....

UGRAŞTIGIM PROGRAM BURDA SADECE BİR SUTUN BİLGİSİ GÖNDERE BİLİYORUM




TRISD=%0000000
     TRISB=%0000000
     VERI VAR BYTE   
     X VAR BYTE
     
     
BASLA:   
       
     
    LOW PORTD.1
    LOW PORTD.2
    PORTB=%10000001
    VERI=%10000000
    pause 10 
    FOR X=0 TO 7
    PAUSE 10 
    PORTD.0 = VERI.0[X]
    PAUSE 10
    PULSOUT PORTD.1,10
    LOW PORTD.1
     PAUSE 10
     PULSOUT PORTD.2,1
    NEXT
    GOTO BASLA
   
   

ete

#5
Ne yapmaya çalıştıştığını bir anlayabilsem yardım edeceğimde anlayamıyorum.
Bu tarihten itibaren kurallara uygun yazılmamış programlarada bakmayacağım. O kadar yırtınıyorum. Ders yayınlıyorum ama görüyorumki millet tembellikten ne sigorta ayarı koyuyor ne bütün tris registerlerine değer veriyor ne çalışma frekansı belirliyor. Sıfır not veriyorum böylelerine ve senin programda bunlardan birisi. Böyle programmı olur. İnsan biraz dikkat eder. Etrafına bakar, ne var ne yok karıştırır eşeler ve usulüne uygun bir şey yazar. Ayrıca işi yarım yamalak yapmaktansa hiç yapmayıp başından öğrenmeye çalışmak en doğrusu olur. Araba yapacağım diyorsun tekeri icat etmekle uğraşıyorsun.
Yanlış bu işler. Bir martiks oluşturma sistemini inceledinmi . ? . Tuş takımı yada klavye mantığını inceledinmi?
Böyle yarım yamalak bir şey yazarak işin içinden çıkmanız mümkün değil maalesef.
Programına bak. Bir sürü pause var. Pause komutu milisaniye cinsinden gecikme yaratır. Kaç tane pause koymuşsun bir incele bakalım.
Kayan yazı sistemlerinde 1000 ms de en az 25 defa yazının displaylere verilmesi gerekir. Yani 1000/25=40 ms. Bu 40 ms karekterin tamamı için geçerlidir. Karekterleri satır veya sütunlar halinde oluşturduğun için bunu da 8'e bölersen en az 5 ms de bir matrikslerdeki bilgiyi yenilemen gerekir. Kısaca senin programın bütün yazıyı ekrana koyacak ve her 5 ms de bir bunu tekraralayacak demektir. Peki sen ne yapmışsın bir sürü 10 ms koymuşsun. Bu olurmu.
Şöyle bir düşün neleri biliyorsun neleri bilmiyorsun. Önce bunları belirle ve bilmediklerini adım adım sor. Kimseden şunu yapın diye hareket bekleme lütfen.

Ete



canbulut

Alıntı yapılan: ete - 06 Mart 2012, 15:45:14
Ne yapmaya çalıştıştığını bir anlayabilsem yardım edeceğimde anlayamıyorum.
Bu tarihten itibaren kurallara uygun yazılmamış programlarada bakmayacağım. O kadar yırtınıyorum. Ders yayınlıyorum ama görüyorumki millet tembellikten ne sigorta ayarı koyuyor ne bütün tris registerlerine değer veriyor ne çalışma frekansı belirliyor. Sıfır not veriyorum böylelerine ve senin programda bunlardan birisi. Böyle programmı olur. İnsan biraz dikkat eder. Etrafına bakar, ne var ne yok karıştırır eşeler ve usulüne uygun bir şey yazar. Ayrıca işi yarım yamalak yapmaktansa hiç yapmayıp başından öğrenmeye çalışmak en doğrusu olur. Araba yapacağım diyorsun tekeri icat etmekle uğraşıyorsun.
Yanlış bu işler. Bir martiks oluşturma sistemini inceledinmi . ? . Tuş takımı yada klavye mantığını inceledinmi?
Böyle yarım yamalak bir şey yazarak işin içinden çıkmanız mümkün değil maalesef.
Programına bak. Bir sürü pause var. Pause komutu milisaniye cinsinden gecikme yaratır. Kaç tane pause koymuşsun bir incele bakalım.
Kayan yazı sistemlerinde 1000 ms de en az 25 defa yazının displaylere verilmesi gerekir. Yani 1000/25=40 ms. Bu 40 ms karekterin tamamı için geçerlidir. Karekterleri satır veya sütunlar halinde oluşturduğun için bunu da 8'e bölersen en az 5 ms de bir matrikslerdeki bilgiyi yenilemen gerekir. Kısaca senin programın bütün yazıyı ekrana koyacak ve her 5 ms de bir bunu tekraralayacak demektir. Peki sen ne yapmışsın bir sürü 10 ms koymuşsun. Bu olurmu.
Şöyle bir düşün neleri biliyorsun neleri bilmiyorsun. Önce bunları belirle ve bilmediklerini adım adım sor. Kimseden şunu yapın diye hareket bekleme lütfen.

Ete





Hocam Merhaba Şu anda bendede aynı hata var.Rx kesmesiyle kesmeye giriyor.Bilgileri almayacaksam 5ms bekliyor ve kesmeden çıkıyor.fakat bir kırpışma oluyor.1ms bekle desem bile o kırpışmayı yapıyor ledler.sorun neden kaynaklanıyor olabilir anlamadım.

ete

Mutlaka komut gecikmeleri ile birlikte kesme debsüre uzuyordur. Buda titreme yaratıyordur.
Başka izah şekli yok maalesef.
Ete

canbulut

çok teşekkür ediyorum hocam.

canbulut

Hocam benim sorunum şu
HSERIN 5000,LOOP,[WAIT ("ETE"),HARF]  '
kodun davranışı : RX kesmesi ile veriyi alıyor kesmeye giriyor.her kesme girişinde 5 sn kesmenin içinde bekler gibi davranıyor.5 sn boyunca veriyi bekle değilmiydi hocam.veriyi alsada niye 5 sn bekliyor anlamadım

ete

Veriyi alıyor kesmeye giriyor değil , kesmeye giriyor sonra veriyi alıyor olması gerekir. Bu komutnkesme içindemi değilmi onu anlayamadım. Normal şartlarda orsya 5000 yazılmaz. Hiç bir şey yazmasan zaten 65 ms bekler. Beklediği gelirse alıp çıkar. Senin kesmede bir sorun olmalı.
Ete

canbulut

kesmenin içinde veriyi alıyor hocam.bu komut kesme içinde.5000 yerine kaç yazarsam yazayım o kadar bekleyip işleri öylece yapıyor.hiç bişey yazmasam orada çakılıp kalıyor.
DISABLE
INT:
GIE=0
HSERIN 5000,ATLA,[WAIT ("ETE"),STR KAREKTER\4]
GOSUB KAREKTER_OKU
ATLA:
TEMP=RCREG
RCIF=0
GIE=1
RESUME
ENABLE
GOTO BASLA
END

ete

Sorun GOSUB KAREKTER_OKU komut satırında.
Kesme içinde bir başka etikete Gosub ile gidemezsin. Gidersen program saçmalar.
Neden dediğini duyar gibiyim.
Kesme özel bir durumdur. Program işini gücünü bırakıp kesme etiketine gider ama geldiği yerin adresinide stack da tutar.
Üstelik bir sürü değişken değerini bir ara hafızaya kayıt eder. Kesmeden çıkarken onları yeniden yükler. Sen kesmeden çıkartıp bir başka etikete yönlendirirsen bütün bu hesap kitap sapar. Bu nedenle temel kaide olan "kesme içinden gosub ile başka bir etikete gidilmez " açıklamasını olduğu gibi kabul edip bu kurala uymaya çalış.
Nasıl dersen,  kesme içinde karekter bilgisini aldıktan sonra guncel=1 şeklinde bir bit değişkenini set et.
Program içinde
IF GUNCEL=1 then
  GOSUB KAREKTER_OKU
  Guncel=0
ENDIF
şeklinde sistemi çalıştır.

Ete

canbulut

Aşağıdaki şekilde değiştirdim fakat bir değişiklik olmadı hocam :(
DISABLE
INT:
GIE=0
HSERIN 5000,ATLA,[WAIT ("ETE"),STR KAREKTER\4]
ATLA:
TEMP=RCREG
RCIF=0
GIE=1
RESUME
ENABLE
GOTO BASLA
END

ete

heserin komutundaki 5000 uerine yalnızca 15 yaz.
Ete

Powered by EzPortal