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
-
Trả lời cho Hỏi về test hipot cao ápbởi nguyendinhvanCách nghĩ của bạn là theo duy tâm thôi. Còn trong công việc thì phải theo duy lý.
Bạn vào goggle và gõ từ : tiêu chuẩn an toàn cách điện.
Bạn sẽ thấy vô vàn các quy định, VN cũng có , quốc tế cũng có. Mỗi vùng , mỗi khu vực,...-
Channel: Điện tử dành cho người mới bắt đầu
02-11-2024, 20:04 -
-
bởi lamvu0677Chào mọi người, ai làm về điện, đặc biệt biến áp xung, mâý con nho nhỏ gắn vào mạch nguồn, cho e hỏi tí ą, e cũng làm trong ty về biển áp thì đo kiểm thành phẩm sẽ kiểm cao áp, tức là kiểm xem có phóng điện giữa các cuộn dây với...
-
Channel: Điện tử dành cho người mới bắt đầu
01-11-2024, 21:05 -
-
bởi AaaabbbbbEm chào các anh chị ,cô chú . Em đang có 1 đề tài: Mô phỏng điều khiển động cơ 1 chiều và bộ điều khiển điện áp tự động (AVR) sử dụng MATLAB/Simulink và Arduino . Anh chị có thế giải thích hoặc định hướng giúp em với được không ạ . Em xin cảm ơn !!...
-
Channel: Vi điều khiển AVR
30-10-2024, 16:38 -
-
bởi 2embeyeuem mới nhập môn, bác nào có sơ đồ của mạch này và cách cắm mạch trên panel cho em xin với, em cảm ơn ạ
-
Channel: Điện tử dành cho người mới bắt đầu
30-10-2024, 15:52 -
-
bởi dqt21091997Hi mọi người,
Team mình hiện là đối tác phân phối cho 1 dịch vụ Proxy US chuẩn bị mở mang tên Proxy Compass. Mọi người có thể trải nghiệm ở đây: https://proxycompass.com/vi/free-trial/
Điểm mạnh của Proxy Compass là:
- 50 địa chỉ IP proxy
...-
Channel: Tổng quan về ngành viễn thông
30-10-2024, 14:46 -
-
Trả lời cho Thắc mắc về kiến thức điện xoay chiềubởi SteinsKMình nhớ là do điện AC không có chia cực cố định như DC, thêm vào đó thì ổ điện loại mà 2 lỗ thì cũng không có phân biệt chiều cắm, thành ra mình cắm chiều nào cũng được. Đây là em hiểu như vậy, có bác nào có ý kiến khác không ạ....
-
Channel: Điện tử dành cho người mới bắt đầu
30-10-2024, 09:57 -
-
bởi tivungvechào mọi người, em là sinh viên mới tìm hiểu về điện em có thắc mắc là tại sao điện AC ở nhà dùng có phích cắm khi cắm vào ổ điện thì cắm chiều nào cũng được, mà em đọc trên mạng thấy điện AC có dây trung tính và dây pha mà nhỉ...
-
Channel: Điện tử dành cho người mới bắt đầu
27-10-2024, 14:25 -
-
Trả lời cho ccs - 1 nút nhấn điều khiển 2 led - cần giúp ahbởi Truong2005Cám ơn nhiều! Code đẫ chạy
-
Channel: từ PIC tới dsPIC
26-10-2024, 21:21 -
Comment