# Máy, thiết bị và sản phẩm khác > Điện - Điện tử - Tự động hóa > Arduino >  CKD - Hiện thị chữ lớn trên text LCD 04x20 với Arduino UNO

## CKD

*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.

----------

Gamo, h-d, haiquanckbn, huanpt, katerman, Shivla.dat

----------


## Gamo

Quan trọng là cái LCD này giá đắt quá

----------


## CKD

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

Cập nhật chút hình ảnh cho có cái gọi là tiến độ

----------

biết tuốt, mokdad, stark

----------


## katerman

Kiểu số này đẹp nè anh  :Smile:

----------

CKD

----------


## haiquanckbn

Bác này lắm nghề quá đi ah

----------


## CKD

BIG Font mà còn có Keypad demo clip

----------

anhcos, Gamo, nhatson, Ron, secondhand

----------


## anhcos

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

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

--- 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/73...ll=1#post89479

----------

CKD

----------


## CKD

Ướ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  :Smile:

----------


## nhatson

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

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  :Smile:

----------


## solero

Vụ này làm từ 2012 thời còn DIY Audio, dính vào CNC bỏ lâu quá rùi.

----------


## CKD

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

> 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

----------


## CKD

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.

----------


## khangscc

> 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.


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

----------

nhatson

----------


## nhatson

sao ko khắc xuống lớp nhựa luôn?

----------


## CKD

Khắc nó xù mép lên ấy chứ... sâu 0.5mm roài  :Smile: 
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

hô hô không nói em, em đang có con V bit 60, với 90 luôn á  :Big Grin:  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

đề nghị cụ thay luôn 4 con ốc giữ LCD cho đẹp ạ

----------


## CKD

> đề 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  :Wink: 


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

----------


## secondhand

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

> 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

Phay chữ xấu vãi

----------


## CKD

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  :Big Grin: , 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  :Smile: 
- 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  :Big Grin: 

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

Để 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.


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


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  :Big Grin: 


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.


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

----------

anhcos

----------


## CKD

Ghép các ô đặc trưng vào ô ký tự BIG font





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


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

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  :Big Grin: 

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

----------

khoa.address, Shivla.dat

----------

