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
-
bởi IemanjaTôi có một câu hỏi kỹ thuật muốn hỏi.
Động cơ bước vòng kín của tôi được sử dụng trong một cơ cấu dao động đảo chiều thường xuyên. Sau khi hoạt động vài ngày, vị trí điểm 0 của bộ mã hóa được thiết lập ban đầu bị trôi dần, và...-
Channel: Điện tử dành cho người mới bắt đầu
hôm nay, 14:12 -
-
bởi theidiotcatGiải pháp cấu hình tối ưu chi phí và hiệu năng cho phòng net hiện đại với AMD Ryzen 7 5700G, 5700X và Radeon RX 6500XT, 7600 8GB
Giải pháp toàn diện cho bài toán đầu tư phòng net
Mô hình phòng net hiện đại ngày nay đòi hỏi...-
Channel: Đánh giá sản phẩm DTVN
hôm nay, 13:55 -
-
Trả lời cho Tìm bạn thân quen cũ.bởi lvhnE nhớ bác Vivanpham làm bên điện tử y sinh, có lần đó cái sơ đồ máy chụp x quang sao có mấy con thryristor làm gì mà ko ai trả lới đúng cả
...
-
Channel: Tâm tình dân kỹ thuật
hôm nay, 09:17 -
-
Trả lời cho Amply bị rò DC 22 voltbởi lvhnBác kiểm tra lại đường mạch, mối hàn xem có bị hở hoặc dẫn không tốt không?
Thay cầu diode lớn hơn càng tốt không vấn đề gì cả....-
Channel: Điện thanh
hôm nay, 09:12 -
-
bởi LantheChào bạn.
Trục đầu ra của hộp số hành tinh xoắn ốc được kết nối với mặt bích của khách hàng thông qua một trục răng trong. Sau chưa đầy sáu tháng hoạt động, nó phát ra tiếng kêu lách cách và độ rơ lớn đáng báo động.
Việc...-
Channel: Thiết bị điện tử cá nhân
Hôm qua, 13:05 -
-
bởi ittcChào các anh em nhé, mình dự định sắp tới sẽ đi học lái xe Ôtô, thi lấy bằng lái. Cụ thể mình sẽ học và thi lấy giấy phép lái xe hạng B. Thật sự mình là người chưa có kiến thức hiểu biết gì về Ôtô cả ? tất nhiên mình sẽ phải...
-
Channel: Tâm tình dân kỹ thuật
Hôm qua, 06:22 -
-
Trả lời cho Amply bị rò DC 22 voltbởi trung30000Theo sự hướng dẫn của bác, sau khi em kiểm tra tầng Vi sai sử dụng cặp c1815, tiếp đến là 1 con a1013, và cặp thúc sử dụng mje304g và mje305g, em đã tiến hành thay cặp Vi sai c1815 sau đó mở máy lên đo ngõ công suất DC 0,2V hai giây sau máy đo...
-
Channel: Điện thanh
05-08-2026, 20:09 -
-
bởi theidiotcatBộ máy đa năng toàn diện cho học tập và làm việc hàng ngày
Đối với học sinh, sinh viên và người làm việc văn phòng, việc sở hữu một bộ PC cân bằng giữa học tập, công việc và giải trí là nhu cầu vô cùng thực tế. Combo Ryzen...-
Channel: Đánh giá sản phẩm DTVN
05-08-2026, 10:28 -
-
Trả lời cho Tìm bạn thân quen cũ.bởi mèomướpDạ cháu đọc 1 số bài viết của bác vi... thì nhớ đc bác là 1 cụ già gần 80 tuổi, sức khỏe yếu. Đam mê và làm vc về kỹ thuật điện. Thích thơ ca. Có nhìu bài chia sẻ quý báu cho thế hệ sau. Tuy nhiên già rồi nên khái tính, bảo thủ, nhưng vẫn đáng kính ạ... còn lão nhathung... thì kiểu bố đời
-
Channel: Tâm tình dân kỹ thuật
31-07-2026, 12:52 -
-
bởi lvhnHãng nào tùy thích thôi bác! bây giờ các hãng đều hỗ trợ xem qua máy tính hay điện thoại đều được. Gắn Trước tiên mua về cắm nguồn set ip hết xong hãy lắp lên, cam poe chỉ cần 4 lõi là hoạt động bình thường nên 1 dây kéo cho 2 cam vẫn ok
-
Channel: Tâm tình dân kỹ thuật
30-07-2026, 15:49 -

Comment