View Full Version : Giúp em cách đếm Xung encoder của PIC 16F877A với!
manhckgtcck45
05-11-2008, 05:54 PM
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 .
anh_gioi
05-11-2008, 11:43 PM
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!
Lão mạnh sao ko lấy code Psoc của Linh mà xem, rồi đưa sang code PIC luôn. tham khảo phát.
manhckgtcck45
06-11-2008, 09:45 AM
Hic, Chứng tỏ ko ai làm bao giờ. Copy và paste thui mà.
picpen
06-11-2008, 07:06 PM
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ứ
anh_gioi
08-11-2008, 11:33 AM
Hic, Chứng tỏ ko ai làm bao giờ. Copy và paste thui mà.
Lão mạnh xem cái này nè.
có trên diễn đàn, ko bít của ai đown đã lâu rồi.
thang_dk
09-11-2008, 02:54 AM
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
Mr.Bi
13-11-2008, 01:53 AM
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
pó tay , mấy koan này mà cũng hỏi . LM7805 : ổn áp cho ra 5v , đầu vào <=35v . LM324 gồm 4 bộ OPAMP . Lên www.datasheet.com , tải về mà đọc . Tụ xoay hay dùng trong chọn tần của radio , đơn giản nó là tụ nhưng thay đổi đc điện dung . Hết !
falleaf
15-11-2008, 06:08 PM
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!
http://www.picvietnam.com/forum/showthread.php?t=224
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
LeDuc
15-11-2008, 06:21 PM
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!
theo mình nghĩ đếm xung ecoder bạn nên sử dụng ngắt ngoài , vì trong những ứng dụng đếm xung ecoder la điều rất quan trọng , nó đòi hỏi sự chính xác .Từ cái chính xác đó thì chương trình xử lý mới chính xác được .. đây là code ví dụ :
sử dụng ngắt ngoài(chân RB0)
unsigned int16 xung=0; // khai báo biến encoder la số 16 bit
#INT_EXT0
void ngat_ngoai0()
{
xung++; // mỗi lần có tín hiệu encoder thì biến đếm xung tăng lên 1 giá trị
}
......
......
giờ thì chỉ việc đọc giá trị xung rồi xử lý thôi ...
chuonchuon.thuy
20-09-2009, 10:56 AM
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?
nvcong
06-10-2009, 11:51 PM
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?
neu de dieu khien dong co 1 chieu mach cau H thi em nen dung loai pic nao?
encoder noi truc tiep voi chan nao cua pic?
lequocbao
07-10-2009, 11:16 AM
neu de dieu khien dong co 1 chieu mach cau H thi em nen dung loai pic nao?
encoder noi truc tiep voi chan nao cua pic?
1, 2 động cơ thì dùng thằng 77a cho nó khỏe vì có nhiều tài liệu hướng dẫn.encoder mắc vào rb0, rco hoặc gì nữa ta???quên rùi!để coi lại cái đã.
còn hơn thì dùng 4431 thì phải, bác nào nhớ nhắc dùm!
hangocminh1989
03-04-2011, 05:28 PM
1, 2 động cơ thì dùng thằng 77a cho nó khỏe vì có nhiều tài liệu hướng dẫn.encoder mắc vào rb0, rco hoặc gì nữa ta???quên rùi!để coi lại cái đã.
còn hơn thì dùng 4431 thì phải, bác nào nhớ nhắc dùm!
bác dùng thằng 877a hoặc 887 mà em nghĩ bác nên sài em 887 đi cho nó rẻ, encoder mắc vào cái chân rb0 và rb1 hoặc mắc vào ccp2 dùng chức năng capture của pic. để em làm song em up cho bác tham khảo...hic...đang làm, chưa song....dùng con 4431 thì hơi phí...nhưng vấn đề bác điều khiển làm việc gì mới kết luận được...hi
hunakopro
27-06-2011, 06:01 PM
bác dùng thằng 877a hoặc 887 mà em nghĩ bác nên sài em 887 đi cho nó rẻ, encoder mắc vào cái chân rb0 và rb1 hoặc mắc vào ccp2 dùng chức năng capture của pic. để em làm song em up cho bác tham khảo...hic...đang làm, chưa song....dùng con 4431 thì hơi phí...nhưng vấn đề bác điều khiển làm việc gì mới kết luận được...hi
bác làm xong chưa up lên cho anh em tham khảo phát!!!
hangocminh1989
08-12-2011, 07:12 PM
đã làm, song rùi..có vấn đề gì không
vuthian
03-02-2012, 11:46 AM
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();}
}
}
vBulletin® v3.8.11, Copyright ©2000-2025, vBulletin Solutions Inc.