|
Tài trợ cho PIC Vietnam |
|
Ðiều Chỉnh | Xếp Bài |
02-10-2012, 10:05 PM | #1 |
Nhập môn đệ tử
Tham gia ngày: Apr 2011
Bài gửi: 7
: |
Xin hướng dẫn chi tiết cách điều khiển servo bằng 16f877a
Chào mọi người, em có tìm trong diễn đàn thấy nhiều bài nói về PWM nhưng đọc khó hiểu quá, em lập topic xin được hướng dẫn chi tiết cách điều khiển 1 servo bằng PWM ạ. Cụ thể em cần biết những điều sau:
--cách nối servo như thế nào? (Nó có 3 dây (đỏ-đen-vàng), các dây đó làm việc gì? Dây nào nối với chân số mấy của PIC?) --hàm điều khiển nó trong PIC cụ thể và ví dụ đi liền cách nối dây. --em muốn nó quay theo 1 góc theo ý muốn thì phải làm thế nào? Góc quay tối đa mà nó thực hiện được là bao nhiêu? ---------------------- Rất mong được mọi người giúp ạ. Em xin cám ơn! |
02-10-2012, 10:07 PM | #2 |
Nhập môn đệ tử
Tham gia ngày: Apr 2011
Bài gửi: 7
: |
À nếu bác nào có bài này rồi thì cho em xin link ạ, em tìm google mãi không ra.
|
03-10-2012, 12:45 PM | #3 |
Nhập môn đệ tử
Tham gia ngày: Apr 2011
Bài gửi: 7
: |
Cuối cùng cũng mày mò ra cách dùng ngắt TIMER0. Trong đoạn code này chỉ cần thay đổi thông số Center là nó sẽ quay theo những góc khác nhau. Ở hàm Main có thay đổi Center bằng cách gán lần lượt với 3 biến. Nó sẽ quay trái-giữa-phải-giữa-...
Cách nối dây rất đơn giản, chỉ cần nối dây đỏ của Servo với (+) nguồn, dây đen với (-) nguồn, còn dây vàng nối với chân RA0 của PIC. Nếu bạn muốn nối dây vàng với chân khác của PIC thì chỉ cần thay đổi trong hàm ngắt và thiết lập chân đó thành chân xuất là ok. Code:
#include <16F877A.H> #include <def_877a.h> #device *=16 ADC=8 #FUSES NOWDT, HS, NOPUT, NOPROTECT, NODEBUG, BROWNOUT, NOLVP, NOCPD, NOWRT #use delay(clock=20000000) #define MAX_VALUE 200 #define Right MAX_VALUE-35 //quay phai -23 #define Center MAX_VALUE-17 // quay trai -17 #define Left MAX_VALUE-1 //o giua -11 unsigned char pulse_max=0; unsigned char pulse_top=0; unsigned char top_value=0; #INT_TIMER0 void interrupt_timer0() { set_timer0(56); pulse_max++; pulse_top++; if (pulse_max >= MAX_VALUE) { pulse_max=0; pulse_top=0; RA0=0; // Turn off RC2 } if (pulse_top == top_value) { RA0=1; // Turn On RC2 } } /* TIMER0 period = [(TMR0 + 1)] x 4 x Tosc x (TIMER0 prescaler value) second Init TIMER0: Period: Fosc/4 x Prescaler x TMR0 */ void main() { trisa=0x00; trisd=0xff; portC = 0x00; //trisd=0x00; //portd=0; top_value = Center; enable_interrupts(global); enable_interrupts(int_timer0); setup_timer_0(RTCC_INTERNAL|RTCC_DIV_2); set_timer0(156); top_value=Center;/* while(1) { switch(portd){ case 1: top_value=Right; delay_ms(100); top_value=Center; break; case 2: top_value=Left; delay_ms(100); top_value=Center; break; case 4: top_value=Center; break; default: break; }*/ while(1){ top_value=Right; delay_ms(1000); top_value=Center; delay_ms(1000); top_value=Left; delay_ms(1000); top_value=Center; delay_ms(1000); } } thay đổi nội dung bởi: lvdinh_tvtsth, 03-10-2012 lúc 12:50 PM. |
03-10-2012, 09:09 PM | #4 |
Đệ tử 2 túi
|
bạn này tự biên tự diễn hay nhỉ
__________________
[email]toancdt09@gmail.com |
04-10-2012, 05:37 PM | #5 |
Nhập môn đệ tử
Tham gia ngày: Apr 2011
Bài gửi: 7
: |
Sao trong diễn đàn thấy nhiều người đặt câu hỏi mà chả có ai trả lời. Mình gặp khó khăn và tự mày mò trên mạng ra được nên muốn những ai đi sau tìm được nhanh chóng hơn.
|
04-10-2012, 07:37 PM | #6 |
Nhập môn đệ tử
Tham gia ngày: Sep 2012
Bài gửi: 3
: |
ae ơi giúp mình về đồng hồ số sử dụng pic 16F877A
ae ơi giúp mình về đồng hồ số sử dụng pic 16F877A
AE ƠI ! hiện tại mình đang làm một đề tài về pic 16F877A. cụ thê là hiện tại mình đang làm một đề tài đồng hồ số hiển thị giờ phút giây va ngày tháng năm phải sử dụng PIC 16F877A mà tài liệu mình tìm kiếm chưa đầy đủ lắm do đó mình k thể thực hiện đc đề tài.cho mình hỏi có ae nào đã làm qua loại nay chưa xin chỉ giáo giúp mình với. hoặc ae nào có tư liệu cho mình xin với hiện tại minh rất cần mình rất mong đc sự giúp đỡ nhiệt tình từ ae rất mong và rất mong.thank ae nhìu lắm. phamcongbinh.binh@yahoo.com 0908962269 bình |
|
|