![]() |
Giúp em cách đếm Xung encoder của PIC 16F877A với!
Các anh demo cho em code của CCS-C dùng để đếm xung encoder với PIC 16F877A với. Thanks các anh nha!
|
đếm encoder thì dùng bộ timer/counter .
vấn đề của bạn thì bạn nên tự làm , nếu code sai thì đưa lên mọi người giúp . chẳng ai rảnh mà đi viết hộ bạn đâu . |
Trích:
|
Hic, Chứng tỏ ko ai làm bao giờ. Copy và paste thui mà.
|
Không phải là ko ai làm ! Vấn đề là bạn dùng encoder cho mục đích gì ,sử lý tín hiệu encoder ra sao ........... chứ còn đếm xung encoder thì có gì đâu ,bạn chỉ cần đưa tín hiệu từ encoder vào chân đếm xung ngoài của các bộ timer >>>> và cứ thế mà đếm
đến đây thì chắc bạn có thể làm được rùi chứ |
1 Attachment(s)
Trích:
có trên diễn đàn, ko bít của ai đown đã lâu rồi. |
xin chao mọi người!tôi đang học làm mạch, cần một số con ma chưa có tài liệu: LM7805.LM324,tụ xoay :530TW103 ai có tài liệu tiếng việt về mấy con này chia sẻ cho mình với!!!!!!xin cảm ơn nhiều
|
Trích:
|
Trích:
Xem tài liệu hướng dẫn về encoder tại đây. Có nhiều phương pháp đọc: - Ngắt ngoài RB0 - Ngắt onchange RB (một số chip hỗ trợ RA) - Capture (CCP) - Chờ xung lên, xuống (nếu không làm gì khác) - Sử dụng ngõ vào như một ngõ vào của timer 1, dùng trong chế độ counter. ... Tất cả các kỹ thuật này đều sử dụng được. Nên hiểu bản chất và tìm cách sử dụng linh hoạt các hoạt động của PIC. Chúc vui |
Trích:
sử dụng ngắt ngoài(chân RB0) Code:
unsigned int16 xung=0; // khai báo biến encoder la số 16 bit |
bạn đưa nguồn phát xung(đầu ra của cảm biến) vào chân ngắt mỗi lần có xung tín hiệu điện áp từ 0 lên 5v thì sẽ xảy ra ngắt, khi có ngắt thì tăng biến đếm lên 1. bạn dùng biến đếm dó để làm việc minh muốn. ok?
|
ket noi pic voi encoder
Trích:
encoder noi truc tiep voi chan nao cua pic? |
Trích:
còn hơn thì dùng 4431 thì phải, bác nào nhớ nhắc dùm! |
Trích:
|
Trích:
|
đã làm, song rùi..có vấn đề gì không
|
lập trình cho encoder
cả nhà ơi giúp t với,t muốn dùng encoder 100xung/vòng để đếm số xung và đo quãng đường đi cho robot,giả sử khi nào robot đi tiến hay lùi đc 1m hoặc đếm được 1000 xung thì dừng.đây là code của mình mong mọi người đọc tham khảo và đóng góp ý kiến giúp.mình chưa hiểu sâu về ngắt lắm,nên dùng ngắt để lập trình khi nạp chương trình xuống nó không chạy.cảm ơn mọi người nhiều !!!
///////////////////////////////////////////////////////////////////////// #include <16F877A.h> #device 16f877A*=16 #fuses NOWDT,NOPROTECT,HS,NOPUT,NODEBUG,NOBROWNOUT,NOLVP #use delay(clock=20000000) // TAN SO HOAT DONG #use fast_io(c) #use fast_io(b) #use fast_io(d) #bit rc7=0x07.7 #bit rd6=0x08.6 #bit rb0=0x06.0 #bit rc0=0x07.0 #byte portb=0x06 #byte portd=0x08 // KHAI BAO DIA CHI TRONG PHAN CUNG #byte portc=0x07 #BIT dc4 =PORTC.1 #BIT dc3 =PORTC.2 #BIT chieu_dc4=PORTD.6 #BIT chieu_dc3 = PORTC.7 #byte TMR0 = 0x01 //timer0 REGISTER #byte TMR1_L = 0X0E #byte TMR1_H = 0X0F #bit RBIF=intcon.0 //dinh nghia co ngat RB #bit RBIE=intcon.3 //dinh nghia bit cho phep ngat RB ////// chay thang//////// void dung(void) { setup_ccp1(CCP_off); setup_ccp2(CCP_off); delay_ms(10); } void chay_thang(void) { chieu_dc3=1; chieu_dc4=1; delay_ms(10); set_pwm1_duty(250);// dieu xung 100% set_pwm2_duty(200);// dieu xung 100% } void chay_lui(void) { chieu_dc3=0;//quay_nguoc; chieu_dc4=0;//quay_nguoc; delay_ms(10); set_pwm1_duty(200); set_pwm2_duty(150); //////////////LAP TRINH CHO ENCODER///////////////////////// int16 dem_T0,dem_T1; void main() { set_tris_c(0x00); set_tris_b(0xff); set_tris_d(0x00); setup_ccp1(CCP_PWM); setup_ccp2(CCP_PWM); setup_timer_2(T2_DIV_BY_16,0xff,1); enable_interrupts(GLOBAL); enable_interrupts(INT_TIMER0); enable_interrupts(INT_TIMER1); setup_timer_0 (RTCC_DIV_1|RTCC_EXT_L_TO_H); setup_timer_1 ( T1_EXTERNAL | T1_DIV_BY_1 ); DEM_T0 = 0; set_timer0(0) ; set_timer1(0); DEM_T0 = GET_RTCC (); DEM_T1 = GET_TIMER1 (); while(true) { chay_thang(); if(GET_RTCC ==1000) {dung();} } } |
Múi giờ GMT. Hiện tại là 10:20 PM. |
Tên diễn đàn: vBulletin Version 3.8.11
Được sáng lập bởi Đoàn Hiệp.
Copyright © PIC Vietnam