แกะรอย LCD 3310 NOKIA

แกะรอย LCD 3310 NOKIA


        พวกเราใช้มือถือกันนับวันจะยิ่งมีความทันสมัยมากขึ้นไปเรื่อย ๆ ทั้งระบบ กล้องมือถือ , ฟังเพลง mp3 , การเชื่อมต่อ Bluetooth  นับว่าเป็นสินค้าที่มีราคาเปลี่ยนแปลงตามเทคโนโลยีเหมือน ๆ กับ คอมพิวเตอร์ ยิ่งเทคโนโลยีล้าสมัย ราคายิ่งต่ำ และสุดท้าย จะกลายเป็นของเหลือใช้ ตกรุ่น แต่ถ้าเราหันมามองอีกมุมหนึ่ง อะไหล่ ของเครื่องโทรศัพท์มือถือรุ่นเก่า ๆ อย่างเช่น หน้าจอแสดงผลของ NOKIA รุ่น 3310 สามารถนำมาใช้ในการประดิษฐ์สำหรับงาน อิเล็กทรอนิกส์ embedded ได้อย่างคุ้มค่า เพราะ LCD ตัวนี้ สามารถแสดงผลได้ทั้งตัวอักษร ตัวเลข หรือแม้กระทั่งกำหนดลักษณะการแสดงผลเองได้อิสระ ตามที่เราออกแบบ และมีราคาถูกกว่า LCD ที่เราซื้อกันตามบ้านหม้อครับ ดังนั้น LCD 3310 จึงเหมาะสำหรับนักอิเล็กทรอนิกส์ที่ต้องการ DISPLAY ราคาถูกเพื่อนำไปใช้ต่อเข้ากับ MCU ชนิดต่าง ๆ นำไปแสดงผลตามต้องการ
         LCD NOKIA 3310 ถูกนำมาประดิษฐ์ร่วมกับอุปกรณ์ต่าง ๆ จนเป็นชิ้นงานได้แล้ว ผู้ที่นำมาใช้ มีทั้งในประเทศไทย และต่างประเทศ ในวันนี้ถึงตาคุณแล้วครับ ThaiEasyElec.com จะขอแกะรอยการนำมาใช้งาน DISPLAY 3310 ให้ท่านที่ไม่เคยใช้ ลองไปใช้งานกันครับ
(ขอบคุณรูปตัวอย่างจาก wara.com by Jnut)

บทนำ
         LCD 3310 NOKIA นี้เรียกตามบริษัทผู้ผลิต (Manufacturer Part Number) คือ LPH7779 ซึ่งผลิตโดย Philips Semiconductor โดยมีไอซี PCD8544 รวมอยู่แล้วในตัวเดียว ดังนั้นเราเพียงหา datasheet PCD8544 เพื่ออ่านคุณลักษณะการเชื่อมต่ออย่างละเอียดได้ก็พอครับ ถือได้ว่าเป็น Graphic LCD ชนิดหนึ่ง ดังนั้นการใช้งานคือ การหา MCU มาแล้วเชื่อมต่อเข้ากับ LCD ได้เลย การติดต่อจะใช้รูปแบบของ SPI communication ซึ่งย่อมาจาก Serial Peripheral Interface (ไม่ใช้ UART หรือที่เรียกกันติดปากว่า serial port นะครับ อย่าสับสน) สำหรับ SPI มีการใช้อย่างไร ขอให้ลองศึกษาเพิ่มเติมโดย search ใน google ก็จะเจอครับ โดยจะต้องเลือก MCU ที่มี SPI Interface เข้ากับ LCD 3310 เช่น พวก PIC ทั้งหลายครับ

ขนาดของ LCD 3310

รูปที่ 1 ขนาดของ LCD 3310 
 
ตามรูปที่ 1 หน่วยในรูปเป็น มิลลิเมตร (mm) 
ทั้งชิ้นอุปกรณ์มีความ กว้าง × ยาว = 38.5 mm × 35.5 mm 
ตัวหน้าจอแสดงผล กว้าง × ยาว = 30 mm × 22 mm  
โดยมีความละเอียดหน้าจอ (resolution) เท่ากับ 84 × 48 pixels 
ส่วนขนาดของช่อง Pin มีความยาว 16 mm


ตำแหน่งขาสัญญาณ Pin1 – Pin8 LCD 3310

รูปที่ 2 ขาสัญญาณที่ใช้ทั้งหมด (Pin1-Pin8)

PinSignalDescriptionPort
1VDDขาไฟเลี้ยงสำหรับ LCD โดยใช้ voltage ช่วง 2.7 – 7 voltPower
2SCLKขาสัญญาณ clock ของ LCD ซึ่งกำหนดค่า max สุดคือ 4 Mbits/sInput
3SDINย่อมาจาก serial data input เป็นขาที่ใช้ในการรับข้อมูล เพื่อแสดงผลที่หน้าจอ LCDInput
4D/Cขาที่ใช้เลือกควบคุม ระหว่าง ให้รับข้อมูล data(D) / ส่งคำสั่ง command(C) ซึ่ง active lowInput
5SCEขาที่ enable ตัวจอ LCD ให้ทำงาน(active low)Input
6GNDขา groundPower
7VOUTขาไฟเลี้ยงขาออกของ LCD โดยขานี้ต้องต่อ electrolytic capacitors จาก VOUT ไปยัง GND โดยใช้ค่าได้ตั้งแต่ 1 uF ถึง 10 uFPower
8RESขา reset (active low)Input

จะเห็นว่า เราจะมีขาสัญญาณที่เกี่ยวข้องในการควบคุมการทำงานต่าง ๆ อยู่ 5 ขา ซึ่งเราต้องติดต่อในการเขียนโปรแกรมควบคุม LCD ประกอบด้วย ขา 2 SCLK , ขา 3 SDIN , ขา 4 D/C ,  ขา 5 SCE, ขา 8 RES

สำหรับจอ Nokia 5110 (GLCD5110) จะมีขาเรียงดังนี้

หลักการทำงานของ LCD 3310
แบ่งการทำงานออกเป็น 2 โหมด คือ command(C) โหมด กับ data(D) โหมด โดยอาศัยขาสัญญาณ D/C เพื่อเลือกโหมด  มีรายละเอียดโหมด ดังนี้
1. data(D) โหมด ใช้สำหรับ รับข้อมูล เพื่อนำข้อมูลไปแสดงผลบนหน้าจอ
2. command(C) โหมด ใช้สำหรับ รับคำสั่ง (active low) เพื่อกำหนดตำแหน่งของการเริ่มต้นเขียนข้อมูล  และ กำหนดค่า config ต่างๆให้แก่ LCD นอกจากนั้นยังควบคุมให้แสดงผลปกติ หรือแบบ Inverse ได้ด้วย

การระบุตำแหน่งบนหน้าจอแสดงผลของ LCD 3310  
หน้าจอของ LCD จะประกอบไปด้วยจำนวนจุดทั้งหมดเท่ากับ 48 x 84 pixels  เป็นจำนวนคอลัมน์ (column) ได้เท่ากับ 84 คอลัมน์ และ จำนวนแถว (row) 48 แถวด้วยกัน โดยแถวทั้ง 48 แถวนั้น จะแสดงผลออกมาได้เป็น 6 บรรทัด 

6 บรรทัดมาอย่างไร
เนื่องจากไอซี PCD8544 เก็บไฟล์ทีละ 1  byte หรือ 8 bits มาแสดงผล โดยเก็บข้อมูลจากซ้ายไปขวา บนสุดมาล่างสุด ดังนั้น 48 pixels คือ 48 bits ทำให้เรามีจำนวนบรรทัด สำหรับแสดง ผลเท่ากับ 48 / 8 = 6 บรรทัด ถ้าไม่เข้าใจ ดูรูปประกอบครับ ช่วยได้เยอะ

เมื่อ LCD 3310 รับข้อมูลเพื่อแสดงผล มันจะรับแบบต่อเนื่อง จากบรรทัดแรก (บนสุด) แสดงจนครบทั้ง  84  คอลัมน์(pixels) จากซ้ายไปขวาก่อน จึงขึ้นแถวที่ 2 แล้วแสดงให้ครบทั้ง  84  คอลัมน์(pixels)ใหม่ ไปเรื่อย ๆ จนสุดท้าย บรรทัดที่ 6 ครับ

เพื่อให้เข้า ใจและเห็นภาพมากขึ้น ถึงการเรียกตำแหน่ง pixels ต่าง ๆ ใน LCD จะขอยกตัวอย่าง โดยใช้โปรแกรมการออกแบบตัวอักษรจาก amontec.com ครับ ชื่อโปรแกรม FlashLCD design ซึ่งเป็นตัวที่เขาสร้างมาให้เราใช้ฟรีครับ แต่บางเมนู ก็ไม่สามารถใช้ได้ครับ

download >>  FastLCD จาก amontec.com

ส่วนวิธีการใช้งาน ผมจะสาธิตคร่าว ๆ อยู่ 5 ส่วนครับ ที่เหลือ ลองศึกษาใช้งานเอง ไม่ยากครับ

ส่วนที่ 1 ไว้ใช้ plot จุดครับ คลิกเมาส์ปุ่มซ้ายจะจุดสีดำ ส่วนคลิกเมาส์ปุ่มขวา ที่จุดดำจะกลายเป็นสีขาว
ส่วนที่ 2 ไว้ใช้ save file ซึ่งข้อมูลจะออกมาในรูปชุดข้อมูลแบบ hex ขนาดก้อนละ 1 ไบต์
ส่วนที่ 3 ไว้ undo กับ clear หน้าจอครับ
ส่วนที่ 4 ไว้ให้เลือกแสดงเส้น grid ตามความละเอียดที่เราต้องการ , กำหนดขนาดของหน้าจอ , และปุ่ม zoom
การกำหนดขนาด (ส่วนที่ 4 ปุ่มที่ 3) จะเป็นตัวกำหนด column และ row

ส่วนที่ 5 ไว้เลื่อนสิ่งที่เราวาดลงไป ให้ไปทางซ้าย ขวา บน ล่าง สลับด้านซ้ายขวา บนล่าง

ผมขอแสดงตัวอย่าง อักษร TH ครับ โดยตำแหน่งเริ่มต้นของการแสดงผล จะเริ่มต้นที่มุมซ้ายบน และแสดงจาก ซ้ายมือไปยังขวามือ เมื่อหันหน้าจอเขาหาตัวผู้มอง โดยถ้าใช้การแสดงผลโหมดการแสดงผลปกติ เราจะได้ต้องกำหนดให้ bit ที่เราต้องการเป็นแสดงผล “1” (ให้จุดดำขึ้นบนหน้าจอ) และ ไม่ต้องการให้แสดงผลเป็น “0” (ไม่ให้จุดดำขึ้นหน้าจอ)

วาดเสร็จ ก็กดปุ่มส่วนที่ 2 save งานครับ

ผมขยาย grid ให้ใหญ่ขึ้นเพื่อแสดงให้เห็นว่าจำนวน pixels ส่วนนี้ คือ 16 columns x 8 rows ส่วนของอักษร T และ H นั้น ใช้ pixels ตัวละ 6 columns x 8 rows และผมเว้นวรรคตัวอักษรใช้ pixels 2 columns x 8 rows

เมื่อเปิดไฟล์ที่เรา save ไว้ด้วย notepad จะเห็นกลุ่มข้อมูล เป็นก้อน ๆ แสดงเลขเป็นแบบ hex ก้อนละ 1 byte หรือ 8 bits 
ตัวอักษร T นั้น ใช้ pixels ตัวละ 6 columns x 8 rows ดังนั้นกลุ่มข้อมูลที่ประกอบกันทำให้เป็นตัวอักษร T ได้นั้นคือ 0x03,0x03,0xff,0xff,0x03,0x03

0x03  => 0 0 0 0 0 0 1 1
0x03  => 0 0 0 0 0 0 1 1
0xff    => 1 1 1 1 1 1 1 1
0xff    => 1 1 1 1 1 1 1 1
0x03  => 0 0 0 0 0 0 1 1
0x03  => 0 0 0 0 0 0 1 1

คงจะมองภาพออกแล้ว นะครับ กลับมาดูข้อมูลที่ LCD 3310 ได้รับ มันก็จะรับเป็นก้อน ยาว ๆ ต่อเนื่องไปเรื่อย ๆ ครับ (ส่วนที่ highlight คืออักษร TH ที่เราวาดไป)




แล้วที่กล่าวว่า 84  คอลัมน์(pixels) จากซ้ายไปขวา ก็คือดังรูปครับ

กลับมาดูข้อมูลที่ LCD 3310 ได้รับ มันจะสิ้นสุด บรรทัดแรกตรงช่วงที่ผม highlight ครับ

ผมจะขยับ อักษร TH ไปท้ายสุดของบรรทัดครับ แล้วมาดูข้อมูลกันว่ามันขยับตามหรือไม่

ผลลัพธ์ครับ

ที่นี่เราลองจินตนาการครับ ว่าถ้าเรากำหนดจุด x,y แล้วให้แสดงผล คาบเกี่ยวบรรทัดกัน จะออกมาเป็นอย่างไร

ผลลัพธ์ครับ


ดังนั้น เวลาเขียนโปรแกรมป้อนข้อมูลให้แสดงผลนั้น จึงง่ายมากครับ เราเพียงออกแบบการแสดงผลของเราไว้ให้ครบ แล้วเราก็เขียนโปรแกรมย่อยส่วนนั้นแยกไป กำหนดจุด x,y ป้อนข้อมูลต่าง ๆ เก็บไว้เป็นชุด display แล้วจึงเรียกใช้งานโปรแกรมย่อยนั้นครับ

สรุปคือ เราสามารถสร้างตัวอักษร สร้างรูป สัญลักษณ์ ฯลฯ เองได้ทั้งหมดครับ เราจะออกแบบโดยใช้ FlashLCD design  จะทำให้มองภาพรวมออก และสามารถไปเขียนโปรแกรมได้ ดังนั้น LCD 3310 ตัวนี้ จึงให้อิสระของการแสดงผลตามที่ใจเราต้องการครับ เช่นตัวอย่าง จากรูป แสดงอักษรภาษาอังกฤษ TH จะได้ประมาณ 10 ตัวอักษรใน 1 บรรทัด(ผมรวมเว้นวรรคด้วยครับ) หรือเราอาจจะออกแบบตัวอักษรออกมาใหม่ แล้วอาจทำให้ได้ 14 ตัวอักษรใน 1 บรรทัด ก็อาจเป็นได้ครับ แล้วแต่เราออกแบบครับ

หลักการเขียนโปรแกรมควบคุมการแสดงผล LCD 3310
ส่วนใหญ่ที่พบเห็นจะใช้ภาษาซี ในการเขียนโปรแกรมควบคุมด้วย MCU ครับ ฟังก์ชั่นที่จำเป็นสำหรับการติดต่อ เขียนโปรแกรมเหมือนกับการติดต่อ LCD ทั่ว ๆ ไปครับกล่าวคือ เราต้องส่งคำสั่งติดต่อกับ LCD ก่อน เพียงครั้งเดียว หลังจากนั้นก็จะเป็นส่วนการส่งคำสั่งเพื่อแสดงผล (อย่าลืม Initail ค่าสำหรับ SPI Interface ด้วยนะครับ) ในหัวข้อนี้ผมจะขอสรุปคำสั่งที่ใช้ติดต่อกับ LCD NOKIA 3310 ครับ 

1.เริ่มต้น ขา 5 SCE  ส่ง 0 เพื่อให้ LCD ทำงาน (active low)

2.ทำ function set โดย ขา 4 D/C  เมื่อต้องการส่งคำสั่ง ให้ส่ง  0 (active low) หลังจากนั้น ให้ส่งข้อมูลคำสั่งไปที่ ขา 3 SDIN มีรูปแบบดังนี้
DB 0 => H extended instruction set mode
             0 => basic instruction set ในกลุ่มคำสั่งนี้เป็นการกำหนดค่าตำแหน่ง display x,y 
                     รวมถึง inverse mode 
             1 => extended instruction set ในกลุ่มนี้เป็นการกำหนด ค่าอุณหภูมิ , ค่า Bias ,
                     ค่า Vop (ปรับความเข้ม)
DB 1 => V entry mode
             0 => horizontal address
             1 => vertical address
DB 2 => PD คือ power down control
             0 = chip active
             1 = chip power down control
DB 3 => 0
DB 4 => 0
DB 5 => 1
DB 6 => 0
DB 7 => 0

ตัวอย่าง function set
function set  0x20 set LCD basic instruction set 
0x08 LCD blank (all off)
0x0C LCD in normal mode
0xC4 Vop ค่าปรับความเข้มของจอ 0xc4 ถ้าน้อยกว่านี้จางมากกว่าเข้ม
0x09 LCD in inverse mode (all on)

function set  0x21 set LCD extended instruction set
0x13 LCD bias mode 1:48
0x06 Set Temp coefficient.

function set  0x20 horizontal mode from left to right  โดยเป็นโหมด default อัตโนมัติ หากไม่ได้กำหนดค่า

function set  0x22 for vertical addressing 


Documents: