PDA

View Full Version : CKD - Hiện thị chữ lớn trên text LCD 04x20 với Arduino UNO



CKD
20-09-2016, 03:35:29 PM
CKD - Hiện thị chữ lớn trên text LCD 04x20 với Arduino UNO

Hôm nay mới sáng đã nhận được tin phương xa, buồn vui lẫn lận...
+ 1 con HBS không biết vì lý do gì.. tự nhiên off luôn không chịu tỉnh, nguyên nhân thì chưa rỏ, bực tập 01.
+ 1 con Sunfar VFD chưa kịp chạy cũng đã đình công, đèn đóm tắt tối thui, nguyên nhân cũng chưa biết tại sao, bực tập 02.
Nghe điện thoại kêu nhận hàng.. vui được chút vì có quà tặng. Táy máy phát hiện sao cái ổ bi nó sượng sượng, quay không trơn. Thế là xử nó luôn. Cuối cùng cũng xong. Xem như là tin vui.

Chán như gián nên lôi Arduino ra mò... làm cái bờ rồ giet nhỏ nhỏ cho nó hết ngày. Kết quả sau một hồi vật lộn thì nó cũng chịu cháy đèn. May là nó chưa biểu tình đòi đình công.

Khoe chút hình ảnh chơi... còn nhiều chổ chưa tối ưu.. sẽ tiếp tục.
25225


https://www.youtube.com/watch?v=BaXwEVTCJfw


https://www.youtube.com/watch?v=Spy4-xj8R4E

Gamo
20-09-2016, 04:50:39 PM
Quan trọng là cái LCD này giá đắt quá

CKD
20-09-2016, 05:17:20 PM
Kiếm cái lcd 14" coi vậy mà rẻ hơn cụ ạ.
3-4 xị là vừa to vừa đẹp.

CKD
05-10-2016, 12:45:32 AM
Cập nhật chút hình ảnh cho có cái gọi là tiến độ

25866

katerman
05-10-2016, 05:53:47 AM
Kiểu số này đẹp nè anh :)
25869

haiquanckbn
05-10-2016, 09:04:30 AM
Bác này lắm nghề quá đi ah

CKD
05-10-2016, 06:24:23 PM
BIG Font mà còn có Keypad demo clip


https://www.youtube.com/watch?v=d77q7QR4UCo

anhcos
05-10-2016, 07:42:26 PM
Cái bigfont này không phải kí tự chuẩn của nó, vậy mình phải định nghĩa tập kí tự lại cho nó, hay chỉ đơn thuần là tập số lượng hữu hạn các "hình" được khai báo riêng đó CKD.

CKD
05-10-2016, 10:05:51 PM
Big font. Được tạo lại từ 9 ô (cell), mỗi ô là 5x8 pixel.
Mình định nghĩa lại 8 ký tự (thằng này nó chỉ cho có vậy).
Sau đó mình là tạo ma trận, kết hợp 9 ô thành một ký tự mà mình muốn.
Vậy nên số lượng ký tự mà mình tạo được... phụ thuộc vào khã năng ghép hình của mình.

Như của em là dùng 9 cell, nhưng lại chỉ hiện 2 cell ½ thôi. Cho ký tự nó tròn trịa xíu, đều trên, đều dưới.
Định nghĩa 8 hình & 2 ký tự (trắng & đen hoàn toàn) có sẵn thành tập hợp 10 hình thái khác nhau. Lý thuyết là có thể tạo lại đủ tập ký tự để dùng. Nhưng nhu cầu chỉ có vậy nên chỉ tạo ở mức vừa đủ.

duonghoang
05-10-2016, 10:35:41 PM
--- Một nùi Graphic LCD bên này nè đại ca, lấy về chạy mới sướng, con này hình như dùng KS0108 controller, thư viện là phổ biến rồi, giao tiếp nhanh hơn mấy con Text Lcd này.
http://forum.cncprovn.com/threads/7328-HCM-Gian-hang-cua-minhdt_cdt10?p=89479&viewfull=1#post89479

CKD
07-10-2016, 03:34:34 PM
Ước gì cái máy tính nó đủ thông minh để nó làm cái mình muốn mà...... mình không cần phải ngồi với nó nhỉ.
Rị mọ 2 ngày được nhiêu đây, xem như cũng có chút thành quả. Khi nào thành chín quả (quả chín) thì không biết :)

25962

25963

nhatson
07-10-2016, 04:30:59 PM
phủ mass loại bỏ được 1 mớ dây, mấy con tụ nguồn bỏ luôn
chạy dây tín hiệu
chạy nguồn
thêm tụ lọc nhiễu

b.r

CKD
10-10-2016, 08:05:12 PM
Làm dư linh kiện bỏ đó.
Nếu có làm thực tế thì bỏ bớt, nếu có vấn đề thì thêm vào :)

26046

26047

26049

solero
10-10-2016, 09:49:03 PM
Vụ này làm từ 2012 thời còn DIY Audio, dính vào CNC bỏ lâu quá rùi.

26051

CKD
10-10-2016, 10:14:34 PM
Giờ bỏ CNC ồi.. quay lại rị mọ điện chơi. Để có cái chém gió với lão Gà. Chứ lão ấy có biết gì về xí èn xì đâu.. hai anh em nói chuyện trớt quớt hà.

stream
11-10-2016, 08:56:52 PM
Giờ bỏ CNC ồi.. quay lại rị mọ điện chơi. Để có cái chém gió với lão Gà. Chứ lão ấy có biết gì về xí èn xì đâu.. hai anh em nói chuyện trớt quớt hà.

Mấy con trở pull-up theo e cũng k cần luôn cụ ạ.

CKD
19-10-2016, 05:13:18 PM
Làm cái panel, để thí nghiệm nó thoải mái hơn, bấm, chọt, sờ nó tự nhiên hơn.

Làm mất một buổi mới xong. Làm chậm kiểu này có mà chết đói, đã sa thải thằng làm rồi.

26389

26390

26391

26392

khangscc
19-10-2016, 06:41:06 PM
Làm cái panel, để thí nghiệm nó thoải mái hơn, bấm, chọt, sờ nó tự nhiên hơn.

Làm mất một buổi mới xong. Làm chậm kiểu này có mà chết đói, đã sa thải thằng làm rồi.

26389

26390

26391

26392
Sao tấm ALu nó xấu cái chử quá đại ka

nhatson
19-10-2016, 07:22:38 PM
sao ko khắc xuống lớp nhựa luôn?

CKD
19-10-2016, 07:59:11 PM
Khắc nó xù mép lên ấy chứ... sâu 0.5mm roài :)
Dùng solidCAM nên không chơi chiêu carving được. Mà trong tay cũng không có con V-Bit 90 độ nào.

khangscc
19-10-2016, 08:50:10 PM
hô hô không nói em, em đang có con V bit 60, với 90 luôn á :D chơi mica cho đẹp đại ca, mới nghiên cứu cách chạy và sơn cái chử đen đỏ như tụi nhật nè

h-d
20-10-2016, 12:09:55 AM
đề nghị cụ thay luôn 4 con ốc giữ LCD cho đẹp ạ

CKD
20-10-2016, 12:16:20 PM
đề nghị cụ thay luôn 4 con ốc giữ LCD cho đẹp ạ

Do CT không tìm được ốc lục giác inox đẹp mà nhỏ cho nó, nên dùng tạm. Là phiên bản thử nghiệm nên tạm chấp nhận vậy.

Lên đèn ;)
26465

Cho nó vào cái box cũng thấy gúm. Đẹp mỗi cái connector :D.
26466

secondhand
20-10-2016, 01:13:46 PM
Lục giác 3 mm inox dài các cở (dân RC mừ) hum nào CKD về ngoại ghé đưa cho

khangscc
20-10-2016, 02:27:13 PM
Lục giác 3 mm inox dài các cở (dân RC mừ) hum nào CKD về ngoại ghé đưa cho

Bên ct cũng có đầy đó bác, đầu tròn đầu bẹp đều có. Chợ sắt An Lạc

solero
20-10-2016, 05:17:40 PM
Phay chữ xấu vãi http://www.pic4ever.com/images/onion048.gif

CKD
29-10-2018, 05:21:36 PM
Lâu lắm, nay có việc với món này nên lôi nó lên, làm tươi nó lại xíu.

Sẽ có nhiều bạn thắc mắc, giờ Graphic LCD nó đâu có đắt mà là cái BIG font làm cho cho nó cực.
Đúng là G-LCD nó rẻ hơn sưa rất nhiều. Nhưng sao rẻ bằng text LCD :D, kế đó là hiển thị trên G-LCD mà muốn nó ngộ nghĩnh thì cũng tốn lắm công sức.

Vậy nên trong dự án này có thể nói, vì mấy lý do sau:
- Rẻ và nhất là đơn giản, dễ thay thế. Vì không dùng nhiều lắm, nhưng thấy hầu hết các text LCD nó giao tiếp giống nhau. G-LCD thì khác, mỗi chip điều khiển có thu viện riêng :)
- Cần hiển thị ký tự lớn, dễ nhìn từ xa. Nhưng mấy cái LCD thì ngoài loại đặc biệt ra, không có cái nào ký tự nó to cả. Còn nếu dùng LED 7 đoạn thì cũng phức tạp không kém.
- Quan trọng nhất là vì người làm thích làm vậy :D

Liên quan đến dự án này có mấy phần chính
- 1. Hiển thị LCD, gồm BIG font và các thông số khác.
- 2. Giao tiếp qua Key bad
- 3. Xuất xung cho step.

Tạm thời mình sẽ trao đổi trước vụ BIG font rồi tới key bad. Phần xuất xung thì có thể mình sẽ thử nghiệm 2 giải pháp. Và nếu có sẽ được tách ra thành chủ đề khác cho tiện.
- Xuất xung đơn giản made in "tự tui", ai ai cũng có thể thử và làm được.
- Xuất xung với gia tốc qua thư viện AccelStepper, nhược điểm là tần số bị giới hạn hơi thấp.

Phần xuất xung có gia tốc và tốc độ cao hơn được mình tự viết từ phương trình gia tốc, vẫn chưa được hoàn thiện lắm về tốc độ. Nhưng so với AccelStepper thì đã cải thiện nhiều. Tần số có thể đạt 7kHz (đã dùng thực tế) và 10kHz với bản Arduino MOD, và 12kHz max (chưa thử, lý thuyết là vậy).
Tất nhiên do xuất xung trên MCU 8bit tốc độ rùa bò nên phần jitter là khó mà tránh được. Jitter nặng đến mức nào thì mình chưa có đo.

CKD
29-10-2018, 05:37:56 PM
Để hiển thị được ký tự lớn hơn bình thường trên text LCD, mình sẽ dùng 9 ô text để kết hợp lại thành một ký tự. Mỗi ô text mặc định như text LCD mình dùng là 5x8 pixel.
Hay nói cách khác, mình dùng 9 ô text (3x3 ô (5x8 pixel)) làm 1 ô ký tự.
Tuy nhiên, có một số ký tự sẽ có nét giữa, do đó, để cân đối hơn mình chỉ dùng 3x2.5 ô để dựng ký tự. Tất nhiên, cân đối thế nào là theo chủ quan của người thực hiện.

Nhìn hình bên dưới sẽ dể hình dung hơn.
65788

Trong đó
- phần màu đen thể hiện mỗi ô ký tự trên text LCD, độ phân giải là 5x8 pixel cho mỗi ô.
- phần màu vàng thể hiện ký tự (BIG font). Trong hình là số 1.

Nếu như dùng text LCD 4x20 (4 dòng 20 cột) thì sẽ thế nào?
Mình bố trí được 5 ký tự và 1 dấu thập phân dạng BIG font. Ngoài ra còn trống 1 hàng để có thể hiển thị nội dung như bình thường. Xem hình dưới
65789

Vì mục đích chỉ hiển thị các con số, nên mình tập trung vào các số 0-9, tất nhiên việc xây dựng các ký tự khác cũng dựa trên cùng phương pháp như thế.
Lập bảng ký số như hình, tất nhiên, phải có thêm C, K và D :D
65790

Sau đó ta tìm điểm chung của các ô, từ bảng ký số như trên thì ta gom lại được mấy ô đặc trưng sau.
65791

Tiến hành đánh số cho mấy ô đặc trưng, tạm gọi là ô ký tự BIG font :D
65792

CKD
29-10-2018, 06:13:42 PM
Ghép các ô đặc trưng vào ô ký tự BIG font

65796

65797

Các ký tự, ký số khác cũng làm tương tự.

Để định nghĩa lại các ô đặc trưng (ô ký tự BIG font), để có thể hiển thị trên text LCD thông thường. Quy ước là điểm đen là 1, điểm sáng là 0. Từ đó, như hình ta được
65798

Có code thế này
* Phần code đã được hiệu chỉnh, cho đẹp hơn. Khác với mô tả hình ảnh bên trên.

// char 0
{ B00001,
B00011,
B00111,
B01111,
B11111,
B00000,
B00000,
B00000},

Lặp lại quá trình trên cho các ô, ta có code

// Define new Char
byte BigFont[8][8] = {
// char 0
{ B00001,
B00011,
B00111,
B01111,
B11111,
B00000,
B00000,
B00000},
// char 1
{ B10000,
B11000,
B11100,
B11110,
B11111,
B00000,
B00000,
B00000},
// char 2
{ B11111,
B11111,
B11111,
B11111,
B11111,
B00000,
B00000,
B00000},
// char 3
{ B00100,
B01110,
B01110,
B01110,
B00100,
B00000,
B00000,
B00000},
// char 4
{ B11111,
B01111,
B00111,
B00011,
B00001,
B00000,
B00000,
B00000},
// char 5
{ B11111,
B11110,
B11100,
B11000,
B10000,
B00000,
B00000,
B00000},
// char 6
{ B10000,
B11000,
B11100,
B11110,
B11111,
B11111,
B11111,
B11111},
// char 7
{ B00001,
B00011,
B00111,
B01111,
B11111,
B11111,
B11111,
B11111},
};

CKD
29-10-2018, 06:23:56 PM
Như thế vẫn chưa hiển thị được.
Như trên mới tạo được 10 ô ký tự BIG font. Để hiển thị được ta phải ghép các ô này lại, hiển thị trong 9 ô.

Như những hình minh họa phía trên các bạn để ý phần số màu vàng ở mỗi ô. Đó là thứ tự ô BIG font được sử dụng để hiển thị chữ lớn.

VD, với số 1, ta sẽ ghép các ô
0, 9, 8
8, 9, 8
2, 2, 2

Các ô khác cũng tương tự.

Từ đó lập được ma trân 13 dòng, 9 cột như sau

byte BigChar[13][9] = {
// Num 0
{7, 2, 6, 9, 8, 9, 4, 2, 5},
// Num 1
{0, 9, 8, 8, 9, 8, 2, 2, 2},
// Num 2
{0, 2, 6, 7, 2, 5, 2, 2, 2},
// Num 3
{0, 2, 6, 8, 2, 9, 4, 2, 5},
// Num 4
{9, 8, 9, 4, 2, 9, 8, 8, 2},
// Num 5
{9, 2, 2, 4, 2, 6, 4, 2, 5},
// Num 6
{7, 2, 1, 9, 2, 6, 4, 2, 5},
// Num 7
{2, 2, 9, 8, 7, 5, 8, 2, 8},
// Num 8
{7, 2, 6, 9, 2, 9, 4, 2, 5},
// Num 9
{7, 2, 6, 4, 2, 9, 4, 2, 5},
// Char C
{7, 2, 1, 9, 8, 8, 4, 2, 5},
// Char D
{9, 2, 6, 9, 8, 9, 2, 2, 5},
// Char K
{9, 8, 7, 9, 9, 8, 2, 8, 1}
};


Lý do có 13 dòng vì có thêm 03 ký tự là C, K và D :D

Tạm thế đã, để test lại code mẫu rồi úp lên.