PDA

View Full Version : [Hỏi] Cách làm chữ Led ma trận chạy mượt



kaszuky
07-02-2013, 04:29 PM
Chào mọi người, chuyện là bữa em chạy ra ngân hàng thấy người ta làm cái bảng led ma trận đẹp quá. Bèn về nhà tìm hiểu làm thử xem thế nào.
Cái em thấy ngoài ngân hàng như thế này. Chỉ là led 8x8 2 màu như mình mua ngoài chợ thôi. Nhưng khi chữ nó chạy thấy chữ chạy rất mượt và cảm giác mắt mình thấy khoảng cách giữa 2 điểm led (pixel) nó ngắn lại !!! Cái này em đang thắc mắc suy nghĩ vì sao như vậy.

Em về làm lại với 1 cục led 8x8 như thế. Hì. Chạy thì được nhưng ko mượt được như người ta. Em đoán chắc phải có thủ thuật gì đây. Search google thì ra được cái này: http://www.piclist.org/techref/io/led/scrolling.htm có vẻ là bí kiếp nhưng nội công có hạn nên lĩnh hội chẳng được bao nhiêu, chưa thành tài được, nên đành lên diễn đàn nhờ cao nhân chỉ điểm :D.

Theo những gì em hiểu được từ cái tut trên thì em đã làm như sau.

Em tạo có 2 mảng data, 1 mảng chứa dữ liệu cũ chưa dịch. 1 mảng chứa dữ liệu mới (dịch chạy).
Em cũng chia thời gian quét của mỗi hàng thành 4 phần nhỏ, rồi tuần tự quét theo tỷ lệ như trong link trên gợi ý.
4 cũ : 0 mới
3 cũ : 1 mới
2 cũ : 2 mới
1 cũ : 3 mới

Cứ thế rồi lặp đi lặp lại.

Tuy nhiên, cái thấy được thì ko phải như mong muốn. Chắc vì em hiểu sai.
Không biết có cao nhân nào biết về phần này không chỉ điểm cho 1 vài chấm để em đả thông kinh mạch với :D em xin cảm ơn ạ.

nguyenlkdn
07-02-2013, 04:49 PM
- khoảng cách giữa 2 điểm led phụ thuộc rất lớn vào khoảng cách của người nhìn. Khoảng cách này càng xa thì 2 led càng gần lại nhau, còn khoảng cách gần thì sẻ ngược lại.
- Việc led chạy có mượt hay không là do bạn xây dựng việc chuyển từ trạng thái CỦ sang trạng thái MỚI nó lại được chia thành nhiều trạng thái phụ. càng nhiều trạng thái phụ thì led chạy sẻ càng mượt hơn.

Chào mọi người, chuyện là bữa em chạy ra ngân hàng thấy người ta làm cái bảng led ma trận đẹp quá. Bèn về nhà tìm hiểu làm thử xem thế nào.
Cái em thấy ngoài ngân hàng như thế này. Chỉ là led 8x8 2 màu như mình mua ngoài chợ thôi. Nhưng khi chữ nó chạy thấy chữ chạy rất mượt và cảm giác mắt mình thấy khoảng cách giữa 2 điểm led (pixel) nó ngắn lại !!! Cái này em đang thắc mắc suy nghĩ vì sao như vậy.

Em về làm lại với 1 cục led 8x8 như thế. Hì. Chạy thì được nhưng ko mượt được như người ta. Em đoán chắc phải có thủ thuật gì đây. Search google thì ra được cái này: http://www.piclist.org/techref/io/led/scrolling.htm có vẻ là bí kiếp nhưng nội công có hạn nên lĩnh hội chẳng được bao nhiêu, chưa thành tài được, nên đành lên diễn đàn nhờ cao nhân chỉ điểm :D.

Theo những gì em hiểu được từ cái tut trên thì em đã làm như sau.

Em tạo có 2 mảng data, 1 mảng chứa dữ liệu cũ chưa dịch. 1 mảng chứa dữ liệu mới (dịch chạy).
Em cũng chia thời gian quét của mỗi hàng thành 4 phần nhỏ, rồi tuần tự quét theo tỷ lệ như trong link trên gợi ý.
4 cũ : 0 mới
3 cũ : 1 mới
2 cũ : 2 mới
1 cũ : 3 mới

Cứ thế rồi lặp đi lặp lại.

Tuy nhiên, cái thấy được thì ko phải như mong muốn. Chắc vì em hiểu sai.
Không biết có cao nhân nào biết về phần này không chỉ điểm cho 1 vài chấm để em đả thông kinh mạch với :D em xin cảm ơn ạ.

kaszuky
07-02-2013, 05:14 PM
Việc led chạy có mượt hay không là do bạn xây dựng việc chuyển từ trạng thái CỦ sang trạng thái MỚI nó lại được chia thành nhiều trạng thái phụ. càng nhiều trạng thái phụ thì led chạy sẻ càng mượt hơn.

Cảm ơn bạn đã góp ý. Bạn có thể chỉ rõ hơn 1 chút xíu được ko :). Nếu có một ví dụ thì hay biết mấy :D.
Thân chào bạn :D

khanh111095
07-02-2013, 09:54 PM
Ví dụ đơn giản nhất là PWM.

Hẳn bạn đã quá rành việc chớp tắt led. Vậy chớp tắt có 2 trạng thái on/off. Khi add PWM vào thì giữa trạng thái on & off sẽ có một đống trạng thái dimmer, thế là mượt :)

Vậy với Led Matrix, giữa việc chuyển hình cũ sang hình mới cũng tương tự như led. Vấn đề còn lại của bạn là chọn phương án nào và thuật toán ra sao thôi :)

nguyenlkdn
07-02-2013, 10:03 PM
Hiện tại mình vẫn chưa làm đén dòng Stellaris nên ko thể hổ trợ bạn về code được rồi nếu bạn muốn mình chỉ có thể hổ trợ code cho phần MSP430 thôi !

Cảm ơn bạn đã góp ý. Bạn có thể chỉ rõ hơn 1 chút xíu được ko :). Nếu có một ví dụ thì hay biết mấy :D.
Thân chào bạn :D

nguyenlkdn
07-02-2013, 10:06 PM
- nếu dùng PWM theo bạn thì mình nghỉ ứng dụng tuyệt vời nhất đó chính là led sao băng hoặt là quét ma trận đồ họa chứ nếu là led bình thường mà dùng phương pháp này thì hình như hơi công phu và tốn kém thời gian !

Ví dụ đơn giản nhất là PWM.

Hẳn bạn đã quá rành việc chớp tắt led. Vậy chớp tắt có 2 trạng thái on/off. Khi add PWM vào thì giữa trạng thái on & off sẽ có một đống trạng thái dimmer, thế là mượt :)

Vậy với Led Matrix, giữa việc chuyển hình cũ sang hình mới cũng tương tự như led. Vấn đề còn lại của bạn là chọn phương án nào và thuật toán ra sao thôi :)

khanh111095
07-02-2013, 10:57 PM
Trời đất, bạn ấy bảo ví dụ thì mình cho ví dụ thôi chứ có ai rảnh lôi con MSP430 hoặc Stellaris ra chạy PWM cho con lét đâu, haha =))

kaszuky
08-02-2013, 12:29 PM
Cảm ơn 2 anh đã góp ý. Hì. Em đã cố gắng nghĩ ra cách quét như anh khanh111095 đã gợi ý, PWM.
Hì hục cả đêm. Cuối cùng được cái này.
http://www.youtube.com/watch?v=lbVvEhtbVes

Cái video trên là em làm nó ẩn hiện từ từ. (Cái điện thoại cùi quá nên camera nó không rõ :D)
Còn làm chữ chạy lên chạy xuống, ngang dọc thì em vẫn đang suy nghĩ.

Phương pháp em làm như thế này. Thay vì đơn giản chỉ có quét 8 lần (1 hàng 1 lần) cho 1 chu kì, thì bây giờ em nhân số lần quét lên 16 lần (16 lần 1 hàng) cho 1 chu kì.
Rồi trạng thái của led thay vì chỉ có 0 với 1 thì bây giờ em sử dụng 1 số 4 bit ( 16 trạng thái tương đương với độ sáng - 0(tắt hẳn) đến 15(sáng nhất) ).
Bây giờ trong hàm quét của em em kiểm tra số đó (số 4 bit). ví dụ = 9. Thì trong 16 lần quét cho 1 hàng thì 9 lần led đó sáng. và 6 lần led đó tắt. Như thế thì độ sáng của led đã được giảm xuống.

Có 1 vấn đề em nhận ra là, nếu như làm như cách trên thì tăng số ngắt sẽ tăng lên. Tức là ngắt xảy ra liên tục, đó là chỉ với 16 lần, lỡ dùng 8 bit cho mỗi pixel(led) thì vị chi phải ngắt lên đến 256 lần cho mỗi chu kì.

Thời gian cho mỗi hàng thì khoảng 2.5ms (1/400Hz) vị chi thời gian cho mỗi lần ngắt là 2.5ms/256 khoảng 10us. Chip stellaris em config chạy PLL để đạt tần số chip là 50MHz -> mỗi lệnh khoảng 20ns. Vậy là cứ khoảng 500 lệnh là phải làm ngắt. Dẫn đến chiếm dụng hầu hết tài nguyên CPU cho toàn hệ thống chỉ để quét led :D.

Không biết em hiểu thế có đúng ko? Không biết mấy anh có giải pháp nào hay hơn không? Mong được mấy anh chỉ giáo


Hiện tại mình vẫn chưa làm đén dòng Stellaris nên ko thể hổ trợ bạn về code được rồi nếu bạn muốn mình chỉ có thể hổ trợ code cho phần MSP430 thôi !
Hì thiệt tình là em không có ý định xin code à. Em rất nhác đọc code của người khác viết :D, đau đầu lắm :D. Em chỉ muốn học hỏi thuật toán rồi tự nghĩ theo cách của mình để viết cho nó lên tay. Hì dù sao em cũng cảm ơn 2 anh đã giúp đỡ.

nguyenlkdn
08-02-2013, 01:05 PM
Mình rất hoan nghênh cách thức nghiên cứu của bạn thú thiệt mình củng rất ít kiên nhẫn để tìm hiểu code của ai đó viết, và củng rất hạn chế sử dụng các thư viện sẵng có, khi muốn làm gì thì tự mình xây dựng thư viện cho chính mình thì khi sử dụng mình sẻ hiểu rất rõ mình đang làm gì và khắc phục sự cố củng rất nhanh...

Hì thiệt tình là em không có ý định xin code à. Em rất nhác đọc code của người khác viết :D, đau đầu lắm :D. Em chỉ muốn học hỏi thuật toán rồi tự nghĩ theo cách của mình để viết cho nó lên tay. Hì dù sao em cũng cảm ơn 2 anh đã giúp đỡ.

nguyenlkdn
08-02-2013, 08:18 PM
- Không biết có phải ý của bạn là chạy mượt như vậy không ;)

http://www.youtube.com/watch?v=0TBy2Dd_vcI&feature=youtu.be

kaszuky
08-02-2013, 11:01 PM
Ý em là thế này nè.
622
Xem cái hình đó cho dễ diễn tả.
- Cái led ma trận màu đỏ là cục led bình thường 8x8. Quét tĩnh thì nó sẽ hiện ra thế.

- Cái led ma trận màu xanh dương là cái em nhìn thấy được ngoài mấy cái biển quang báo ngoài Ngân Hàng. Thấy y thế.
Chữ nó chạy thấy rõ từng pixel 1, khoảng cách giữa các pixel nhìn thấy nhỏ hẳn lại, đồng thời các dòng (row) bị nghiên nghiên như thế tạo ra cảm giác thấy chữ nghiên (cái này không phải là do font chữ nó nghiên mà do thuật toán quét của họ à). Nhìn theo dòng chữ không bị đau mắt và thấy hình ảnh rất rõ, chữ nhìn rất thực.

- Cái led ma trận màu xanh lá là cái hình sẽ thấy được khi nhìn ngoài thực tế của cái led của em (qua video thì thấy khác). Các pixel khi chạy bị chồng lên nhau (tốc độ nhanh đủ để thấy led chạy mượt không bị giật cục như mình nhảy từng bước). Nhìn theo rất đau mắt chữ nhìn không thực. :) . Không phải hiện tượng "bóng ma" đâu nghe vì em biết cái này và làm cho nó không có hiện tượng này rồi. :D

Cái video trên không biết ngoài thực tế chạy có bị hiện tượng như em không? theo video thì nhìn xa thấy rất ok. Nhưng qua video nó khác em ko bik có y thế không? Cái led của em khi quay qua video thì thấy chạy cũng mượt như thế à. Nhưng nhìn ở ngoài thì nó khác.

Với thuật toán dịch của em đang làm thì đơn giản là dịch dữ liệu từng bit 1 thế thôi. Nhưng em nghĩ để đẹp thì không chỉ có vậy mà chắc phải thêm nhiều thủ thuật khác nữa.
Mong được chỉ giáo ạ :)

P/S: Anh có thể share thuật toán của anh dùng để dịch chữ cho em tham khảo với được không ạ :)

khanh111095
08-02-2013, 11:27 PM
cái này không phải là do font chữ nó nghiên mà do thuật toán quét của họ à

Mình cũng chỉ xài qua led matrix vài lần cho biết thôi chứ cũng chưa đào sâu vào nó nên ko dám "chỉ giáo" gì bạn, chỉ là chia sẻ và thảo luận thôi :D

Mình thắc mắc dựa vào đâu để bạn xác định thông tin trên thế:confused:

kaszuky
09-02-2013, 12:05 AM
Mình cũng chỉ xài qua led matrix vài lần cho biết thôi chứ cũng chưa đào sâu vào nó nên ko dám "chỉ giáo" gì bạn, chỉ là chia sẻ và thảo luận thôi :D

Mình thắc mắc dựa vào đâu để bạn xác định thông tin trên thế:confused:

Chào anh.
Em không biết phải diễn tả như thế nào nhưng nếu anh nhìn thật bên ngoài sẽ biết được điều đó a.
Thực tế em thấy ngoài đó các pixel giữa 2 dòng khi chạy mình sẽ thấy nó lệch nhau 1 chút ít như hình em vẽ ở trên. (Điểm này em cũng đang thắc mắc vì sao họ làm được hay như vậy). Tức là nó không phải tuân theo hàng cột thẳng hàng như cục led của mình.

Lúc trước hồi năm 2 em cũng đã từng có làm 1 cái led ma trận và hồi đó chưa biết gì nhiều hết. Code kiểu chấp vá và theo code của họ. Em nhớ có lần làm bị lỗi. Thì led của em nó chạy ra nghiên nghiên như thế. Nhưng mà là lỗi. lúc nghiên trái lúc nghiên phải. Lúc thì loạn lên. Thiệt tình hồi đó em chưa biết gì cả nên làm kiểu làm theo thôi nên chả học và chả phân tích gì nhiều hết. Chỉ ngồi sửa lại cho nó chạy thẳng đứng là được.
Cái video em làm hồi trước http://www.youtube.com/watch?v=G9Yku7MXXkA
Video thì thấy mượt nhưng mà hồi đó em chạy ở ngoài là nó bị giật cục á ạ.

nguyenlkdn
09-02-2013, 07:27 PM
Hiện tại mình đang thử xem có thể thực hiện được việc nghiên bộ font như mô tả của bạn không !
code đó mình thực hiện trên MSP430G2553 nên không tiện post lên đây nếu bạn có như cầu tham khảo code bạn có thể pm mình qua Gmail : nguyenlkdn@gmail.com hoặc Skype : TDNEMB

Ý em là thế này nè.
622
Xem cái hình đó cho dễ diễn tả.
- Cái led ma trận màu đỏ là cục led bình thường 8x8. Quét tĩnh thì nó sẽ hiện ra thế.

- Cái led ma trận màu xanh dương là cái em nhìn thấy được ngoài mấy cái biển quang báo ngoài Ngân Hàng. Thấy y thế.
Chữ nó chạy thấy rõ từng pixel 1, khoảng cách giữa các pixel nhìn thấy nhỏ hẳn lại, đồng thời các dòng (row) bị nghiên nghiên như thế tạo ra cảm giác thấy chữ nghiên (cái này không phải là do font chữ nó nghiên mà do thuật toán quét của họ à). Nhìn theo dòng chữ không bị đau mắt và thấy hình ảnh rất rõ, chữ nhìn rất thực.

- Cái led ma trận màu xanh lá là cái hình sẽ thấy được khi nhìn ngoài thực tế của cái led của em (qua video thì thấy khác). Các pixel khi chạy bị chồng lên nhau (tốc độ nhanh đủ để thấy led chạy mượt không bị giật cục như mình nhảy từng bước). Nhìn theo rất đau mắt chữ nhìn không thực. :) . Không phải hiện tượng "bóng ma" đâu nghe vì em biết cái này và làm cho nó không có hiện tượng này rồi. :D

Cái video trên không biết ngoài thực tế chạy có bị hiện tượng như em không? theo video thì nhìn xa thấy rất ok. Nhưng qua video nó khác em ko bik có y thế không? Cái led của em khi quay qua video thì thấy chạy cũng mượt như thế à. Nhưng nhìn ở ngoài thì nó khác.

Với thuật toán dịch của em đang làm thì đơn giản là dịch dữ liệu từng bit 1 thế thôi. Nhưng em nghĩ để đẹp thì không chỉ có vậy mà chắc phải thêm nhiều thủ thuật khác nữa.
Mong được chỉ giáo ạ :)

P/S: Anh có thể share thuật toán của anh dùng để dịch chữ cho em tham khảo với được không ạ :)

kaszuky
12-02-2013, 10:08 PM
Chào mọi người,
Cái chữ nghiên nghiên như em mô ta trên đó thì em đã làm được rồi.
Đơn giản là thay đổi chỗ đặt hàm delay thôi à. Thay vì dịch hết rồi mới delay thì bây giờ dịch 1 hàng delay 1 lần cứ thế nó tạo ra độ trễ giữa các hàng với nhau là được ạ.

Còn cái vấn đề chữ chạy mượt hay và không rõ thì em vẫn còn đang lấn cắn à.

Hiện tượng như thế này: 629

Chữ A bên trái là lúc đứng yên hoặc là dịch ngang với tốc độ chậm. Pixel thấy rõ ràng thế.
Chữ A bên phải là lúc em quét với tốc độ nhanh (để led chạy mượt hơn). Pixel nó bị nhòe nhòe như thế à.

Còn đây là đoạn code em làm việc đó: http://pastebin.com/W3107Dpd

Em có tìm được trên mạng một đoạn video nó làm chạy chậm nhưng vẫn mượt lắm như thế này:
http://www.youtube.com/watch?v=8m61oQqTb1Q&lc=VtMFHoFr2AmdBcSfEaPDIvAdD909698nghuIYjNhoik

Mong được mọi người giúp đỡ :)

nguyenlkdn
12-02-2013, 10:56 PM
cái việc làm cho chạy mượt theo ý muốn thì thực sự là phải trao đổi trực tiếp với bạn mới có thể giúp được.
Còn cái hiện tưởng ảnh bị nhòe thì như thế này. Bạn cho mình hỏi là sự nhòe ấy độ sáng của bức hình có như nhau hay không các điểm ảnh đều có độ sáng như nhau hay một cái sáng rất rõ còn cái kia mình có thể cảm nhận nó mờ hơn hẳn.
- Nếu độ sáng tất cả các điểm ảnh đều như nhau thì cái này là do bạn dịch ảnh với tốc độ khá cao. cái này không thể khắc phục được do mắt của chúng ta nhìn ra thế rồi chỉ có thể đổi cách dịch ảnh hoặt giảm tốc độ dịch xuống một tí.

- Nếu độ sáng 2 thằng khác hẳn nhau thì có khả năng là do bạn phối hợp thời gian chưa đúng, cụ thể là hình như bạn cho mỗi cột sáng trong khoản thời gian là 2.5ms thì giờ bạn thử cho thời gian dáng của mỗi cộtlà 2.0ms thử xem có còn hiện tượng đó nữa không.
P/S : Bạn nên test trên một ma trận đủ lớn thì việc kiểm tra khảo sát sẻ dể dàng hơn... do ở đây mạng mình rất yếu nên ko thể xem các đoạn video của bạn được ^^!