74HC595 - 74HC165 Kullanımı

Tamam bağlantı böyle. Ama SRCLR yi de dirençle Vcc ye çek bari de usül yerine gelsin :)

Bu 4 sinyalli yapı, bu şekilde 1 GPIO kaybediyorsun. Ama kullanımı kolay.

Boot'tan sonraki süreç şu şekilde:

1) SER, SRCLK, RCLK output olarak tanımlıyorsun. OE yi daha ellemiyorsun.
1) SER ve SRCLK ile full 0 yazıyorsun ve bu veri soldaki flip floplara yazılıyor.
2) RCLK'da pozitif bir pals üretiyorsun, bu palsın yükselen kenarında veri sağdaki flip floplara yazılıyor.
3) OE yi output olarak tanımlıyorsun ve 0 yapıyorsun.

Artık bundan sonra OE ile işin yok, hep 0 da tutulacak o. Bundan sonraki işin SER, SRCLK ile veriyi yazmak, sonra da RCLK ile dışarı çıkmasını sağlamak.
Burada bir hata var mı?
Setup kısmında tam doğru yazamamış olabilirim.

C++:
int rclk = 5;
int srclk = 6;
int ser = 4;
int oe = 2;
byte leds = 0;

void setup()
{
  pinMode(rclk, OUTPUT);
  pinMode(ser, OUTPUT);
  pinMode(srclk, OUTPUT);
  for (int i = 0; i < 8; i++)
  {
    bitSet(leds, i);
    digitalWrite(rclk, LOW);
    shiftOut(ser, srclk, LSBFIRST, leds);
    digitalWrite(rclk, HIGH);
    delay(10);
  }
  pinMode(oe, OUTPUT);
  digitalWrite(oe, LOW);
}

void loop()
{
  leds = 0;
  registeraYaz();
  delay(100);
  for (int i = 0; i < 8; i++)
  {
    bitSet(leds, i);
    registeraYaz();
    delay(100);
  }
  for (int i = 8; i >= 0; i--)
  {
    bitClear(leds, i);
    registeraYaz();
    delay(100);
  }
}
void registeraYaz()
{
  digitalWrite(rclk, LOW);
  shiftOut(ser, srclk, LSBFIRST, leds);
  digitalWrite(rclk, HIGH);
}
 
loop kısmındaki kodları kapattım.
Sadece setup kısmında şu verileri gördüm.

RCLK
osi1_rclk.png


SRCLK (USB Çıkarırken yakalıyor sadece)
osi1_srclk.png


SER
osi1_ser.png
 
shiftOut zaten bütün bitleri yazıyor o for loop olmayacak

C++:
void setup()
{
  pinMode(rclk, OUTPUT);
  pinMode(ser, OUTPUT);
  pinMode(srclk, OUTPUT);

  /* tum LED'ler yaniyor */
  leds = 0xff;

  /* bitleri 595 e gonder */
  shiftOut(ser, srclk, LSBFIRST, leds);

  /* bitler sagdaki flip floplara gitsin */
  digitalWrite(rclk, LOW);
  digitalWrite(rclk, HIGH);

  /* bit degerleri disariya ciksin */
  digitalWrite(oe, LOW);
  pinMode(oe, OUTPUT);
}
 
shiftOut zaten bütün bitleri yazıyor o for loop olmayacak

C++:
void setup()
{
  pinMode(rclk, OUTPUT);
  pinMode(ser, OUTPUT);
  pinMode(srclk, OUTPUT);

  /* tum LED'ler yaniyor */
  leds = 0xff;

  /* bitleri 595 e gonder */
  shiftOut(ser, srclk, LSBFIRST, leds);

  /* bitler sagdaki flip floplara gitsin */
  digitalWrite(rclk, LOW);
  digitalWrite(rclk, HIGH);

  /* bit degerleri disariya ciksin */
  digitalWrite(oe, HIGH);
  pinMode(oe, OUTPUT);
}
Abi OE yi LOW'a çekicez demiştin, HIGH yapmışsın?
Birde OE'nin pinMode'unu digitalWrite tan sonra yazmışsın. Oluyor mu öyle?
 
Tamam düzelttim :facepalm1:
 
Birde OE'nin pinMode'unu digitalWrite tan sonra yazmışsın. Oluyor mu öyle?

Şimdi daha yeni bu mevzuyu anlattım

 
Şimdi daha yeni bu mevzuyu anlattım

Yarın sağlam kafa bakayım bu konuya.
 
Buradaki kodda ledler kafasına göre yanıp sönüyor.
Bazen bir kaç sn sönük kalıyor, bazen yanıp yanıp sönüyor, bazende karaşimşek gibi davranıyor.
Yani 10 modlu yılbaşı ağacı ışıldağı gibi davranıyor.

C++:
int rclk = 5;
int srclk = 6;
int ser = 4;
int oe = 2;
byte leds = 0;

void setup()
{
  pinMode(rclk, OUTPUT);
  pinMode(ser, OUTPUT);
  pinMode(srclk, OUTPUT);

  /* tum LED'ler yaniyor */
  leds = 0xff;

  /* bitleri 595 e gonder */
  shiftOut(ser, srclk, LSBFIRST, leds);

  /* bitler sagdaki flip floplara gitsin */
  digitalWrite(rclk, LOW);
  digitalWrite(rclk, HIGH);

  /* bit degerleri disariya ciksin */
  digitalWrite(oe, LOW);
  pinMode(oe, OUTPUT);
}

void loop()
{
  leds = 0;
  registeraYaz();
  delay(100);
  for (int i = 0; i < 8; i++)
  {
    bitSet(leds, i);
    registeraYaz();
    delay(100);
  }
  for (int i = 8; i >= 0; i--)
  {
    bitClear(leds, i);
    registeraYaz();
    delay(100);
  }
}
void registeraYaz()
{
  digitalWrite(rclk, LOW);
  shiftOut(ser, srclk, LSBFIRST, leds);
  digitalWrite(rclk, HIGH);
}
 
Schneider Electric üretimi vfd geçti elime kullanıcı etkileşimin sağlandığı kartın üzerini incelerken

74LV595A
74LV165A

595'i display driver olarak kullanmışlar
165 ile'de encoder'i okumuşlar çok garip geldi bunları endüstriyel ortamda görmek.

Yeni konu açmak yerine bu konu altında atayım dedim.
 

Ekler

  • 1.jpeg
    1.jpeg
    360.8 KB · Görüntüleme: 75
  • 2.jpeg
    2.jpeg
    182.8 KB · Görüntüleme: 75
  • 3.jpeg
    3.jpeg
    292.7 KB · Görüntüleme: 75
O zaman herhalde debounce falan yapmıyorlar. Enkoder sinyallerinde direnç kondansatör low pass filtre koymuşlardır sadece.
 
O zaman herhalde debounce falan yapmıyorlar. Enkoder sinyallerinde direnç kondansatör low pass filtre koymuşlardır sadece.
Abi bu adamlar nasıl güvenebiliyor bu sisteme.

VFD'nin nerede kullanılacağı belli değil belki kaynak atöylesinde fan motoru sürecek belki gemide çalışacak belki ev ortamında bu adamlar nasıl güvenip bunları kullanıyor binlerce satılacak üründe
 
Şu anda benim üzerinde çalıştığım projede de enkoder var. 1 ms lik peryotlarla okuyup debounce yapmaya çalıştım. Ama enkoderi hızlı çevirince birkaç milisaniyelik pals zamanları oluşuyor. 1 ms peryot yetersiz kalıyor. Ben de daha sık okuma yapmak istemiyorum o yüzden bir direnç kondansatörlü low pass filtre attırdım oraya ve şu anda debounce yapmadan okuyorum. Bunun tek dezavantajı, çok aşırı yüksek hızlarda pals kaçırır ve bu da mevcut uygulamada sorun değil (uygulama bir güç amfisinin volüm kontrolü).
 
Şu anda benim üzerinde çalıştığım projede de enkoder var. 1 ms lik peryotlarla okuyup debounce yapmaya çalıştım. Ama enkoderi hızlı çevirince birkaç milisaniyelik pals zamanları oluşuyor. 1 ms peryot yetersiz kalıyor. Ben de daha sık okuma yapmak istemiyorum o yüzden bir direnç kondansatörlü low pass filtre attırdım oraya ve şu anda debounce yapmadan okuyorum. Bunun tek dezavantajı, çok aşırı yüksek hızlarda pals kaçırır ve bu da mevcut uygulamada sorun değil (uygulama bir güç amfisinin volüm kontrolü).
Bu vfd'de istersen enkoderin hiçbir işlem yapmamasını sağlayabiliyorsun istersen çıkış frekansını ayarlayabiliyorsun üstünden istersen parametre ayarlamak için menülerinde gezebiliyorsun.

Fakat sadece 1 buton ve enkoderi okumak için 165 kullanmışlar buna anlam veremedim.
Start-stop-jog vs yapabileceğin dijital girişlerin bulunduğu kartı ayrı.

600_Schneider-ATV312-Size6-1.jpg

Resimde görünen esc tuşu ve enkodere bakıyor 165.
 
Eğer enkoder'lere low pass filtre koyup 165 ile debounce yapmadan okursan, burada bir güvenlik sorunu ortaya çıkmıyor. Yani adam tekerleği bir tık çevirdiği halde motor devri birden maksimuma çıkamaz. Tam tersi, adam tekerleği deli gibi çevirse bile motor devri olması gereken hızda artmaz, çünkü arada bir enkoder palsleri kaçırılır.
 
Eğer enkoder'lere low pass filtre koyup 165 ile debounce yapmadan okursan, burada bir güvenlik sorunu ortaya çıkmıyor. Yani adam tekerleği bir tık çevirdiği halde motor devri birden maksimuma çıkamaz. Tam tersi, adam tekerleği deli gibi çevirse bile motor devri olması gereken hızda artmaz, çünkü arada bir enkoder palsleri kaçırılır.
çalıştığına şahit olsam mutlaka denerdim nasıl çalışıyor 165 ile.

Eğer incelemek isteyen olursa gönderebilirim.
 

Çevrimiçi üyeler

Forum istatistikleri

Konular
5,789
Mesajlar
99,024
Üyeler
2,464
Son üye
s4met

Son kaynaklar

Son profil mesajları

cemalettin keçeci wrote on HaydarBaris's profile.
barış kardeşim bende bu sene akıllı denizaltı projesine girdim ve sensörleri arastırıyorum tam olarak hangi sensör ve markaları kullandınız yardımcı olabilir misin?
m.white wrote on Altair's profile.
İyi akşamlar.Arabanız ne marka ve sorunu nedir.Ben araba tamircisi değilim ama tamirden anlarım.
* En mühim ve feyizli vazifelerimiz millî eğitim işleridir. Millî eğitim işlerinde mutlaka muzaffer olmak lâzımdır. Bir milletin hakikî kurtuluşu ancak bu suretle olur. (1922)
Kesici/Spindle hızı hesaplamak için SpreadSheet UDF'leri kullanın, hesap makinesi çok eski kalan bir yöntem :)
Dr. Bülent Başaran,
Elektrik ve Elektronik Mühendisi
Yonga Tasarım Özdevinimcisi
Üç güzel "çocuk" babası
Ortahisar/Ürgüp/Konya/Ankara/Pittsburgh/San Francisco/Atlanta/Alaçatı/Taşucu...

Back
Top