Em vưa phát hiện sai là phải xuất tris nữa,chết thật. Nhưng các anh cũng phải giải bài toán "độ sáng= nhau" và ko đc lấy giống ý tưởng của e nhé)--->rất có thể ko ai đạt giải rồi đây...hi hi...
Thông báo
Collapse
No announcement yet.
Đố vui về PIC, các câu đố cực vui và cực hay... hehe..
Collapse
This topic is closed.
X
This is a sticky topic.
X
X
-
Vậy là em vẫn bám theo cái ý tưởng là dùng hàm buffer tính cho một rừng giá trị kiểu mảng BIT. ha ha........Nguyên văn bởi thaithutrangVì s thay đổi theo mỗi cột quét, nên cần làm mảng lưu để tăng tốc,đỡ phải tính lấiu mỗi lần quét.
Ví dụ
P[1]=0;--->Cột 1 ko có led sáng.
P[2]=3;--->Cột 2 Có 3 led sáng.
P[i]chính là số LED sáng của cột i.Power[p[i]] là công suất sáng cột i;
Vậy sao kô dùng mảng kép kiểu POWER[i][j], với giá trị lần lượt là độ sáng thứ j của cột i ???? Về bộ nhớ chiếm dụng là bằng nhau mà. hơn nữa lại kô bị giới hạn về j.
Phải kô?
Em kô được giải là cái chắc rồi,
gửi bạn qmk, thực tế người ta dùng cách đó để tạo TTL đó, chọn loại Trans tốt thì chỉ sụt áp có 0,2 V thôi, vậy là chấp nhận được rồi.
AFH
Comment
-
Em dùng kiểu byte chứ có bit đâu nhỉ?(em có chữa ko dùng mảng bit),
Cái của anh qmk bị nháy chỗ này dúng ko nhỉ?PORTB = (PORTB | 0x0F)& (mbcMask[y] | Led[x]);
TRISB = (TRISB | 0x0F)& (mbcMask[y] & mbcMask[x]);
Vì
Thêm 1 dòng và sửa đi một tý:Đang là giai đoạn TRIS lần trước.
PORTB = (PORTB | 0x0F)& (mbcMask[y] | Led[x]);
Thời điểm này bị sáng kotheo ý muốn
TRISB = (TRISB | 0x0F)& (mbcMask[y] & mbcMask[x]);
Anh qmk làm đúng nhất,nhưng em vẫn thích dùng kiểu buff nhất, để đỡ tốn thời gian cho mỗi lần quét.Chỉ tiếc thiếu mất một phần về thay đổi độ sáng theo cộtTRISB |= 0x0F
PORTB = (PORTB | 0x0F)& (mbcMask[y] | Led[x]);
TRISB& = (mbcMask[y] & mbcMask[x]);
Comment
-
Theo ý tưởng quét của AFH thì độ sáng vẫn đều nhau nhưng phải dùng thêm cổng đệm, và nối thêm trở trên mỗi led. Mà thêm cổng đệm thì chẳng có ý nghĩa gì mấy. Đây là bài toán tiết kiệm port mà. Mình vừa thử hàm << trên C++ xong có vẻ nó không phải là hàm quay mà chỉ là hàn shift thôi. AFH sửa chương tình đưa ra bản final đi.Nguyên văn bởi thaithutrangVì s thay đổi theo mỗi cột quét, nên cần làm mảng lưu để tăng tốc,đỡ phải tính lấiu mỗi lần quét.
Ví dụ
P[1]=0;--->Cột 1 ko có led sáng.
P[2]=3;--->Cột 2 Có 3 led sáng.
P[i]chính là số LED sáng của cột i.Power[p[i]] là công suất sáng cột i;
Không ai xem phần chứng minh của mình cách đấy mấy trang nhỉ.
Nếu cho các led sáng đều thì không cần làm như em Trang chỉ cần nối thêm trở trên mỗi led.
Việc control led theo thời gian của em Trang phức tạp và tốn tương đối bộ nhớ. Em nên sửa hết lỗi và đưa ra chương trình final đi.
Fall đâu rồi đưa ra đáp án đi. Nhớ là mười mấy dòng asm thôi nhé. (Với 12 led)Vẫn biết mỗi lần xa là một lần về lại...
Comment
-
Nếu nối thêm trở mỗi led thì em phản đối ngay.Chẳng thà thêm 4 byte RAM (nếu ko thì thêm dòng xử lý tại chỗ)còn hơn mất nhiều trở đến vậy,vì thiết kế ít ai lại dùng đến hết RAM+Flash. Anh qmk đọc lại bài em trang trước nhé, anh bị bóng mờ của LED đó, vài us cũng thấy bóng mờ đó.Vì em làm LED7T đã mắc cái này 1 lần.Trừ anh qmk 0.5 điểm ở chỗ này vừa khuến khích vừa cho anh cẩn thận lần sau có làm thật thì tránh...
Comment
-
Hihi, nếu là vài us thì may ra tắt hết điện và tắt hết các led bên cạnh và mắt em phải cực tinh mới nhận ra được bóng mờ đấy. Em có thể thử.
Nhưng mà viết như em hay hơn
tặng em 0.5 điểm đấy.
Anh cũng phản đối việc thêm linh kiện mà mất ý nghĩa của bài toán. Nhưng control thời gian động như em làm không dễ đâu em nên viết lại và đưa ra bản cuối xem có thể khả thi không.Vẫn biết mỗi lần xa là một lần về lại...
Comment
-
Bé Trang đưa ra cái ý điều chỉnh thời gian timer để cho led sáng đều. Khi đó, em sẽ quay trở lại cái bài ban đầu của em, bởi vì khi các LED 12, 13, 14 đều sáng, thì timer phải để ở 1 chu kỳ nhỏ. Mà nếu lúc đó 23, 24 không sáng, thì nó trở thành 1/3 chu kỳ nhỏ. Kết quả, để sáng đều, cuối cùng vẫn là 1/12 chu kỳ. Nếu vậy, cách quét ban đầu của em đảm bảo vấn đề sáng đều tốt nhất, code ngắn gọn và đơn giản nhất. Cho nên bài giải đầu tiên của em tốt hơn bài giải thứ hai. Em dùng biến s để điều chỉnh thời gian chắc em chưa tính lại thử rằng mẫu số chung nhỏ nhất của s sẽ là 12. Kết quả vẫn là 1/12.
AFH, giải được bài toán rất rõ ràng, có thể điều khiển và tính toán rất đơn giản. Một gợi ý của F đã đưa ra, đó là bài toán 0 thì sáng, 1 thì tắt.
Dữ liệu được lưu dạng 0ddd d0dd dd0d ddd0, lật ngược lại thành
1d*d*d* d*d*1d*.....
rõ ràng, nếu với 4 chân hoặc 8 chân thì chúng ta sẽ tối ưu được bài toán, bằng cách úp ngay một cái mask vào. Bài toán F đưa ra là 12 led, và ghi vào 2 byte, cho nên code mới có thể ngắn được như vậy.
Có một cái mẹo của F ở đây, đó là viết dữ liệu dạng:
0ddd dd0d dd0d 0ddd
nửa đầu đúng thứ tự của AFH làm, nửa sau của byte viết ngược lại. Cho nên, lúc chuyển lên, chỉ cần 1 lệnh ASM = SWAPF, thành ra khởi tạo và viết lệnh tất tần tận mới có mười mấy dòng lệnh. Chứ nếu dịch bit 2 lần thì mất 8 lệnh rồi, không làm được gì nữa cả.
Khi giải N chân, thì dịch bit phải sử dụng, không có cách nào khác hơn.
Nếu như để led sáng đều trong mọi trường hợp, thì cách của bé Trang làm lần đầu tiên là tốt nhất. Nếu để led sáng đều trong từng trường hợp riêng thì ý tưởng của cách 2 của bé Trang có thể dùng được nhưng phải kết hợp với cách của AFH. Nếu dùng một số led N biết trước thì ghi thành nhiều byte sẽ khôn ngoan hơn. Nếu dùng 4 hoặc 8 chân, thì modify cách của AFH một chút. Nếu N chưa biết giải lý thuyết thì cách của AFH làm led sáng tốt nhất (cho điện trở nhỏ, khi led sáng rồi thì hiện tượng mờ là không đáng kể nữa, vì nó chỉ có 1/4 chu kỳ, nếu giải theo cách bé Trang, với số led ít thì sáng yếu, số led nhiều càng yếu hơn nữa).
Như vậy, tất cả đều đã có những ý tưởng hay.
Xin được phép tặng 1 con 16F88 cho AFH, và cho phép bé Trang chọn một con PIC bất kỳ, nếu có anh sẽ tặng, còn nếu không có, anh sẽ gợi ý một con có chức năng tương đương để em chọn.
Gửi email cho F, ghi rõ tên người nhận, địa chỉ (sử dụng đúng email đăng ký trên diễn đàn để F biết đúng là AFH và bé Trang).
Chúc vui.Falleaf
Công ty TNHH Thương mại và Giao nhận R&P
58/57 Nguyễn Minh Hoàng - Phường 12 - Quận Tân Bình - TP.HCM
mail@falleaf.net - VP: (04) 36408561 - (08) 38119870
Comment
-
Ý tưởng quét động của em có lẽ khác với anh F chứ:ví dụ
Côt 1: 3 led sáng đồng thời--->P[0]=3;--->thời gian sáng là:PW[p[0]]=PW[3]=dài nhất
Cột 2: 0 led sáng đồng thời---->P[1]=0;--->thời gian sáng là:PW[p[1]]=PW[0]=ngắn nhất. Nhưng chú ý nếu mọi led đều tăt thì thêm lệnh Off:LED+timer.
Cột 3: 1 Led sáng đồng thời---->P[2]=1;--->thời gian sáng là:PW[p[2]]=PW[1]hơi ngắn
Cột 4: tắt hết LED.------------->P[3]=2;;--->thời gian sáng là:PW[p[3]]=PW[2] khá dài
Cho nên ứng với mỗi lần quét có một thời gian khác nhau.
Bảng tra PW thì phải theo công thức tính thời gian và dòng điện+ chút thực tế.
Như trường hợp trên, ví dụ cụ thể như sau:
Vậy i=0--->thời gian sáng là 3ms(do 3 led cùng sáng).
Vậy i=1--->thời gian sáng là 0.1ms(do tắt hết led)
Vậy i=2--->thời gian sáng là 1ms(1 led sáng)
Vậy i=3--->thời gian sáng là 2ms(2 led sáng)
Đảm bảo các led sáng đều nhau.
Tuy nhiên bị trường hợp(nếu ai tinh mắt sẽ biết):
Hiện tại:nếu 4 led sáng---> thì 4led đó sáng đều nhau.
Một lúc sau toàn bộ chỉ 2 led sáng(do người sử dụng muốn thay đôi chẳng hạn)---> thì 2led đó sáng đều nhau nhưng lại sáng mờ hơn lần trước(4 led).
Vậy nên hay ko?
Comment
-
hihi..
Dùng timer0 không cần khởi động
(quả này F đố mẹo) 2 lệnh ghi giá trị vào. Nhưng không cần khởi động vì nó đếm đến 256 thì chỉ là 256/4 us = 64us. Đạt tốc độ vài chục KHz, tốc độ này đủ tốt. Dùng mặc định, không tốn lệnh nào.
Khởi tạo ngắt timer (1 lệnh)
irs{}
Không kể đoạn khởi tạo ngắt ở đây, nếu tính thì quá cù nhầy, bởi vì luôn luôn phải có ngắt, mà ngắt chuẩn của F đưa ra đã 20 dòng rồi.
AND temp, 00000011
temp = 0; (2 lệnh) XOR & BTFSS
W = 11110000
ANDWF BYTE1, W
PORTB = W (3 lệnh)
Tổng cộng mỗi đoạn 5 lệnh
temp = 1;
W = 00001111
AND BYTE1, W
SWAPF W
PORTB = W (6 lệnh)
4 đoạn như vậy khoảng 23 dòng lệnh, thêm đoạn if(++i ==4)? Không, chỉ cần thêm 1 lệnh INCF i thôi, nó tràn hay không kệ nó, quan tâm làm gì? dùng XOR và BTFSS rồi
thêm một lệnh AND nữa trước khi vào irs cho temp. Mất 2 dòng nữa, tổng cộng 25 dòng 
Hết chương trình. Nếu làm với 8 chân thì cả chương trình 23 dòng lệnh
, bớt được 2 lệnh SWAPF
hihi...
Nếu viết lệnh if(++i == 4) thì các bạn xem lại nó generate code như thế nào
. Coi bộ trường hợp này dùng lệnh CASE có vẻ hợp lý hơn?
Falleaf
Công ty TNHH Thương mại và Giao nhận R&P
58/57 Nguyễn Minh Hoàng - Phường 12 - Quận Tân Bình - TP.HCM
mail@falleaf.net - VP: (04) 36408561 - (08) 38119870
Comment
Bài viết mới nhất
Collapse
-
Trả lời cho Máy đo khuôn mẫubởi vi van phamQuá dễ, Mua cái máy xq quét tòan thân, lấy bàn và khung di chuyển. Tháo đầu xquang ra bán ve chai, mua cái máy siêu âm gắn vào vị trí đầu đèn. Setup máy là chạy chính xác, còn file Setup thì chưa nghĩ ra....
-
Channel: Đo lường và điều khiển dùng máy tính
07-06-2026, 08:49 -
-
Trả lời cho Máy Phun sương tạo ầm Trung Quốc.bởi nguyendinhvanMạch tạo sương là tự dao động.
Mach 555 là đóng mở chu kỳ tần số thấp.
IC 555 giá rẻ, chỉ chạy lên tần số vài trăm ki lô hẹc thôi. Thăng cao hơn là méo dạng rồi tịt.
Mach sương thì dao động tần số tầm 2 mê ga hẹc cơ !...-
Channel: Tâm tình dân kỹ thuật
07-06-2026, 00:09 -
-
bởi nguyendinhvan
Cái máy đo này mắc tiền quá !
Anh em dtvn có giải pháp nào tự chế được không ?...-
Channel: Đo lường và điều khiển dùng máy tính
07-06-2026, 00:00 -
-
bởi nguyendinhvanOi giời.
Thơi buổi PLC rồi, cậu còn hỏi mấy thứ cổ lỗ sĩ này nữa.-
Channel: Tâm tình dân kỹ thuật
06-06-2026, 22:59 -
-
bởi nguyendinhvanChuyện này cũ rồi.
Họ trả lương cho CN, sau đó lại bán hàng thu tiền về. Họ còn cấp các dịch vụ như chỗ ăn ở, quán cafe , giải trí, phương tiện giao thông. Mục đích là thu tối đa số tiền đã chi trả.
Hàng hóa sx ra, chuyển...-
Channel: Tìm mua
06-06-2026, 22:56 -
-
Trả lời cho Yêu thơ mê nhạc, mời các bác vào đây!bởi vi van phambao nhiêu năm quên bẳng đi, là mình còn có 1 chút xíu nghệ thuật bài bản, đã dạy cho con cháu chơi đàn, dù bố mẹ và chúng không xem là quan trọng. Hôm qua ngày bế mạc lớp lá, bỗng dưng thằng cháu ngoại thấy con bé được sơ giới thiệu...
-
Channel: Tâm tình dân kỹ thuật
06-06-2026, 21:58 -
-
bởi ittcChào các anh em, tình hình là mình lo làm ăn không để ý sức khỏe, giờ có chút vấn đề rồi? không biết trên này có anh em nào độ tuổi U35 -> 40 đang có dùng các loại thuốc, thuốc bổ hay thực phẩm chức năng giúp bổ thận tráng dương,...
-
Channel: Tâm tình dân kỹ thuật
05-06-2026, 12:28 -
-
bởi theidiotcatTrong thế giới phần cứng năm 2026, AMD Ryzen 5 7500X3D không chỉ là một cái tên mới, nó là một tuyên ngôn về hiệu suất. Dựa trên các thử nghiệm khắt khe trong môi trường chơi game chuyên nghiệp, con chip này đã chứng minh rằng: bạn không cần...
-
Channel: Đánh giá sản phẩm DTVN
05-06-2026, 10:05 -
-
bởi VinhPham92Chào các bác,
Em vừa dự một cái Odoo Business Show 2026 tuần rồi, ngồi nghe mấy session về tự động hóa sản xuất mà em thấy có vài điểm thấy đáng chia sẻ với mấy anh em làm kỹ thuật ở đây.
Câu hỏi của các doanh nghiệp.
Hôm đấy đi thì các doanh...-
Channel: Lập trình PLC và ứng dụng
05-06-2026, 09:18 -
-
bởi quang4789Mình có cái tay chuyển số chơi game của PXN, hiệu là PXN shifter A7, nó bị lỗi 1 con biến trở chỗ gạt lên xuống dùng để xác định là đang đẩy lên, ở giữa, hay gạt về. Con biến trở này giá trị là 10kOhm, sau khi bị hư thì mình đo chỉ...
-
Channel: Hướng dẫn tìm thông tin linh kiện
03-06-2026, 12:04 -

Comment