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
-
Chào anh em đang cần cái code có nút nhấn mà anh nói anh có the cho em tham khảo được không. Cảm ơn anhNguyê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
-
Hi teddy78,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
-
Hi,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
-
khi mô phỏng trong proteus bạn cứ an tâm là OK,nếu ko tin thì bạn có thể dùng osilocope của nó để xem.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
-
To teddy,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 Yêu thơ mê nhạc, mời các bác vào đây!bởi dinhthuong92Cho tới thời điểm này, quả thật Đình Thường đây quá thất vọng, không hào hứng với Suno-AI lắm bởi ra lệnh Creat mấy chục lần với các thay đổi thì mới chọn được 2 bản hát đúng giai điệu tầm 80% để cắt ghép tạo thành bài hát...
-
Channel: Tâm tình dân kỹ thuật
hôm nay, 17:01 -
-
Trả lời cho Yêu thơ mê nhạc, mời các bác vào đây!bởi dinhthuong92Kính chào cả nhà, nhân dịp Tết đang về, sắp 23 tháng chạp rồi, xin gởi lời chúc xuân qua bài hát sau ạ:
Bao nhiêu hân hoan
Chúc Mừng Năm Mới, xuân sang!
Nơi nơi hát vang
nâng chén vui chúc câu An Lành.
Vạn Sự đều Hanh Thông,
Rạng...-
Channel: Tâm tình dân kỹ thuật
hôm nay, 16:46 -
-
bởi ittcChán quá các bác, em nhạt nhẽo quá nên tán em nào cũng tạch, tuyệt vọng vô cùng, nay lại được mấy anh đồng nghiệp cty đối tác mách cho em gái kia sinh năm 2K đầu, em chả biết nhóm đối tượng này phải tán ra sao bây giờ ?
Tính ra em...-
Channel: Tâm tình dân kỹ thuật
hôm nay, 00:18 -
-
bởi bqvietCó thể, ví dụ phần phản hồi gồm vi mạch cách ly quang, zener thứ cấp, transistor và điện trở phản hồi dòng ... Bất kỳ linh kiện nào nhóm đó hỏng dẫn tới mất đường phản hồi. TNY chính hãng phát hiện được chuyện đó nhưng linh kiện...
-
Channel: Điện tử công suất
Hôm qua, 18:36 -
-
bởi Nexus 6Pcho e hỏi, khi mạch có linh kiện nào đó hư thì có làm hỏng led đắt tiền (osram) không?
-
Channel: Điện tử công suất
Hôm qua, 10:42 -
-
bởi chinhnguyen9· Thí nghiệm 1 (Mạch boost, Vcc=12V, kích bằng dao động PƯM, duty 10%):
* Không có snubber + không tải: Xuất hiện hiện tượng dao động tắt dần tại cực D Mosfet (ringing). Hình 1 cho thấy trong chu kỳ đầu, điện áp spike lên tới hàng trăm V, điện...-
Channel: Hướng dẫn sử dụng diễn đàn
04-02-2026, 09:16 -
-
bởi Nexus 6Pe dùng KiCad 9.0 và đã xuất được file PDF mạch in gòi bác...
-
Channel: Điện tử công suất
03-02-2026, 16:25 -
-
bởi bqvietBấm chuột vào các tệp sẽ bật ra chương trình tương ứng. Nên dùng bản KiCAD sau
https://kicad-downloads.s3.cern.ch/a...ll_version.exe-
Channel: Điện tử công suất
03-02-2026, 14:57 -
-
bởi Nexus 6Pe cài KiCAD 2012 khi mở ra nó chỉ hiện ntn...
-
Channel: Điện tử công suất
03-02-2026, 11:20 -
-
bởi bqvietThực tế bạn nào không tải được tệp nén thiết kế thì căn cứ theo ảnh sơ đồ mạch có thể vẽ lại sơ đồ bằng chương trình EDA nào đó rồi làm mạch được mà. Càng thêm quen thuộc với sơ đồ. Sau đó tùy ý chuyển sang TinySwitch-III hoặc TinySwitch-4.
-
Channel: Điện tử công suất
02-02-2026, 21:13 -

Comment