PIC Vietnam

Go Back   PIC Vietnam > Microchip PIC > Các ngôn ngữ lập trình khác (CCS C, HT PIC,...)

Tài trợ cho PIC Vietnam
Trang chủ Đăng Kí Hỏi/Ðáp Thành Viên Lịch Bài Trong Ngày Vi điều khiển

Trả lời
 
Ðiều Chỉnh Xếp Bài
Old 04-07-2008, 03:33 PM   #1
bean984
Đệ tử 3 túi
 
Tham gia ngày: Dec 2007
Bài gửi: 51
:
cho mình hỏi về cái timer0?????
mình đang gặp một lỗi khi sử dụng timer0. hiện tượng mình gặp phải là lần đầu tiên khi cắm điện vào bo thử để chạy test timer0 thì cái timer0 chạy không đúng(cụ thể là thời gian ngắt nó bị chậm rất nhiều). nhưng những lần tiếp theo đó(k ngắt nguồn điện) thì nó lại chạy đúng.và nếu cứ ngắt nguồn điện thì lại bị hiện tượng này.
ai biết nguyên nhân của lỗi này xin chỉ giúp mình với.
cảm ơn!
bean984 vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn
Old 11-07-2008, 11:41 PM   #2
Duykiban
Nhập môn đệ tử
 
Tham gia ngày: Jun 2008
Bài gửi: 1
:
Cho mình hỏi mình dùng CCSC 3.249 viết cho Pic 16F877A mà bộ nhớ Rom chỉ khoảng 70% là trình dịch báo out of rom! tại sao thế nhỉ?
Duykiban vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn
Old 12-07-2008, 09:06 AM   #3
vandungevn
Đệ tử 5 túi
 
Tham gia ngày: Oct 2006
Bài gửi: 116
:
Send a message via Yahoo to vandungevn
RTCC_INTERNAL // Chọn xung kích bên trong
T1_EXTERNAL // chọn xung kích bên ngoài theo đường TOCK
RTCC_EXT_L_TO_H // Xung kicks từ LOW -> High ( sườn "+" )
RTCC_EXT_H_TO_L // Xung kicks từ Hight -> Low ( sườn "-" )


ps_state là một trong những constant sau:

RTCC_DIV_2 // chọn cái tỉ số chia này có nghĩa j , có fai cứ 2 xung thì nó tăng bộ đếm lên 1
RTCC_DIV_4
RTCC_DIV_8
RTCC_DIV_16
RTCC_DIV_32
RTCC_DIV_64
RTCC_DIV_128

chia tần số đầu vào xung kích, đúng như bạn nói,

chúc bạn thành công
__________________
Hãy chung sức vì nền Điện Tử Viêt Nam...! Sản Phẩm thương hiệu Việt "Made in Viet Nam"
Nguyen Van Dung - Nguyễn Văn Dũng. Mobile : (+84) 97 329 1368
Nick name : VanDungEvn ( Yahoo + Skype )
Tư vấn & thiết kế điện tử + Làm mạch in + Hoàn thiện sản phẩm điện tử. Mạch nạp 89-PIC-AVR.
Email: vandungevn@gmail.com Website: www.dientuphuongdung.com
Xóm Mới - Nguyên Xá - Minh Khai - Từ Liêm - Hà Nôi - Viet Nam.
vandungevn vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn
Old 12-07-2008, 09:17 AM   #4
vandungevn
Đệ tử 5 túi
 
Tham gia ngày: Oct 2006
Bài gửi: 116
:
Send a message via Yahoo to vandungevn
có các thắc mắc gì các bạn vào trong nay tham khảo thêm nhé, có đủ các cách lập trình cho 16F877A http://www.picvietnam.com/forum/showthread.php?t=357.
http://www.picvietnam.com/forum/forumdisplay.php?f=12

Chúc thành công.
__________________
Hãy chung sức vì nền Điện Tử Viêt Nam...! Sản Phẩm thương hiệu Việt "Made in Viet Nam"
Nguyen Van Dung - Nguyễn Văn Dũng. Mobile : (+84) 97 329 1368
Nick name : VanDungEvn ( Yahoo + Skype )
Tư vấn & thiết kế điện tử + Làm mạch in + Hoàn thiện sản phẩm điện tử. Mạch nạp 89-PIC-AVR.
Email: vandungevn@gmail.com Website: www.dientuphuongdung.com
Xóm Mới - Nguyên Xá - Minh Khai - Từ Liêm - Hà Nôi - Viet Nam.

thay đổi nội dung bởi: vandungevn, 12-07-2008 lúc 09:23 AM.
vandungevn vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn
Old 12-07-2008, 05:06 PM   #5
tungtuantu
Đệ tử 3 túi
 
Tham gia ngày: Apr 2006
Bài gửi: 54
:
bác cho em xin bản mới mà lập trình dc DsPIC đó, e down vài bản rồi đều không hỗ trợ dspic, nhân tiện cho em hỏi, bác nào lập trình cái này cho dspic thì có thấy khác hơn so với pic thường ko ah, thàng này so với thằng C30 có hơn ko ah
tungtuantu vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn
Old 13-07-2008, 04:54 PM   #6
ngtdung.nguyen
Nhập môn đệ tử
 
Tham gia ngày: Jun 2008
Nơi Cư Ngụ: Ho Chi Minh city, VietNam
Bài gửi: 1
:
Smile

Em dùng Wizard của CCS 4.065, tạo chương trình xuất xung PWM cho PIC6F877A như sau:
(mục đích là tần số điều xung= 10kHz, 2 xung độ rộng 30% và 80%)

#include "F:\TRANNING-PIC\PWM.H"

void main()
{
setup_timer_0(RTCC_INTERNAL|RTCC_DIV_1);
setup_timer_1(T1_DISABLED);
setup_timer_2(T2_DIV_BY_4,124,1); //tần số PWM = 10kHz
setup_ccp1(CCP_PWM);
setup_ccp2(CCP_PWM);
set_tris_c(0x00);
set_pwm1_duty(150); // độ rộng xung 30%
set_pwm2_duty(400); // độ rộng xung 80%
setup_comparator(NC_NC_NC_NC);
setup_vref(FALSE);

while (1);
}

Mô phỏng bằng Proteus 7.2 cho thấy xung ra bị sai, cả về tần số và độ rộng xung
(xin lỗi các bác em chưa biết cách post hình lên)

Khi cài lại duty cycle, thì mô phỏng cho thấy xung ra đúng:

set_pwm1_duty(37);
set_pwm2_duty(100);


2 trường hợp này sai lệch nhau ở hệ số nhân 4 là hệ số chia tần đưa vào timer2.
Em đọc Data sheet thấy trường hợp 1 do CCS tự tính giá trị value là hợp với miêu tả về PWM. Tuy nhiên mô phỏng thấy sai.

Em có mạch chạy PIC tuy nhiên không có Oscilocope nên không biết thực tế ra sao.
Em không biết đây là do CCS sai hay do Proteus mô phỏng sai.

Mong các bác giải đáp giúp em với. Em xin cám ơn.
ngtdung.nguyen vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn
Old 11-08-2008, 06:01 PM   #7
cong1810
Đệ tử 4 túi
 
Tham gia ngày: Sep 2007
Bài gửi: 62
:
Send a message via Yahoo to cong1810
Trích:
Nguyên văn bởi ngtdung.nguyen View Post
Em dùng Wizard của CCS 4.065, tạo chương trình xuất xung PWM cho PIC6F877A như sau:
(mục đích là tần số điều xung= 10kHz, 2 xung độ rộng 30% và 80%)

#include "F:\TRANNING-PIC\PWM.H"

void main()
{
setup_timer_0(RTCC_INTERNAL|RTCC_DIV_1);
setup_timer_1(T1_DISABLED);
setup_timer_2(T2_DIV_BY_4,124,1); //tần số PWM = 10kHz
setup_ccp1(CCP_PWM);
setup_ccp2(CCP_PWM);
set_tris_c(0x00);
set_pwm1_duty(150); // độ rộng xung 30%
set_pwm2_duty(400); // độ rộng xung 80%
setup_comparator(NC_NC_NC_NC);
setup_vref(FALSE);

while (1);
}

Mô phỏng bằng Proteus 7.2 cho thấy xung ra bị sai, cả về tần số và độ rộng xung
(xin lỗi các bác em chưa biết cách post hình lên)

Khi cài lại duty cycle, thì mô phỏng cho thấy xung ra đúng:

set_pwm1_duty(37);
set_pwm2_duty(100);


2 trường hợp này sai lệch nhau ở hệ số nhân 4 là hệ số chia tần đưa vào timer2.
Em đọc Data sheet thấy trường hợp 1 do CCS tự tính giá trị value là hợp với miêu tả về PWM. Tuy nhiên mô phỏng thấy sai.

Em có mạch chạy PIC tuy nhiên không có Oscilocope nên không biết thực tế ra sao.
Em không biết đây là do CCS sai hay do Proteus mô phỏng sai.

Mong các bác giải đáp giúp em với. Em xin cám ơn.

mình cũng mới tìm hiểu về PIC và PWM!
vần đề của bạn là ở chỗ duty(150) và 400. đó là 150 là 1 số int còn 400 là số long int.cái này được đề cập trong VDu PWM của CCS c.nếu là duty là số int thì công thức tính: value=4*duty/clock*t2div.
nếu là số long int thì value=duty/clock*t2div.
thân!!
cong1810 vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn
Old 21-07-2008, 11:59 PM   #8
tungtuantu
Đệ tử 3 túi
 
Tham gia ngày: Apr 2006
Bài gửi: 54
:
em rât mong bác nào có tàiliệu hướng dẫn dùng CCS cho DsPIC cả anh lẫn việt cũng được, post lên cho anh em với, bác nào chỉ bảo luôn dùng phiên bản nào đầy đủ của CCS để lập trình cho DSPIC với
tungtuantu vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn
Old 22-07-2008, 12:57 AM   #9
picpen
Đệ tử 5 túi
 
picpen's Avatar
 
Tham gia ngày: Jun 2008
Bài gửi: 112
:
Cool

a ha. ccs ko sai và protues cũng chẳng có vấn đề gì đâu, mà vấn đề nằm ở hai thông số : period ( 124 ) và giá trị value(400) trong lệnh set_pwmx_duty(value)
thứ nhất : 2 giá trị period và value phải nằm trong khoảng : 0..255
thứ hai : khi bạn điều xung như trên thì giá trị : value luôn phải < period ( nếu value = period thì tần số bạn thu được sẽ =0 , nếu value > period thì xung ra là trùm xung ko như bạn tính toán )
Bạn đọc kỹ lại về cấu tạo và hoạt động của bộ tham 2 cũng như khối PWM
***** chúc thành công ********
__________________
** xin hãy cho tôi là tượng đá
** Để muôn đời không nhớ thương ai ..!!
picpen vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn
Old 26-07-2008, 08:17 PM   #10
dungnt7
Nhập môn đệ tử
 
Tham gia ngày: Aug 2007
Nơi Cư Ngụ: Ho Chi Minh city, Viet Nam
Bài gửi: 9
:
Trích:
Nguyên văn bởi picpen View Post
a ha. ccs ko sai và protues cũng chẳng có vấn đề gì đâu, mà vấn đề nằm ở hai thông số : period ( 124 ) và giá trị value(400) trong lệnh set_pwmx_duty(value)
thứ nhất : 2 giá trị period và value phải nằm trong khoảng : 0..255
thứ hai : khi bạn điều xung như trên thì giá trị : value luôn phải < period ( nếu value = period thì tần số bạn thu được sẽ =0 , nếu value > period thì xung ra là trùm xung ko như bạn tính toán )
Bạn đọc kỹ lại về cấu tạo và hoạt động của bộ tham 2 cũng như khối PWM
***** chúc thành công ********
Theo mình biết thì giá trị value được biểu diễn bằng 10bit, giá trị lớn nhất của value là 1024.

Value không phải lúc nào cũng nhỏ hơn period, theo datasheet thì (pwm_duty/pwm_period)=(value/(4*(tmr2+1))).

Đoạn chương trình sau xuất xung PWM 50%, f=5Khz, ở chân CCP1
void main()
{
setup_timer_1(T1_DISABLED);
setup_timer_2(T2_DIV_BY_4,249,1);
setup_ccp1(CCP_PWM);
set_pwm1_duty(512);
set_tris_c(0x00);
}


Vấn đề của bạn ngtdung.nguyen mình cũng chưa hiểu vì sao bị như vậy.

thay đổi nội dung bởi: dungnt7, 26-07-2008 lúc 11:46 PM.
dungnt7 vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn
Old 11-01-2012, 02:59 AM   #11
ngdnhanbk
Đệ tử 2 túi
 
Tham gia ngày: Nov 2010
Bài gửi: 38
:
Trích:
Nguyên văn bởi dungnt7 View Post
Theo mình biết thì giá trị value được biểu diễn bằng 10bit, giá trị lớn nhất của value là 1024.

Value không phải lúc nào cũng nhỏ hơn period, theo datasheet thì (pwm_duty/pwm_period)=(value/(4*(tmr2+1))).

Đoạn chương trình sau xuất xung PWM 50%, f=5Khz, ở chân CCP1
void main()
{
setup_timer_1(T1_DISABLED);
setup_timer_2(T2_DIV_BY_4,249,1);
setup_ccp1(CCP_PWM);
set_pwm1_duty(512);
set_tris_c(0x00);
}


Vấn đề của bạn ngtdung.nguyen mình cũng chưa hiểu vì sao bị như vậy.
Không cần set_tris_c(0x00) liệu có ảnh hưởng gì ko bạn
ngdnhanbk vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn
Old 11-08-2008, 06:07 PM   #12
cong1810
Đệ tử 4 túi
 
Tham gia ngày: Sep 2007
Bài gửi: 62
:
Send a message via Yahoo to cong1810
các bác cho em hỏi.em viết 1 đoạn code PWM nhỏ và mô phỏng.
lúc để value là hằng số thì mô phỏng đúng.
còn để value là biến số thì mô phỏng ko chạy gì hết.em mất cả buổi mà ko biết tại sao?
các sư huynh chỉ giáo!!em dùng 1 phím nhấn để tăng duty!!

Code:
#include<16f877a.h>
#fuses XT,NOPROTECT,NOLVP,NOWDT
#use delay(clock=4000000)
#byte portb=0x06
int8 value=0,period=200,percent=0;
#int_RB
void inter_RB()
{
if(percent==100)
   {
   percent=100;
   }
else
  {
  percent=percent+5;
  } 
}
main()
{
set_tris_c(0x00);
set_tris_b(0b00010000);
portb=0x00;
enable_interrupts(INT_RB);
enable_interrupts(global);
ext_int_edge(l_to_h);
setup_CCP1(CCP_PWM);
setup_timer_2(t2_div_by_1,199,1);

while(1)
{
 value=percent*period/100; 
  set_pwm1_duty(value);
}
}

thay đổi nội dung bởi: namqn, 11-08-2008 lúc 06:55 PM.
cong1810 vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn
Old 12-08-2008, 07:09 PM   #13
vietkhanh
Nhập môn đệ tử
 
Tham gia ngày: Mar 2007
Bài gửi: 2
:
cho em hỏi tí các anh sao khi em viết chương trình nào mà có dùng thư viện LCD của CCS thì đều bị lỗi khi biên dịch ạ,có hình đính kèm.
Hình Kèm Theo
File Type: jpg untitled.JPG (64.7 KB, 715 lần tải)
vietkhanh vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn
Old 13-08-2008, 12:48 AM   #14
cong1810
Đệ tử 4 túi
 
Tham gia ngày: Sep 2007
Bài gửi: 62
:
Send a message via Yahoo to cong1810
vấn đề là ở file chính.còn file lcd.c hoàn toàn đúng.
cong1810 vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn
Old 13-08-2008, 05:00 PM   #15
picpen
Đệ tử 5 túi
 
picpen's Avatar
 
Tham gia ngày: Jun 2008
Bài gửi: 112
:
Cool

Cong1810 ! Mình nghĩ biểu thức bạn dùng để tính giá trị value ko ổn ," value=percent*period/100; " , 3 biến value,percent,period bạn đều định nghĩa dạng INT8 ,vậy khi chương trình thực hiện biểu thức nó sẽ làm phép nhân trước " percent*period " ,giá trị của phép nhân này có thể lớn hơn 8 bit ( thường phải lưu vào biến 16 bit) ,nếu giá trị này lưu vào biến 8 bit nó có thể bị tràn và dẫn tới kết quả tính toán bị sai .
Mình thấy đoạn khai báo chương trình chính của bạn sai cú pháp : phải là , VOID main() ( thiếu VOID nha )
__________________
** xin hãy cho tôi là tượng đá
** Để muôn đời không nhớ thương ai ..!!
picpen vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn
Trả lời


Quyền Sử Dụng Ở Diễn Ðàn
You may not post new threads
You may not post replies
You may not post attachments
You may not edit your posts

BB code is Mở
Smilies đang Mở
[IMG] đang Mở
HTML đang Tắt

Chuyển đến


Múi giờ GMT. Hiện tại là 11:03 AM.


Được sáng lập bởi Đoàn Hiệp
Powered by vBulletin®
Page copy protected against web site content infringement by Copyscape
Copyright © PIC Vietnam