74HC164'den Alınan Değeri Bitlerine Ayırma

Başlatan Elektronikprojem, 02 Mayıs 2018, 15:56:46

Elektronikprojem

Merhaba.
2 konumlu buzdolabı butonlarının (aydınlatma+fan)  ömür testini yapacak  bir cihaz yapmaktayım. Cihaz daha önceden yaptığım ve kullanılan bir cihazdı üzerinde 18f4550 işlemci var .
Bir fikstür üzerinde 14 anahtar var. anahtarları açıp kapatan pnomatik bir piston var. Bu piston saniyede 1 kez açıp kapatma yapıyor ve anahtarın ömür sayısı 1 artıyor. toplamda 300.000 ömür sayısı olduğunda anahtarların testi tamamlanıyor ve durumlarına bakılıyor.
Şimdi bu cihazda yeni istenilen şey,
piston anahtarın üzerine basmadığında anahtarın normalde kapalı kontaklarının iletimde olması lazım. İletimde olmazsa hafızaya arızalı olan anahtarı yazması lazım. Piston anahtarlara bastığında ise normalde açık kontaklarının iletimde olması lazım eğer olmazsa burda da bozuk olan anahtarın bozulduğu sayı hafızada yazmalı.

Her anahtarın 2 konumu olduğundan bana toplam 28 adet giriş  gerekiyor. İşlemcide boş yerim olmadığından bu işi 74hc164 ile
çözmeyi düşünüyorum. 74hc164 den bilgileri aşağıdaki program ile alıyorum.



HIGH VALF
PAUSE 1000

LOW AKTAR1 :PAUSEUS 1 :HIGH AKTAR1
SHIFTIN DATA1,CLK1,0,[KONUM1]

LOW AKTAR2 :PAUSEUS 1 :HIGH AKTAR2
SHIFTIN DATA2,CLK2,0,[KONUM2]

LOW AKTAR3 :PAUSEUS 1 :HIGH AKTAR3
SHIFTIN DATA3,CLK3,0,[KONUM3]

LOW AKTAR4 :PAUSEUS 1 :HIGH AKTAR4
SHIFTIN DATA4,CLK4,0,[KONUM4]

IF KONUM1!=85 THEN GOSUB K1A
IF KONUM2!=85 THEN GOSUB K2A
IF KONUM3!=85 THEN GOSUB K3A
IF KONUM4!=85 THEN GOSUB K4A

low VALF
PAUSE 1000

LOW AKTAR1 :PAUSEUS 1 :HIGH AKTAR1
SHIFTIN DATA1,CLK1,0,[KONUM1]

LOW AKTAR2 :PAUSEUS 1 :HIGH AKTAR2
SHIFTIN DATA2,CLK2,0,[KONUM2]

LOW AKTAR3 :PAUSEUS 1 :HIGH AKTAR3
SHIFTIN DATA3,CLK3,0,[KONUM3]

LOW AKTAR4 :PAUSEUS 1 :HIGH AKTAR4
SHIFTIN DATA4,CLK4,0,[KONUM4]

IF KONUM1!=170 THEN GOSUB K1A
IF KONUM2!=170 THEN GOSUB K2A
IF KONUM3!=170 THEN GOSUB K3A
IF KONUM4!=170 THEN GOSUB K4A


Şimdi burdan sonra da aldığım değeri binary sayı sistemi bazında tek tek ayıklamak istiyorum. Atıyorum gelen bilgi
piston aktif iken yani anahtarlara basıyor iken 84 oldu bunun binary karşılığı 01010100 normalde anahtarların hepsinin sağlam olması için 0. bitin 1 olması gerekir. Diyelimki 0. bitte 1 numaralı anahtarın normalde açık kontağı vardı piston anahtara bastı normalde açık kontak iletime geçmediği için gelen bilgi 85 yerine 84 oldu.
Burdan sonrasında hangi anahtardan bilgi gelmediğini nasıl bilebilirim.
Baya uzun yoldan gidip yapmayı denedim olasılıklar ile ama hafızada çok fazla yer tuttuğundan vaz geçtim. Bu işin basit bir yolu var mıdır?


Mesela gelen bilgi=84
84 ün binary karşılığı 01010100
bu gelen sayının 0.biti 1 nolu anahtarın normalde açık kontağı
1. biti 1 nolu anahtarın normalde kapalı kontağı
2.biti 2 nolu anahtarın normalde açık kontağı
3. biti 2 nolu anahtarın normalde kapalı kontağı
......

ete

Soruna karşılık aklıma hemen gelen çözüm şöyle;
4 adet 8 er elemanlı dizi değişkenin olacak.
Birinci okunan eleman KONUM bu 8 bitlik bir değişken. bunun bitlerini kotrol etmek için kullanılacak yöntem bit test yöntemi olup bir değişkenin yada port'un bitleri DEGISKEN.0[INDEX]=? şeklinde kontrol edilir. INDEX değeri 0-7 aarsında değişen döngü değeri olur. Senin durumunda tek rakamlarda kapalı kontaklar , çift rakamlarda ise açık kontaklar kontrol edilecektir. Bunları ne olması gerektiğini biliyor olman gerekiyor elbette. Arızalı olan olması gerekenin tersini vermeli ki arızayı anlayabilesin.
Şimdi açıklamana bakılırsa sıfır nolu bit 1 olması gerekiyor. Bu açık kontak. Bozulup kapanırsa diye araştırılacak anlaşılan.
Çünki O ucun bağlı olduğu pin normalde PULL_UP da beklemesi lazım. Anahtar sağlam ise okunan değer 1 olması gerekiyor.
0-2-4-6 pinler 1 olarak okunmalı
1-3-5-7 nolu pinler ise 0 olarak okunmalı. Bunların tersi anahtarın bozuk olduğu anlmına gelecektir.

HATA=0
FOR I=0 to 6
IF KONUM.0[I]=1 THEN HATA.0[I]=1
IF KONUM.0[I+1]=0 then HATA.0[I+1]=1
NEXT
HATA1=0
FOR I=0 to 6
IF KONUM1.0[I]=1 THEN HATA1.0[I]=1
IF KONUM1.0[I+1]=0 then HATA1.0[I+1]=1
Next
..
Diğerleride bu satırların altına yazılarak test işlemi bitirilir.
Sonuçta HATA>0 ise bozuk anahtar var demektir.  HATA1>0 ise bozuk anahtar var demektir.
Hangisi bozuk anlamak için bu seferde HATA değişkeninin bitlerine bakmak gerekir.

Ete


Elektronikprojem

Dediklerinizi deneyeceğim teşekkür ederim hocam.

İlyas KAYA

14 anahtar 14 bit demektir. 14 bit için ise size 14 tane pin yada 28 bit encoder lazım demektir. Encoder kısmını geçelim şimdilik.

Anahtarların com ucunu pic pinlerine bağlayın. NC ler eksiye, NO lar artı 5 volta bağlı olsun.
Pistona yol verilmeden önce tüm girişler 0 ise sistem hazır yani tüm anahtarlar takılı demektir.
Bu işleri biraz daha kolaylaştırır.
Göz odur ki dağ ardını görsün,
Akıl odur ki başa geleceği bilsin.!

Elektronikprojem

İlyas abi,
Bu şekilde olursa da nk kontağı bozulursa bozuk olduğunu anlayamam gibi geldi bana. Piston aktif oldu tüm girişlerin "1" olması gerekir baktık 1 olmayanlar var 1 olmayanlara arızalı dedik.sonra piston pasif oldu tüm girişlerin o olması lazım ama anahtarların birinin nk kontağı bozuksa gene o pini "0" olarak algılamaz mı.

Ete hocam,
For döngülerinde döngünün amacı her bir bite bakmak değil mi. Ben öyle algıladım. Eğer öyle ise 8 bit olduğu için for döngüsü bitişi 6 değilde 7 olmalı galiba.

ete

Döngü içinde index I+1 kullanıyoruz. Bu maksimum 6 eleman olduğunda 7 ciyi kullanıyorsun anlamına gelir.
Ete

İlyas KAYA

Alıntı yapılan: Updating - 04 Mayıs 2018, 10:51:51
İlyas abi,
Bu şekilde olursa da nk kontağı bozulursa bozuk olduğunu anlayamam gibi geldi bana. Piston aktif oldu tüm girişlerin "1" olması gerekir baktık 1 olmayanlar var 1 olmayanlara arızalı dedik.sonra piston pasif oldu tüm girişlerin o olması lazım ama anahtarların birinin nk kontağı bozuksa gene o pini "0" olarak algılamaz mı.

Ete hocam,
For döngülerinde döngünün amacı her bir bite bakmak değil mi. Ben öyle algıladım. Eğer öyle ise 8 bit olduğu için for döngüsü bitişi 6 değilde 7 olmalı galiba.

Anlarsın ama pin boşa çıkarsa salınım yapar. 1ve0 arasında gidip gelir. Bu nedenle 1 den 0'a geçiş ve 0'dan 1'e geçtiğini görmen gerekir.

Yada tüm NC kontakları birbirine seri yapıp tek pin'e de girebilirsin. Ancak hangisinin arızalı olduğunu anlamak için bir led koyman gerekir.
Çünkü herhangi bir tanesi bile arızalı olsa seri bağlantıda hat kesilecektir.
Göz odur ki dağ ardını görsün,
Akıl odur ki başa geleceği bilsin.!

Elektronikprojem

Abi şu anda sayı bilgileri esp8266 ile sunucuya gönderiliyor. İki seçenek var ya bilgisayarda arızalı olan anahtar numarası görülmeyecek sadece arıza var yazacak kullanıcı arızayı cihaz başında görecek. (böyle olursa seri bağlantı ile yapılırsa sorun olmaz.)
Yada yine 74hc164 ile Ete hocanın anlattığı şekilde olursa hangi anahtarın arızalı olduğu da sistemde görülebilecek.

Powered by EzPortal