Nguyên văn bởi phong25_2
Xem bài viết
Thông báo
Collapse
No announcement yet.
Tìm hiểu bảng quang báo
Collapse
This topic is closed.
X
X
-
bà con coi góp ý với
không thấy ai post source lên tham khảo hết.
các bác xem hộ source của tui góp ý một vài vấn đề với nha!
bảng của tui nhỏ thôi 16x96 pixel.
quét hàng, đẩy dữ liệu ra cột bằng spi.
hiện tượng chữ chạy không được đẹp lắm cảm giác hơi dật.
tui dùng một mảng display[][] để lưu giá trị hiển thị trên màn hình.
dùng timer ngắt liên tục quét và đẩy mảng này ra các thanh ghi dịch 595.
trong chương trình chính thì dịch bit các phần tử trong mảng để tạo hiệu ứng chữ chạy.
xem ra chổ này không ổn nên chữ chạy bị dật.
mí bác xem giúp phải sửa lại chổ này ntn nhỉ.giải thuật thôi.
timer ngắt quét màn hình
Code:interrupt [TIM1_OVF] void timer1_ovf_isr(void) { unsigned char i; TCNT1H=tscan;//fc //fe TCNT1L=0x55;//eo //00 for(i=0;i<12;i++) { spi(displayx[i][quet]); spi(displayd[i][quet]); } sclk=0; sclk=1; PORTB=quet++; if(quet==16) quet=0; }
Code:for(i=0;i<8;i++) { delay_ms(1); //while(quet!=0);nếu mở khóa dòng này thì bớt dật hơn for(k=0;k<12;k++) { for(j=0;j<5;j++) displayx[k][j]=(displayx[k][j]>>1)+(displayx[k+1][j]<<7); for(j=5;j<11;j++) { displayx[k][j]=(displayx[k][j]>>1)+(displayx[k+1][j]<<7); displayd[k][j]=(displayd[k][j]>>1)+(displayd[k+1][j]<<7); } for(j=11;j<16;j++) //11 displayd[k][j]=(displayd[k][j]>>1)+(displayd[k+1][j]<<7); } for(j=0;j<5;j++) displayx[k][j]=(displayx[k][j]>>1)|(_data[address+j]<<(7-i)); for(j=5;j<11;j++) { displayx[k][j]=(displayx[k][j]>>1)|(_data[address+j]<<(7-i)); displayd[k][j]=(displayd[k][j]>>1)|(_data[address+j]<<(7-i)); } for(j=11;j<16;j++) displayd[k][j]=(displayd[k][j]>>1)|(_data[address+j]<<(7-i)); if (l*8+i==diemanh-1) { break; break; } }
Cty TNHH Cơ Điện tử Hiệp Phát.
------------------------------------------
Trần Hoàng Giang
11-04-1985
Mobil: 0905 438 533
Comment
-
Nguyên văn bởi phong25_2 Xem bài viếthôm trước e có nghe 1 anh nói rằng anh ta dùng cách thúc xung để cho dòng qua led (quang báo) cao theo y muon (để cho led sáng hơn í mà, có thể lên đến cả trăm mA). các a có ai biết kĩ thuật này vui lòng chỉ e với!e
Comment
-
quang bao
Nguyên văn bởi irf540 Xem bài viếtkhông thấy ai post source lên tham khảo hết.
các bác xem hộ source của tui góp ý một vài vấn đề với nha!
bảng của tui nhỏ thôi 16x96 pixel.
quét hàng, đẩy dữ liệu ra cột bằng spi.
hiện tượng chữ chạy không được đẹp lắm cảm giác hơi dật.
tui dùng một mảng display[][] để lưu giá trị hiển thị trên màn hình.
dùng timer ngắt liên tục quét và đẩy mảng này ra các thanh ghi dịch 595.
trong chương trình chính thì dịch bit các phần tử trong mảng để tạo hiệu ứng chữ chạy.
xem ra chổ này không ổn nên chữ chạy bị dật.
mí bác xem giúp phải sửa lại chổ này ntn nhỉ.giải thuật thôi.
timer ngắt quét màn hình
Code:interrupt [TIM1_OVF] void timer1_ovf_isr(void) { unsigned char i; TCNT1H=tscan;//fc //fe TCNT1L=0x55;//eo //00 for(i=0;i<12;i++) { spi(displayx[i][quet]); spi(displayd[i][quet]); } sclk=0; sclk=1; PORTB=quet++; if(quet==16) quet=0; }
Code:for(i=0;i<8;i++) { delay_ms(1); //while(quet!=0);nếu mở khóa dòng này thì bớt dật hơn for(k=0;k<12;k++) { for(j=0;j<5;j++) displayx[k][j]=(displayx[k][j]>>1)+(displayx[k+1][j]<<7); for(j=5;j<11;j++) { displayx[k][j]=(displayx[k][j]>>1)+(displayx[k+1][j]<<7); displayd[k][j]=(displayd[k][j]>>1)+(displayd[k+1][j]<<7); } for(j=11;j<16;j++) //11 displayd[k][j]=(displayd[k][j]>>1)+(displayd[k+1][j]<<7); } for(j=0;j<5;j++) displayx[k][j]=(displayx[k][j]>>1)|(_data[address+j]<<(7-i)); for(j=5;j<11;j++) { displayx[k][j]=(displayx[k][j]>>1)|(_data[address+j]<<(7-i)); displayd[k][j]=(displayd[k][j]>>1)|(_data[address+j]<<(7-i)); } for(j=11;j<16;j++) displayd[k][j]=(displayd[k][j]>>1)|(_data[address+j]<<(7-i)); if (l*8+i==diemanh-1) { break; break; } }
Comment
-
Nguyên văn bởi irf540 Xem bài viếtkhông thấy ai post source lên tham khảo hết.
các bác xem hộ source của tui góp ý một vài vấn đề với nha!
bảng của tui nhỏ thôi 16x96 pixel.
quét hàng, đẩy dữ liệu ra cột bằng spi.
hiện tượng chữ chạy không được đẹp lắm cảm giác hơi dật.
tui dùng một mảng display[][] để lưu giá trị hiển thị trên màn hình.
dùng timer ngắt liên tục quét và đẩy mảng này ra các thanh ghi dịch 595.
trong chương trình chính thì dịch bit các phần tử trong mảng để tạo hiệu ứng chữ chạy.
xem ra chổ này không ổn nên chữ chạy bị dật.
mí bác xem giúp phải sửa lại chổ này ntn nhỉ.giải thuật thôi.
Hiện nay bác đang làm thế này, cái màn hình LED của bác đứng yên, còn cái chữ là chạy. Thành ra bác cứ phải copy từng điểm ảnh vào cái màn hình.
Bác nên đổi lại, cái chữ của bác đứng yên, cái màn hình LED của bác chạy. Công việc cho VXL sẽ nhẹ nhàng hơn. Bác hiểu ý em rồi chứ. Chỉ tốn 2 vòng lặp FOR thôi chứ không nhiều như bác làm đâu.Email: - Mobil: tạm thời ngừng liên lạc 1 thời gian
Giới thiệu website kiếm tiền trực tuyến & tăng thứ hạng website.
Comment
-
Nguyên văn bởi ntcisa Xem bài viếtphương pháp bạn làm là đúng rồi, chữ bị dật là do bạn làm chỉ có 1 trang màn hình, để giải quyết thì làm 2 trang màn hình(phương pháp vẽ hình off screen).khi chương trình dịch trang màn hình này(mảng display 1)thì timer quét trang màn hình kia(mảng display 2).khi chương trình dịch xong trang màn hình này thì báo hiệu cho timer(ngắt timer)biết để timer quét trang màn hình mới(khi timer quét hết dòng cuối cùng (của bạn là dòng thứ 16)).khi đó chương trình sẽ xử lí trang màn hình kia. Tuần tự cho đến khi xử lí hết các dữ liệu của dòng chữ đó.
Vẽ hình off-screen là một kỹ thuật tuyệt vời, lập trình cũng phải phức tạp hơn 1 chút.Email: - Mobil: tạm thời ngừng liên lạc 1 thời gian
Giới thiệu website kiếm tiền trực tuyến & tăng thứ hạng website.
Comment
-
1. nhìn vào cái source của tớ thấy nhiều vòng lặp là tại vì tớ muốn xuất hiện 3 màu đó mà.phía trên của một ký tự màu đỏ,khúc giữa màu cam và dưới màu xanh nên tách ra làm nhiều vòng lặp.
2. cái kiểu chia làm hai trang mình đã có nghĩ tới nhưng chưa là thử.để thử xem sao.cũng nói thêm chút xíu về phương pháp này.theo mình nghĩ nếu làm như vậy thì trang 1 và trang 2 đều phải dịch 2 bit và so le nhau như vậy đúng không.
3. "nguyên văn NGHAI HA: Theo em bác nên xem lại cái này. Mình lập trình VXL chứ không phải lập trình cho PC, thế nên phải làm sao cho em nó chạy nhẹ nhàng thôi chứ không thể làm huỳnh huỵch như với PC được.
Hiện nay bác đang làm thế này, cái màn hình LED của bác đứng yên, còn cái chữ là chạy. Thành ra bác cứ phải copy từng điểm ảnh vào cái màn hình.
Bác nên đổi lại, cái chữ của bác đứng yên, cái màn hình LED của bác chạy. Công việc cho VXL sẽ nhẹ nhàng hơn. Bác hiểu ý em rồi chứ. Chỉ tốn 2 vòng lặp FOR thôi chứ không nhiều như bác làm đâu." mình vẫn chưa hiểu ý bác lắm ở chổ này.cái màn hình led là một mảng display[][] (nếu như một màu) một ký tự cũng là letter[][].muốn chạy được chữ thì dịch màn hình rồi chép từ letter vào đúng không.cách ngược lại tớ không hiểu phải như thế nào.bác giải thích rỏ hơn đi.có đoạn source nào thì tốt quá.nói vậy khó hình dung quá.
rất cám ơn các bác đã quan tâm.Cty TNHH Cơ Điện tử Hiệp Phát.
------------------------------------------
Trần Hoàng Giang
11-04-1985
Mobil: 0905 438 533
Comment
-
Nguyên văn bởi irf540 Xem bài viết1. nhìn vào cái source của tớ thấy nhiều vòng lặp là tại vì tớ muốn xuất hiện 3 màu đó mà.phía trên của một ký tự màu đỏ,khúc giữa màu cam và dưới màu xanh nên tách ra làm nhiều vòng lặp.
2. cái kiểu chia làm hai trang mình đã có nghĩ tới nhưng chưa là thử.để thử xem sao.cũng nói thêm chút xíu về phương pháp này.theo mình nghĩ nếu làm như vậy thì trang 1 và trang 2 đều phải dịch 2 bit và so le nhau như vậy đúng không.
3. "nguyên văn NGHAI HA: Theo em bác nên xem lại cái này. Mình lập trình VXL chứ không phải lập trình cho PC, thế nên phải làm sao cho em nó chạy nhẹ nhàng thôi chứ không thể làm huỳnh huỵch như với PC được.
Hiện nay bác đang làm thế này, cái màn hình LED của bác đứng yên, còn cái chữ là chạy. Thành ra bác cứ phải copy từng điểm ảnh vào cái màn hình.
Bác nên đổi lại, cái chữ của bác đứng yên, cái màn hình LED của bác chạy. Công việc cho VXL sẽ nhẹ nhàng hơn. Bác hiểu ý em rồi chứ. Chỉ tốn 2 vòng lặp FOR thôi chứ không nhiều như bác làm đâu." mình vẫn chưa hiểu ý bác lắm ở chổ này.cái màn hình led là một mảng display[][] (nếu như một màu) một ký tự cũng là letter[][].muốn chạy được chữ thì dịch màn hình rồi chép từ letter vào đúng không.cách ngược lại tớ không hiểu phải như thế nào.bác giải thích rỏ hơn đi.có đoạn source nào thì tốt quá.nói vậy khó hình dung quá.
rất cám ơn các bác đã quan tâm.
Hiện nay bác dùng 1 bộ nhớ màn hình, bác muốn thay đổi cái gì thì thay đổi trực tiếp trên bộ nhớ màn hình đó, đúng không?
Do đó mỗi lần bác muốn dịch chữ sang bên phải, hay bên trái sẽ phải cập nhật lại toàn bộ ô nhớ màn hình.
Bây giờ bác hãy coi cái chữ bác muốn chạy là viết lên một tờ giấy thật dài. Có thể đến 1 hay 2 mét gì đó
Bác cắt một tờ giấy A4 (cái này như cái màn hình), khoét một cái lỗ chữ nhật rồi di chuyển dọc tờ giấy dài của bác từ trái qua phải hay từ phải sang trái.
Rõ ràng nếu bác coi mình đứng yên so với cái màn hình thì bác sẽ thấy chữ chạy chứ không phải màn hình chạy đúng không?
Áp dụng kỹ thuật này vào việc làm quang báo của bác. Bác viết chữ trong một mảng dài (cái tờ giấy dài ở trên)
Bộ nhớ màn hình thời điểm đầu tiên t=0 sẽ ở vị trí 1 của cái mảng trên.
Thời điểm t=t+1 sẽ ở vị trí thứ t của cái mảng trên.
Như vây bác sẽ có 2 vòng lặp, một vòng là duyệt theo độ dài của mảng dữ liệu
Vòng lặp thứ hai đếm từ 1 đến 8 (vì bác muốn mỗi lần dịch 1 pixel mà thôi)
Em nghĩ là đã giải thích rõ lắm rồi đấy.Email: - Mobil: tạm thời ngừng liên lạc 1 thời gian
Giới thiệu website kiếm tiền trực tuyến & tăng thứ hạng website.
Comment
-
@IRF540: Theo em, nếu có thể cải tiến lại thuật toán, cố gắng không sử dụng mảng 2 chiều. Em chưa xem lại cơ chế dịch của C nhưng mỗi lần dùng mảng 2 chiều sẽ bắt VXL tính toán lại để chuyển sang mảng 1 chiều. Như vậy cũng làm chậm đi nhiều lắm.
À, bác có nick là IRF540 chắc bác rành con nầy lắm. Cho em xin một schematic của bác về con IRF540 này để đóng mở dòng 500mA, tần số khoảng 200-300Hz gì đó (cũng ứng dụng trong quang báo thôi). Em khoản lập trình thì tạm được chứ phần nào liên quan đến công suất, alalog thì hơi tệ. Mạch công suất của em làm thì chạy nhưng không biết nó đã tối ưu chưa.Email: - Mobil: tạm thời ngừng liên lạc 1 thời gian
Giới thiệu website kiếm tiền trực tuyến & tăng thứ hạng website.
Comment
-
sờ-men-tíc đó hả.để lục lại xem cai nào được cho bác tham khảo ha.
nhưng mà tải chỉ có 500mA mà dùng tới IRF thì phí quá.Cty TNHH Cơ Điện tử Hiệp Phát.
------------------------------------------
Trần Hoàng Giang
11-04-1985
Mobil: 0905 438 533
Comment
-
Nguyên văn bởi irf540 Xem bài viếtsờ-men-tíc đó hả.để lục lại xem cai nào được cho bác tham khảo ha.
nhưng mà tải chỉ có 500mA mà dùng tới IRF thì phí quá.Email: - Mobil: tạm thời ngừng liên lạc 1 thời gian
Giới thiệu website kiếm tiền trực tuyến & tăng thứ hạng website.
Comment
-
Nguyên văn bởi khoanamem đang làm quang báo dùng 4094 để ghi dịch và 2803 đệm dòng nhưng bi giờ viết chương test phần cứng coi có hoạt động chưa thì em ko bít viết làm sao cả. Anh nào bít chỉ em với
Comment
-
Nguyên văn bởi nghaiha Xem bài viếtÝ kiến của bác ntcisa bác có thể dùng khi làm những hiệu ứng phức tạp. Kiểu như chữ nhảy nhót, biến xanh thành đỏ, mất dần chữ, hiện dần chữ. Còn để làm chữ chạy thì đơn giản 2 vòng lặp FOR là đủ rồi.
Vẽ hình off-screen là một kỹ thuật tuyệt vời, lập trình cũng phải phức tạp hơn 1 chút.
Với kỹ thuật off-screen thì giải quyết rất nhiều kiểu chạy và màu sắc, nếu bạn sử dụng kiểu màu cho cả dòng text (mỗi dòng text có 1 kiểu màu- không phải mỗi ký tự 1 kiểu màu) thì bạn dùng mặt nạ màu, có nghĩa là bạn cứ vẽ ra ram màn hình nội dung cần xuất, khi timer xuất ra màn hình thì AND, OR với byte mặt nạ màu (ký tự mặt nạ màu) thì sẽ được màu mong muốn.
Lập trình vxl và lập trình PC thì cũng không có gì khác nhau(vì đều lập trình cho chip chạy).có khác biệt là vxl thì hạn chế về tài nguyên hệ thống. Đối với quang báo đó là tốc độ vì vậy cần chọn vxl có tốc độ cao (mình sử dụng AVR để làm quang báo). các giải thuật về xử lí mảng 1 chiều, 2 chiều không quan trọng miễn sao thực hiện được ý đồ của chương trình là được, nếu ASM viết không được thì viết bằng C, trình biên dịch sẽ làm cho ta tất cả.
Mình làm bảng quang báo bằng vxl ATMEGA8, over clock lên chạy thạch anh 20MHz, chạy được khoảng 15 kiểu chạy, 10 kiểu màu, nội dung gồm nhiều câucó tổng số ký tự gần 512 ký tự (vì nội dung được lưu trong 512 byte EEPROM nội của vxl), giao tiếp máy tính qua cổng RS232 để đổ nội dung từ máy tính sang(có chương trình **ạn thảo riêng do mình viết). Hôm nào tìm lại post lên cho mọi người tham khảo.
Comment
-
Nguyên văn bởi ntcisa Xem bài viếtđể làm chữ chạy đơn giản thi dùng cửa sổ màn hình( màn hình di chuyển) nhưng sẽ hạn chế về nội dung, nếu sử dụng ram 8K, với ký tự là 8x16 (cho là bộ font có độ rộng bằng nhau là 8 cột cho 1 ký tự và chiều cao của ký tự là 16 hàng), các ký tự có 3 màu thì chỉ hiển thị được khoảng 170 ký tự, tính ra cũng chỉ được 30...40 từ. nếu tăng chiều cao màn hình hoặc bộ font lớn hơn thì cần phải tăng ram.
Với kỹ thuật off-screen thì giải quyết rất nhiều kiểu chạy và màu sắc, nếu bạn sử dụng kiểu màu cho cả dòng text (mỗi dòng text có 1 kiểu màu- không phải mỗi ký tự 1 kiểu màu) thì bạn dùng mặt nạ màu, có nghĩa là bạn cứ vẽ ra ram màn hình nội dung cần xuất, khi timer xuất ra màn hình thì AND, OR với byte mặt nạ màu (ký tự mặt nạ màu) thì sẽ được màu mong muốn.
Lập trình vxl và lập trình PC thì cũng không có gì khác nhau(vì đều lập trình cho chip chạy).có khác biệt là vxl thì hạn chế về tài nguyên hệ thống. Đối với quang báo đó là tốc độ vì vậy cần chọn vxl có tốc độ cao (mình sử dụng AVR để làm quang báo). các giải thuật về xử lí mảng 1 chiều, 2 chiều không quan trọng miễn sao thực hiện được ý đồ của chương trình là được, nếu ASM viết không được thì viết bằng C, trình biên dịch sẽ làm cho ta tất cả.
Mình làm bảng quang báo bằng vxl ATMEGA8, over clock lên chạy thạch anh 20MHz, chạy được khoảng 15 kiểu chạy, 10 kiểu màu, nội dung gồm nhiều câucó tổng số ký tự gần 512 ký tự (vì nội dung được lưu trong 512 byte EEPROM nội của vxl), giao tiếp máy tính qua cổng RS232 để đổ nội dung từ máy tính sang(có chương trình **ạn thảo riêng do mình viết). Hôm nào tìm lại post lên cho mọi người tham khảo.
Còn chuyện dùng mảng 2 chiều em nói cũng có lý do, VXL sẽ phải làm cái công việc chuyển đổi từ mảng 2 chiều sang 1 chiều (mất một phép toán nhân và một phép toán cộng) mà nó lại nằm trong một vòng lặp for dài thòng thì đúng là không nên. Để dành công lực cho VXL làm việc khác.
Em cũng đang muốn làm một cái tutorial kỹ kỹ về một bảng quang báo kích thước lớn, ghép nối được nhiều module để mọi người từ đó phát triển làm những thứ phức tạp hơn. Nhưng cái đó thì cũng chưa dám hứa chắc.Email: - Mobil: tạm thời ngừng liên lạc 1 thời gian
Giới thiệu website kiếm tiền trực tuyến & tăng thứ hạng website.
Comment
Bài viết mới nhất
Collapse
-
bởi nhathung1101Với servo Yaskawa thì dùng phần mềm Wide field 3. Dùng được hay không thì động não đi....
-
Channel: Điện tử công nghiệp
hôm nay, 00:35 -
-
bởi bqvietServo cuối cùng vẫn chỉ là điều chỉnh tốc độ và đọc phản hồi vị trí
Qua cổng song song LPT cổ
https://www.electronicsforu.com/elec...eed-controller
Qua cổng USB - xem thêm đám FT232RL-
Channel: Điện tử công nghiệp
Hôm qua, 15:56 -
-
bởi thiennam0703Em đang tìm hiểu cách xây dựng chương trình điều khiển động cơ Servo Yaskawa bằng máy tính tuy nhiên khi tìm kiếm trên mạng các hướng dẫn thì thường là điều khiển bằng vi điều khiển hoặc điều khiển bằng PLC hay điều khiển động cơ...
-
Channel: Điện tử công nghiệp
Hôm qua, 15:32 -
-
Trả lời cho Tổng hợp các thông tin về mạch nạp cho AVRbởi bacthoMình cũng bị như vậy mà chưa biết ở đâu
-
Channel: Vi điều khiển AVR
21-11-2024, 21:00 -
-
Trả lời cho Xin hỏi về màn hình laptopbởi nhathung1101Câu trả lời là không dùng được.
Hai lớp dán mặt trước và mặt sau, gọi là film phân cực. Muốn hiểu rõ về nó thì chịu khó search nhé. Ở đây có rất nhiều chó cứ ngửi thấy phân là sủa nhặng, nên không giải thích nhiều....-
Channel: Thiết bị điện tử cá nhân
21-11-2024, 16:20 -
-
Comment on Tổng hợp các thông tin về mạch nạp cho AVRbởi Memem
-
Channel: Vi điều khiển AVR
21-11-2024, 15:10 -
-
Trả lời cho Tổng hợp các thông tin về mạch nạp cho AVRbởi MememMọi người ơi cho em hỏi cái này ạ, hiện tại em đang làm btl về hiển thị giá trị nhiệt độ trên led 7 thanh sử dụng atmega16, code em chạy trên mô phỏng rất oke nhưng khi lắp qua mạch thực thì bị lỗi ở led đầu tiên bị lỗi như thế này...
-
Channel: Vi điều khiển AVR
21-11-2024, 15:10 -
-
bởi mantruongepuNhờ cả nhà tìm giúp mình thông tin IC này với, thấy ghi 943B W58BAL mà mình tìm mấy ngày nay không được, nó được đóng gói dạng TSSOP 8. Cám ơn cả nhà....
-
Channel: Điện tử dành cho người mới bắt đầu
20-11-2024, 14:40 -
-
bởi TherulCảm ơn bạn đã chia sẻ câu chuyện và quá trình phát triển sản phẩm của mình. Trước tiên, thật may mắn khi bạn vượt qua tai nạn và vẫn giữ được niềm đam mê cũng như khả năng sáng tạo trong lĩnh vực kỹ thuật. Việc bạn tiếp tục...
-
Channel: từ PIC tới dsPIC
20-11-2024, 07:20 -
-
Trả lời cho Em muốn hỏi mọi người về nguyên lý hoạt động, tần số của mạch công suất trong máy rửa siêu âm ạ.bởi nguyendinhvanBạn nên nghiên cứu cái chấn lưu đèn ống Compact fluorescent lamp hay đèn compact trước đã. Nó rẻ đỡ tốn kém.
Sau khi hiểu rõ rồi thì chuyển sang cái mạch này.
Ở cái chấn lưu, tần số của nó linh tinh lắm, tùy điện áp nguồn, tùy...-
Channel: Hỗ trợ học tập
19-11-2024, 22:44 -
Comment