- Katılım
- 27 Şubat 2019
- Mesajlar
- 12,195
Burada bir hata var 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.
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);
}