![]() |
Giúp tạo xung 38kHz bằng Timer
Tui mới học viết Pic nên còn lơ mơ quá:
Chẳng là tui muốn làm một chiếc remote control. Nhưng khi tạo xung bằng Timer0 hay timer2 đều gặp phải vấn đề là tần số tối đa chỉ đc khoảng 14kHz (tức là on=70us, off=70us), giảm tiếp thì ko xuống đc (đã kiểm tra bằng osc scope). Bác nào có kinh nghiệm vụ này xin chỉ dẫn giùm. Thanks các bác nhiều :( Code:
// defind crystal = 4MHz |
Trích:
Thân, |
Code:
#int_timer2 CHI CAN Code:
VOID MAIN(){ |
Trích:
Thân, |
@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? |
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, |
Đâ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> |
Trích:
Code:
#include <htc.h> Thân, |
Nói chung là bạn chua nắm được cơ bạn, lt pic bằng ccs . trước khi bạn muốn làm việc ,với 1 chân hay cả 1 cổng port nào đó bạn phải định nghĩa cho nó là cổng xuất hay nhập, chân đó nằm ở mức cao hay thấp.
vd set_tris_c(0x00); xuat dl output_c(0x00); tất cả port c nằm mức thấp |
Cảm ơn các bác đã nhiệt tình giúp đỡ. Đúng là em chưa đc cơ bản lắm trong việc làm pic. Mới nhảy từ AT89 lên... chắc phải đọc thêm sách rồi. Em sẽ chú ý lời khuyên của các bác. Một lần nữa xin cảm ơn!
|
Em đã tạo đc rồi các bác à! em đã tham khảo ở đây http://cblog.cari.com.my/html/32/53232-112634.html và sửa thành
set_pwm1_duty(15); thì chạy ngon lành. Không hiểu ra làm sao nữa. |
Trích:
Code vừa sửa của bạn sẽ tạo duty cycle = 50% nếu bạn dùng set_pwm1_duty(13). Thân, |
prescale
Sử dụng chức năng search trên 4r hay thật,lơ ngơ tìm đúng bài mình đang cần.hoho.Cảm ơn.Mỗi tội chưa biết cách tính timer0,1. Có ai có công thức tính timer ko,cho mình xin với. Mà cái gọi là bộ đếm gộp trước(prescaler) là gì vậy,mình vẫn chưa hiểu. Ý nghĩa và tác dụng của nó.
|
cho em hỏi tí
Em dùng pic 16f877a viết theo chương trình các anh hướng dẫn và đã tạo ra được sóng 38khz tại chân ccp1 . Nhưng điều em muốn hỏi là làm sao để điều kiển được chân ccp1 ( vì nó cứ phát xung liên tục không ngừng ) .
VD : trong mạch em thêm 1 cái nút nhấn , khi nhấn nút thì chân ccp1 mới phát ra xung trong khoảng 1s rùi tắt thì phải làm sao ? Em dùng ccs c , lệnh #setup_ccp1 (CCP_OFF) có tác dụng gì vậy các anh ? |
Múi giờ GMT. Hiện tại là 08:14 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