Em thấy trong Codevision có hổ trợ hàm delay_us (hang so), nhưng nếu em dùng delay_us (bien) thì báo lỗi. Em không biết cách tính tạo vòng lặp để lập hàm delay us riêng cho nó (không dùng timer tạo). Em dùng AVR 4MHz nội. Mấy bác giúp em với.
Thông báo
Collapse
No announcement yet.
Delay us trong Codevision ?
Collapse
X
-
muốn delay bằng timer cung không có gì khó. nhưng mà chịu khó viết code hơi dài và mất công tính toán. khai báo 1 biến đếm cho timer. và đặt nó trong hàm ngắt của timer cứ mỗi lần ngắt timer cho nó tăng lên xong rồi dùng chính nó để delay. vi dụ muốn delay 2ms
Timer=0;//reset bien dem timer
If(timer==x)//x la thoi gian can tre
{
//code here
}.Last edited by nhquangdt3k5; 03-09-2011, 14:06.Never forget who you are!
Comment
-
Delay bằng timer thì em biết rồi, nhưng timer chạy độc lập với cpu. Em muốn nó trì hoãn giống lệnh nop vậy, khi delay xong mới chạy tiếp. Em dùng thạch anh 4Mhz tức 1 lệnh nop mất 0.25us. Nếu em muốn delay n us thì cho vô vòng lặp n/0.25 lần lệnh nop. Không biết em tính vậy có đúng không nữa.
Comment
-
Nguyên văn bởi nonthan Xem bài viếtDelay bằng timer thì em biết rồi, nhưng timer chạy độc lập với cpu. Em muốn nó trì hoãn giống lệnh nop vậy, khi delay xong mới chạy tiếp. Em dùng thạch anh 4Mhz tức 1 lệnh nop mất 0.25us. Nếu em muốn delay n us thì cho vô vòng lặp n/0.25 lần lệnh nop. Không biết em tính vậy có đúng không nữa.Never forget who you are!
Comment
-
vẫn tính như trên mà. đây nhé: bạn tính toán các thông số sao cho cứ 10us nó nhảy vào ngắt timer 1 lần và trong hàm ngắt đó bạn cho 1 biến timer đếm tăng lên 1. như vậy timer=1 ứng với 10us. và bạn dùng cái này viết delay sẽ là:
if(timer<1) //delay(10us)
{
// cong viec 1
}
if(timer>=1&&timer<2)//delay(20us)
{
//cong viec 2
}
cứ viết như vậy thay cho hàm delay_us(10),delay_us(20)Never forget who you are!
Comment
-
Nguyên văn bởi nonthan Xem bài viếtVậy nếu em dùng thế này thì có được không:
for (i=1;i<=n,i++)
{
#asm("nop");
#asm("nop");
#asm("nop");
#asm("nop");
}
Đoạn chương trình trên 4 lệnh nop = 1us, vậy nếu muốn delay bao nhiêu us thì set vào n ?Never forget who you are!
Comment
-
Em không dùng timer là bởi thế này. Em có 1 mảng 20 chứa các khoảng thời gian delay, ví dụ như arr[20]= [15,20,18,28.....]. Sau đó xuất ra PORTB.1 on rồi off liên tục theo từng giá trị trong mảng đó. (on 15us, off 20, on 18, off 28...). Nếu dùng timer thì khó tính toán quá em chưa nghĩ ra nên mới định dùng lệnh nop cho đơn giản.
PORTB.1=0;
for (i=0; i<20; i++)
{ tam = arr[i]; // lay gia tri mang
PORTB.1 = ~(PORTB.1);
for ( j=0; j <tam; j++)
{
#asm("nop");
#asm("nop");
#asm("nop");
#asm("nop");
}
}
Comment
-
Cách hay nhất là làm như sau :
bật timer tràn ở 1 us , trong chương trình ngắt timer dùng 1 biến đếm c nào đó chẳng hạn để đếm lên, ở chương trình chính ta so sánh như sau
// Khai báo 2 biến cục bộ
unsigned int temp=0,top=0;
//-----------------
for(i=0; i<20;i++)
{
top +=arr[i];
}
j=0;
do
{
temp+=arr[j];
while(c==temp);
PORTB.1=!PORTB.1;
j++;
} while(j<20);
temp=0;
Comment
-
Đã là kô chính xác thì việc gì khổ vậy nhỉ.Bạn muốn ngon thì viết cái macro cho nó chính xác.Nhưng đổi lại tốn rom.Còn viết hàm thì sai số là chắc ăn.Đơn giản gọi hàm mất 2 chu kì và chu kì máy cũng chưa chắc là ổn định.Đã là kô chính xác thì việc gì khổ vậy nhỉ.Bạn muốn ngon thì viết cái macro cho nó chính xác.Nhưng đổi lại tốn rom.Còn viết hàm thì sai số là chắc ăn.Đơn giản gọi hàm mất 2 chu kì và chu kì máy cũng chưa chắc là ổn định., , ,
Comment
Bài viết mới nhất
Collapse
-
Trả lời cho Hỏi cách điều chế xungbởi thetungBạn cho qua cái Tờ ri gơ Sờ mít ấy ......
-
Channel: Kỹ thuật điện tử tương tự
16-12-2024, 11:26 -
-
Trả lời cho Hỏi cách điều chế xungbởi nguyendinhvanCó gì mà khó ?
Răn cưa vuông đây
...-
Channel: Kỹ thuật điện tử tương tự
15-12-2024, 23:36 -
-
Trả lời cho hỏi về tụ điệnbởi ndp62Chữ " VENT" không phải là tên hãng sx tụ đâu ,vó thế là 1 ký hiệu liên quan tụ lowesr ?
-
Channel: Điện thanh
15-12-2024, 18:24 -
-
Trả lời cho Thắc mắc về nguồn tổ ong 12vbởi bqvietTrừ trường hợp công suất (rất) thấp, hầu như tất cả các loại nguồn xung thông thường đều có tụ nhỏ 1 - 10nF nối giữa sơ cấp và thứ cấp, để thoát nhiễu và để chống hiện tượng tương tự tĩnh điện. Vụ này đã thảo luận vài...
-
Channel: Điện tử dành cho người mới bắt đầu
14-12-2024, 22:02 -
-
Trả lời cho Thắc mắc về nguồn tổ ong 12vbởi namlangnhoE thử 3 cái nguồn nó đều giống nhau. Nên e làm tiếp địa luôn.
-
Channel: Điện tử dành cho người mới bắt đầu
14-12-2024, 19:58 -
-
Trả lời cho Thắc mắc về nguồn tổ ong 12vbởi mèomướpDạ chú sắm con át chống giật và thay nguồn tổ ong khác cho an toàn ạ. Đa phần nguồn xung đều xả nhiễu của bên thứ cấp về điện lưới qua 1 con tụ nên cảm giác tê sẽ khó xác định rõ ràng là do rò điện hay là nó vốn vậy...
-
Channel: Điện tử dành cho người mới bắt đầu
14-12-2024, 18:51 -
-
bởi namlangnhoXin chào mọi người. E có sử dụng 1 cục nguồn tổ ong 12v-30A chạy đèn led xe trà sữa. Mà thợ thi công bị rò điện nên điện rò ra khung xe. E dùng đồng hồ đo điện ở khung xe và cả output thì thấy có dòng điện xoay chiều hơn 100v. Nên chạm...
-
Channel: Điện tử dành cho người mới bắt đầu
14-12-2024, 00:12 -
-
bởi Manh.n.trCác bác cho em hỏi cách điều chế xung răng cưa sang xung vuông với ạ. Em đang thấy khó ạ...
-
Channel: Kỹ thuật điện tử tương tự
13-12-2024, 20:46 -
-
Trả lời cho hỏi về thiết kế mạch tuần tự trên proteusbởi Hatruong1309
-
Channel: Hỗ trợ học tập
12-12-2024, 00:33 -
-
bởi Hatruong1309Cho e hỏi là phần chân X thì nối cái j thì mạch mới chạy được ạ và kiểm tra đúng sai kiểu j ạ
Đề bài thiết kế mạch dãy đồng bộ nhận biết dãy tín hiệu vào ở dạng nhị phân được đưa liên tiếp ở đầu vào X và được đồng...-
Channel: Hỗ trợ học tập
12-12-2024, 00:33 -
Comment