ค้นหาบล็อกนี้

Custom Search
แสดงบทความที่มีป้ายกำกับ ds1820 แสดงบทความทั้งหมด
แสดงบทความที่มีป้ายกำกับ ds1820 แสดงบทความทั้งหมด

วันเสาร์ที่ 21 พฤษภาคม พ.ศ. 2554

Digital Clock & Temp with FTTL-655 Display

FTTL-655 เป็นจอแบบ Duplex LED Display ผมไม่เคยเล่นหรือเจอจอแบบนี้มาก่อน
มันประหลาดดี มันจะมี 2 common แถมแต่ละ sigment พ่วงกันแบบ งงๆ
หา datasheet ก็ไม่มี แต่ไปเจออันนี้เข้า
http://libesz.digitaltrip.hu/digital-clock/
มีที่เดียวจริงๆ แถม Source ดันเป็นภาษา C อีก เลยต้องดำน้ำเอง



มาว่ากันถึงหลักการขับแบบที่ผมคิดเอง
FTTL655S มีตัวเลข 4 หลัก ใช้ pin ในการขับ segment 14pin
มี colon ด้วยก็ 15pin พอดี แบบไม่รวม common และ am-pm ผมไม่ได้ใช้



อันดับแรกผมจะแบ่ง จอออกเป็น 4 ส่วน เพื่อง่ายต่อการมอง
ใช้ข้อมูล 4byte คือ 2byte บน 2byte ล่าง แยกจากกัน
ข้อมูล segment หลัก1-2 ใช้ 2byte คือ 1byte บน 1byte ล่าง
ข้อมูล segment หลัก3-4 ใช้ 2byte คือ 1byte บน 1byte ล่าง

ในข้อมูล 1byte ที่ส่งให้กับ segment จะประกอบด้วย
เลขสองหลัก และในตัวเลขสองหลักจะมี 2common sigment พ่วงกัน
จึงต้องแบ่งแยกข้อมูลออกเป็น 4 ชุดคือ

Table A = digit1บน+digit2บน
Table B = digit1ล่าง+digit2ล่าง

เอาทั้งหมดมารวมกันเป็น 2byte บนกับล่าง (A กับ B) ส่งแล้ว scan ตามลำดับ

เนื่องจากจอเป็นแบบ 2common การ scan จึงทำได้สองครั้ง
ผมก็เอาข้อมูล หลัก1-2 บน กับ หลัก3-4 บน ส่งออกไปยัง port 1-2
ตามลำดับ จากนั้นสั่ง common1 on ต่อไป ก็เอาข้อมูล หลัก1-2 ล่าง
กับ หลัก3-4 ล่าง ส่งออกไปยัง port 1-2 จากนั้นสั่ง common 2 on

การเปิดตาราง (อ้างจาก Code) โปรดดูรูปวงจรของ FTTL655S ประกอบ
ถ้านับหลักซ้ายมือสุดเป็นหลักที่1จะเห็นว่ามีการต่อ segment เหมือนกัน
ในหลักที่ 2 และ 4 สามารถใช้ตารางเดียกันได้ ส่วนหลักที่ 1 และ 3 ต่างกัน
เราก็แยกเป็นสองตาราง รวมทั้งหมด 3 ตาราง โดย table-A ใช้กับหลักที่ 1
table-B ใช้กับหลักที่ 3 และ table-C ใช้กับหลักที่ 2และ4

ต่อไปเป็นการเปิดตารางผมจะเรียกข้อมูลชุดบนว่า A และชุดล่างว่า B
ทุกครั้งที่เปิดตารางของแต่ละหลัก จะได้ข้อมูล 2 ชุด คือ A และ B
ซึ่งก็คือข้อมูลของ Common ซึ่งมีอยู่สองชุดนั่นเอง
แต่ใน 1 byte นั้นมันจะมีตัวเลขอยู่สองหลัก ดังนั้นเมื่อเปิดตารางแล้ว
ก็จะได้ข้อมูลมา 4 ชุดหรือ 4 byte คือ

A หลักที่ 1 และ B หลักที่ 1
A หลักที่ 2 และ B หลักที่ 2

นำข้อมูล A1 กับ A2 มา OR กันเป็น 1 byte
นำข้อมูล B1 กับ B2 มา OR กันเป็น 1 byte

การ scan ทำดังนี้
1.สั่ง Common 1-2 Off
2.เอาข้อมูลที่ได้จาก A1+A2 ส่งออกไปที่ port สั่ง Common 1 On
ค้างไว้ 5ms จากนั้น
3.สั่ง Common 1-2 Off
4.เอาข้อมูลที่ได้จาก B1+B2 ส่งออกไปที่ port สั่ง Common 2 On
ค้างไว้ 5ms กลับไปทำข้อ 1

จบแล้วครับ อาจไม่สมบูรณ์เท่าไร แต่คงพอเป็นแนวทางได้นะครับ

ประกอบไปด้วย Program Driver ตัวอย่าง และ Program นาฬิกา DS1307
และ Temp DS18B20 แก้ไขจาก Digital clock - Temp with 1.8 LED Display


Source Code

วันพุธที่ 16 กุมภาพันธ์ พ.ศ. 2554

Thermometer Nokia 5110 Lcd



เห็นมีแต่ของ PIC กับ AVR เยอะ เลยทำของ mcs-51 มั่งการแสดงผล
เหมือนกับอันนี้ทุกอย่าง

http://www.ivica-novakovic.from.hr

แกะ hex code อยู่3วัน เพราะไม่เคยเล่น glcd เลย ที่เป็นภาษา c
ก็อ่านไม่ค่อยรู้เรื่องไม่รู้ว่าเขา write image พร้อมกับ ตัวเลขยังไง
p.m ไปหาพี่.. คนหนึ่งใน e-today ก็เงียบ.. มารู้เอาตอนแกะ code
นี่แหละ ตอนแรกเห็นเวบมันมีให้แต่ hex เลยทำตามดู.... มันเจือก
ไม่แสดงอะไรเลย ตรวจแล้วตรวจอีกว่าหนู๋ผิดตรงไหน ทำไม่มันไม่ติด
เลยแกะ code มันซะเลย... แต่ ไม่ได้ง่ายนัก มางงตรง analog-bar
ทั้ง bit flag bit status มั่วไปหมด แถมพี่แกเล่นเอา image table
ไปไว้ที่ eeprom ส่วนนึงด้วยเพราะว่า program memory คงไม่พอเก็บ
แต่บทจะทำได้ เขียนได้ block เดียว... ที่เหลือเขียนเหมือนกันหมด....

มาว่าถึงหลักการ คนที่รู้แล้วไม่เป็นไร เอาคนที่ยังไม่รู้ (เหมือนผม)
การแสดง image กับ ตัวเลข พร้อมกันนั้น ตอนแรกผมเข้าใจว่า
ต้อง update ทั้งหน้าจอหรือ refresh ทุกๆ ครั้งที่ต้องการแสดงผลทั้งจอ
แต่จริงๆ image รวม ผมเรียกว่า main image ที่ไม่มีการเปลี่ยนแปลง
รูปแบบการแสดงผลใดๆอีกเลย จะถูกเขียนในตอนแรกครั้งเดียวจากนั้น
ข้อมูลที่อยู่ในตำแหน่งต่างๆ ที่มีการแปลี่ยนแปลงเช่นตัวเลข จะถูกเขียน
โดยการกำหนด cursor ไปยังตำแหน่งที่ต้องการเขียน แล้วเขียนข้อมูล
ทับลงไป...

ใน source ผม จะมีคำสั่งของ macro อยู่สองคำสั่งคือ

ไปยังตำแหน่งต่างๆของจอ
pixxy [ค่าx],[ค่าy]

เขียน image จากตาราง
wrimg [ตำแหน่งของตาราง],[จำนวนข้อมูล หน่วยเป็นbyte]

ที่ใช้บ่อยๆก็จะมี lcdputchar กับ lcdputcmd

Source code v1.0