Mình đang làm 1 bài mãi mà không được. Mình muốn đếm từ 0 đến 9999 trên led 7 thanh (không dùng nút bấm, nếu có nút bấm thì mình đã làm được rồi) 1 hoặc 2 s tự động tăng số. Nhưng nếu dùng lệnh delay_ms(1000) thì led cứ nhấp nháy, Mình muốn hỏi mọi người xem cái chỗ trễ 1 s đó mình phải dùng mẹo gì để led không nhấp nháy.
Thông báo
Collapse
No announcement yet.
dem tu 0 den 9999
Collapse
X
-
Hi,
Nói đơn giản là thế này dùng ngắt Timer, 2 Timer thì đơn giản hơn 1 Timer. Timer thứ nhất sẽ ngắt với tần số bằng tần số quét LED, mỗi lần ngắt thì đọc nội dung trong ô nhớ chứa giá trị cần hiển thị của LED thứ n, lần ngắt tiếp theo sẽ hiễn thị ô nhớ n+1 trên LED thứ n+1. Khi n bằng với số LED cuối cùng thì reset lại n=0 để ngắt tiếp theo quay về hiển thị LED đầu tiên. Ngắt Timer thứ hai thì tạo interval 1s hay 2s tùy thích, khi đủ thời gian trễ thì cập nhật thông tin vào các ô nhớ cần hiễn thị. Nếu dùng 1 Timer thì dùng thêm biến đếm trong ngắt quét LED luôn, khi đủ thời gian delay thì cập nhật ô nhớ. Chương trình chính chỉ việc setup các Timer rồi đi ngủ. Nhớ là phải cho CPU đi ngủ nhé chứ để cho nó chạy không không vậy thì chỉ có sinh viên mới làm thế.
Thân ái.Đường đến những ngày vinh quang không còn xa
Con đường chúng ta... chúng ta đã chọn.
Comment
-
Nói như các bác trên nói là chuẩn đấy, dùng times là tốt nhất. Còn nếu chưa biết cách dùng time thì bạn có thể dùng thêm một biến phụ. Nếu chu kỳ quét leb của bạn là 1ms thì cho biến phụ đó tăng 1000 lại tăng giá trị hiển thị một lần xong lại quy 0 biến phụ. Thế là okThiết kế chế tạo các loại máy xoáy nắp, chiết rót định lượng dùng trong dược phẩm và thực phẩm.
Comment
-
Nguyên văn bởi teddy78 Xem bài viếtMình đang làm 1 bài mãi mà không được. Mình muốn đếm từ 0 đến 9999 trên led 7 thanh (không dùng nút bấm, nếu có nút bấm thì mình đã làm được rồi) 1 hoặc 2 s tự động tăng số. Nhưng nếu dùng lệnh delay_ms(1000) thì led cứ nhấp nháy, Mình muốn hỏi mọi người xem cái chỗ trễ 1 s đó mình phải dùng mẹo gì để led không nhấp nháy.
Comment
-
Nguyên văn bởi teddy78 Xem bài viếtMình đang làm 1 bài mãi mà không được. Mình muốn đếm từ 0 đến 9999 trên led 7 thanh (không dùng nút bấm, nếu có nút bấm thì mình đã làm được rồi) 1 hoặc 2 s tự động tăng số. Nhưng nếu dùng lệnh delay_ms(1000) thì led cứ nhấp nháy, Mình muốn hỏi mọi người xem cái chỗ trễ 1 s đó mình phải dùng mẹo gì để led không nhấp nháy.
Vấn đề của bạn rất đơn giản, bạn nên tổ chức chương trình như thế này:
- Chương trình chính bạn cho chạy một hàm quét LED 7 thanh để luôn hiển thị ra ngoài giá trị của một biến đếm kiểu integer (0-65535) nhưng chỉ cần quét 4 số thôi vì giá trị của bạn chỉ hiển thị đến 9999. Hãy tổ chức chương trình hiển thị này với tham số đầu vào là giá trị của biến đếm.
- Tiếp đó bạn hãy setup một timer bất kì cứ 1s hoặc 2s bạn tăng biến đếm đó một lần (thời gian này có thể thay đổi tùy ý). Sau khi tăng bạn hãy thêm các điều kiện khác để giới hạn giá trị của biến đếm luôn trong dải 0-9999.
Với cách làm này bạn hãy yên tâm là chương trình rất đơn giản và không bao giờ LED nhấp nháy.
Bạn thử xem nhé, chúc thành công.For a better world
Comment
-
Thanks mọi người nhiều. Cho mình hỏi (hơi ngớ ngẩn):
1, Khi delay thì vi điều khiển không làm gì cả, còn mình dùng timer thì vi điều khiển vẫn hoạt động như thường phải không?
2, Mình đã nghĩ đến ý tưởng của Toan.Lv từ trước nhưng mình không biết rõ làm sao để setup timer sao cho đúng như ý mình ấy.Mình dùng codeVision thì phải chỉnh thông số ở cửa sổ Wizard cho timer 0 như thế nào.
3,Proteus có mô phỏng "ngon" cái timer không nhỉ?
Mong mọi người chỉ giáo thêm!Many thanks.
Comment
-
Nguyên văn bởi teddy78 Xem bài viếtThanks mọi người nhiều. Cho mình hỏi (hơi ngớ ngẩn):
1, Khi delay thì vi điều khiển không làm gì cả, còn mình dùng timer thì vi điều khiển vẫn hoạt động như thường phải không?
2, Mình đã nghĩ đến ý tưởng của Toan.Lv từ trước nhưng mình không biết rõ làm sao để setup timer sao cho đúng như ý mình ấy.Mình dùng codeVision thì phải chỉnh thông số ở cửa sổ Wizard cho timer 0 như thế nào.
3,Proteus có mô phỏng "ngon" cái timer không nhỉ?
Mong mọi người chỉ giáo thêm!Many thanks.
Khi delay thì CPU làm việc delay, khi dùng ngắt thì CPU không có việc gì thì đi ngủ để tiết kiệm năng lượng.
Câu 2 và câu 3 thì không biết vì tui chưa làm việc với AVR bao giờ cả.
Thân ái.Đường đến những ngày vinh quang không còn xa
Con đường chúng ta... chúng ta đã chọn.
Comment
-
Nguyên văn bởi teddy78 Xem bài viếtThanks mọi người nhiều. Cho mình hỏi (hơi ngớ ngẩn):
1, Khi delay thì vi điều khiển không làm gì cả, còn mình dùng timer thì vi điều khiển vẫn hoạt động như thường phải không?
2, Mình đã nghĩ đến ý tưởng của Toan.Lv từ trước nhưng mình không biết rõ làm sao để setup timer sao cho đúng như ý mình ấy.Mình dùng codeVision thì phải chỉnh thông số ở cửa sổ Wizard cho timer 0 như thế nào.
3,Proteus có mô phỏng "ngon" cái timer không nhỉ?
Mong mọi người chỉ giáo thêm!Many thanks.
nếu bạn quét có 4 led thì nên để 5ms quét 1 led.dảm bảo với bạn là OK.
khi cấu hình cho timer0 thì bạn chọn clock cho timer0.vi dụ Tclk = 31.250Khz,giá trị dưa vào TCNT0 = 99.khi dó ~5ms timer0 ngắt 1 lần.
ví dụ với AT16,chỉ có ngắt Time0
// Timer 0 overflow interrupt service routine
interrupt [TIM0_OVF] void timer0_ovf_isr(void)
{
// Place your code here
TCNT0 = 99;
// code quet led
}
// Timer/Counter 0 initialization
// Clock source: System Clock
// Clock value: 31.250 kHz
// Mode: Normal top=FFh
// OC0 output: Disconnected
TCCR0=0x04;
TCNT0=99;
OCR0=0x00;
//cho phep ngắt tràn timer0
// Timer(s)/Counter(s) Interrupt(s) initialization
TIMSK=0x01;email:trangonthuocthom@gmail.com
Comment
-
Nguyên văn bởi teddy78 Xem bài viếtThanks mọi người nhiều. Cho mình hỏi (hơi ngớ ngẩn):
1, Khi delay thì vi điều khiển không làm gì cả, còn mình dùng timer thì vi điều khiển vẫn hoạt động như thường phải không?
2, Mình đã nghĩ đến ý tưởng của Toan.Lv từ trước nhưng mình không biết rõ làm sao để setup timer sao cho đúng như ý mình ấy.Mình dùng codeVision thì phải chỉnh thông số ở cửa sổ Wizard cho timer 0 như thế nào.
3,Proteus có mô phỏng "ngon" cái timer không nhỉ?
Mong mọi người chỉ giáo thêm!Many thanks.
1. Delay thực chất là bạn bắt CPU giết thời gian bằng những việc làm vô nghĩa kiểu như đếm lên, đếm xuống. Trong hàm delay CPU sẽ rất bận (chứ không phải là không làm gì cả) và chẳng làm được gì khác đâu. Nếu bạn có tác vụ thăm dò (kiểu như giám sát phím bấm) thì đừng dùng hàm delay, vì nếu sự kiện xảy ra trong thời gian CPU delay thì bạn sẽ không phát hiện được. Ngắt timer thì khác, khi dùng ngắt timer CPU nó chuyển cái việc vô nghĩa đó cho thằng timer làm còn nó thì rảnh tay và có thể làm việc khác.
2. Setup timer trong AVR để tạo ra độ trễ thời gian bạn làm thế này. Trong phần winzar bạn sẽ chọn: system clock, chế độ overflow hoặc CTC, căn cứ vào tốc độ clock để tính giá trị nạp vào thanh ghi. Ví dụ nếu chọn tốc độ là 7200Hz (còn tùy vào thạch anh ngoài bạn dùng) thì 1s nó đếm 7200 lần --> một lần đếm mất 1/7200s --> bạn muốn thời gian delay là bao lâu thì tính ra số lần đếm (ví dụ 10ms thì nó phải đếm 72 lần). Giá trị nạp vào thanh ghi thì tùy chế độ. CTC thì là 72 còn overflow thì là (256-72).
Với bài của bạn:
- Hàm quét led dùng hàm delay bình thường đảm bảo quét LED với tần số > 24Hz
- Timer setup để 10ms ngắt một lần --> sau 100 lần ngắt đủ 1s, 200 lần ngắt đủ 2s. Trong hàm ngắt timer cần dùng 2 biến đếm. Biến thứ nhất đếm số lần ngắt timer, biến thứ 2 là giá trị hiển thị ra ngoài. Khi biến đếm số lần ngắt = 100 (nghĩa là đủ 1s) thì tăng biến đếm giá trị hiển thị ra ngoài một lần.
Thân,For a better world
Comment
-
Cho em hỏi thêm. Mạch đếm thường dùng để đếm sản phẩm, phòng khi mất điện du liệu bị mất mình có thể lưu dữ liệu được không các anh. Nếu được thì mình dùng hàm gì trong c ah. Vi dụ : mạch đếm đến 123 bị mất điện. khi có điện lại thì là 123 và đếm tiếp chứ không bì reset về 000.
Comment
Bài viết mới nhất
Collapse
-
Trả lời cho Hỗ trợ tìm linh kiện mạch hạ áp 220V - 110Vbởi davidcopyTheo như A.I phân tích thì mạch này ghim điện DC ngõ ra, tụ 250VDC thì ngõ vào khoảng 220VDC là ok....
-
Channel: Hướng dẫn tìm thông tin linh kiện
Hôm qua, 11:45 -
-
bởi davidcopybạn cần hỗ trợ gì sao không viết ra hoặc chụp hình kèm chú thích...
-
Channel: Hỗ trợ học tập
Hôm qua, 10:13 -
-
Trả lời cho Sạc bình acquy 30ahbởi dinhthuong80Đình Thường xin phép nhờ chủ đề này để chia sẻ về 1 bộ sạc bình. Xin được nói trước là không có ý xoi mói tìm lỗi, chỉ nhằm mục đích chia sẻ về vấn đề kĩ thuật cho ai quan tâm thôi ạ!
Chúng ta không nên dùng bộ sạc...-
Channel: Điện tử dành cho người mới bắt đầu
Hôm qua, 10:05 -
-
Trả lời cho Hàn chì thiếc lên nhôm.bởi vi van phamBình thường là vậy. Họ không hiểu thì họ là người không bình thường.
Bác không có việc làm, vẽ chuyện kiếm niềm vui, không vui thì buồn vậy....-
Channel: Tâm tình dân kỹ thuật
Hôm qua, 10:03 -
-
Trả lời cho Hàn chì thiếc lên nhôm.bởi dinhthuong80Dạ, bình thường sẽ là vậy, ai cũng hiểu nhưng cháu vẫn rất sợ sẽ có người cố tình không hiểu và lí luận soi mói ấy bác ạ! Vì rõ ràng nó có tan... vài phân tử trong nước rồi mới thôi tan!!!!...
-
Channel: Tâm tình dân kỹ thuật
Hôm qua, 09:33 -
-
Trả lời cho Hàn chì thiếc lên nhôm.bởi vi van phamAL là kim loại không tan trong nước là đúng vì khi tiếp xúc với nước sẽ tạo thành Al (OH)3 ngăn không cho phản ứng tiếp tục và phản ứng dừng lại ngay....
-
Channel: Tâm tình dân kỹ thuật
07-03-2025, 17:57 -
-
bởi mèomướpDạ chú nên dùng bếp gas ạ. Chơi với điện mùa hè cẩn thận khách chạy hết ấy ạ. Hôm nọ đi học về cháu thấy chị học trên cháu 1 lớp nhà chị ấy có điện 3 pha ấy ạ, nên chắc là lắp được nhưng tốn xiền ạ...
-
Channel: Điện tử gia dụng
07-03-2025, 16:10 -
-
Trả lời cho Hàn chì thiếc lên nhôm.bởi dinhthuong80Có lẽ nào vì bác nói chưa rõ nên họ bắt bẻ chỗ
Bởi cháu nhớ ngày xưa họ nói nhôm là kim loại khá mạnh, nếu là nguyên chất nó sẽ phản ướng với nước tạo ra nhôm hidroxit có màu trắng xốp sệt như xà phòng...-
Channel: Tâm tình dân kỹ thuật
07-03-2025, 14:52 -
-
bởi gameba1993cảm ơn bạn, mình hộ kinh doanh gia đình thì xin điện 3 pha có được không nhỉ....
-
Channel: Điện tử gia dụng
07-03-2025, 14:21 -
-
bởi mèomướpDạ điện 1 pha dân dụng tối đa phụ thuộc công tơ điện, át tô mát, dây dẫn. Ví dụ công tơ 50A, át 30A, dây dẫn 8mm2 thì tối đa là 30A từ đó tính được công suất max khoảng 6kw. Của chú 10kw thì có lẽ điện 3 pha sẽ ổn hơn ạ...
-
Channel: Điện tử gia dụng
07-03-2025, 13:59 -
Comment