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
-
bởi chinhnguyen9Xem hình minh họa có phần thuyết minh bên trong tiện việc quan sát và đọc thuyết minh. Khi G1 high dòng điện chạy theo các đường màu đen khi G2 high dòng điện chạy theo các đường màu nâu đỏ.
Bổ sung một tính chất củng cố cho tên gọi tụ bay: Trong mạch đề cập chỉ...-
Channel: Điện tử dành cho người mới bắt đầu
Hôm qua, 21:02 -
-
bởi chinhnguyen9Sản phẩm này ghi version 2.0 01-2024 MADE IN CHINA nhưng không thấy thương hiệu hình 1
Do 8 chân G của 8 mosfet được đấu song song thành 2 nhóm nên có cùng biên độ xung kích 12V. Nhưng Q1 và Q2 nằm cuối dãy, chân S cùa chúng có điện áp DC cao đến...-
Channel: Điện tử dành cho người mới bắt đầu
Hôm qua, 20:37 -
-
bởi xuanthiettivi em bị mất remote lỡ vào chế độ usb giờ không chọn lại source được. ai có file nạp cho em xin với ạ. Model 32HD957T2
-
Channel: Điện tử truyền hình
Hôm qua, 10:53 -
-
Trả lời cho Giải thích nôm na từ "tụ bay"bởi chinhnguyen9Đa tạ lời cảm ơn của bạn. Mến!
-
Channel: Hướng dẫn sử dụng diễn đàn
Hôm qua, 05:06 -
-
Trả lời cho Xin tư vấn về mạch cầu H cho inverter 1000wbởi thebinhzChắc là không được đâu bạn ơi
Quán ăn Vĩnh Yên-
Channel: Điện tử công suất
25-04-2024, 21:56 -
-
Trả lời cho Giải thích nôm na từ "tụ bay"bởi thebinhzCảm ơn bạn nhiều nha
Nhà hàng Vĩnh Yên-
Channel: Hướng dẫn sử dụng diễn đàn
25-04-2024, 21:50 -
-
bởi chinhnguyen9Vai viết này đã được chuyển sang chuyên mục phù hợp....
-
Channel: Hướng dẫn sử dụng diễn đàn
25-04-2024, 08:29 -
-
bởi chinhnguyen9
Xem hình có phần thuyết minh bên trong tiện việc quan sát và đọc thuyết minh. Khi G1 high dòng điện chạy theo các đường màu đen khi G2 high dòng điện chạy theo các đường màu nâu đỏ.
Bổ sung một tính chất củng cố cho tên gọi tụ...-
Channel: Hướng dẫn sử dụng diễn đàn
24-04-2024, 01:15 -
-
Trả lời cho CODE/ROM-dvb-vcd-dvd-mindikaraoke- Máy nạp Rombởi ThaPhong20Mình cần giúp đõ đầu California MIDI-800K
Ngày trc có nghe tin đồn đầu này có thể chạy đĩa DH-3600 nên mua Vol 26 về chạy thử và nó báo góc trái dòng code rồi tự thay nền DH-3600S luôn. Sau khi tự thay nền thì nó tiếp tục báo dòng Code...-
Channel: Thiết bị thu phát MEDIA dân dụng
23-04-2024, 19:24 -
-
Trả lời cho Xin tư vấn về mạch cầu H cho inverter 1000wbởi N.T.HIRF460 có chịu được tải 1000W công suất thực không ạ....
-
Channel: Điện tử công suất
23-04-2024, 16:05 -
Comment