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

Custom Search

วันเสาร์ที่ 26 กุมภาพันธ์ พ.ศ. 2554

LED Dot Matrix Display V1



เนื่องจากทุนน้อยครับเอามันแค่นี้ก่อน

การเลื่อนตัวอักษรไม่ได้ยากเท่าใดนัก ทั้งหมดสามารถทำผ่าน buffer ได้ง่ายๆ
โดยกำหนด buffer ขึ้นมาเท่าจำนวนของ column ในรูปคือ 20 byte
ส่วนอีก 5 byte มีไว้ใช้ buffer ข้อมูลจากการเปิดตาราง แล้วเอามา
พักไว้ที่นี่ step การเลื่อนข้อความเบื้องต้นคือ

1.กำหนดตำแหน่งแรกของ pointer ข้อความ
2.กำหนดตำแหน่ง ที่ character buffer
3.เปิดตารางตัวอักษรจาก pointer
4.นำค่าจากตารางเก็บลง buffer
5.scan display ไว้ระยะหนึ่ง
6.เลื่อนข้อมูล display buffer ทั้งหมด ไปทางซ้าย 1 ครั้ง
แล้วกลับไปข้อ 5. ทำจนครบ 5 ครั้ง
7.เพิ่มค่า pointer กลับไปข้อ 2.

การ scan display ใช้หลักการคล้ายๆกับ 7 segment
คือ กำหนด pointer ที่ตำแหน่งแรก display buffer1 (30H)
แล้วนำค่าที่ pointer ชี้ไปส่งให้ Row Shift register
เพื่อส่งไปยัง dot matrix จากนั้นให้ column on
เพิ่มค่า pointer ทำจนครบ 20 column

tip....
คือ data เป็นของ column ไหนก็ให้ column นั้น on
อย่างวงจรที่ผมใช้ column เป็นลบ ผมก็สั่ง ให้ shift bit
นั้นเป็น 0 ครับ... และก่อนจะส่งค่าใดๆทาง row ให้
off ทุก column ก่อนเสมอ ช่วยแก้เบลอได้ 100%
รายละเอียดหลักๆ น่าจะมีเท่านี้ ถ้าได้อะไรใหม่ๆจะมาเล่าให้ฟังอีกที.....

source ตัวนี้ผมทำ buffer ไว้ 24 byte ครับ
เวลาเรียกใช้ ให้ใส่ค่า address 1-4 ลง acc
โดยเรียกโปรแกรมย่อย setaddress จากนั้น ตามด้วย putchar

ตัวอย่าง....
mov a,#1
acall setaddress ;buffer ตำแหน่งที่1
mov a,#"A"
acall putchar ;เก็บค่า "A" จากตาราง ลง buffer ตำแหน่งที่1

ในส่วนของ scan display เอาค่าที่เก็บจาก buffer ไปใช้ได้เลย
โดยมีคำสั่ง shift display ไว้ให้แล้ว
ตัวเต็มผม open source เหมือนเดิม แต่คงเอาแค่ อ่านข้อความจาก
programmemory เอามาวิ่งแสดงเฉยๆ ที่เหลือไปเขียนต่อกันเอง
เพราะเดี๋ยวจะงงกันซะเปล่าๆ video ผมถ่ายชัดสุดได้แค่นี้...

Source Code v1.0

วันอาทิตย์ที่ 20 กุมภาพันธ์ พ.ศ. 2554

7 Segment Thermometer 2 Digit

เป็น Temp monitor ที่ผมพยายามทำให้เล็กที่สุดครับซึ่งทำได้เล็กสุดแค่นี้



ย่านการวัด อยู่ที่ -9 ถึง +99 องศา ตามหลักของ 7segment
ที่เอาแค่หลักสิบไม่มีทศนิยม ถ้าเกินกว่าย่านวัดที่กำหนด จะมีตัว Er กระพริบ



ตัวแรกผมใช้กับ DS18S20 แต่ผมเห็นราคามันแพง เลยแก้ไปใช้กับ
DS18B20แทน ด้านอุปกรณ์ผมออกแบบให้ใช้อุปกรณ์ให้น้อยที่สุด
ราคาโดยรวมไม่น่าเกิน 150 บาท (เน้นประหยัด)

ปล.อาจมีคนทำเล่นเยอะแล้ว แต่ของmcs-51 หายากที่เห็นๆดูจะใช้อุปกรณ์
เยอะไปหน่อยไม่ค่อยถูกใจ

Source Code v1.0

วันพุธที่ 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

Digital clock and Temp Monitor with 7 Segment



เนื่องด้วยผมไปเห็น digital clock ที่ขายในตลาดนัดแถวบ้าน
ตัวเลขน่าจะสูง 1.2" มี temp 2 หลักแยกต่างหากผมถามราคาแล้ว ตกใจ
แม่ง850บาท...!!! (น่าจะแพงแค่แถวบ้านผม)ที่อื่นราคาไม่น่าเกิน 300
แต่ก็ไม่ค่อยเห็นมีขายกันเท่าไรเห็นติดใน รถbus รถตู้ บ้างก็มี.... อยากได้ครับ
เลยกลับมาบ้านหาใน google ไม่มีเลยครับ พยายามหาอยู่หลาย keyword
นานมากแต่ก็ไม่มีที่ต้องการ...

ผมบังเอิญเจอของเก่าที่ตลาดนัดแถวบ้านหลังจาก... น่าจะ 4-5เดือนมั้ง
ต่อราคาอยู่พักนึง เขาก็ขายให้ในราคา 70บาท... ตอนแรกเอามาผมคิดว่า
มันบอกเวลาได้อย่างเดียว มาลองต่อไฟ ก็ติดปรกติลองตั้งเวลาก็ใช้ได้
แต่พอมันเดินไปได้ซักพักมันจะดับพอรีเซตก็ใช้ได้อีก หาสาเหตุอยู่นาน
พอดีด้านหลังมันมี connector 3 ขา มันหักหายไป ตอนแรกคิดว่าเป็น
switch option หรือ sw อะไรซักอย่างเลยเอาสายไฟไปเขี่ยๆดู
ตอนที่display มันดับ ปรากฎว่าdisplay มันติด ขึ้นมา เป็น 88.C
เท่านั้นแหละครับ ถึงบางอ้อเลย...

ตอนที่ display มันดับนั้น มันติด loop presence ของ ds1820
เพราะมันขับแบบ scan มันก็ดับวูบเลยถ้าติด loop โดยมันจะแสดงเวลา
20วินาที แสดง อุณหภูมิ 5วินาที สลับกันไปเรื่อยๆซึ่งผมดูแล้วมันเข้าท่าเข้าทาง
น่าจะเป็นประโยชน์ กับคนอื่นที่อยากทำเล่นทำขาย
(แข่งกะตลาดนัดแถวบ้านผม...) ผมเลยลอก pcb ออกมา
รูมันอาจจะไม่ตรงแป๊ะๆ แต่ก็ใกล้เคียง... ส่วน source code
ผมเขียนขึ้นมาใหม่หมด เพราะของเดิมน่าจะมี bug
เพราะ display มันจะไม่นิ่ง มีอาการแว๊ปๆตลอดทุก2วิ

ปล. วงจรขับมันมีข้อเสีย นิส..นึง R มันจะร้อนหน่อยแต่ก็ไม่มาก
ผมคิดว่าคงเป็นวิธีที่ดีที่สุดแล้วเมื่อเทียบกับความประหยัดและ
จำนวนpart ที่มีไม่มาก..... ลองพิจารณาดูครับ

Source Code v1.0