Mọi người chỉ em cách dùng chân ngắt ngoài để đọc xung trả về với ạ. em chưa hiểu cách chuyển từ bắt xung cạnh lên sang bắt xung cạnh xuống thế nào ạ. Thanks
Thông báo
Collapse
No announcement yet.
giao tiếp 16f877a với cảm biến siêu âm srf05
Collapse
X
-
đây là code em viết, chả hiểu sao nó không chạy. Mong mọi người chỉ giúp em ạ
#include <16f877a.h>
#fuses HS,NOWDT,NOLVP,NOPROTECT
#use delay(clock=12000000)
int8 i,j,k,led[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x9 0},dv,chuc,tram;
float time,kc;
#define trig pin_B1
#define echo pin_B0
#int_TIMER1
void trantimer1()
{
set_timer1(0);
}
#INT_EXT
void ngatngoai()
{
if(input(pin_b0)) //neu la xung canh len
{
set_timer1(0);
ext_int_edge(H_to_L);
}
else // neu la xung canh xuong
{
time=get_timer1(); // doc gia tri timer 1
kctime*(4*4/12))/58); // tinh khoang cach. moi nhip timer1 ung voi 1.33us
ext_int_edge(L_to_H); // chuyen sang do canh len
disable_interrupts(int_timer1); // khong cho phep ngat timer1
output_a(255);
for(i=0;i<50;i++)
{
dv=(int8)kc%10;
chuc=(int8)(kc/10)%10;
tram=(int8)(kc/100)%10;
output_d(led[dv]);
output_a(0xfe);
delay_ms(1);
output_a(0xfd);
output_d(led[chuc]);
delay_ms(1);
output_a(0xfb);
output_d(led[tram]);
delay_ms(1);
}
}
}
void trigger()
{
output_high(trig);
delay_us(12);
output_low(trig);
}
void main()
{
set_tris_a(0);
set_tris_d(0);
set_tris_b(0);
setup_timer_1(T1_INTERNAL|T1_DIV_BY_4);
enable_interrupts(INT_TIMER1);
enable_interrupts(INT_EXT);
ext_int_edge(L_to_H);
enable_interrupts(global);
while(1)
{
trigger();
delay_ms(50);
}
}
-
Xin lỗi em. Nhưng anh không tetst code được ( cực ghét) hihi
Thế này
Về nguyên tắc như sau:
Ta sử dụng 2 chân cho SRF05 ( mình xài mode1 nhé em).
Một chân bình thừong ( ngõ ra - ta lấy làm chân trigger tạo xung). Khi chân này nhận đựoc một xung từ VI điều khiển thì nó thông báo cho con SRF05 là: Thằng vi điều khiển bảo mày hoạt động đo lừong đi. Ngồi đó mà like facebook.
Yêu cầu : xung này tầm 10us là tối thiểu ( tuy nhiên kinh nghiệp là em cứ cho nó thêm ít vi những ông chế tạo hay đưa thông số lý tưởng để maketing cho sẳn phẩm lắm em
Em thấy SRF có 2 "mắt" - một nhận và một phát. Sau khi nhận được xung kích từ vi điều khiển thì SRF05 phát ra vài xung ( không nhớ là bao nhiêu) ở mắt thứ nhất. Và sau đó chân Echo được lên mức một. Chân Echo em nối với Vi đièu khiển ( chân ngắt). Em hỏi ngắt cạnh nào, anh nói là ngắt cạnh xuống. Tại sao: Tại hình dung thế này: Khi triger kích: Chân Echo ( nối với chân ngắt nên anh gọi là ngắt nha) lên 1, chân này ở mức cao cho đến khi:
- trừong hợp 1: Có vật : thời gian mức cao là tối đa 30ms
trường hợp 2: không có vật: sau 30ms thì cũng phải xuống ( vậy nên khi viết chưong trình chú ý: nếu thời gian mức cao đo đựoc mà trên 30ms là em sai)
Ngay từ khi bắt đầu lên mức cao của ngắt: em cho timer bắt đầu đếm
Và cạnh xuống của chân ngắt: em dừng timer: đọc giá trị timer và tính toàn time.
Sao làm đựoc quy điinhj cạnh xuống: Mở cái datasheet ra: bấm Ctrl + F: gõ vào Imterupt, fallling edge,... : kiếm chõ nào nó cho em biết quy định bít nào thì thằng ngắt hoạt động cạnh xuống.
Xong giải thích
Code như sau:
// ngắt timer
interupt timer0()
{
bứoc 1: em xóa cờ bảo ngắt ngoài đi để lần sau còn xài
bứoc 1: ngừng timer0
bước 2: đếm giá trị timer 0 và lưu vào biến ( anh gọi biến time, biến timer nên là biển toàn cục cho àn toàn
}
void khoitao()
{
quy định chân thứ nhất là ngõ ra cho xung trigger ( bất kì)
quy định chân INT0 ( ngắt) là ngõ vào - xong phần quy dịnh chân cẳng vào ra mình dùng
đến lượt quy định timer
- ngừng timer
- xóa thanh ghi chứa giá trị
- quy định bộ chia
- quy định cho nó là timer (không có đếm xung ngoại nha)
// đến đây xong em timer
- Đến em ngắt ngoài
quy định ngắt ngoài
- cho biến toàn cục
- cho biến cục bộ của ngắt ngoài
- xóa cớ báo ngắt ngoài
-- xong quy định cho ngắt ngoài
}
Hàm chính:
void main(void)
{
khoitao();
while(1)
{
while(chân ngắt lên mức 1) --- chờ cho chân ngắt len 1
{
bật em timer lên
}
// tính toans khoảng cách ( theo cm)
- em phải tính xem timer có giá trị là bao nhiẻu ( anh lưu ở biến gọi là time)
- tính xem tổng thời gian là bao nhiêu
ví dụ:
Anh xái PIC16F887, tần số 4Mhz, nhưng nó có bộ chia trong là 1 nen thực chất chỉ được 1Mz thôi.
Em tính toán tiếp: Thời gian tối đa của mình càn đo là 30ms = 30.000 micros
Timer 1 là 16 bít, tối đa đếm lên 65536, dư sức chưa. Nên chỉ cần quy định bộ chia 1:1 có nghĩa là xung hệ thống thế nào thì xung cho tiẻm thế đó. ( Nếu em chọn tỉ lệ 1/4 thì có nghĩa cứ 4 xung hệ thống mới được một xung cho timer nha, vậy một xung timer là 1usx4 = 4us). Nhưng thôi, lòng vòng. chọn bộ chia 1, có nghĩa là giả sử timer có gí trị time = 20000
=> timer = 2000 nhân với timer cho một số tăng = 1us = 2000us.
giờ tính khoảng cách được: Theo datasheet thì cứ việc lấy tiẻm chân Echo ( chân ngắt) ở mức cao mà chia cho 58. Nhớ là timer phải tính theo microsecond nha
khoanngr cách = time ( tính theo micro giây)/58 ( lấy phần nguyên là đựoc
---giờ thì thích hiển thị LCD, LED 7 đoạn hay Iphone tùy em
Mỏi cả tay
}
}Be quan. Plz contact through email:
Comment
Bài viết mới nhất
Collapse
-
bởi bqvietĐấy gọi là cái "điểm gãy" trong đồ thị điện áp - dung lượng còn lại. Dùng điện áp hở cực để xác định sắp hết hoặc gần đầy thì vẫn tạm ổn. Dùng để đo SOC/DOD thì đừng. Ngay cả số km đã đi cũng chả xác định được...
-
Channel: Điện tử dành cho người mới bắt đầu
Hôm qua, 21:36 -
-
Trả lời cho Giúp em về mạch MPPT và Solar Panel với!?bởi dinhthuong80Vâng, em cũng nghĩ thế khi search được hãng ấy là SRNE, nên em test luôn những cái còn lại, và kết quả đều như nhau.
Nhận thấy kết quả khó chấp nhận, em cũng phân vân có nên mail cho họ để họ thử kiểm tra mã đó không; giữa...-
Channel: Điện tử công suất
Hôm qua, 11:33 -
-
Trả lời cho Giúp em về mạch MPPT và Solar Panel với!?bởi dinhthuong80Xin cảm ơn bác bqviet luônnhiệt tình cho biết nhiều thông tin quí báu, cảm ơn bạn mèomướp có ví dụ đơn giản và dễ hiểu, cảm ơn tất cả đã bớt chút thời gian quí báu vào đây đọc bài.
Cảm ơn bác nhathung1101 cho thông tin và chúc mừng bác mua được những tấm pin NLMT cực tốt theo...-
Channel: Điện tử công suất
Hôm qua, 11:22 -
-
Trả lời cho Giúp em về mạch MPPT và Solar Panel với!?bởi mèomướpDạ chú nhat... cứ coi pin mặt trời như 1 cái ắc qui nhìu ngăn mắc nối tiếp ấy ạ. Khi 1 ngăn yếu thì cả cái ắc qui yếu luôn ạ. Nó có nhìu bộ nối tiếp mắc song song nên bị che 1 khoảng nhỏ ảnh hưởng nhìu nhưng chắc ko đến nỗi mất 50% đâu ạ...
-
Channel: Điện tử công suất
Hôm qua, 06:36 -
-
Trả lời cho Giúp em về mạch MPPT và Solar Panel với!?bởi nhathung1101Nếu nói bị cái lá che sáng mà giảm 50% thì tôi càng không tin, bởi trên vườn tôi mặc kệ ông trời làm vệ sinh.
Tức là lá tự rụng, gió tự dọn. Ai hơi đâu mà leo lên dọn. Nếu phải như thế thì tôi dek thèm lắp làm gì.-
Channel: Điện tử công suất
16-01-2025, 21:44 -
-
Trả lời cho Giúp em về mạch MPPT và Solar Panel với!?bởi nhathung1101Chả hiểu ý cậu nói gì. Cái diode bypass quan trọng thế ư???
Cái giàn của tôi chả thấy cái diode nào mà vẫn hoạt động hơn 3 năm rồi.
Nhưng nó không có kiểu nối dây với bấm cốt như của cậu.
Tóm lại là tiền nào của nấy, đừng hoang tưởng kỹ thuật hóa. Kẻo ô tô điện đua nhau lắp diode.-
Channel: Điện tử công suất
16-01-2025, 21:31 -
-
Trả lời cho Dùng biến áp tự ngẫu 110V có tốn điện không?bởi nhathung1101Tôi dùng 4 cái điều hòa Fujitsu hàng bãi Nhật, nên phải dùng 4 cục đổi nguồn 220 xuống 100V. Để bật quanh năm, chả thấy bằng bữa bia. Chứ tắt đi là mất mấy bữa luôn.
-
Channel: Điện tử gia dụng
16-01-2025, 21:24 -
-
Trả lời cho Giúp em về mạch MPPT và Solar Panel với!?bởi bqvietViệc che khuất một phần dẫn tới giảm hiệu suất, thế giới bàn rất nhiều. Đôi khi chỉ cần một chiếc lá nhỏ thôi cũng dẫn tới giảm hiệu suất tệ hại
https://www.motorhomefun.co.uk/forum...-shade.295187/
https://www.solarchoice.net.au/learn/design-g...-
Channel: Điện tử công suất
16-01-2025, 19:52 -
-
Trả lời cho Giúp em về mạch MPPT và Solar Panel với!?bởi bqvietNhà thơ & nhạc sỹ lâu không bàn chuyện kỹ thuật mà hổm rày chia xẻ dài phết. J/K
Về vụ đo nhiệt độ sai, chắc lô hàng bị sao đó chứ khó có khả năng nhà sản xuất chế tạo chất lượng thấp đến vậy. Bất kể là hàng...-
Channel: Điện tử công suất
16-01-2025, 19:48 -
-
bởi since0501Cảm ơn bác đã chia sẻ, nhưng mình thấy điện áp lúc có tải từ 3.1v nó xuống dưới 3.0 rất nhanh, giai đoạn ~3.2 nó cầm khá lâu, vậy có cách nào để mình phỏng đoán là pin sắp cạn không hay chỉ có thể dựa vào số km đa đi đc sau 1 lần xạc?...
-
Channel: Điện tử dành cho người mới bắt đầu
16-01-2025, 09:03 -
Comment