Düğmeler için Arduino bağlantı noktası genişletmesi. Bağlantı noktası genişletici kullanarak Arduino'daki dijital pinlerin sayısı nasıl artırılır? Arduino için genişletici modül seçimi

Arduino'nun giriş/çıkış olanakları olarak sunduğu tek şey on üç dijital hat ve altı analog giriştir. Ancak bazı durumlarda (özellikle çok sayıda çevresel cihazın bulunduğu projelerde) bu tür bir port hattı seti yeterli değildir.



Bu bağlamda, giriş/çıkış hatlarının sayısını genişletmenin fizibilitesine ilişkin soru ortaya çıkıyor. Bu materyal, MCP23017 yongasını kullanan böyle bir genişletmenin bir örneğini gösterecektir.


6 analog pinin aynı zamanda dijital I/O pinleri olarak da şu şekilde kullanılabileceğini biliyor olabilirsiniz:


Analog giriş 0 = hat 14
Analog giriş 1 = hat 15
Analog giriş 2 = hat 16
Analog giriş 3 = hat 17
Analog giriş 4 = hat 18
Analog giriş 5 = hat 19

Yani aslında analog giriş 5'i şu şekilde bir dijital hat olarak adlandırabiliriz: digitalWrite(19,HIGH). Böyle bir komut, port 19'a, yani analog hat 5'e mantıksal bir komut yazacaktır.


Teknik olarak TX/RX seri port hatlarını kullanabiliriz. Ancak bazı durumlarda, özellikle kod, seri bağlantı noktasının çalışması için gerekli olan Serial.begin() gibi işlevleri kullandığında bunu yapmak son derece zordur. Böylece kullanıcının kullanabileceği toplam kontak sayısı yine 17 olacaktır. Ancak on yedi pin ile çok sayıda LED'i veya servo motoru kontrol etmek mümkün müdür? Bu durumda özel harici mikro devrelerin kullanılması daha iyidir. Genellikle bu amaçlar için 74HC595 gibi bir kaydırma yazmacı kullanılır. Ancak kontrol için üç ek satır gerektirir ve tüm satırları aynı anda "genişletmenize" izin vermez. MAX7219 gibi ekran sürücüleri aynı zamanda pin sayısını da "artırır". Ancak MAX7219 pahalı bir çiptir. Bu nedenle MCP23017 bağlantı noktası genişletici çipini almak daha ucuz ve daha akılcıdır. Bu çip 16 hat için tasarlanmıştır, 1,8 ila 5,5 V arasında geniş bir çalışma voltajı aralığına sahiptir ve I2C arayüzü üzerinden kontrol edilir.


MCP23017, 2 Arduino pini kullanacak ve 16 I/O hattı verecektir. Yani teknik olarak 16 pinli bir Arduino'yu 16 x 8 = 128 pin'e genişletmek için 8 adet MCP23017 kullanabilirsiniz. Arduino'nun I2C veri yolu için Wire.h adında bir kütüphanesi vardır, dolayısıyla MCP23017 ile arayüz oluşturmak çok basit olacaktır. Arduino ile MCP23017 arasındaki bağlantı şeması aşağıdadır.




#include "Wire.h" void setup() ( Wire.begin(); // I2C veriyolunu etkinleştirin // hatları çıkışa ayarlayın Wire.beginTransmission(0x20); Wire.write(0x00); // IODIRA kaydı Wire.write (0x00); // A bağlantı noktasının tüm satırlarını Wire.endTransmission() çıkışına ayarlayın; ) void loop() ( Wire.beginTransmission(0x20); Wire.write(0x12); // adres bankası A Wire. write((byte )0xAA); // gönderilen değer - günlükteki tüm satırlar. 1 Wire.endTransmission(); gecikme(500); Wire.beginTransmission(0x20); Wire.write(0x12); // adres bankası A Wire .write(( byte)0x55); // gönderilen değer - günlükteki tüm satırlar. 1 Wire.endTransmission(); gecikme(500); )

Arduino platformunun en önemli avantajlarından biri popülerliğidir. Popüler platform, elektronik cihaz üreticileri tarafından aktif olarak destekleniyor ve denetleyicinin temel işlevselliğini genişleten çeşitli kartların özel versiyonlarını yayınlıyor. Oldukça mantıksal olarak genişletme kartları (başka bir isim: arduino kalkanı, kalkan) olarak adlandırılan bu tür kartlar, çok çeşitli görevleri gerçekleştirmek için kullanılır ve bir arduino operatörünün ömrünü önemli ölçüde kolaylaştırabilir. Bu makalede, Arduino genişletme kartının ne olduğunu ve çeşitli Arduino cihazlarıyla çalışmak için nasıl kullanılabileceğini öğreneceğiz: motorlar (motor sürücü kalkanları), LCD ekranlar (LCD kalkanlar), SD kartlar (veri kaydedici), sensörler (sensör kalkanı) ve diğerleri.

Önce terimleri anlayalım. Arduino genişletme kartı, belirli işlevleri gerçekleştirmek için tasarlanmış ve standart konektörler kullanılarak ana denetleyiciye bağlanan eksiksiz bir cihazdır. Genişletme kartının bir diğer popüler adı da İngilizce Arduino kalkanı veya basitçe kalkandır. Gerekli tüm elektronik bileşenler genişletme kartına takılıdır ve mikro denetleyici ve ana kartın diğer elemanları ile etkileşim standart Arduino pinleri aracılığıyla gerçekleşir. Çoğu durumda, kalkanın gücü ana arduino kartından da sağlanır, ancak çoğu durumda başka kaynaklardan da güç sağlamak mümkündür. Herhangi bir kalkanda, diğer bileşenleri bunlara bağlayarak kendi takdirinize bağlı olarak kullanabileceğiniz birkaç serbest pim vardır.

İngilizce Shield kelimesi kalkan, ekran, ekran olarak çevrilir. Bizim bağlamımızda, denetleyici kartını kaplayan, cihazın ek bir katmanını oluşturan, arkasında çeşitli öğelerin gizlendiği bir ekran olan bir şey olarak anlaşılmalıdır.

Arduino kalkanlarına neden ihtiyacımız var?

Her şey çok basit: 1) zamandan tasarruf etmemiz için ve 2) birisi bundan para kazanabilir. Halihazırda monte edilmiş halde alıp hemen kullanmaya başlayabileceğiniz bir şeyi tasarlamak, yerleştirmek, lehimlemek ve hata ayıklamak için neden zaman harcayasınız ki? Yüksek kaliteli ekipmanlara monte edilmiş iyi tasarlanmış genişletme kartları genellikle daha güvenilirdir ve son cihazda daha az yer kaplar. Bu, kendi kendine montajı tamamen bırakmanız gerektiği ve belirli unsurların çalışma prensibini anlamanıza gerek olmadığı anlamına gelmez. Sonuçta gerçek bir mühendis her zaman kullandığı şeyin nasıl çalıştığını anlamaya çalışır. Ancak tekerleği her seferinde yeniden icat etmezsek ve dikkatimizi daha önce çok az insanın çözdüğü şeylere odaklarsak, daha karmaşık cihazlar yapabileceğiz.

Doğal olarak fırsatlar için para ödemek zorundasınız. Neredeyse her zaman, son kalkanın maliyeti bireysel bileşenlerin fiyatından daha yüksek olacaktır; benzer bir seçeneği her zaman daha ucuz hale getirebilirsiniz. Ancak burada harcanan zamanın veya paranın sizin için ne kadar kritik olduğuna karar vermek size kalmış. Çin endüstrisinden gelebilecek tüm yardımlar dikkate alındığında, panoların maliyeti sürekli olarak azalmaktadır, bu nedenle çoğu zaman hazır cihazların kullanılması lehine seçim yapılmaktadır.

Kalkanların en popüler örnekleri, sensörlerle çalışmak için genişletme kartları, motorlar, LCD ekranlar, SD kartlar, ağ ve GPS kalkanları, yüke bağlanmak için yerleşik rölelere sahip kalkanlardır.

Arduino Shield'ları Bağlama

Kalkanı bağlamak için, onu ana karta dikkatlice "yerleştirmeniz" yeterlidir. Tipik olarak tarak tipi kalkanın (erkek) kontakları Arduino kartının konnektörlerine kolayca takılır. Bazı durumlarda, kartın kendisi düzgün şekilde lehimlenmemişse pimleri dikkatlice ayarlamak gerekir. Burada önemli olan dikkatli hareket etmek ve aşırı güç kullanmamaktır.

Kural olarak, kalkan kontrolörün çok özel bir versiyonu için tasarlanmıştır, ancak örneğin Arduino Uno için birçok kalkan Arduino Mega kartlarla oldukça iyi çalışır. Mega üzerindeki pin çıkışı, ilk 14 dijital pin ve kartın karşı tarafındaki pinler UNO üzerindeki pin çıkışıyla çakışacak şekilde yapılmıştır, böylece bir Arduino kalkanı kolayca buna yerleştirilebilir.

Arduino Kalkanı Programlama

Genişletme kartıyla bir devre programlamak, normal Arduino programlamadan farklı değildir, çünkü kontrol cihazının bakış açısından cihazlarımızı normal pinlerine bağladık. Çizimde, blendajda bağlı olan pinleri karttaki ilgili kontaklara belirtmeniz gerekir. Kural olarak üretici, pinlerin ekranın kendisindeki veya ayrı bir bağlantı talimatındaki yazışmalarını belirtir. Kart üreticisinin önerdiği çizimleri indirirseniz, bunu yapmanıza bile gerek kalmayacak.

Kalkan sinyallerinin okunması veya yazılması da olağan şekilde yapılır: işlevleri ve herhangi bir Arduino kullanıcısının aşina olduğu diğer komutları kullanarak. Bazı durumlarda, belirli bir bağlantı şemasına alıştığınızda ve üretici farklı bir tane seçtiğinde (örneğin, düğmeyi yere ve kalkanın üzerindeki güç kaynağına çektiniz) çarpışmalar mümkündür. Burada sadece dikkatli olmanız gerekiyor.

Kural olarak, bu genişletme kartı Arduino kitlerinde gelir ve bu nedenle Arduino mühendisleri onunla en sık karşılaşırlar. Kalkan oldukça basittir - asıl görevi Arduino kartına bağlanmak için daha uygun seçenekler sağlamaktır. Bu, kartta bulunan analog ve dijital pinlerin her birine ek güç ve toprak konektörleri aracılığıyla yapılır. Ayrıca kartta harici bir güç kaynağı bağlamak için konektörler (geçiş yapmak için atlama telleri takmanız gerekir), bir LED ve bir yeniden başlatma düğmesi bulabilirsiniz. Kalkan seçeneklerini ve kullanım örneklerini resimlerde bulabilirsiniz.




Dokunmatik genişletme kartının çeşitli versiyonları vardır. Hepsi konektörlerin sayısı ve türü bakımından farklılık gösterir. Günümüzde en popüler versiyonlar Sensor Shield v4 ve v5'tir.

Bu Arduino kalkanı robotik projelerde çok önemlidir, çünkü... Normal ve servo motorları Arduino kartına aynı anda bağlamanızı sağlar. Kalkanın asıl görevi, sıradan bir Arduino kartı için yeterince yüksek akım tüketen cihazların kontrolünü sağlamaktır. Kartın ek bir özelliği, motor gücünü kontrol etme (PWM kullanarak) ve dönüş yönünü değiştirme işlevidir. Birçok motor koruma panosu türü vardır. Hepsinde ortak olan, harici bir yükün bağlandığı güçlü bir transistörün, ısı emici elemanların (genellikle bir radyatör), harici gücü bağlamak için bir devrenin, motorları bağlamak için konektörlerin ve bağlantı için bir pimin devresindeki varlığıdır. Arduino.



Ağ ile çalışmayı organize etmek modern projelerdeki en önemli görevlerden biridir. Ethernet aracılığıyla yerel bir ağa bağlanmak için karşılık gelen bir genişletme kartı mevcuttur.




Prototipleme için genişletme kartları

Bu kartlar oldukça basittir - elemanların montajı için temas yüzeyleri, sıfırlama düğmesi ve harici gücü bağlama yeteneği vardır. Bu kalkanların amacı, gerekli tüm bileşenler ana kartın hemen üzerine yerleştirildiğinde cihazın kompaktlığını arttırmaktır.





Arduino LCD kalkanı ve tft kalkanı

Bu tip shield Arduino'da LCD ekranlarla çalışmak için kullanılır. Bildiğiniz gibi, en basit 2 satırlı metin ekranını bile bağlamak önemsiz bir görev olmaktan uzaktır: güç kaynağını saymadan 6 ekran kontağını aynı anda doğru şekilde bağlamanız gerekir. Bitmiş modülü Arduino kartına yerleştirmek ve ilgili taslağı yüklemek çok daha kolaydır. Popüler LCD Tuş Takımı Kalkanı'nda, karta hemen 4'ten 8'e kadar düğme kurulur, bu da cihazın kullanıcısı için hemen harici bir arayüz düzenlemenize olanak tanır. TFT Kalkanı da yardımcı olur



Arduino Veri Kaydedici Kalkanı

Ürünlerinizde bağımsız olarak uygulanması oldukça zor olan bir diğer görev ise sensörlerden alınan verilerin zaman referansıyla kaydedilmesidir. Bitmiş ekran, yalnızca verileri kaydetmenize ve yerleşik saatten zaman kazanmanıza değil, aynı zamanda sensörleri lehimleme veya devre kartına uygun bir biçimde bağlamanıza da olanak tanır.




Kısa özet

Bu yazıda Arduino'nun işlevselliğini artıran çok çeşitli cihazların yalnızca küçük bir kısmına baktık. Genişletme kartları en önemli şeye, yani programınızın mantığına odaklanmanızı sağlar. Kalkanların yaratıcıları doğru ve güvenilir kurulumu ve gerekli güç kaynağını sağladılar. Geriye kalan tek şey, değerli İngilizce kelime kalkanını kullanarak gerekli kartı bulmak, onu Arduino'ya bağlamak ve taslağı yüklemek. Tipik olarak herhangi bir kalkan programlama, hazır bir programın dahili değişkenlerini yeniden adlandırmak için basit eylemler gerçekleştirmekten oluşur. Sonuç olarak, kullanım ve bağlantı kolaylığının yanı sıra bitmiş cihazların veya prototiplerin montaj hızını da elde ediyoruz.

Genişletme kartları kullanmanın dezavantajı ise maliyeti ve kalkanların doğasında olan evrenselliği nedeniyle olası verim kaybıdır. Dar göreviniz veya uç cihazınız için tüm koruma işlevlerine ihtiyaç duyulmayabilir. Bu durumda, kalkanı yalnızca prototip oluşturma ve test aşamasında kullanmalısınız ve cihazınızın son versiyonunu oluştururken, onu kendi devrenize ve düzen türünüze sahip bir tasarımla değiştirmeyi düşünmelisiniz. Karar vermek size kalmış, doğru seçimi yapmak için tüm fırsatlara sahipsiniz.

Herkes ucuz Arduino kartlarını sever, ancak çoğu zaman bir proje sadece bir veya iki boş bağlantı noktasına ihtiyaç duyar! Bazen yeterli bağlantı noktası vardır, ancak bir grup kabloyu yapının başka bir bölümüne çekmek istemezsiniz. Diyelim ki cihazın ön paneline birkaç düğme ve LED yerleştirmeniz gerekiyor. Bunları ana karta bir kablo veya kablo demeti yerine yalnızca iki veri yolu kablosuyla bağlamak daha güvenilir ve daha kolaydır, değil mi?

Bu tür durumlar için çeşitli Arduino bağlantı noktası genişleticileri tasarlanmıştır.

Tipik olarak mikro denetleyici pinleri birkaç farklı işlevi yerine getirir, dolayısıyla farklı genişleticiler vardır:

  1. Standart GPIO bağlantı noktası genişletici
  2. PWM çıkış genişletici
  3. Analog giriş genişleticiler – çoklayıcılar ve harici ADC'ler

Ayrı olarak, dijitalden analoğa dönüştürücülerden (DAC'ler) ve I2C veri yolunun adres alanı genişleticilerinden bahsetmeye değer. Bu cihazlar portların fonksiyonlarını doğrudan kopyalamaz, mikrodenetleyicilerin yeteneklerini genişletir.

Serinin ilk yazısında dijital I/O portları olarak çalışan en basit ve en kullanışlı genişleticilerden bahsedeceğiz. Bunlar mikro devreler ve . Tamamen aynı şekilde tasarlanmış ve çalışırlar ve yalnızca bağlantı noktası sayısında farklılık gösterirler.

Arduino için genişletici modül seçimi

En popüler ve ucuz modül PCF8574 yongasında yapılmıştır (Şekil 1)

Pirinç. 1. Popüler PCF8574 bağlantı noktası genişletici modülü

Avantajları:
  • Düşük fiyat.
  • Modüller, bir modülün fişlerinin bir öncekinin soketlerine takılmasıyla bir zincir halinde bağlanabilir. Jumper'ları farklı modül adreslerine ayarlamayı unutmayın!
Kusurlar:
  • Doğrudan devre tahtasına yerleştirilemez (bağlantı noktası konektörünün arka tarafa lehimlenmesini öneririm).
  • Bir modülde toplam sekiz bağlantı noktası.

Daha ciddi projeler havasındaysanız Aliexpress'den 16 bitlik bir PCF8575 modülü sipariş edin. Şekil 2'de gösterilen modülü şiddetle tavsiye ederim. 2.

Pirinç. 2. PCF8575 Bağlantı Noktası Genişletme Modülü

Avantajları:
  • İki kat daha fazla bağlantı noktası.
  • Dahili 3,3 volt güç kaynağı, diğer modüllere güç sağlayabilir.
  • Farklı besleme gerilimlerinde I2C veri yolu için yerleşik mantık düzeyi eşleştirme.
  • Prototipleme panosu için uygun format.
Kusurlar:
  • Daha yüksek fiyat.

PCF8574/PCF8575 GPIO bağlantı noktası genişleticisinin çalışma prensibi

Veri alışverişi I2C veri yolu üzerinden gerçekleşir. Arduino kartına bağlantı, güç dahil yalnızca dört kablo gerektirir. Genişletici adresi, A0...A2 girişlerindeki üç atlama kablosuyla ayarlanır, böylece aynı anda sekiz özdeş yongayı veri yoluna bağlayabilir ve PCF8574 ile maksimum 8*8=64 veya PCF8575 yongasıyla 8*16=128 ek bağlantı noktası elde edebilirsiniz. .

Bağlantı noktasına veri çıkışı sağlamak için I2C veri yolu üzerindeki modül adresine bir veri baytı yazın. Bir bağlantı noktasından veri okumak için aynı adresteki bir baytı okuyun. Bir bayt her zaman bir bütün olarak yazılır ve okunur; bireysel bitler programlı olarak işlenir.

Mikro devrenin çıkışları da giriştir ve çıkışın amacını belirleyen bir servis kaydı yoktur. Yalnızca çıkış baytının yazıldığı bir mandal kaydı vardır. Bu nasıl mümkün olabilir?

Bağlantı noktaları benzer açık kolektör tarzında çalışır ve dahili çekme dirençleriyle donatılmıştır. Çıkışa mantıksal bir sıfır yazılırsa, çıkış transistörü açılır ve bu da çıkışı zorla toprağa çeker. Böyle bir bağlantı noktasından okumak her zaman sıfıra döner.

Düşük olan bir pine doğrudan besleme gerilimi uygularken veya akım aşıldığında dikkatli olun. 50 mAçipi mahvedeceksin!

Bir bağlantı noktasını giriş olarak kullanmak için ona bir tane yazın. Bu durumda dahili transistör kapatılacak ve okuma sonucu pime uygulanan harici mantık düzeyine göre belirlenecektir. Serbest pin, yerleşik bir dirençle güç kaynağına bağlanır.

Bağlantı noktalarından bazılarını aynı anda giriş olarak ve bazılarını çıkış olarak kullanmak için, genişleticiye bir bayt verinin her yazılmasından önce, "mantıksal" kullanarak girişlere karşılık gelen bitlere birler maskesi uygulamak gerekir. VEYA” işlemi. Bu kadar)))

Kesinti oluşturma

PCF857* Bağlantı Noktası Genişleticileri Kesinti Darbesi Oluşturur düşük seviye mikro devrenin herhangi bir girişindeki giriş sinyalindeki herhangi bir değişiklik için INT çıkışında. Genişletici bir tuş takımına hizmet ediyorsa bu kullanışlıdır. Ancak kesme işleyicisinde hangi düğmeye basıldığını veya bırakıldığını kendiniz belirlemelisiniz. Kesinti jeneratörü, kontak sıçramasını bastıran bir filtreyle donatılmıştır.

Örnek 1: PCF8574 modülünü kullanma

Dört LED, bir PCF8574 modülü ve bir Arduino kartından oluşan basit bir devre oluşturalım (Şekil 3 ve 4). Bu bağlantı şemasıyla LED'ler için söndürme dirençlerine bile ihtiyacımız yok. Akım, LED'den ve güç rayına bağlı yerleşik bir dirençten akar.

Pirinç. 3. PCF8574 modül bağlantı şeması

Pirinç. 4. PCF8574 modülü ile devre düzeni

Taslak 1'i kopyalayıp Arduino kartına yazın:

// Veriyolundaki modül adresi (A0, A1, A2 = 0) int adresi = 0x38; // uint8_t dataReceive modülünden okunan veriler; // uint8_t modülüne yazılacak veriler dataSend; void setup() ( Wire.begin(); Serial.begin(9600); // Tüm bağlantı noktalarına yüksek seviye PCF8574 dataSend = B11111111; pcf8574_write(dataSend); ) void loop() ( // dataReceive modülünden bir bayt okuyun = pcf8574_read (); // Monitöre ikili formatta çıktı Serial.println(dataReceive, BIN); // Bitleri bir yarım bayt sola kaydırın dataSend = dataReceive<< 4; // Накладываем битовую маску dataSend |= B00001111; // Записываем байт в модуль pcf8574_write(dataSend); delay(500); } // Процедура записи байта в модуль void pcf8574_write(uint8_t dt) { Wire.beginTransmission(address); Wire.write(dt); Wire.endTransmission(); } // Процедура чтения байта из модуля int8_t pcf8574_read() { Wire.beginTransmission(address); Wire.endTransmission(); Wire.requestFrom(address, 1); return (Wire.read()); }

Başlangıçta çipin tüm bağlantı noktalarına yüksek bir seviye yazılır, böylece P0...P3 bağlantı noktaları giriş görevi görebilir.

Port pinlerindeki seviyeler her 500 ms'de bir okunur ve okuma sonucu monitörde görüntülenir. P0...P3 girişlerinden birini ortak bir kabloya bağlarsanız, bitinde sıfır görünür. Daha sonra okunan değer dört bit sola kaydırılır, sonuç porta gönderilir ve LED'lerden biri söner. Örneğin P0 pininde sıfır okunursa P4 pinine bağlı LED sönecektir.

Genişleticiye her yazmadan önce, giriş olması gereken tüm bitlere birlerden oluşan bir bit maskesi uygulamamız gerektiğini lütfen unutmayın: dataSend |= B00001111;

I2C veri yolu ile çalışma rutinleri son derece basitleştirilmiştir; hiçbir hata işlenmez.

Tavsiye: I2C veriyolundaki modül adresini bulmak ve kontrol etmek için kullanabilirsiniz. Bir veri yolu isteğine yanıt veren tüm cihazların adreslerini terminalde görüntüler.

Örnek 2: PCF8575 modülünü kullanma

PCF8575 modülünün özelliği 16 porta sahip olmasıdır. her zaman iki bayt yaz ve iki bayt oku. İkinci bayta ihtiyaç duyulmasa bile bu kurala uyulmalıdır.

Diyagramı biraz değiştirelim. LED'leri P10…P13 bağlantı noktalarına bağlayacağız ve P00…P03 bağlantı noktalarını bir jumper ile ortak kabloya bağlayacağız (Şekil 5 ve 6).

Pirinç. 5. PCF8575 modül bağlantı şeması

Pirinç. 6. PCF8575 modüllü devre düzeni

Çizim 2'de öncelikle tüm portlara 1'ler yazılıyor, ardından her 500 ms'de bir durumları okunuyor. Okuma rutini baytlara bölünmüş 16 bitlik bir kelime döndürür. Düşük baytın içeriği (P00...P07 pinleri) yüksek bayta kopyalanır ve modüle geri yüklenir. P00...P03 pinlerinden birini ortak kabloya bağlarsanız, P10...P13'e bağlı LED'lerden biri sönecektir.

// I2C #include ile çalışmak için kütüphane // Varsayılan olarak veriyolundaki modül adresi int adresi = 0x20; // Veriler uint8_t modülünden okundu hi, lo; uint16_t veri Alma; uint8_t dataHighByte; // Yüksek bayt (P10...P17) uint8_t dataLowByte; // Düşük bayt (P00...P07) void setup() ( Wire.begin(); Serial.begin(9600); // Tüm bağlantı noktalarına yüksek seviye PCF8575 dataHighByte = B11111111; dataLowByte = B11111111; pcf8575_write(dataLowByte, dataHighByte) ); ) void loop() ( // dataReceive modülünden bir bayt okuyun = pcf8575_read(); // Monitöre ikili formatta çıktı alın Serial.println(dataReceive, BIN); // Uzun bir kelimeden düşük baytı seçin dataLowByte = lowByte(dataReceive ); // Düşük baytı yüksek bayta kopyalayın dataHighByte = dataLowByte; // Düşük bayta bir maske koyun dataLowByte |= B11111111; // Modüle yeni veri yazın, iki bayt pcf8575_write(dataLowByte, dataHighByte); gecikme(500); ) / / Modüle bayt yazma prosedürü void pcf8575_write(uint8_t dtl, int8_t dth) ( Wire.beginTransmission(address); Wire.write(dtl); // Düşük baytı yaz (P00...P07) Wire.write(dth); / / Yüksek baytı yazın (P10...P17) Wire.endTransmission(); ) // int16_t pcf8575_read() modülünden bir bayt okuma prosedürü ( Wire .beginTransmission(adres); Wire.endTransmission(); Wire.requestFrom(adres, 2); lo = Wire.read(); // Düşük baytı oku (P00...P07) hi = Wire.read(); // Yüksek baytı oku (P10...P17) dönüş (word(hi, lo)); // Uzun kelimeyi döndür)

PCF8574/PCF8575 için Arduino kütüphanesi

Kütüphane GitHub'dan indirilebilir. Ancak gördüğünüz gibi port genişleticilerle çalışmak çok basit ve özel bir kütüphaneye ihtiyaç duymadan da kolaylıkla yapabilirsiniz.

Genişletici Kalkan açıklaması

Expander Shield, SPI veya I2C arayüzüne sahip port genişleticileri kullanarak Arduino platformuna dayalı mikrokontrolörlerin ve diğer mikrokontrolörlerin giriş/çıkış portlarının sayısını artırmak için tasarlanmış orijinal bir ek modüldür.


Expander Shield ek modülünün ana elemanları iki adet MCP23S17 veya MCP23017 mikro devresidir (sırasıyla SPI veya I2C arayüzüne sahip iki adet 16 bit I/O bağlantı noktası genişleticisi), bunlar dört adet 8 bit I/O bağlantı noktası eklemenizi sağlar; , 32 ek "bacak".

Teçhizat

Expander Shield modülü, monte edilmiş bir SPI veya I2C sürümü (ilgili çiplerle birlikte) veya ayrı olarak satın alınabilen çipsiz bir kit olarak sağlanır.

Modül terminalleri, çalışmaya başlamadan önce çıkarılması gereken taşıma kilitleriyle donatılabilir.

Genişletici Kalkan SPI 1100 ovmak. 850 ovmak. Sepete ekle

sipariş formu.

ExpanderShield'dan SPI veriyoluna (MCP23S17 yongalarıyla).

Genişletici Kalkan I2C 1100 ovmak. 850 ovmak. Sepete ekle

Dikkat! JavaScript'i devre dışı bıraktınız. Sipariş sisteminin ve alışveriş sepetinin normal çalışması mümkün değildir. Herhangi bir nedenle JavaScript'i etkinleştiremiyorsanız, sipariş ettiğiniz ürünleri sipariş formunda listelemeniz yeterlidir.

ExpanderShield'dan I2C veriyoluna (MCP23017 yongalarıyla).

Özellikler

Expander Shield modülünün en önemli işlevsel özellikleri şunlardır.

  • halihazırda kurulu olan bağlantı noktası genişletici yongaların türüne bağlı olarak uygun modül çalışma modu anahtarı;
  • kullanılan iki 16 bitlik G/Ç bağlantı noktası genişletme yongasının her biri için, veri yolu üzerinde üç bitlik bir adres, atlama telleri kullanılarak ayarlanır; bu, bir veri yoluna bu tür 8 adede kadar yonga yerleştirmenize olanak tanır;
  • SPI veriyolunun CS sinyali için karşılık gelen Freeduino/Arduino mikrokontrolcü çıkışının sayısını (dijital pin 8, 9 veya 10) seçmek için bir jumper kullanma yeteneği;
  • modül, Arduino kartına göre kaymadan birkaç modülü yerleştirmenize olanak tanıyan "geçişli" konektörler kullanır;
  • mikro devre sinyalleri, ek topraklama ve +5V kontaklara sahip dört PBD-10R konektörüne gönderilir;
  • 16 bit G/Ç bağlantı noktası genişletici yongaları ve Freeduino/Arduino mikro denetleyicisinin atlama kablolarını kullanarak ayrı veya ortak donanım sıfırlamasını (RESET düğmesi) seçme yeteneği;
  • kesme pinleri (INTA, INTB), donanım sıfırlaması (RST) ve çip seçimi (CS) ile ek JPIC konektörü;

Modülün diğer özellikleri öncelikle teknik açıklaması üreticinin belgelerinde bulunan MCP23S17/MCP23017 mikro devrelerinin özelliklerine göre belirlenir.

Ayrıca ek Expander Shield modülüyle çalışmaya başlamadan önce devre şemasını öğrenmenizi öneririz.

Çalışma modları

Genişletici Kalkan çalışma modu, bir DIP anahtarı ve atlama telleri kullanılarak seçilir.

Arayüz seçimi ve I2C veri yolu yukarı çekme kontrolü

Bir DIP anahtarı kullanarak, MCP23S17 mikro devreleri için SPI modunu (kontak grubu 1-4'ü açarak) veya MCP23017 mikro devreleri için I2C modunu (kontak grubu 5-6'yı açarak) seçersiniz. Ayrıca, I2C modunda, gerekirse 7 ve 8 numaralı pinler kullanılarak, I2C veriyolu akım sınırlayıcı dirençler aracılığıyla +5V güç veriyoluna çekilir. Tipik olarak, I2C veriyolunda yalnızca bir cihaz varsa, çekme dirençleri bağlanmalıdır. Birden fazla cihaz varsa, dirençler cihazlardan yalnızca birine bağlanır.

SPI ve I2C veri yolunun yanı sıra SPI veri yolu ve 7, 8 pin grubunun eşzamanlı aktivasyonu izin verilmedi.

Bir Expander Shield modülündeki iki mikro devreden biri SPI arayüzü (MCP23S17) ve diğeri I2C arayüzü (MCP23017) üzerinden çalıştığında birleşik çalışma modu imkansızdır.

Çalışmayı SPI ve I2C arayüzleri aracılığıyla aynı anda düzenlemeniz gerekiyorsa, ilgili anahtar konumlarına sahip iki (birkaç) ek Expander Shield modülü kullanmanız gerekir.

SPI veriyolunun CS sinyalini kontrol etmek için pin numarasını seçme

SPI veriyolu için CS sinyali olarak kullanılan Freeduino/Arduino mikrodenetleyici pinini seçmeniz gerekir. Tipik olarak, SS1 konektörünün en soldaki jumper konumuna karşılık gelen pin 10 kullanılır. Jumper'ı diğer iki konumdan birine hareket ettirerek sırasıyla 9 ve 8 numaralı pinleri seçmek mümkündür.

Veriyolundaki mikro devrelerin adresini seçme

MCP23S17/MCP23017 mikro devrelerinin adresinin en düşük üç biti, IC1_addr/IC2_addr konnektörlerindeki jumperlar kullanılarak 0, 1, 2 bitlerinin toprağa (Gnd) veya +5V (5V) çekilmesiyle seçilir.

Her çipin adresi benzersiz olmalıdır.

Böylece, bir veriyoluna 8 adede kadar mikro devre yerleştirilebilir (örneğin, 4 Genişletici Kalkanı birleştirerek).

Donanım sıfırlama çalışma modunun seçilmesi (RESET düğmesi)

RESET düğmesinin çeşitli çalışma modlarından birini düzenlemek mümkündür

  • RESET düğmesi Freeduino/Arduino ve MCP23S17/MCP23017 çiplerini sıfırlar
  • RESET düğmesi yalnızca Freeduino/Arduino'yu sıfırlar
  • RESET düğmesi yalnızca MCP23S17/MCP23017 yongalarını sıfırlar

JRS konektöründeki karşılık gelen atlama kablosu konumları (soldan sağa) aşağıda gösterilmiştir.

Kitaplık MCP23xxx

Bununla ve bir dizi başka modülle çalışmayı kolaylaştırmak için, MCP23xxx serisi mikro devrelerin işlevselliğine basit bir arayüz sağlayan MCP23xxx kütüphanesi geliştirilmiştir. Kütüphane ücretsiz olarak indirilebilir: Kütüphane, Arduino yazılımının 1.0.5 sürümüyle uyumludur (sonraki sürümlerle uyumluluk da beklenmektedir).

Aslında bu iki kitaplıktan oluşan bir dizidir: MCP23xxx ve LiquidCrystal_MCP23x17.

Kütüphanelerin kurulumu, kütüphanelerin bağlanması bölümünde daha ayrıntılı olarak anlatılmaktadır. Kurulumdan sonra kütüphaneler klasörünün dizin yapısı şu şekilde olmalıdır:

/libraries/LiquidCrystal_MCP23x17
/kütüphaneler/MCP23xxx

MCP23xxx kitaplığı, MCP23017, MCP23S17, MCP23008 ve MCP23S08 bağlantı noktası genişleticileriyle çalışmayı düzenleyen sınıf şablonlarını uygular. LiquidCrystal_MCP23x17 kitaplığı, Rusça dilini destekleyen ve bir bağlantı noktası genişletici aracılığıyla çalışan, değiştirilmiş standart bir LiquidCrystal kitaplığıdır.

Kütüphane, onunla nasıl çalışılacağını açıklayan örneklerle birlikte gelir. Kütüphanenin önceki sürümü de indirilebilir:

I2C veri yolu için bir modülle çalışma örneğine bakalım:

//Örnekte 1. çipin pinlerinin durumu okunup 2. çipte de aynı değerler ayarlanıyor

//I2C sürümü için Wire.h'yi bağlayın:
#katmak
//kütüphaneyi bağla
#katmak

//CMCP23017 sınıfının iki nesnesini oluşturun, ancak bunları başlatmayın çünkü I2C veri yolu hazır değil
CMCP23017 mcp23_1;
CMCP23017 mcp23_2;

geçersiz kurulum ()
{
//I2C veriyolunu başlat...
Wire.begin();
//... ve adresleri 0 ve 1 olan MCP23* nesneleri
mcp23_1.init(0);
mcp23_2.init(1);

//1. çipin tüm pinleri giriş yapılmalı ve 2. çipin tüm pinleri çıkış yapılmalı
//Bu bir döngüde yapılabilir
for (int i= 0 ; i< 16 ; i++ ) {
mcp23_1.pinMode (i, INPUT) ;
mcp23_2.pinMode (i, ÇIKIŞ) ;
}
//veya aynı anda pinMode16 yöntemini çağırarak
//mcp23_1.pinMode16(0x0ffff);
//mcp23_2.pinMode16(0x00000);
}

geçersiz döngü ()
{
//1. çipin tüm girişlerini okuyabilir ve aynısını 2. çipte bir döngü içinde ayarlayabilirsiniz
for (int i= 0 ; i< 16 ; i++ ) {
mcp23_2.digitalWrite (i, mcp23_1.digitalRead (i) ) ;
}
//veya bir kerede, digitalRead16 ve digitalWrite16 yöntemlerini kullanarak
//mcp23_2.digitalWrite16(mcp23_1.digitalRead16());
}

Daha önce yaptığım gibi, Arduino için az çok örtüşmeyen üç sensör seti sipariş ettim. Her iki sette de şimdilik kutuda kalan 74HC595 mikro devresini aldım. Şimdilik bunun ne tür bir mikro devre olduğunu ya da bu siyah hamamböceğinin nasıl etiketlendiğini bile bilmiyordum.

Ancak step motorları test etmek için bir cihaz geliştirirken Arduino Nano'nun çıkış sinyallerine doyamadığım karanlık günler geldi. (TODO: hazır olduğunuzda SD test cihazı hakkındaki makaleye bir bağlantı ekleyin). Sonuç olarak, step motorları test etme cihazımın oldukça karmaşık olduğu ortaya çıktı - tam işlevli bir 4x4 klavye tarafından kontrol edilen bir menü sistemine sahip iki satırlı 1602 ekran, step motorun mikro adım değerini ayarlamak için 3 dijital rakam, Step ve step motor vb. için Dir sinyalleri. Görünüşe göre Arduino'nun başka bir versiyonuna geçmenin zamanı geldi. Ama doğal tembelliğim bu göçe engel oldu. Ve tembel kafa bir çözüm aramaya başladı.

Halihazırda var olana dayanarak bir çözüm aramaya karar verildi. Eşarpları ve kitlerin parçalarını ayıklarken 16 iğneli siyah bir “böcek” fark ettim. Önce bir sette, sonra diğerinde. Bunun nasıl bir bölüm olduğunu ve setlere neden eklendiğini sormaya karar verdim. Bunu neden kitlere koyduklarını anlamıyorum ama çipin kendisini NXP web sitesinde buldum.

Bunun oldukça ilginç bir mikro devre olduğu ortaya çıktı - seri girişi ve paralel çıkışı olan bir kaydırma yazmacı.

(veri sayfasından)

Pimlerin açıklaması

Temas etmek İsim Açıklama ve bağlantı
10 ~MR Ana Sıfırlama- sıfırla, aktif seviye düşük. İdeal olarak, bu girişi önce düşük seviyeye, sonra da tek bir duruma getiren bir sıfırlama devresi yapmak iyi bir fikir olacaktır. Ancak oyalanıp +5V'a bağlamanıza gerek yok. Bu durumda ilk kayıttan önceki çıktı rastgele değerler içerecektir.
13 ~OE Çıkışı Etkinleştir- çıkış çözünürlüğü, aktif seviye düşük. 0 uygulandığında, yazmacın içeriği çıkışlara sağlanır; 1 uygulandığında çıkışlar kapatılır ve farklı cihazların bir veri yolunu dönüşümlü olarak kullanmasına olanak tanıyan Z durumuna aktarılır. Çıkışların durumunu kontrol etmeniz gerekmiyorsa toprağa bağlayın
14 D.S. Seri Veri Girişi- seri giriş. Bu giriş, SHCP kaydırma saati uygulanmadan önce giriş sinyali değerine ayarlanmalıdır.
11 SHCP Shift Register Giriş saati- kaydırma yazmacının saat girişi. Bir biti bir kayda taşımak için 0'dan 1'e geçiş uygulanmalıdır. 0'a ne zaman dönüleceği sizin takdirinize bağlıdır. Bunu hemen yapabilirsiniz, itmeden hemen önce yapabilirsiniz. İlk durumda, anahtarlamanın doğrudan sinyalin kenarı boyunca, ikincisinde ise ters sinyalin azalması boyunca meydana geldiğini varsayabiliriz. Ayrıca aşağıdaki performans notlarına bakın. Ayrıca bu sinyal geldiğinde seri çıkış Q7/S'nin değeri değişir.
12 STCP Depolama Kaydı Saat Girişi- mandal kaydının saat girişi. Bu darbenin kenarında, değer kaydırma yazmacından Q0-Q7 paralel çıkışlarına aktarılır.
9 Q7S Seri Veri Çıkışı- seri çıkış. Kaydırma yazmacının en önemli bitinin değeri üzerinde görüntülenir. Bu çıkış, kaydırma yazmacını 16 bit, 24 bit vb.'ye ölçeklendirmek için kullanılabilir. şema
15, 1-7 Q0, Q1-7 Mandal kayıt çıkışları. STCP sinyalinin gelmesi üzerine sinyal dahili kaydırma yazmacından onlara aktarılır.
8 GND Beslenme- ortak tel
16 VCC Beslenme - +

Beslenme

Mikro devrenin HC versiyonu 2V ila 6V güç kaynağı gerektirir, HCT versiyonu (TTL uyumlu) - 4,5V ila 5,5V arası. HCT - TTL - hala kullanılıyor mu? Arduino, CMOS'un kendisi gibi görünüyor, bu nedenle HCT'ye gerek yok, ancak seviyeleri harici TTL tüketicileri ile koordine etmeniz gerekiyorsa, HC'ye 3,3V'den güç verebilirsiniz, o zaman sinyal seviyeleri TTL ile uyumlu olacaktır. Genel olarak hem HC hem de HCT, 5 voltluk bir Arduino ile çalışmalıdır. İnternette yazdıkları bunlar.

Daha da önemlisi engelleme kapasitörleridir. Bunlar olmadan devre amaçlandığı gibi çalışmayabilir ve dahası öngörülemez olabilir. Teorik olarak her kasanın güç kaynağı devresine 0,1 µF kapasitör takılmalıdır. Bu kapasite değerini internetten ortalama olarak hesapladım. Planım onsuz gayet iyi işledi. Açıklığa kavuşturmak için devre tasarımcısının İncil'ine girdim - Hill ve Horowitz, "Devre Tasarımı Sanatı" neredeyse Donald Knutt'un "Programlama Sanatı" kitabına benziyor, ancak yalnızca donanım insanları için (bu arada, Hill ve Horowitz) insanlara çok daha yakınlar, Knutt sayesinde - çok akıllı davranıyor) - ama orada girişlerdeki ayırma kapasitörleri olarak engelleme kapasitörleri diyorlar. Yazık, güzel bir kitap ama zaten çağın çok gerisinde. 90'ların sonu veya 0'ların başındaki ikinci veya üçüncü Rusça basımına sahibim, orijinali büyük olasılıkla hala 10 yıl daha eski. Üçüncü, pembe ciltte bir çıkartma buldum - "14 ruble" - o zamanlar modern standartlara göre her şey ne kadar ucuzdu. Ancak yalnızca 15 yıl veya biraz daha fazla zaman geçti. Nostalji çok yoğundu.

Verim

74HC595 veri sayfasının başlığında 100 MHz'de çalıştığını yazıyorlar. Veri sayfası grafiklerine ve tablolarına hızlı bir bakış, 4,5V güç kaynağıyla -40C ila +85C sıcaklık aralığındaki en uzun zamanlamaların 10-20ns (100-50MHz) olduğunu gösterir. Arduino'nun çalıştığı frekanslar sayesinde başka hiçbir şey bilmenize gerek yok. Yalnızca standart digitalRead/digitalWrite kitaplığının çeşitli kontroller nedeniyle büyük frenler oluşturması mümkündür ve daha hızlı bir sürüm olarak yeniden yazılabilir (ve yazılmalıdır). Bu konuyu derinlemesine inceleyip daha detaylı yazma planlarım var ama şimdilik özel bir ihtiyacım yok.

Gözlemlerime göre, Arduino Nano ve Arduino kütüphanesinin çıkışları değiştirme ve girişleri işleme hızı açısından performansı, birkaç kilohertz'den onlarca kilohertz'e kadar ortada bir yerde. Yani benim görüşüme göre, 74HC595 kaydırma yazmacını kontrol etmek için kod yazarken, kontrol sinyallerinin ayarlanmasında herhangi bir gecikme konusunda endişelenmenize gerek yok.

Başka bir şey de, 8 bitlik bir seri genişletici için, Arduino'da mevcut maksimum çıkış anahtarlama frekansını bölmeniz gerektiğidir - DS'yi ayarlamanız, SHCP'yi 1'e ayarlamanız, SHCP'yi (0'a) - 8 kez sıfırlamanız ve STCP'yi ayarlamanız/sıfırlamanız gerekir. Bir bakışta toplam 3 * 8 + 2 = 26 digitalWrite işlemi. Toplamda Arduino'nun yapabileceğinden yaklaşık 25 kat daha yavaş olduğu ortaya çıktı.

16, 24 veya 32 çıkışa ölçeklendiğinde yavaşlama sırasıyla yaklaşık 3*16 + 2 = 50, 3*24 + 2 = 74 ve 3*32 + 2 = 98 kat olacaktır.

Açıkçası, böyle bir 74HC595 kaydırma yazmacı genişleticisi gerçekten hızlı bir şeyi kontrol etmek için uygun değildir, ancak bazı uygulamalarda nadiren değişen statik sinyalleri ayarlamak için oldukça uygundur. Örneğin, step motorlar için bir test cihazında DRV8825 step motor sürücüsü için mikrostep modunu ayarlamak üzere 3 bitlik bir mikrostep modunu ayarlamak için böyle bir genişletici kullandım. Bu arada, bu benim için henüz pek yararlı olmadı - nokta vuruşlu yazıcıların stepper'ları mikrostep modunda, en azından DRV8825 sürücüsünün kontrolü altında çok iyi çalışıyor - örneğin, mikrostep modunda adımın 1/2 yarısı bir şekilde yavaş ve kararsız, yalnızca ikinci yarı iyimser ve güçlü. Bu nedenle mikro adım kullanıldığında, step motor eksenine uygulanan en ufak bir çabayla ilk yarım adımları atlamaya başladı. Bundan sonra, bir şekilde mevcut yazıcı SD'lerinde kalan mikro adım modlarını keşfetmedim.

Ölçeklendirme

74HC595'i temel alan Arduino çıkış genişleticisi, 8 bitlik versiyondan herhangi bir kapasiteye sahip bir devreye oldukça basit bir şekilde dönüştürülebilir. Bunu yapmak için, düşük kayıt Q7S'nin seri çıkışı, yüksek olanın DS girişine bağlanmalı ve SHCP ve STCP hatları paralel olarak bağlanmalıdır. Kabul edilen devre ve yazılım çözümüne bağlı olarak ~MR ve ~OE hatlarını nasıl bağlayacağınızı seçmeniz gerekir.

Giriş genişletme

Arduino için giriş hatlarını genişletmek, prensip olarak çıkışı genişletmeye benzer; çıkışta DS değerini ayarlamanıza gerek olmadığı, girişte okumanız ve 74HC597 tipi bir çip kullanmanız gerektiği dikkate alınır. Ancak bunu henüz pratikte test etmedim.

Çoğullama

Arduino tarafından kontrol edilen çıkış hatlarının sayısını iki şekilde artırabilirsiniz: 1) bir seri çıkışın bit kapasitesini artırın; bu, bit kapasitesini iki, üç veya dört kat artırdığınızda genişleticinin hızını buna bağlı olarak iki katına çıkarır. , üç veya dört kez; 2) performansı kabul edilebilir bir seviyede tutabilen, ancak her genişletici için en az bir Arduino çıkışının kullanılmasını gerektiren, her genişletici için bir ek çıkış kullanırken birkaç genişleticinin paralel bağlantısı.

Arduino ile 74HC595 - ~MR, ~OE kayıt sinyallerini doğrudan kontrol etmiyorsanız, DS, SHCP ve STCP kaydırma yazmaç sinyallerini 8 veya 16 veya daha fazla çıkış sinyaline dönüştürmek için yalnızca üç Arduino çıkışı yeterlidir. 74HC595 çipini kullanarak.

74HC595'i temel alan birkaç genişleticiyi çoğullamak için iki yoldan gidebilirsiniz: 1) her sinyal genişletici için ayrı bir mandal sinyali seçin - ör. otobüsteki tüm kayıtlar gelen verileri paralel olarak kaydırır ve buna göre dahili kaydırma yazmacının çıkışlarındaki değerleri kaydırır, ancak yalnızca biri değeri dahili kaydırma yazmacından mikro devrenin çıkışlarına iletir; 2) kaydırma sinyalleri genişleticilerden yalnızca birine iletilir ve sinyal değerlerinin çıkışa aktarımı tüm genişletme modülleri için aynı anda gerçekleşir.

Dahili vardiya kayıtları istediğiniz herhangi bir şeyi içerebildiğinde (seçenek 1) ve önceki değerlerden bazıları çıkışta sabitlendiğinde bu seçeneği kullanmaya daha meyilliyim ve işte nedeni: dahili vardiyadan değerleri aktarırken dahili kayıttaki ve çıkıştaki başlangıç ​​değeri aynı olsa bile, 0'dan 1'e ve geriye doğru kontrolsüz geçişler meydana gelebilir, bir tür sinyal sıçraması meydana gelebilir. Ve bence dahili kaydırma yazmacının durumunu 74HC595'in çıkışlarına aktarma işlemi mümkün olduğunca az kullanılmalıdır.

Yazılım desteği

Bu ve benzeri uzantılar için yazılım desteği, kullanılan Arduino kontrol cihazının digitalRead/digitalWrite özelliğini kullanarak cihazlara doğrudan belirli pinler üzerinden değil, soyut bir I/O cihazının pinleri aracılığıyla erişmeyi içerir; bu cihaz da bağlı olarak başlatılabilir. belirli bir Arduino tipine ve başka bir benzer soyut cihaza.
Fok
Konunun devamı:
Bilgisayar

"Bu tür iletişim Beeline aboneleri için mevcut değil" - böyle bir mesaj çok sık görünmüyor, ancak görünümü pek de iyiye işaret değil. Ve asıl sorun...