LCM1602 LCD ekranının I2C ile Arduino'ya bağlanması. LCD ekran LCM1602'yi I2C'den Arduino'ya bağlama LCD 1602'yi i2c arayüzü üzerinden bağlama

LCD ekran- Arduino projelerinin sık sık konuğu. Ancak katlanır devrelerde çok sayıda kontağı olan bir ekrana bağlanma ihtiyacından dolayı Arduino portlarının bulunmaması gibi bir sorun yaşayabiliriz. Bu durumdan çıkış yolu şu olabilir I2C/IIC Pratik olarak standart bir Arduino 1602 ekranını ek 4 pin ile Uno, Nano veya Mega kartlara bağlayan bir adaptör. Bu makale, bir LCD ekranı I2C arayüzüne nasıl bağlayabileceğinizi, kitaplıklara nasıl erişebileceğinizi, kısa bir örnek yazabileceğinizi ve tipik uygulamalara nasıl bakabileceğinizi gösterir.

Sıvı kristal ekran LCD 1602Çeşitli projelerde sembol satırlarını görüntülemek için ilk tercihtir. Ucuzdur, farklı arka ışık renklerine sahip çeşitli modifikasyonlarla Arduino taslağı için kolayca hazır kütüphaneler oluşturabilirsiniz. Ale, yutulmamış kısa ömürlü Tsoogo Ekran є bu gerçek, Visnovkiv'in digiribrus'unun 16 Mayıs'ta Yakiki -Ism ile en az 6'da gösterilmesi. Arduino UNO Poen Nano'ya I2C SERYOZHEND olmadan Tsoogo LCD'nin vicoristanı. Temas yoksa, bir Arduino Mega kartı satın almanız veya ekranı i2c aracılığıyla bağlamak da dahil olmak üzere kişileri korumanız gerekecektir.

LCD 1602 pinlerinin kısa açıklaması

Gelin LCD1602 teknolojisine daha yakından bakalım:

Asma derisinin kendi anlamı vardır:

  1. Toprak GND'si;
  2. Harchuvannya 5;
  3. Monitör kontrastını ayarlama;
  4. Ekip, veriler;
  5. Verileri kaydetme ve okuma;
  6. Olanak vermek;

7-14. Veri hatları;

  1. Artı destek;
  2. Eksi aydınlatma.

Ekran özellikleri:

  • Sembolik gösterim türü - sembollerin tanıtılması olasılığı;
  • LED arka ışığı;
  • Denetleyici HD44780;
  • Canlı voltaj 5V;
  • 16x2 karakter biçimlendirin;
  • Çalışma sıcaklığı aralığı: -20°С ila +70°С, depolama sıcaklığı aralığı: -30°С ila +80°С;
  • 180 derece etrafa bakayım.

LCD'nin i2C olmadan Arduino kartına bağlantı şeması

Bir monitörü I2C olmadan doğrudan bir Arduino mikro denetleyicisine bağlamak için standart şema buna benzer.

Bağlı olan çok sayıda kontak nedeniyle gerekli elemanları almak için yeterli alan olmayabilir. I2C anahtarı dart sayısını 4'e ve dolu pin sayısını 2'ye değiştirir.

Arduino için LCD ekranlar ve kalkanlar nereden alınır?

LCD ekran 1602 (ve sürüm 2004) çok popülerdir, bu nedenle onu hem yerel çevrimiçi mağazalarda hem de dış pazarlarda kolayca bulabilirsiniz. Mevcut seçeneklere bir göz atalım:

Arduino ile birlikte mavi ekranlı LCD1602+I2C modülü Basit bir LCD1602 ekran (yeşil arka ışık) 80 rubleden daha ucuz Arduino için I2C HD44780'li geniş LCD2004 ekran (mavi ve yeşil arka aydınlatma)
IIC adaptörlü ve mavi ışıklı 1602 ekranı LCD1602'nin lehimli I2C modülüne sahip başka bir versiyonu Arduino'ya uygun ekran 1602 için Port IIC/I2C/TWI/SPI adaptör modülü
RGB anahtarlı ekran! LCD 16×2 + tuş takımı +Arduino için Buzzer Shield Arduino için düğmeler ve ekran ile kalkan LCD1602 LCD 1602 3D yazıcı için LCD ekran (RAMPS 1.4 için Smart Controller, Text LCD 20×4), SD ve MicroSD kart okuyucu modülü

I2C protokolünün açıklaması

Öncelikle ekranın i2c adaptör aracılığıyla Arduino’ya bağlanmasından kısaca bahsedelim. Kısaca i2C protokolünün kendisinden bahsedelim.

I2C/IIC(Entegre Devreler Arası), orijinal olarak entegre devreleri bir elektronik cihazın ortasına bağlamak için oluşturulmuş bir protokoldür. Tasarım Philips firmasına aittir. i2c protokolü, kendisini kontrol eden elektroniklerdeki blokları bağlamak için gerekli olan vicorstan 8 bitlik veriyoluna ve koma cihazlarıyla aynı kablolar üzerinden bağlanabilen adresleme sistemine dayanmaktadır. Veri paketlerine gerekli öğenin tanımlayıcısını ekleyerek yalnızca bir veya başka bir cihaza veri sağlıyoruz.

En basit I2C devresi, bir kablolu cihazı (genellikle bir Arduino mikrodenetleyicisi) ve birçok cihazı (örneğin bir LCD ekran) barındırabilir. Her cihazın 7 ila 127 aralığında bir adresi vardır. Aynı adrese sahip iki cihazın aynı devrede olması gerekmez.

Arduino kartı donanım düzeyinde i2c'yi destekler. Bu protokolü kullanarak cihazları bağlamak için A4 ve A5 pinlerini kullanabilirsiniz.

I2C robotunda bir takım avantajlar görebilirsiniz:

  • İş en az 2 satır gerektirir – SDA (veri hattı) ve SCL (senkronizasyon hattı).
  • Çok sayıda kablolu cihazın bağlanması.
  • Huzursuzluk saatini değiştiriyorum.
  • Tüm cihaz setini kontrol etmek için yalnızca bir mikro denetleyici gereklidir.
  • Bir veriyoluna bağlı herhangi bir sayıda mikro devre yalnızca bir sınır kapasitesiyle çevrilidir.
  • Özel bir filtre sayesinde yüksek düzeyde veri tasarrufu, devrelerde oluşan sıçramaları bastırır.
  • Ortaya çıkan arızaları teşhis etmek ve arızaları düzeltmek için basit bir prosedür.
  • Veri yolu zaten Arduino'nun kendisine entegre edilmiştir, dolayısıyla veri yolu arayüzünü daha da genişletmeye gerek yoktur.

Nedoliky:

  • Hattaki temel önyargı 400 pF'dir.
  • Veriyolunda çok sayıda farklı cihaz bulunduğundan I2C denetleyicisini programlamak önemlidir.
  • Çok sayıda cihaz olduğunda, içlerinden biri otomatik olarak düşük seviyeli bir faktör yüklediğinden arızanın yerini belirlemek zorlaşır.

LCD 1602 Arduino için i2c modülü

Arduino'ya i2c ekran kurmanın en iyi ve en kolay yolu, yerleşik protokole sahip hazır bir ekran satın almaktır. Ancak bu tür ekranlar kokuya dayanamaz, ucuz değildir. Ve farklı standart ekranların ekseni zaten büyük bir güç üretti. Bu nedenle, bugün en erişilebilir ve en popüler seçenek, bitişik bir I2C modülünün (buna benzeyen bir adaptör) satın alınması ve değiştirilmesidir:

Modülün bir tarafında toprak, ömür ve veri aktarımı için 2 adet i2c pini bulunmaktadır. Başka bir adaptörden dış yaşamın güllerini kullanacağız. Ve elbette, modülün ekranın standart bileşenlerine lehimlenmesine ek olarak tahtada çıplak bir alt kısım var.


Arduino ödemesine bağlanmak için i2c çıkışını kullanın. Gerekirse aydınlatma için harici bir besleme bağlarız. Yerleşik bir trim direnci yardımıyla kontrast ayarlarını J yapabiliriz

Piyasada lehimli adaptörlü LCD 1602 modüllerini bulabilirsiniz, kurulumları mümkün olduğunca basitleştirilmiştir. Aynı adaptörü satın aldıysanız, onu önceden modüle lehimlemeniz gerekecektir.

RK ekranını I2C aracılığıyla Arduino'ya bağlama

Bağlanmak için Arduino kartının kendisine, bir ekrana, bir devre tahtasına, konektörlere ve bir potansiyometreye ihtiyacınız var.

Özel bir i2c adaptörü kullanıyorsanız öncelikle onu ekran modülüne lehimlemeniz gerekecektir. Orada merhametli olmak önemli, böyle bir plana dahil olabilirsiniz.


İlave dört dart için ödeme yapmadan önce i2c destekli bir RCD monitörü bağlanır - iki dart veri için, iki dart ömür boyu.

  • GND bağlantısı kart üzerindeki GND'ye bağlanır.
  • VCC 5V'ta.
  • SCL, A5 pinine bağlanır.
  • SDA pin A'ya bağlanır.

Bu kadar! İçinde kaybolmanın kolay olduğu uzun yolculuk ağları. Bu durumda, i2C protokolünün uygulanmasının tüm karmaşıklığını kütüphanelere emanet edebiliriz.

i2c LCD ekranlı robotlar için kitaplıklar

Arduino ile LCD 1602 arasında I2C veriyolu aracılığıyla iletişim kurmak için en az iki kütüphaneye ihtiyacınız olacak:

  • I2C ile çalışmaya yönelik Wire.h kütüphanesi standart Arduino IDE programına zaten dahil edilmiştir.
  • Bir monitörü I2C veri yolu aracılığıyla kontrol etmek için çok çeşitli komutlar içeren LiquidCrystal_I2C.h kitaplığı, daha basit ve daha kısa bir çizim oluşturmanıza olanak tanır. Ek olarak kütüphanenin kurulması gerekmektedir. Ekranı bağladıktan sonra LiquidCrystal_I2C.h kütüphanesini kurmanız gerekmektedir.

Gerekli tüm kütüphaneleri taslağa bağladıktan sonra bir nesne oluşturuyoruz ve onun işlevlerini özelleştirebiliyoruz. Test için popo üzerinde standart bir çizim kullanılması önemlidir.

#katmak #katmak // Kitaplık bağlantıları //#include // Alternatif bir kitaplığın bağlanması LiquidCrystal_I2C lcd(0x27,16,2); // Pokazum I2C adresi (Gece ​​-parlaklık), Ekranın parametresiyim (LCD 1602'de - ciltteki 16. sembolün 2 satırı // Liquidcrystal_pf8574 LCD (0x27); // Bigblastic PCF8574 VOOID kurulumu için Wareant (LCD) (LCD .init ( ); // lcd.backlight() ekranını başlat; // lcd.setCursor(0,0) ekranını bağlayın; // İmleci ilk satırın başına yerleştirin lcd.print ("Merhaba"); .setCursor(0,1); // İmleci başka bir satırın başına yerleştirin lcd.print("ArduinoMaster"); // Metni başka bir satıra yazın) void loop() ( )

LiquidCrystal_I2C kütüphanesinin fonksiyonlarının ve yöntemlerinin açıklaması:

  • home() ve clear() – ilk işlev, imleci ekranın üst kısmına döndürmenize ve aynı zamanda daha önce monitörde olan her şeyi görüntülemenize olanak tanır.
  • write(ch) – ekrana tek karakterli bir ch yazmanıza olanak sağlar.
  • Cursor() ve noCursor() – imleci ekranda gösterir/gizler.
  • Blink() ve noBlink() – imleç yanıp söner/yanıp sönmez (ekranı daha önce etkinleştirilmişse).
  • display() ve noDisplay() – ekranı bağlamanıza/açmanıza olanak tanır.
  • ScrollDisplayLeft() ve ScrollDisplayRight() – ekranı bir sol/sağ el işaretiyle kaydırır.
  • autoscroll() ve noAutoscroll() – otomatik kaydırma modunu açmanıza/kapatmanıza olanak tanır. Hangi dış görünüm modu için ekranda daha önce yazılan yere yeni bir sembol kaydedilir.
  • leftToRight() ve rightToLeft() – Görüntülenen metnin doğrudan kurulumu – soldan sağa veya sağdan sola.
  • createChar(ch, bitmap) – siyah beyaz noktalar oluşturmak için bir dizi bitmap bitmap kullanarak ch (0 – 7) kodlu bir karakter oluşturur.

i2c ekranlı robotlar için alternatif kütüphane

Bazı durumlarda, PCF8574 denetleyicilerle donatılmış cihazların bulunduğu atanan kitaplık hasar gördüğünde hatalar meydana gelebilir. Bu seçeneğe bir alternatif LiquidCrystal_PCF8574.h kütüphanesidir. Victorialılar için sorunların nedeni olmayan LiquidCrystal_I2C'yi genişletiyor.

i2c lcd ekranı bağlama sorunları

Bir çizime tıkladıktan sonra ekranda istediğiniz mesajı göremiyorsanız, bu eylemlere tıklamayı deneyin.

Öncelikle monitörün kontrastını artırabilir veya değiştirebilirsiniz. Çoğu zaman karakterler kontrast ve aydınlatma modları sayesinde görünmez.

Bu işe yaramazsa kontakların doğru şekilde bağlandığını ve canlı güç kaynağının bağlı olduğunu kontrol edin. Uyumlu bir i2c adaptör kullandıysanız kontakların lehim noktasını tekrar kontrol edin.

Ekrandaki eksik metnin diğer bir yaygın nedeni yanlış i2c adresleri olabilir. Cihazın adresini 0x27 0x20 veya 0x3F ile çizimlerde hatırlamaya çalışın. Farklı distribütörlerin ödeme için farklı adresleri olabilir. Bu işe yaramazsa, cihazın tüm bağlantılarına bakan ve kaba kuvvet yöntemi kullanarak adreslerini belirleyen i2c tarayıcı taslağını çalıştırabilirsiniz. Bir i2c tarayıcının uç taslağı.

Ekran hala çalışmıyorsa adaptörü lehimlemeyi ve LCD'yi her zamanki gibi bağlamayı deneyin.

Visnovok

Bu yazımızda, eğer kartta ekstra tasarruf yapmamız gerekiyorsa, katlanır Arduino projelerinde LCD ekran için ana güç kaynağına baktık. Basit ve ucuz bir i2c adaptörü, yalnızca 2 analog pin kullanarak 1602 LCD ekranı bağlamanıza olanak tanır. Daha fazla durumda daha da önemli olabilirsiniz. Kullanılabilirlik ücreti - ek bir modül kullanma ihtiyacı - bir dönüştürücü ve bir kitaplık. Bizce esnekliğin bedeli hiç de yüksek değil ve projelerde bu esneklikten faydalanmanızı öneriyoruz.

LCD I2C modülü, yalnızca iki sinyal kablosunu kullanarak bir karakter ekranını Arduino kartına bağlamanızı sağlar.

Vikorize bileşenler (Çin'den satın alın):

. Kerivna tahtası

. Aile dartları

Ana teknik özellikler:

Ekran: Karakter 16x02 veya 20x04
. Sublight: Beyaz sembollü mavi
. Kontrast: Potansiyometre ile ayarlanabilir
. Canlı voltaj: 5V
. Arayüz: I2C
. I2C adresleri: 0x27
. Boyutlar: 82mm x 35mm x 18mm

Arduino'ya bağlantılar

Dört pinli standart 2,54 mm soketli modül

SCL: seri saat hattı (Seri SAAT)

S.D.A.: Seri Veri

VCC: "+" meyhane

GND: "-" canlı

Bağlantılar, farklı denetleyicilere dayalı olarak Arduino kartlarında I2C arayüzünü sağlar ve farklılık gösterir.

Bu modülle çalışmak için LiquidCrystal_I2C1602V1 kütüphanesini kurmanız gerekir.

Onu topluyoruz, paketinden çıkarıyoruz ve Arduino babasının kütüphaneler klasörüne atıyoruz. Kütüphane eklendiğinde Arduino IDE açık olduğundan orta kısım yeniden etkinleştirilmiştir.

Doğrudan taslağa geçelim. Bu uygulama standart “Merhaba dünya!” Ve yattığımız yerin adresinde.

örnek program kodu:

#katmak #katmak LiquidCrystal_I2C lcd(0x27,16,2); /* Adresi ve görüntü boyutunu ayarlar. 20x04 ekranlı LCD I2C modülü kullanırken kodda herhangi bir değişiklik yapmanıza gerek yoktur, yalnızca doğru boyutu ayarlayın */ geçersiz kurmak() (lcd.init(); //LCD'nin başlatılması lcd.backlight(); // Arka aydınlatmayı etkinleştir // İmleç ilk satırda lcd.print("Merhaba dünya!"); // Metni görüntüle lcd.setCursor (0, 1); // İmleci 2. satırın başına getirin lcd.print("site"); // Metni görüntüle) geçersiz döngü () { }

Güç sembollerinin yaratılması

Gösterilen metin okunmuştur, İngilizce alfabe ekranın ortasındaki kontrol cihazının belleğine bağlanmıştır ve herhangi bir sorun yoktur. Kontrolörün hafızasında gerekli sembol yoksa eksen ne yapmalıdır?

Sorun değil, gerekli sembol manuel olarak oluşturulabilir. Parçalar halinde 7 karakterin serpiştirildiği bu yöntem, tanımlama sorununun çözülmesine yardımcı olacaktır.

Kitap, baktığımız ekranlarda 5x8 nokta içeriyor. Bir sembol oluşturmak için tek yapmanız gereken, bir bit maskesi yazmak ve içindeki noktaların ve sıfırların olduğu yerlere birimleri yerleştirmektir.

Aşağıda işaret edilenin üzerinde gülen bir yüz var.

örnek program kodu:

//Arduino IDE 1.0.5'te test edildi //gerekli kütüphaneleri ekliyoruz#katmak #katmak // Pobutov'un gülmenin simgesi olan maskesi byte smile = (B00010, B00001, B11001, B00001, B11001, B00001, B00010,); LiquidCrystal_I2C lcd(0x27,20,4); // Adresi ve ekran boyutunu ayarlayın. geçersiz kurmak() (lcd.init(); //LCD'nin başlatılması lcd.backlight(); // Arka aydınlatmayı etkinleştir // 0 sembol numarasını oluştur lcd.createChar(1, gülümse); lcd.setCursor(0, 0); // İmleci 1. satırın başına yerleştirin lcd.print("\1"); // Smiley'yi göster (sembol numarası 1) - "\1") geçersiz döngü () { }

Sembol oluşturma programı

Yorumlarda bir katılımcı karakter oluşturucuya bir mesaj gönderdi

Burada markete eklenen Chip Resistor, kahverengi cihazlarda kurulum ve durgunluk için solucan cihazıdır. Bu cihaz, HD44780 denetleyicinin altında 4 bit modunda bir LCD ekranla kullanılmak üzere tasarlanmıştır. Bu amaçla kart üzerine I2C veriyolunu paralel 8 bitlik bir bağlantı noktasına dönüştüren bir mikro devre yerleştirilmiştir.

Kart, PK ekranıyla hemen birleştirilebilecek şekilde kablolanmıştır. Girişe canlı I2C hattı sağlanır. Kart, SCL ve SDA hatlarında çekme dirençleri, kontrastı ve ekranın ömrünü ayarlamak için bir potansiyometre ile donatılmıştır.

Sağdaki atlama kablosu yanıp sönüyor/yanıp sönüyor. Daha sonra test cihazını kullandıktan sonra bir tabela katlandı. Modülün kurulumundan sonra ortaya çıktı: P3 mumlarla ilgileniyor. Jumper olarak 1 arka ışığı açar ve 0 söner. Jumper çıkarıldığında anahtar her zaman kapanacaktır. Daha sonra, axlib kitaplığının bir I2C veri yolu (yazılım uygulaması) ile çalışma işlevleri ve PCF8574 mikro devresiyle güç kaynağı işlevleriyle desteklenmesine karar verildi. İki kelimeyle modülün nasıl çalıştığı. Mikro devrenin adresini I2C veriyoluna göndermeniz gereken bir baytın paralel çıktısını almak için (varsayılan olarak 0x4E'dir. Ayrıca karta bir jumper lehimleyerek ve değerleri değiştirerek de adresi değiştirebilirsiniz) düşük sıralı bit adreslerinden biri), ACK reddedildikten sonra veri baytı gönderilir. Mikro devre ACK ile yanıt verdikten sonra bayt, mikro devrenin paralel portunda belirir. PK ekranını kontrol etmek için axlib kitaplığından işlevler aldım ve bunları I2C veri yolu ile çalışacak şekilde biraz değiştirdim. #katmak #katmak #katmak #katmak #define 0x4E EKLE // Mikro devre adresleri /* LCD Çip RS P0 RW P1 EN P2 D4 P4 D5 P5 D6 P6 D7 P7 P3'ün altına bir ışık bağlanır. 1 açık, 0 vik. */ // Videdennya'ya saygı duruşu com | = 0x04; // E'den bire pcf8574_byte_out(com, EKLE); // Videdennya'ya saygı duruşu com &= 0xFB; // Є'ı sıfıra pcf8574_byte_out(com, EKLE); // Videdennya'ya saygı duruşu) void init (void) (_delay_ms (30); com(0x30); _delay_us(40); com(0x30); // 4 bit moduna geçiş _delay_us(40); // Vikonannya komutuna göre kırpma com(0x30); // 4 bit moduna geçiş _delay_us(40); // Vikonannya komutuna göre kırpma com(0x20); // 4 bit moduna geçiş _delay_us(40); // Vikonannya komutuna göre kırpma com(0x20); // Parametrelerin ayarlanması com(0x80); // Parametrelerin ayarlanması com(0x00); // Canlı görüntü com(0x80); // Canlı görüntü com(0x00); // Göstergeyi temizle com(0x10); // Göstergeyi temizle com(0x00); com(0x60); //Veri giriş modunu ayarlayın com(0x00); com(0xC0); // Seçilen imleçle ekranı aç) void char_out(BYTE data) ( BYTE data_h = ((data & 0xF0) + 0x09); BYTE data_l = ((data // Data_h |= 0x04'ün en anlamlı 4 bitini aktarın; pcf8574_byte_out(data_h, ADD)); // En yüksek 4 biti aktar // En yüksek 4 biti aktar // Daha genç 4 bitin transferi // Daha genç 4 bitin transferi // Daha genç 4 bitin transferi) void str_out(BYTE *str) ( while((*str) != "\0") ( char_out(*str); str++; ) ) int main(void) ( init(); str_out("ЁPҐBET MҐP!" ;while(1) ( ) ) Vlasna, burada neler oluyor? Artık I2C ve PCF8574 için kütüphaneleri bağlayabiliriz. I2C hakkında zaten yazmıştım, size tekrar anlatacağım ve PCF8574.h'deki eksenden bahsedeceğim. Kütüphane deposuna yalnızca üç işlev eklendi.
BYTE pcf8574_test(BYTE add) ( BYTE ask = ACK; add &= 0xFE; i2c_start(); ask = i2c_send_byte(add); i2c_stop(); return ask; )İlk fonksiyon veriyolunda cihazın varlığını doğrulamak için yazılmıştır. Prensip olarak otobüsteki herhangi bir cihazı bulmak için kullanılabilirler. Fonksiyon cihazın adresini kabul eder ve eşleşirse sıfıra döner. Veriyolunda böyle bir adrese sahip bir cihaz yoksa birini çevirin.
BYTE pcf8574_byte_out(BYTE verileri, BYTE ekle) ( BYTE ask = ACK; add &= 0xFE; i2c_start(); ask = i2c_send_byte(add); if(!ask) ask = i2c_send_byte(data); ) Bu fonksiyon zaten bu mikro devreye uyarlanmıştır. Bir argüman olarak, veriyoluna mikro devrenin adresine bir bayt gönderilir. İşlev, önce adres için mikro devreyi istemek ve ardından baytı bulmaktır. Mikro devre bir bayt aldıysa ve bir ACK gönderdiyse, işlev mikro devreyle çalışmayı bitirir ve bir bayt gönderdiği için sıfıra döner. Ve mikro devre artık bu baytı paralel portuna gönderiyor. Aksi takdirde, NACK reddedilir ve ardından tekrar bire dönerek iletim başarısız olur.
BYTE pcf8574_str_out(BYTE *data, BYTE sütunu, BYTE add) ( BYTE ask = ACK; add &= 0xFE; i2c_start(); ask = i2c_send_byte(add); for(BYTE i=0; i Bu işlev deneme amaçlıdır. Gösterge bir dizi tek baytlık veri, bayt sayısı ve mikro devrenin adresini alır. Lütfen oturum başına bir bayt değil, tüm verileri tek oturumda aktarmaya çalışın. İşlev çalışıyor ancak PK ekranı için uygun değil. Şimdi ana programa geri dönelim. Kütüphaneleri bağladıktan sonra mikro devrenin adresini yazın. Daha sonra lcd.h'ye benzer üç fonksiyon oluşturuyoruz. Transfer ilkesinin önemi daha azdır.
geçersiz com (BYTE com) (com | = 0x08; // P3'ten bire, böylece anahtar yanıyor pcf8574_byte_out(com, EKLE); // Videdennya'ya saygı duruşu com | = 0x04; // E'den bire pcf8574_byte_out(com, EKLE); // Videdennya'ya saygı duruşu com &= 0xFB; // Є'ı sıfıra pcf8574_byte_out(com, EKLE); // Videdennya'ya saygı duruşu } Bu işlev yalnızca komutları ekrana iletir. İlk satır, 0x08'den itibaren komutun mantıksal eklemelerinden ortaya çıktı. Bu, baytı doğrudan RK ekranının bağlantı noktasına değil, tekrarlayıcımız aracılığıyla ilettiğimiz için gereklidir. Eğer bir bayt göndermişsek ve sonrasında sadece bir bit çıktısı almamız gerekiyorsa, lütfen gerekli biti son bayta kadar kabul edin ve ardından tekrar bağlantı noktasına gönderin. İşte sorun bu. 0x08'den başlayarak üniteyi kalıcı olarak üçüncü kategoriye düşürmek gerekir. Mum ışığını hatırlıyor musun? Eksenin kendisi eklenir ve aydınlatmayı içerir. Bundan sonra veri yoluna bir bayt aktarma fonksiyonu çağrılır. Onun hakkında çok şey yazıldı. Daha sonra bayt veri yolu aracılığıyla mikro devreye aktarılır. Daha sonra izi, 0x04'ten gelen baytın mantıksal olarak eklenmesiyle yapılan E birimine yerleştirin. E.'yi temizledikten sonra, bu şekilde komutun kendisini argüman olarak iletmeden ekrana bir komut gönderebilirsiniz. void init(void) (_delay_ms(30); // Yemek servisinden sonra duraklat com(0x30); // 4 bit moduna geçiş _delay_us(40); // Vikonannya komutuna göre kırpma com(0x30); // 4 bit moduna geçiş _delay_us(40); // Vikonannya komutuna göre kırpma com(0x30); // 4 bit moduna geçiş _delay_us(40); // Vikonannya komutuna göre kırpma com(0x20); // 4 bit moduna geçiş _delay_us(40); // Vikonannya komutuna göre kırpma com(0x20); // Parametrelerin ayarlanması com(0x80); // Parametrelerin ayarlanması com(0x00); // Canlı görüntü com(0x80); // Canlı görüntü com(0x00); // Göstergeyi temizle com(0x10); // Göstergeyi temizle com(0x00); //Veri giriş modunu ayarlayın com(0x60); //Veri giriş modunu ayarlayın com(0x00); // Seçilen imleçle ekranı aç com(0xC0); // Seçilen imleçle ekranı aç } Bu işlev ekranı başlatmaktan başka bir şey yapmaz. Komutların sırası RK ekranındaki veri sayfasından alınır. void char_out(BYTE data) ( BYTE data_h = ((data & 0xF0) + 0x09); BYTE data_l = ((data // Data_h |= 0x04'ün en anlamlı 4 bitini aktarın; pcf8574_byte_out(data_h, ADD)); // En yüksek 4 biti aktar data_h &= 0xF9; pcf8574_byte_out(veri_h, EKLE); // En yüksek 4 biti aktar pcf8574_byte_out(veri_l, EKLE); // Daha genç 4 bitin transferi veri_l | = 0x04; pcf8574_byte_out(veri_l, EKLE); // Daha genç 4 bitin transferi veri_l &= 0xF9; pcf8574_byte_out(veri_l, EKLE); // Daha genç 4 bitin transferi } Bu fonksiyon RC verilerini ekrana iletir. Baytın önce eski bayta, sonra da genç bayta aktarılmasının ardındaki komutlarla aynı şekilde ortaya çıkıyor. Ve aynı şeyi tekrarlıyorum. void str_out(BYTE *str) ( while((*str) != "\0") ( char_out(*str); str++; ) ) Bu işlev tamamen satırı ekrana aktarmak içindir. Vlasne bizimkine kadar, yüz sent alamayanlar.

AtmelStudio 6.2 Projesi

Okuryazar 01.08.15 17:11

Koma kaçırdı. Aynen öyle: "Merhaba, SWIT!" Bu aksesuar yalnızca HD44780 için değildir. Master'ın yan tarafına çekme dirençleri yerleştirilmiştir. Spesifikasyona göre, E'nin düşüşünü takiben veriler LCD denetleyici tarafından kaydedilir. İlk fonksiyon yazılacaktır: void com (BYTE com) (com | = 0x08; // pcf8574_byte_out (com | 0x04, ADD) değiştiriliyor; // Görüntülenen veriler pcf8574_byte_out , ADD);// E'den sıfıra) Aynı şey daha az yapılabilir. Örneğin, void char_out(BYTE data) yalnızca iki tıklama gerektirecektir ve özellikle ek değişiklikler yapılmayacaktır. Zamanlama özelliklerinin bozulması nedeniyle LCD'nin başlatılması devre dışı bırakıldı.

Oleksiy 02.08.15 19:11

Koma olmaması nedeniyle ekran etkilenmez. Bu cihaz, aynı veya benzer bir kontrol cihazının bulunduğu ekranın altında bulunur. Ve mikro devre ekseninin kendisi gerçekten de bağlantı noktasının basit bir uzantısıdır. Güzel, yeterince iyiyim. Ek değişiklikler gerekli. Mantık kullanarak bir işleve argüman iletirseniz aksaklıklar ortaya çıkabilir. Böyle sıkışıp kaldım. Başlatma, zamanlamaları bozmadan sona erer. Belgeler, komutlar arasında 40 µs'lik bir duraklamanın yerleştirildiğini söylüyor. Aktarım i2c veri yolu üzerinden gerçekleştirildiği ve bu da kendi yöntemiyle programlandığı için çok fazla endişelenmeniz gerekir. Hala tembel değilseniz, versiyonunuzu yazın ve bana gönderin. Yayınlayacağım. Zreshtoyu amatör izleyiciler ve ciltler için randevu alan bu site, istediğiniz kişi, MK'nin hayatı için düşüncelerinizi ve fikirlerinizi ifade edebilir.

Oleksiy 06.08.15 09:14

Ekranı “Yetkin” olarak başlatırken zamanlamaların eklenmesi

Dimitro 06/14/16 21:57

İyi günler Oleksiy. Kod oluşturucuya PCF8574 ile robotlar için bir kütüphane ekleyebilirsiniz.

Oleksiy 06/14/16 22:32

Düşüneceğim.))

Ruslan 21.12.16 19:54
Oleksiy 21.12.16 21:53

Ah yani. Özellikle ASMI'daki kod. Arduino mühendisleri bunu tekrar takdir edeceklerdir)))

PC
ASM'ye şaşırmayın, oradaki program PIC kontrolörü için yazılmış. Bu bilgi AVR uzmanları için "daha da faydalı" mı? özellikle yeni başlayanlar için))) PIC'e karşı hiçbir şeyim yok ama gerçek şu ki PIC ve AVR farklı. Ve sürücüden RC ekranının çalışmasına ilişkin ayrıntılar var, bir göz atabilirsiniz))) Doğru, ayrıca CVAVR ve raflara ayırma ve sıralama için tüm komutları da yazdım. Acil bir durumla karşılaşırsanız, ne kadar net yazıldığını kendiniz görmelisiniz))) Yazar yazar, okuyucu toplar.

GeK 01/04/17 12:52

"Mikro devrelerin I2C adresleri (varsayılan olarak 0x4E'dir")

Adresin en yüksek 4 biti sabittir,
PCF8574'ün öneki 0100 ve PCF8574A'nın öneki 0111'dir
Daha genç 3 bit, A2-A0 mikro devrelerinin girişlerinde bulunur. Bağlandıktan sonra, mikro devre adresini belirten 3 atlama telinin tümü açılır, 0111111 değeri görüntülenir.
// A2 A1 A0 PCF8574 PCF8574A
// 1 1 1 0x20 0x38
// 1 1 0 0x21 0x39
// 1 0 1 0x22 0x3A
// 1 0 0 0x23 0x3B
// 0 1 1 0x24 0x3C
// 0 1 0 0x25 0x3D
// 0 0 1 0x26 0x3E
// 0 0 0 0x27 0x3F

Oleksiy 04.01.17 14:27

Kafanız karışmış gibi görünüyor.
Mikro devre için belgelerle birlikte Vityag

0b01001110 ce 0x4E
Yani burada her şey doğru. Adresi değiştirmeniz gerekiyorsa, bunu Tanımla'da değiştirmeniz yeterlidir.

Yuri 12/14/17 21:26

İyi günler! Ayrıca PCF8574 adaptörüyle çalışmaya yönelik lcdgotoxy ve lcdclear işlevlerinin kodunu da bulabilir misiniz?

Oleksandr 20.05.18 18:14

İyi günler! Rusça metnin çıktısını nasıl alırsınız?

Oleksiy 05.20.18 23:04

Bu MELT tarafından yapılmış yepyeni bir ekrandır. Hafızasına Kiril alfabesi kazınmış.

Alexander 05/21/18 04:55

İyi günler! AtmelStudio 6.2 “ЁPҐBET MҐP!” için bir Projeniz olduğunu yazıyorum. o zaman görmen normal
ve "HELLO SWIT!" yazarsanız her türlü saçmalığı ortaya çıkarın. iki taneye sahibim
Birindeki ekran çeşitleri Kiril alfabesiyle yazılmıştır. başka bir Çinli.

Oleksiy 21.05.18 09:22

Bir test programı yazmayı tercih ederim. Görüntülenen semboller ve adresleriyle tüm hafızayı yineler. Ve sonra sorunun ne olduğunu anlayacağız. En önemlisi sembol tablosunun ascii tablosuyla eşleşmemesidir.

Andriy 03.09.18 08:32

İyi günler!

Bana Proteus'un devre şemasını gönderebilir misin?

Andriy 09/03/18 10:22

Proteuse'da kimseyi kontrol ettin mi?

Andriy 03.09.18 10:56

Rozіbravsya main_init

Pavlo 30.05.19 23:35

Tsikava zengin, ekran adresleri 0x4E'dir ve aynı ekranı Arduino'ya bağlarsanız adresler 0x27 olur

Pavlo 31.05.19 11:04

Çalışman için teşekkürler! Sizinki dışında hedeflenen uygulamalardan para kazanmadan tüm internetin kesintiye uğraması bekleniyor. Bir şey, ekran başlatma fonksiyonunun arşivlenmiş proje fonksiyonunda, _delay_ gecikmesi kayıtlı değil ve bu nedenle çalışmıyor

Oleksiy 06/01/19 09:52

Bu daha çok bir gösteri projesi. Axlib kütüphanesinin yeniden yazılması gerekmesi iyi bir şey, ancak STM32 ve STM8'in hızla çöktüğü göz önüne alındığında, AVR'deki algı zaten sessiz.

Pavlo 06/05/19 12:57

STM, DIP paketlerine ihtiyaç duymadığından diğer kartların kullanımını kolaylaştırır. Projelerim için AVR'nin stokları tükendi; bir Atmega 8 pek çok şeyi barındırabilir.

Oleksiy 05.06.19 15:20

Peki Atmega8 ve stm8s003'ün maliyeti ne kadar)))

Dmitro 06/07/19 00:41

Merhaba Oleksia.
Söyle bana lütfen, pcf8574'ten bağlantı noktasına nasıl okuma yapılması gerekiyor?
i2c veri yolu üzerinden harici bir blok, 8 GPIO oluşturmak istiyorum - işte bu kadar.

Dimitro 06/07/19 17:56

kendime söylüyorum
İşlev, mikro devrenin bağlantı noktası olan baytı döndürür
uint8_t pcf8574_byte_rcv(uint8_t addr)
{
uint8_t ask = ACK;
adres | = 0b01; //OKUMAK
uint8_t veri=0;
i2c_start();
sor = i2c_send_byte(addr);
if(!ask) veri = i2c_read_byte(NACK);
i2c_stop();

Verileri döndür;
}

Pavlo 06/07/19 20:37

Bir çubuğun fiyatı ne kadar, 150 ruble) ve STM için nasıl ödeme yapıyorsunuz? LUT güvenilmez, CNC router çalışmıyor, ne alabilirim (denemeden)

  • FC-113 modülü, I2C seri veri yolu için giriş ve çıkışları "genişleten" 8 bitlik paylaşımlı bir kayda sahip PCF8574T mikro devresi üzerine kurulmuştur. Küçük mikro devre DD1 olarak etiketlenmiştir.
  • R1, RC ekranının kontrastını ayarlamak için ayarlanabilir bir dirençtir.
  • Jumper J1, ekranın arka ışığını arttırmak için kullanılır.
  • 1…16 numaralı pinler, modülü LCD ekran pinlerine bağlamaya yarar.
  • A1…A3 kontak plakalarının I2C adresini değiştirmesi gerekecektir. Jumper'ları lehimleyerek cihazın adresini değiştirebilirsiniz. Tabloda adres ve atlama kablosu türü gösterilmektedir: “0” açık bir konnektörü, “1” ise takılı bir atlama kablosunu gösterir. Bağlantıların arkasında 3 adet jumper bağlantısı kesilmiş ve adresler eklenmiştir 0x27.

2 RC ekranını Arduino'ya bağlama şeması I2C protokolünün arkasında

Arduino modülünün bağlantısı I2C veri yolu için standart olarak gerçekleştirilir: SDA modülü bağlantıları A4 analog portuna, SCL bağlantıları Arduino'nun analog portu A5'e bağlanır. Modül, Arduino'dan +5 V voltajla beslenir. Modülün kendisi, PK ekranındaki 1…16 bağlantılarına karşılık gelen 1…16 bağlantılarıyla bağlanır.


3 Robotlar için kütüphane I2C protokolünün arkasında

Artık I2C arayüzünün arkasında LCD ile çalışmak için bir kütüphaneye ihtiyacımız var. Örneğin cym eksenini hızlandırabilirsiniz ("Örnek kodu ve kitaplığı indirin" satırına bakın).

Zavantazheniya arşivleri LiquidCrystal_I2Cv1-1.rar bir klasöre sıkıştırılmış \kütüphaneler\ Arduino IDE dizininde bulunur.

Kitaplık, LCD ekranlar için bir dizi standart işlevi destekler:

İşlevAtama
Likit kristal() LiquidCrystal türünde bir değişiklik oluşturur ve ekran bağlantı parametrelerini (parça numaraları) alır;
başlamak() LCD ekranın başlatılması, parametrelerin ayarlanması (satır sayısı ve semboller);
temizlemek() ekranı temizlemek ve imleci koçanı konumuna getirmek;
Ev() imleci koçanı konumuna döndürün;
setCursor() imleci belirli bir konuma yerleştirmek;
yazmak() sembolü RK ekranında görüntüleyin;
Yazdır() metni RK ekranında görüntüleyin;
imleç() ardından imleci gösterir. ilerleyen sembolün bulunduğu yerin altındaki koltuk;
İmleç yok() imleç nerede;
göz kırpmak() imleç için an;
göz kırpma yok() anlık an;
görüntü yok() Ekranı kapatın ve görüntülenen tüm bilgileri kaydedin;
görüntülemek() ekranı açmak ve görüntülenen tüm bilgileri kaydetmek;
kaydırmaDisplayLeft() ekranı 1 konum sola kaydırın;
kaydırmaDisplayRight() Ekran yerine sağa doğru 1 konum kaydırma;
Otomatik kaydırma() otomatik kaydırmayı açma;
Otomatik kaydırma yok() otomatik kaydırma vimicanny;
soldan sağa() metni doğrudan sağa ayarlar;
sağdan sola() metnin yönü sağdan sola;
createChar() LCD ekran için koristuvach sembolünü oluşturuyorum.

4 Metni görüntülemek için çizim I2C veri yolu aracılığıyla LCD ekrana

İşareti görelim: Zrazka Dosyası LiquidCrystal_I2C CustomChars Ve bir kısmı ezilebilir. Sonunda geçici bir sembolün olacağının bilincindeyiz. Koddan önceki yorumlar taslağın tüm nüansları hakkında yorum yapar.

#katmak // Wire kütüphanesini dahil et #include // RK kütüphanesini içerir#define printByte(args) write(args); // uint8_t kalp = (0x0,0xa,0x1f,0x1f,0xe,0x4,0x0); // “kalp” sembolü için bit maskesi LiquidCrystal_I2C lcd(0x27, 16, 2); // 16x2 LCD ekran için 0x27 adresine ayarlayın geçersiz kurulum() ( lcd.init(); // Ekranın başlatılması RC lcd.backlight(); // Ekran aydınlatması artırıldı lcd.createChar(3, kalp); // Belleğin 3. ortasında “kalp” sembolünü oluşturun lcd.home(); // imleci sol üst köşeye, (0,0) pozisyonuna getirin lcd.!"); // metnin başka bir satırı lcd.setCursor(0, 1); // imleci 2. satıra, karakter 1'e hareket ettirin lcd.print( "i"); // 2. satırda başka bir not lcd.printByte(3); // 3. ortadaki başka bir “kalp” sembolü lcd.print("Arduino"); } geçersiz döngü() (// kalan sembolü ayarlayın lcd.setCursor(13, 1); // İmleci satır 2, karakter 1'e taşıyın lcd.print("\t"); gecikme(500); lcd.setCursor(13, 1); // İmleci satır 2, karakter 1'e taşıyın lcd.print(" "); gecikme(500); }

Konuşmadan önce komutla yazılan semboller lcd.createChar();, can kaybından sonra ekran hafızasından mahrum kalacak çünkü ROM 1602 ekranına yazılacaktır.

5 Güç sembollerinin yaratılması RC ekranı için

Raporun ilerleyen kısımlarında RK ekranları için güç sembollerinin besinsel olarak nasıl yaratıldığına bakacağız. Ekrandaki cilt sembolü 35 noktadan oluşur: 5 dolgu ve 7 bukle (destek için +1 yedek sıra). Oluşturduğumuz çizimin 6. satırı için 7 sayıdan oluşan bir dizi belirledik: (0x0, 0xa, 0x1f, 0x1f, 0xe, 0x4, 0x0). İkili olarak dönüştürülebilir 16 basamaklı sayılar: {00000, 01010, 11111, 11111, 01110, 00100, 00000} . Bu sayılar, cilt için 7 sıra sembolden oluşan biyolojik maskelerden başka bir şey değildir; burada "0" açık bir noktayı, "1" ise karanlık bir noktayı belirtir. Örneğin kalp simgesi, yarasa maskesi şeklindeki görevler, bebekte gösterildiği gibi ekranda belirecek.

6 RK ekranını kontrol etme I2C veriyolu aracılığıyla

Arduino için harika bir taslak. Görevler, sonunda yanıp sönen bir imleçle ekranda görünecektir.


7 Ne için var? I2C veriyolu

Bonus olarak, “A”, “B” ve “C” Latin sembollerinin RK ekranında görüntülenmesinin zaman diyagramına bir göz atalım. Bu semboller ROM ekranında bulunur ve adreslerinin ekrana iletilmesiyle ekranda görüntülenir. Diyagram RS, RW, E, D4, D5, D6 ve D7 ekran seviyelerinden vb. alınmıştır. FC-113 "I2C paralel veri yolu" yeniden tasarlandıktan hemen sonra. “Zalizo”nun içindeki küçük parçaları “derin bir şekilde” atıyoruz diyebilirsiniz.


Latin karakterlerinin “A”, “B” ve “C” LCD ekranda görüntülenmesinin zamanlama şeması 1602

Diyagram, ekran ROM'undaki (veri sayfasının 11. tarafı, aşağıda gösterilen) karakterlerin iki bayt halinde iletildiğini gösterir; bunlardan ilki tablo sütun numarasını, diğeri ise satır numarasını gösterir. Bu noktada veri, hat üzerindeki sinyalin ön tarafı boyunca "tıklar" e(Etkinleştir) ve satır R.S.(Kayıt seçimi) mantıksal ünitededir, yani veri aktarımı anlamına gelir. RS hattının düşük perdesi, kaplama sembolünün aktarımından önce yıkadığımız eklerin aktarımı anlamına gelir. Bu giriş, taşıyıcıyı ekranın PK konumuna (0, 0) döndürmek için talimat kodunu iletir; bu, ekranın teknik açıklaması okunarak da belirlenebilir.

Ve bir kıç daha. Bu saatlik diyagram PK ekranındaki “Kalp” sembolünün gösterimini göstermektedir.


Tekrar söylüyorum, ilk iki dürtü Olanak vermek talimatları takip et Ev()(0000 0010 2) - taşıyıcının (0; 0) konumuna döndürülmesi ve diğer ikisi - hafızada saklanan dijital ekranda görüntülenmesi 3 10 (0000 0011 2) "Kalp" sembolü (talimatlar) lcd.createChar(3, kalp); taslak).

Muhtemelen piyasadaki en popüler ekranlardan biri. Popüler denetleyici HD44780U'daki seçimler. Modelin adı ekranın her biri 16 karakterlik iki sıradan oluştuğunu gösteriyor. Bu özel modelin Rus dilinden hiçbir etkisi yoktur.

Sh2s veri yolu, 127'ye kadar cihazı iki şekilde ve aynı anda bağlamanıza olanak tanır. Bu I2C uygulamaları PCF8574T yongalarına dayanmaktadır.

Bağlantı şeması:

Mavi şey ekranın kontrastını ayarlamanıza olanak tanıyan değiştirilebilir bir destektir.

Evil jumper – ekranın arka ışığını gösterir.

Arduino'ya 4 kontaklı bir blok şu şekilde bağlanır:

GND - GND
VCC-5V
SDA - A4 (Arduino MEGA gibi, ardından D20'ye kadar)
SCL - A5 (Arduino MEGA kutusu, ardından D21'e kadar)

Kütüphane

Eskiz

Ekranda 0x27 yerine farklı bir IIC adresi bulunabilir, 0x3F görünebilir. Adresi doğru bir şekilde belirlemek için i2c cihazlarını hızlı bir şekilde tarayabilirsiniz.

#katmak #katmak // LCD ekran adresini 0x27, 16 karakter, 2 satır olarak ayarladık LiquidCrystal_I2C lcd(0x27, 16, 2); geçersiz kurulum()(lcd.init(); //Ekranı başlatıyoruz //arka ışığı aç lcd.backlight(); //Metnin görüntüleneceği konumu ayarlayın. lcd.setCursor(2, 0); //satır 1'i göster lcd.print("Merhaba Dünya!"); //aynı şekilde başka bir satır görüntüleniyor lcd.setCursor(1, 1); lcd.print("www.site"); ) geçersiz döngü () ( )

Sağlayıcı