![]() |
|
Tài trợ cho PIC Vietnam |
||||||||
| Cơ bản về vi điều khiển và PIC Những bài hướng dẫn cơ bản nhất để làm quen với vi điều khiển PIC |
![]() |
|
|
Ðiều Chỉnh | Xếp Bài |
|
|
|
|
#1 | |
|
Nhập môn đệ tử
Tham gia ngày: Jun 2007
Bài gửi: 8
: |
Chài ai. đã bảo là bỏ qua mấy thông số đi mà. Thoáng một chút đi. do vẽ vội quá nên nó mới nhầm tai hại thế. Thông cảm tý đi. Em đã sửa cái hình lại cho đúng rồi đó.
Giờ quay lại vấn đề chính. Cám ơn bác Macintosh đã chỉ. em thấy mấy cái hàm mà bác nói. nhưng chẳng biết để làm gì cả. Nhưng em nghĩ thế này bác xem có đúng không? ![]() Nhưng vấn đề của em ở đây là quá gà để viết đc cái chương trình con đó. Bác có thể viết hộ không chỉ một ví dụ nhỏ thôi. đơn giản nhất có thể thôi. ^^! please. --- Ngồi đọc một hồi cũng ngộ ra đc chút chút về cái Setup_ccp. Phát biểu lên mấy anh xem sai chỗ nào chỉnh hộ với nhé. setup_ccp1 (mode) -- đặt chế độ time cho module 0 mà cụ thể là chân RB0 và RB1 setup_ccp2 (mode) -- đặt chế độ time cho module 1 mà cụ thể là chân RB2 và RB3 setup_ccp3 (mode) -- đặt chế độ time cho module 2 mà cụ thể là chân RB4 và RB5 setup_ccp4 (mode) -- đặt chế độ time cho module 3 mà cụ thể là chân RB6 va RB7 setup_ccp5 (mode) -- đặt chế độ time cho module 4 mà cụ thể là chân LFTA (RC1) setup_ccp6 (mode) -- đặt chế độ time cho module 5 mà cụ thể là chân LFTB (RC2) Các chế độ mode có thể là: CCP_OFF -- tắt chế độ ccp CCP_CAPTURE_FE -- cái này không biết CCP_CAPTURE_RE -- cái này cũng không nốt CCP_CAPTURE_DIV_4 -- chế độ time = xung clock/4 việc này tương ứng với việc set 2 bit DTPS1 và DTPS0 mức 01 có phải không ạ. CCP_CAPTURE_DIV_16 -- chế độ time = xung clock/16 việc này tương ứng với việc set 2 bit DTPS1 và DTPS0 mức 11. CCP_COMPARE_SET_ON_MATCH -- cái này thiết lập mức tích cực ngõ ra là mức 1 CCP_COMPARE_CLR_ON_MATCH -- món này thiết lập mức tích cực ngõ ra là mức 0 CCP_COMPARE_INT --> hẻm biết là giống gì. CCP_COMPARE_RESET_TIMER --> reset time làm gì cũng không biết nốt. CCP_PWM -- cho phép chế độ PWM. ------ Như vậy sau khi tìm hiểu, với sơ đồ mạch như em vẽ thì rõ ràng muốn đưa tín hiệu băm xung ra chân RB0 thì phải cho phép PWM tại CCP1. Nhưng vấn đề nảy sinh là cái chế độ time = clock/4 cũng khai báo trong đó. vậy chẳng nhẽ viết 2 câu lệnh như nhau mà giá trị mode khác nhau àh? Trích:
__________________
My home --> http://spktclup.com thay đổi nội dung bởi: gong05sk, 19-07-2008 lúc 02:52 AM. |
|
|
|
|
|
|
#2 |
|
Đệ tử 3 túi
Tham gia ngày: Nov 2007
Bài gửi: 48
: |
có vẻ bác đang định dùng PWM của CCP module,thế thì để tui nói về cái này trước:
một đoạn code do tui set nhe: void pwm_ccp() { setup_ccp1(CCP_PWM); // xuất PWM ra chân RC2 setup_ccp2(CCP_PWM); // xuất PWM ra chân RC1 setup_timer_2(T2_DIV_BY_1, 115, 1); // cal đi,trong datasheet phần CCP có cong thức //đó :115 là giá trị nạp vào timer2---> quyết //định tần số PWM } có một điều,xung xuất ra tích cực mức 1,nghĩa là mức duty max sẽ cho ra mức high luôn. => set_pwm2_duty(duty2); // xuất PWM, duty là biến set_pwm1_duty(duty1); chú ý,duty có giới hạn,đến khi duty max thì dù có tăng nữa thì chân output cũng luôn ở mức cao! |
|
|
|
|
|
#3 |
|
Đệ tử 3 túi
Tham gia ngày: Nov 2007
Bài gửi: 48
: |
setup_ccp1 (mode) -- đặt chế độ time cho module 0 mà cụ thể là chân RB0 và RB1
setup_ccp2 (mode) -- đặt chế độ time cho module 1 mà cụ thể là chân RB2 và RB3 setup_ccp3 (mode) -- đặt chế độ time cho module 2 mà cụ thể là chân RB4 và RB5 setup_ccp4 (mode) -- đặt chế độ time cho module 3 mà cụ thể là chân RB6 va RB7 setup_ccp5 (mode) -- đặt chế độ time cho module 4 mà cụ thể là chân LFTA (RC1) setup_ccp6 (mode) -- đặt chế độ time cho module 5 mà cụ thể là chân LFTB (RC2) // sai ,pic 18fxx31 chỉ có 2 module CCP1,CCP2 .tui đã set bên trên rùi. |
|
|
|
|
|
#4 |
|
Đệ tử 3 túi
Tham gia ngày: Nov 2007
Bài gửi: 48
: |
còn về chức năng Power PWM,tui đã config rùi,xem tại đây:
http://picvietnam.com/forum/showthre...ghlight=config |
|
|
|
|
|
#5 |
|
Nhập môn đệ tử
Tham gia ngày: Jun 2007
Bài gửi: 8
: |
Hic mấy bác nghĩ rằng em đang ở mức nào mà không thèm chỉ vầy trời. Hướng dẫn cho người chưa biết gì khác với nói chuyện với người đã biết chứ. làm ơn viết dùm em một bài tập nhỏ như em đã ví dụ bên trên để em hình dung ra quá trình xử lý công việc cần làm là như thế nào. mấy bác gợi ý, mấy bác hướng dẫn em có thể nắm đc. nhưng cái quan trọng nhất là viết như thế nào thì em lại không biết. vậy nên mới tha thiết yêu cầu các bác viết ví dụ cụ thể từ A->Z hộ với. nếu là ASM thì làm ơn viết hết nguyên một chương trình. Quả thật là cấu trúc bộ nhớ pic em cũng còn chưa nắm đc. Nếu viết bằng C thì bác sử dụng thư viện nào, viết thêm hàm nào thì làm ơn viết hết ra dùm cái. Thiết nghĩ với một Ví dụ đơn giản như trên thì chương trình có là bao đâu sao các bác cứ khó dễ mãi thế.
__________________
My home --> http://spktclup.com |
|
|
|
|
|
#6 | |
|
Trưởng lão PIC bang
|
Trích:
Luồng này bạn hỏi về PWM chứ không hỏi về cách viết chương trình C ra sao, do đó tôi giả thiết là bạn biết cách đặt đoạn chương trình C mẫu vào chương trình của bạn. Nếu bạn chưa biết cách viết chương trình C, đề nghị bạn tìm một tài liệu hướng dẫn về ngôn ngữ C để đọc, sau đó đọc tài liệu hướng dẫn của trình biên dịch mà bạn đang dùng. Sau đó, làm vài bài tập cơ bản để nắm được cách viết chương trình C trong trình biên dịch của bạn. Dưới đây là toàn bộ chương trình tôi dùng để test PIC18F4431, viết cho MPLAB C18. Đừng yêu cầu tôi port code sang CCS C. Code:
#include <p18cxxx.h>
#pragma config OSC = HS
#pragma config FCMEN = OFF
#pragma config IESO = OFF
#pragma config PWRTEN = ON
#pragma config BOREN = ON
#pragma config BORV = 27
#pragma config WDTEN = OFF
#pragma config WINEN = OFF
#pragma config WDPS = 32768
#pragma config T1OSCMX = OFF
#pragma config HPOL = HIGH
#pragma config LPOL = HIGH
#pragma config PWMPIN = ON
#pragma config MCLRE = ON
#pragma config EXCLKMX = RD0
#pragma config PWM4MX = RD5
#pragma config SSPMX = RD1
#pragma config FLTAMX = RD4
#pragma config STVREN = ON
#pragma config LVP = OFF
#pragma config DEBUG = OFF
#pragma config CP0 = OFF
#pragma config CP1 = OFF
#pragma config CP2 = OFF
#pragma config CP3 = OFF
#pragma config CPB = OFF
#pragma config CPD = OFF
#pragma config WRT0 = OFF
#pragma config WRT1 = OFF
#pragma config WRT2 = OFF
#pragma config WRT3 = OFF
#pragma config WRTB = OFF
#pragma config WRTC = OFF
#pragma config WRTD = OFF
#pragma config EBTR0 = OFF
#pragma config EBTR1 = OFF
#pragma config EBTR2 = OFF
#pragma config EBTR3 = OFF
#pragma config EBTRB = OFF
void Init_PCPWM(void);
void main() {
Init_PCPWM();
while (1) Nop();
}
void Init_PCPWM() {
PTCON0 = 0x04; //postscale 1:1, prescale 1:4, free running
PTPERL = 0x9B; //8 kHz @ 20 MHz
PTPERH = 0x00;
PWMCON0 = 0x40; //PWM0..5 are enabled for PWM output
PWMCON1 = 0x01; //postscale 1:1, output override are synchronized
//to the PWM time base
DTCON = 0x05; //0.5 us dead time @ 20 MHz
OVDCOND = 0xFF; //output on PWM I/O pin is controlled by duty cycle
//and time base
OVDCONS = 0x00; //PWM I/O is INACTIVE when POUT is cleared
FLTCONFIG = 0x00; //disable all fault pins
SEVTCMPL = 0;
SEVTCMPH = 0;
PDC0H = 0;
PDC1H = 0;
PDC2H = 0;
PDC3H = 0;
PDC0L = 0x80; //Duty cycle of 20.5% at PWM1
PDC1L = 0xA0; //Duty cycle of 25.6% at PWM3
PDC2L = 0xC0; //Duty cycle of 30.8% at PWM3
PDC3L = 0xE0; //Duty cycle of 35.9% at PWM7
PTCON1bits.PTEN = 1;
}
Thân,
__________________
Biển học mênh mông, sức người có hạn. Đang gặp vấn đề cần được giúp đỡ? Hãy dành ra vài phút đọc luồng sau: http://www.picvietnam.com/forum/showthread.php?t=1263 |
|
|
|
|
|
|
#7 |
|
Nhập môn đệ tử
Tham gia ngày: Jun 2007
Bài gửi: 8
: |
Bác nói thế là oan cho em đấy. Mấy ngày nay em đọc đi đọc ại muốn nát cả cái datasheet. xem tới xem lui không biết bao nhiêu ví dụ trong diễn đàn. và cuối cùng là em nhận ra mình chưa biết gì hết , nên em quay về với bài tập xuất led cơ bản đây. và cũng từ giã con 4331 này mà quay về con 16f877a cho nó bền, đơn giản vì nó có mô phỏng trên proteus. Cứ tưởng có thể học đc kinh nghiệm đi trước từ mấy bác cho rút ngắn bớt thời gian nhưng giờ thấy đó là sai lầm. Có thể em không kịp nắm con pic 4331 trước thời gian làm robot sắp tới. nhưng kệ cùng lắm thì quay về con P98v51 của philip đỡ vậy. còn con này cứ nghiên cứu sau. chứ tình trạng vầy chẳng biết đi về đâu.
__________________
My home --> http://spktclup.com |
|
|
|
|
|
#8 | |
|
Đệ tử 2 túi
Tham gia ngày: Dec 2008
Bài gửi: 33
: |
Trích:
Cảm ơn anh |
|
|
|
|
|
|
#9 | |
|
Trưởng lão PIC bang
|
Trích:
Thân,
__________________
Biển học mênh mông, sức người có hạn. Đang gặp vấn đề cần được giúp đỡ? Hãy dành ra vài phút đọc luồng sau: http://www.picvietnam.com/forum/showthread.php?t=1263 |
|
|
|
|
|
|
#10 |
|
Đệ tử 2 túi
Tham gia ngày: Dec 2008
Bài gửi: 33
: |
|
|
|
|
|
|
#11 | |
|
Đệ tử 3 túi
Tham gia ngày: Nov 2007
Bài gửi: 48
: |
Trích:
Vấn đề của u chính là ko chịu đọc những cái người khác đã làm,gì chứ ví dụ thì có một đống! Bạn ông bảo học PIC thì chắc chắn hắn đã copy cho ông cả đống tài liệu rùi,đúng ko. PWM,tôi đã post thiết lập của tôi đó.tôi đã dùng pic8f4331 để PWM cho 6 động cơ ,chạy rùi,robot cũng đã cất rùi,nên ko cần phải băn khoăn j cả.ông ko chịu làm đó thui! |
|
|
|
|
|
|
#12 |
|
Nhập môn đệ tử
Tham gia ngày: Jun 2007
Bài gửi: 8
: |
Vẫn lại là những lời văn vẻ. Thôi tới đây em bức xô em chịu không nổi nữa. cái cảm giác chờ một người biết cách dạy cho mình học thật khó chịu. thôi thì tự tìm hiểu lấy vậy. dù biết rằng như thế sẽ mất đến vài tháng thậm chí cả năm. còn nếu có người chỉ thì chỉ mất vài ngày. Các bác làm em thất vọng quá. Các bác giỏi thì giỏi thật nhưng không biết cách dạy người khác. để khi nào em nắm bắt đc vấn đề em sẽ về và trình bày lại chủ đề này. há miệng chờ sung đúng là không phải cách.
__________________
My home --> http://spktclup.com |
|
|
|
|
|
#13 | |
|
Đệ tử 3 túi
Tham gia ngày: Nov 2007
Bài gửi: 48
: |
Trích:
thứ nhì,ông ko chịu vận động. Đúng là khi tôi tiếp cận với PIC,con đầu tiên là 4331,mất hơn 2 tháng để đk PWM cái motor đầu tiên.tui biết hoàn cảnh của ông bây giờ.chẳng ai thích dạy đời ông cả và Đừng nói về những người đang muốn giúp ông như vậy. |
|
|
|
|
|
|
#14 |
|
Đệ tử 2 túi
Tham gia ngày: Jul 2008
Bài gửi: 33
: |
thắc mắc
mình đang làm với con 18f4331. tìm hiếu về PWM,nhưng vẫn chưa rõ lắm. Ban đâu mình định tạo xung ra không đổi của cặp PWM0 và PWM1.Mình làm như sau:
#include <18f4331.h> #fuses NOWDT,PUT,HS,NOPROTECT #use delay(clock=40000000) void main() { setup_power_pwm_pins(PWM_COMPLEMENTARY,PWM_OFF,PWM _OFF,PWM_OFF); setup_power_pwm(PWM_CLOCK_DIV_4|PWM_FREE_RUN,1,0,4 00,0,1,0); set_power_pwm0_duty(100); } mình dùng oscilloscope nhưng thấy chan ra chẳng có gì . Còn có hiện tượng thông báo : Processor is in reset.Ai biết giúp mình với.Thank nhiều |
|
|
|
|
|
#15 |
|
Nhập môn đệ tử
Tham gia ngày: Nov 2007
Bài gửi: 3
: |
Đoạn code của bạn có xung nhưng chỉ 1 xung mà thôi,bạn phải dùng lệnh while(1) để tạo vòng lặp,bạn tham khảo thêm nha,^_^
|
|
|
|
![]() |
| Ðiều Chỉnh | |
| Xếp Bài | |
|
|