avatar_elektro77

HC595 leri süremiyorum.

Başlatan elektro77, 20 Nisan 2024, 01:50:54

elektro77

Ete Hocam;
İlişikteki dosyada 48 adet röle sürmek için TPIC6B595 kullandım. Proteusta tpic olmadığı için şimdilik hc595 kullandım. Ama bir türlü çıkış alamıyorum.
Amacım 48 adet röleyi, yürüyen ışık gibi aktif etmek. Sayaç değişkeni her bir artışta sıradaki röle çekip bir önceki bırakacak. Sayaç değişkeni her bir azalışta ise geriye doğru aynı işlemi yapacak.
Nerede hata yaptığımı anlayamadım. Çok da basit bir program yazdım aslında...
"Eğer bir konuyu öğrenmek istiyorsan o konunun öğretmeni ol; daha iyi öğrenmek istiyorsan o konuda bir kitap yaz; daha da iyi öğrenmek istiyorsan yazdığın kitabi oku"

ahmet_zxc

led süreceksen tpic yada hc595 olabilir
ama
endüstriyel ortam ve role süreceksen PCF8574 kullanmanı öneririm.

ete

#2
Ledlerin yürüme şekli aşağıdakilerden hangisi olacak?
- sürekli tek led yanacak ve tuşa bastıkça 48 çıkış boyunca yanan ilerleyecek.
- Her basılışta basılan adet kadar led yanık kalarak ilerleyecek.

Ete

elektro77

- sürekli tek led yanacak ve tuşa bastıkça 48 çıkış boyunca yanarak ilerleyecek.


"Eğer bir konuyu öğrenmek istiyorsan o konunun öğretmeni ol; daha iyi öğrenmek istiyorsan o konuda bir kitap yaz; daha da iyi öğrenmek istiyorsan yazdığın kitabi oku"

ete

Aslında ikisinide yapmıştım koyarken mesajın geldi.
İstediğini koydum ilişiktedir.

Ete

elektro77

#5
Alıntı yapılan: ete - 20 Nisan 2024, 16:09:04Aslında ikisinide yapmıştım koyarken mesajın geldi.
İstediğini koydum ilişiktedir.

Ete
Hocam pes doğrusu. Harika yatartmışsınız yine. Kodlara baktım da benim zeka bunu kaldırmazdı...
Bir iki şey var eklemek istediğim. Son ledden sonra başa dönerse sevinirim.
-Birde porta.0 a konulmuş bir pottan okunan değerle ledleri aynı bu şekilde yaktırmak istiyordum.
Ayrıca, Start tuşuna basıldığında ledlerin otomatik olarak aynı mantıkta yürüyüp gitmesini stop a basınca en son hangi ledde ise orada durmasını istiyordum. Yine sona geldikten sonra baştan devam etmesi iyi olacak.
-Yine porta.1 ye konulmuş bir pot ile de bu otomatik yanmanın hızını ayarlamak istiyorum.
Kod vermek istemezseniz de, sizin kodlar üzerinde bunu anlatırsanız sevinirim...
Bunları sizden aldığım temel 595 sürme mantığı üzerine, kendim inşaa edecektim ama benim yapacağım iş olmadığını gönderdiğiniz koddan anladım. En azından 595 kullanarak bunu yapamam. Belki  80 pin mcu ile çözerdim. 595 kullanımı bana bayğı bir karışık geldi nedense...
 
"Eğer bir konuyu öğrenmek istiyorsan o konunun öğretmeni ol; daha iyi öğrenmek istiyorsan o konuda bir kitap yaz; daha da iyi öğrenmek istiyorsan yazdığın kitabi oku"

elektro77

#6
Start a basınca otomatik saydırma işini aşağıdaki şekilde yaptım. Bunu porta.1 e konulmuş bir pot ile adc okuyarak hızlandırıp yavaşlatma işini nasıl yapacağımı bulmaya çalışıyorum. Yardımcı olursanız sevinirim Hocam. Birde sona geldikten sonra devam edip,tekrar 0 dan başlatmak için yardıma ihtiyacım var. Bu başa dönmeyi yapmakta emin değilim ama olmazsa tekrar bu versiyona döneceğim.
Son olarak ta yine porta.0 a konulmuş bir pottan okunan adc değeri  ile ledleri aynı bu modda yakmak istiyorum.   
if start=0 then
oto=1 
   WHILE oto=1 
      SAY=SAYAC[INDEX]
        ONCEKI=SAY        
        IF ADET=48 THEN BASLA
        SAY=SAY*2:ADET=ADET+1
        IF SAY=0 THEN SAY=1
        IF SAY=1 AND ONCEKI=128 THEN
          SAYAC[INDEX]=0:ONCEKI=0
          INDEX=INDEX+1
          IF INDEX=7 THEN INDEX=0
        ENDIF
        SAYAC[INDEX]=SAY
        GOSUB AKTAR
        WHILE UP=0:WEND
        PAUSE 100
        IF STOPP=0 THEN
        OTO=0
        ENDIF
   WEND
endif
edit:
'IF ADET=48 THEN BASLA satırını kaldırınca tekrar baştan saymaya başladı Hocam. Bunu da hallettim.
Şimdi sadece potlar kaldı.
Otomatik yanma hızını ise, bir delay alt programı oluşturup, delay gecikmesini de okunan adc ye göre ayarlasam ve kodlarınızın arasındaki pause 100 komutu yerine delay a dallansam oda olur sanırım. Doğrumu Hocam.
"Eğer bir konuyu öğrenmek istiyorsan o konunun öğretmeni ol; daha iyi öğrenmek istiyorsan o konuda bir kitap yaz; daha da iyi öğrenmek istiyorsan yazdığın kitabi oku"

Pepe

#7
program with proton basic

elektro77

#8
Alıntı yapılan: Pepe - 20 Nisan 2024, 17:33:13program with proton basic
@Pepe
Teşekkür ederim.
Kaynak kodu olmadığından üzerine inşa edeceklerimi inşa edemem.
Zaten istediğim gibi olmamış.
Yine de çok teşekkür ederim.
Ben ete Hocam ile devam edeceğim.
EDİT:
Edit ten sonraki İkinci yüklemen işe yaramış ama yinede kaynak kodu olmadan işime yaramaz. ÇOK TEŞEKKÜRLER @Pepe
"Eğer bir konuyu öğrenmek istiyorsan o konunun öğretmeni ol; daha iyi öğrenmek istiyorsan o konuda bir kitap yaz; daha da iyi öğrenmek istiyorsan yazdığın kitabi oku"

Pepe


ete

Bu işlemcide pot kullanımına dikkat etmek gerekir. Zira istediğin analog girişi kullanamayabilirsin. Bu nedenle önce kaç tane analog girişin olacak onu tespit edip data sheet den uygun analog konfigürasyonuna bakıp öyle ayarlama yapmak gerekir.

Potlara bağlı delay kullanımına gelince.
Bir sistemi aşağıdaki gibi otomatik çalıştırdığını düşünelim.
AUTO:
...
GOSUB POT_OKU
...
PAUSE SURE
...
..
GOTO AUTO
Burada POT okuma kısmında gecikme ayarlama potları bulunacak ve oradan okunan bilgi ile SURE değeri hesaplanacaktır. Bir örnek hesap göstermek gerekirse;
ADCIN 0,HAM
SURE=(Ham*/626)/10  'bu hesap pot değerine bağlı olarak 0-250 ms lik süre hesabı yapacaktır.
(250/1023=62,556  ve bunu 10 ile çarpıp küsüratı tam'a tamamlayarak 626 değerini kullanıyorum)
böylece AUTO-GOTO AUTO döngüsü içerisindeki PAUSE SURE komut satırı bizim otomatik çalışma hızını ayarlayacaktır. Üstelik çalışırkende ayarlama yapılabilecektir.

Sistemin başa döndürülmesi için gereken "  IF ADET=48 THEN BASLA  " satırını silmek idi bulmuşsun. Orada ufak bir de kusur varmış onuda şöyle düzeltebilirsin.
IF INDEX=7 THEN  diye başlayan satırı IF INDEX=6 THEN olarak değiştir lütfen.

Benim yazdığım kısımda buton kontrolü olması gerekiyor. Bunlardan biriside Auto (yada START) tuşu olacak elbette. Basılınca program AUTO etiketine gelip orada çalışmaya başlayacak.
AUTO etiketi altında program döngüsü içerisinde ayrıca AUTO moddan çıkış için hangi butona basılacak ise onunda kontrolü olması gerekir bunu unutma yoksa program orada kalır bir daha çıkamaz.


Ete

elektro77

#11
Hocam birçok şeyi tamamladım. Ama bazı eksiklerim ve hatasını bulamadığım yerler var.
1- 48.led yandığında ekranda 47 oluyor. Bunu anlayamadım. Birde başa dönüşte lcd 49 dan devam ediyor. 1 den devam etmeli ama tam yapamadım.
2- Çıkışları temizlemek için bir sil butonu koydum. Ama sil tuşuna bastığımda çıkışları tam olarak  temizleyemiyorum. Birinci 595 i siliyor ama yanan led sonraki 595 lerde ise silmiyor. Garip şeyler oluyor.
3- Bir mode tuşu koydum. Bu mod tuşuna basıldığında 2.pottan okunan değere göre ilgili çıkışı nasıl aktif edeceğimin yolunu bulamadım. Pot_Mode butonu ile  Pot_Yak alt programına gidildiğinde; pot, bir nevi encoder gibi davranacak. Sil butonu ile bu moddan çıkılacak. Kodlarda o bölüme not yazdım.
Son dosya ilişiktedir.
Vakit bulduğunuzda yardımcı olursanız sevinirim.

"Eğer bir konuyu öğrenmek istiyorsan o konunun öğretmeni ol; daha iyi öğrenmek istiyorsan o konuda bir kitap yaz; daha da iyi öğrenmek istiyorsan yazdığın kitabi oku"

ete

Söylediğin ilk hata bende oluşmuyor. Son lede geldiğimde ekranda sürekli 48 görüyorum.
Sendekinin bir başka sebebi olması gerek. Yada bu konumu nasıl yakalıyorsun onu adım adım açıkla bende yakalamaya çalışayım. Değilse sorun görülmüyor.

İkinci hata için Sil butonuna bastığın zaman led sırası hangi konumda olursa olsun bütün sayac index değişkenlerini sıfırlaman gerekiyor. Malum her bir 595 in bir sayac değişkeni var.
Sen daima ilk baştakini sıfırlyorsun diğerleri sıfırlanmadığı için orada led aktif gözüküyor.
Bunun için Sil buton kontrolünü aşağıdaki şekilde değiştirdim.
       IF SIL_BUTON=0 THEN 'bu tuşa basılınca tüm çıkışlar sıfırlanır. Yanan led söner
          for I=0 to 5
            SAYAC[I]=0
          next 
          INDEX=0
            SAY=0
          sayac=0
           ADET=0           
          GOSUB AKTAR
       ENDIF

Manuel modda sürekli pot kontrolü gereksiz ve anlamsız. Pot değerleri Auto modda kontrol edilecek. Bu nedenle manuel moddan onları çıkardım.
Manuel modda yine AUTO moddan çıkış kontrolüde gereksiz çünki o konumda program Auto olarak çalışmıyor ve çalışmayacak. Onuda Auto tarafında kullanacağız.

Programda önceden söylediğim Analog giriş ayarlarını yapmışsın ama dikkat etmen gerek bu verdiğin seçim değeri ile AN0-AN1 ve AN3 analog giriş olacaktır. AN2 ise digitial kullanılabiliyor. Yani AN3 pinini bir başka amaçla kullanmamalısın.

POTYAK kısmında bir belirsizlik var gerçi programın genel mantığı bir yere gidilince oraya uygun işleme göre ilgili ledi yaktır çıkışta herşeyi söndür şeklinde uygulanıyor. Böyle ise belirsizlik yok demektir. Bu kısmı yeniden düzenledim.

Program ilişiktedir. Buton adedine bakılınca program daha da genişleyecek gibi gözüküyor.
Bundan sonrasını kendin halledeceksin çünki program bu aşamadan sonra artık ticari hale geliyor. Zaten geldi geleceği kadar. Ben elimden geleni yaptım. Daha fazlasını yapamam.

Ete

ete

Yanacak ledi tespit etmede başka bir algoritma kullandım ve program epeyce kısaldı.
Yenisi ilişiktedir.

Ete

onurinci

ben denedim ilgilendiğim yer ADC ile 48 LED'in hareketi .çok güzel olmuş. tek LED yerine BAR kalsaymış , bir sürü uygulamada panelmetre gibi kullanılabilinirdi. klavyenize sağlık...

Powered by EzPortal