Arduino Dersleri | Arduino IDE Kurulumu | Arduino Programlama Dersleri
Philips PCD8544 sürücü çipi, çok popüler Nokia 5110 cep telefonunun geri dönüştürülmüş ekranına bağlanır . Ekranlar ikinci el olduğu için genellikle cam kapakta küçük çizikler/lekeler vardır. 8 bağlantılı bir PCB üzerinde metal bir kutu içinde yeniden barındırılırlar. Verilen pimlere lehimlemeniz gerekir. Ekran bir Sıvı Kristal Ekran, LCD'dir.
Sürücü çipi belgelerinin bir kopyasını buradan ve buradan edinebilirsiniz .
AZ Delivery , cihazı kullanmak için ücretsiz, 9 sayfalık bir pdf kılavuzu sağlar.
Önemli ! Bu 3.3V'luk bir cihazdır ve doğrudan 5V'a bağlanırsa zarar görür.
AZ Teslimat belgeleri , ekranı korumak için voltaj kaydırıcıları kullanan bir Arduino UNO'ya bağlantıları gösteren bir Fritzing devresi verir .
Ekran Pinleri
Ekran Pimi Yorum UNO Pimi
1 RST (Sıfırla) Giriş 3
2 CE (Çip Etkin) Giriş 4
3 DC (Veri/Kontrol) Giriş 5
4 DIN (Veri girişi) Giriş 6
5 CLK (Saat) Giriş 7
6 VCC Maks. 3.3V! 3.3V
7 IŞIK Breadboard'da GND'ye GND
8 GND (Ground) Ground GND
Kütüphanesiz
Belgeler, PCD8544'e verilen komutları kullanarak pikselleri doğrudan ekrana yazmak için örnek bir çizim sağlar. Bu, ekranı çalıştırmanın oldukça gelişmiş bir yöntemidir ve görüntü oluşturmanın çok sıkıcı bir yöntemidir. Grafik kağıdındaki pikselleri saymanız ve bayt değerlerini hesaplamanız gerekir.
// Control Nokia 5110 LCD Display
// AZDelivery Example script
#define CLK 7 // More convenient pins
#define DIN 6
#define DC 5
#define CE 4
#define RST 3
static const byte LOGOTBL[] = { //AZ Delivery Bitmap Logo
0x0F,0x5,0x5,0x0F,0x90,0xD0,0xB0,0x90,0x00,0x00,0x08,0x08,0x08,0x08,0x00,
0x00,0xFF,0x81,0x81,0x81,0x81,0x7E,0x00,
0xFF,0x89,0x89,0x81,0x81,0x81,0x00,0xFF,0x80,0x80,0x80,0x80,0x80,0x00,
0xFF,0x00,0x07,0x38,0xC0,0xC0,0x38,0x07,
0x00,0xFF,0x89,0x89,0x81,0x81,0x81,0x00,0xFF,0x09,0x19,0x29,0x49,0x86,
0x00,0xF,0x90,0x90,0x90,0x90,0xF7
};
// Functions
void LcdWriteCmd(byte order) { // Send command to display
digitalWrite(DC, LOW); // DC Pin is LOW for commands to the display
shiftOut(DIN, CLK, MSBFIRST, order); // Transmit data byte serially
// with MSB (most significant byte) first
}
void LcdWriteData(byte data) { // Send data to display
digitalWrite(DC, HIGH); // DC Pin is HIGH for data to the display
shiftOut(DIN, CLK, MSBFIRST, data); // Transmit data byte serial
// with MSB (most significant byte) first
}
void LcdWriteLogo() {
digitalWrite(CE, LOW); // Chip Enable Pin is LOW,
// data transfer is activated
LcdWriteCmd(0x80); // Jump to row 0 column 0, Jump Column
LcdWriteCmd(0x40); // Skip row
// Clear screen completely
for(int i=0; i < 504; i++) {
LcdWriteData(0x00); // Delete complete display
}
// Output AZ logo
for(int i=0; i < 66; i++) {
LcdWriteData(LOGOTBL[i]); // Write logo data into display
}
digitalWrite(CE, HIGH); // Chip Enable Pin is HIGH,
// data transfer is deactivated
}
void setup() {
pinMode(CLK, OUTPUT); // Switch pin to output
pinMode(DIN, OUTPUT); // Switch pin to output
pinMode(DC, OUTPUT); // Switch pin to output
pinMode(CE, OUTPUT); // Switch pin to output
pinMode(RST, OUTPUT); // Switch pin to output
digitalWrite(RST, HIGH); // Reset signal to Nokia display
delay(100);
// forward
digitalWrite(RST, LOW);
delay(100);
digitalWrite(RST, HIGH);
delay(100);
// Initialization of the display according to data sheet
digitalWrite(CE, LOW); // Chip Enable Pin is LOW,
// data transfer is activated
LcdWriteCmd(0x21); // Extended command set LCD
LcdWriteCmd(0x90); // set LCD Vop
LcdWriteCmd(0x20); // Normal command LCD
LcdWriteCmd(0x0C); // LCD Normal Mode
digitalWrite(CE, HIGH); // Chip Enable Pin is HIGH,
// data transfer is deactivated
}
void loop() {
LcdWriteLogo();
delay(20000);
}
Kodu yürütürken, ekranda hiçbir şey görünmediği için bu noktada oldukça hayal kırıklığına uğradım.
Veri sayfasına baktım ve Vop (çalışma voltajı?) ve Bias'ı değiştirmenin mümkün olduğunu gördüm.
değiştirdim
LcdWriteCmd(0x90); // set LCD Vop
Bu 3 satır ile betiği tekrar çalıştırın.
LcdWriteCmd(0xBF); // set LCD Vop
LcdWriteCmd(0x04); // Set Temp coefficient
LcdWriteCmd(0x13); // Bias mode 1:40
Böylece daha düzgün bir görüntü belirdi.
Kütüphaneli
Aşağıdaki videodan da izleyerek kütüphaneleri indirebilirsiniz. Kütüphanelerin adı aşağıdaki kodlarda var.
Bu kütüphane daha önce başka bir proje için bilgisayarımda kurulu olan Adafruit GFX kütüphanesi ile birlikte kullanılmaktadır. Belirtilen tüm bağımlılıkları da yükleyin. Kitaplıkla birlikte gelen uzun örnek betiği deneyin. Başlangıçta kontrasttan yoksun olabilir.
Kütüphane kontrastı (Vop) ve Bias'ı biraz farklı şekilde ele alır, bu yüzden zayıf kontrastın üstesinden gelmek için en iyi ayarların araştırılmasına izin vermek için kısa bir komut dosyası yazdım.
// Set up screen visibility PCD8544 & Nokia 5110 screen
// Tony Goodhew 9th July 2020
// Tutorial45.com
#include <SPI.h>
#include <Adafruit_GFX.h>
#include <Adafruit_PCD8544.h>
// PINS CLK, DIN, DC, CE, RST
Adafruit_PCD8544 display = Adafruit_PCD8544(7, 6, 5, 4, 3);
void setup() {
Serial.begin(9600);
display.begin(); // Initialise display
int con = 56; // Change up or down by 1 to get
int bias = 4; // the best settings for your display
display.setBias(bias);
display.setContrast(con);
display.clearDisplay();
display.setCursor(0,5); // INCLUDE ABOVE AT START OF YOUR OWN SCRIPTS
display.println("Tutorial45.com");
display.setCursor(0,15);
display.print("Contrast: ");
display.println(con);
display.setCursor(0,25);
display.print("Bias: ");
display.println(display.getBias());
display.fillCircle(68, 36, 11, BLACK);
display.fillCircle(68, 36, 6, WHITE);
display.display(); // Essential instruction to update visible display
}
void loop() {}
con = 56 ve bias = 4 ayarları, ekranımdaki arka plan (beyaz) pikselleri etkinleştirmeden en iyi kontrastı verdi. İyi bir görünürlük elde edene kadar komut dosyasını con ve bias değerlerinde tek birim değişiklikleriyle çalıştırmayı deneyin.
Kontrast düzeltildiğine göre, ekranın küçük bir en-boy oranı 'özelliğine' sahip olduğunu ve dairelerin elips olarak göründüğünü görebiliriz. Daha düşük piksel sayısı, diğer LCD ekranlarla karşılaştırıldığında, özellikle de SSD1306 128×64 ekranla karşılaştırıldığında, yazmak ve çizmek için daha az alan olduğu anlamına gelir. Ancak, ekran boyutu ve pikseller daha geniştir ve daha uzak mesafeden görünürlüğe yardımcı olur.
SSD1306 128×64 = 8192 piksel SSD1306 128×32 = 4086 piksel Nokia 86×48 = 4032 piksel
Artık kullanışlı bir uygulamada ekranın ne kadar hızlı güncellendiğini kontrol etmeye hazırız. Komut dosyasına bir girdi sağlamak için A0'a 10K Ohm'luk bir potansiyometre ekledim.
// Volt Meter on Nokia 5110
// 10K Ohm potentiometer on A0
#include <SPI.h>
#include <Adafruit_GFX.h>
#include <Adafruit_PCD8544.h>
// PINS CLK, DIN, DC, CE, RST
Adafruit_PCD8544 display = Adafruit_PCD8544(7, 6, 5, 4, 3);
int sensorPin = A0; // select the input pin for the potentiometer
int sensorValue = 0; // variable to store the value coming from the sensor
void setup() {
Serial.begin(9600);
display.begin(); // Initialise display
int con = 56; // Change up or down by 1 to get
int bias = 4; // the best settings for your display
display.setBias(bias);
display.setContrast(con);
display.clearDisplay();
display.setCursor(0,5);
display.println("Project Turkey");
display.setCursor(0,15);
display.print("Volt Meter");
display.setCursor(17,40);
display.print("Volts:");
display.display(); // Static parts of screen written at this point
}
int bar(int v, float vv) { // Bar graph
display.drawLine(0,28,0,40, BLACK);
display.fillRect(1,30,80,8,WHITE); // Rub out old bar graph
display.fillRect(0,30,v,8,BLACK); // Write new bar graph
display.fillRect(55,40,26,10,WHITE); // Rub out old text
display.setCursor(55,40);
display.print(vv); // Write new text
display.display(); // Update display
}
// ++++++++++++Main Loop ++++++++++++++
void loop() {
// Read pot and display values
sensorValue = analogRead(sensorPin); // Read the value from the sensor
float volts = (sensorValue * 5.0 / 1023.0); // Calculate voltage
int x = float(sensorValue * 80.0/1023); // Calculate percentage
bar(x,volts); // Redraw bar graph
delay(100); // Delay to reduce jitter
}
Potansiyometre düğmesinin çevrilmesi, çubuğun uzunluğunu değiştirir ve voltaj değerini günceller. Çubuk grafiğin sol alt köşesindeki hafif çiziklere dikkat edin.