![]() |
|
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 | |
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 |
|
![]() |
![]() |
![]() |
#2 |
Đệ tử 4 túi
Tham gia ngày: May 2007
Bài gửi: 81
: |
@namqn:dạ, là 12F683 ạ.
@vietanh:Em sẽ thử lại. Nhưng nếu bỏ đoạn #int_ đi thì xung ra sẽ kích vào chân nào? |
![]() |
![]() |
![]() |
#3 | |
Trưởng lão PIC bang
|
Trích:
Nếu bạn đo dạng sóng ở chân GP1 (PIC12F683 không có chân RA1) thì tần số chắc chắn không đạt 38 kHz với thiết lập phần cứng trong chương trình của bạn, vì còn overhead khi xử lý ngắt Timer 2. Tuy nhiên, nếu bạn đo dạng sóng ở chân CCP1 thì nó sẽ đúng như phần chú thích trong code, tần số khoảng 38 kHz với duty cycle bằng 50 %. Đây cũng là lý do bạn vietanh đề nghị bạn bỏ phần code xử lý ngắt Timer 2, vì không cần thiết cho bài toán của bạn. Bạn cũng nên post code đầy đủ thông tin vào lần sau, đừng post code không đầu không đuôi như trên, vì người đọc sẽ phải đoán những thông tin mà bạn không đưa ra, hoặc phải hỏi lại bạn nhiều lần. 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 |
|
![]() |
![]() |
![]() |
#4 |
Đệ tử 4 túi
Tham gia ngày: May 2007
Bài gửi: 81
: |
Đây là toàn bộ code (với mục đích đầu tiên là chỉ tạo xung 38kHz) đã đc sửa như chỉ dẫn. Ko biết còn thiếu xót gì ko, các bác chỉnh giùm em. Đo tại chân CCP1(chân 5) luôn là mức 1. Phần cứng đc sử dụng crystal = 4MHz lắp vào chân 2 & 3, chân 1 & 8 cấp nguồn, các chân còn lại bỏ trống.
Code:
#include <12F683.h> #fuses NOWDT,PUT,XT,NOPROTECT #use delay(clock=4000000) // defind crystal = 4MHz void main() { setup_timer_2(T2_DIV_BY_1,25,1);//setup_TIMER_2(mode, period, postscale); setup_ccp1(CCP_PWM); set_pwm1_duty(52); //50%duty, 38462Hz enable_interrupts(GLOBAL); enable_interrupts(INT_TIMER2); while(TRUE); } |
![]() |
![]() |
![]() |
#5 | |
Trưởng lão PIC bang
|
Trích:
Code:
#include <htc.h> #include <pic12f683.h> __CONFIG(FCMDIS & IESODIS & BOREN & UNPROTECT & MCLREN & PWRTEN & WDTDIS & INTIO); void Init_CCP1(void) { //Assuming 4 MHz system clock (from the internal oscillator) PR2 = 25; //for 38.46 kHz PWM output at CCP1 pin T2CON = 0x00; //with 1:1 prescaler, 1:1 postscaler TMR2IF = 0; CCP1CON = 0x0C; //PWM mode, active high CCPR1L = 13; //50% duty cycle (2 LSBs are '00' in CCP1CON) TMR2ON = 1; //Turn on Timer 2 } void main(void) { GPIO = 0x00; CMCON0 = 0x07; //Turn off comparator, GP0 .. GP2 are I/O pins ANSEL &= 0xF0; //GP0 .. GP2 and GP4 are digital pins TRISIO = 0xFA; //GP0 and GP2 are outputs Init_CCP1(); while (1) { if (TMR2IF == 1) { GPIO0 = GPIO0 ^ 1;; //Toggle every Timer 2 cycle TMR2IF = 0; //Clear Timer 2 IF for next cycle } }; } 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 |
|
![]() |
![]() |
![]() |
|
|