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 19-03-2011, 04:01 PM   #226
phu_vinh77
Nhập môn đệ tử
 
Tham gia ngày: Apr 2010
Bài gửi: 5
:
Các anh các bạn các vị tiền bối ơi, sao em đọc thấy nhiều topic nói mà ko thấy trả lời.
CCS có hổ trợ compiler cho dsPIC ko vậy ạ.
Em cảm ơn.
phu_vinh77 vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn
Old 04-06-2011, 10:08 AM   #227
hamster.khin
Đệ tử 1 túi
 
Tham gia ngày: Sep 2010
Bài gửi: 16
:
giúp code điều khiển động cơ

Trích:
Nguyên văn bởi popeye_ts22 View Post
Chào các bác.Có chút vướng mắc,các bác giúp em với.
Mục đích:Điều khiển động cơ phản hồi tốc độ về LCD
Thực hiện:Điều khiển được động cơ nhưng chưa phản hồi đc.
Em không biết sau mỗi lần gọi ngắt có cần phải để 1 vòng while() để đợi ngắt không.
Em dùng 16F877A,bây giờ điều khiển 1 kênh đã phải cần:TIMER2-PWM,TIMER 0:Đếm xung,TIMER1:Đếm thời gian,dùng để tính toán vận tốc.
Vậy nếu em dùng động cơ thứ 2 phải làm thế nào,có thuật toán nào ko ạ.
Có đoạn code và chương trình mô phỏng,các bác xem cho em:
Code:
#include <16f877a.h>
#include <def_877a.h>
#FUSES NOWDT, HS, NOPUT, NOPROTECT, NODEBUG, NOBROWNOUT, NOLVP, NOCPD, NOWRT
#use delay(clock=8000000)
#include <lcd_lib_4bit.c>
int16 cnt,cnt2,xung,v;
int8 a,b,c;
#int_TIMER0
void  TIMER0_isr(void) //TIMER0 dem xung ve
{
set_timer0(255);
if(tmr0if==1)
 {
 cnt++;
 tmr0if=0;
 }
}
#int_TIMER1           //TIMER1 dem tgian,tinh van toc
void  TIMER1_isr(void) 
 {
 set_timer1(5565);
 if(tmr1if==1)
   {
    xung=get_timer0()*4;   
    v=(xung*60)/((100*60*0.001));
     tmr1if=0;  
  }
 }
void Lcd()
{
while(1)
   {
   a=(int)v/100;
   b=(int)(v-a*100)/10;
   c=(int)v%10;
   LCD_putcmd(0xC0);
   LCD_putchar("xung encoder");
   LCD_putcmd(0x80);
   LCD_putchar(a+48);
   LCD_putcmd(0x81);
   LCD_putchar(b+48);
    LCD_putcmd(0x82);
    LCD_putchar(c+48);
   }   
}
void Ngat()
{
   set_timer0(255);
   setup_timer_0(RTCC_EXT_L_TO_H|RTCC_DIV_4);
   enable_interrupts(INT_TIMER0);
   setup_timer_1(T1_INTERNAL|T1_DIV_BY_2);
   set_timer1(5565);
   enable_interrupts(INT_TIMER1);
  enable_interrupts(GLOBAL);
  }
void PWM()
{
   setup_timer_2(T2_DIV_BY_16,255,1);
   setup_ccp1(CCP_PWM);
   setup_ccp2(CCP_PWM);
   set_pwm1_duty(1000);
   set_pwm2_duty(1022);  
}
void main()
{
   set_tris_d(0);
   set_tris_a(0xff);    //Cho tin hieu di vao RA4
   set_tris_c(0);
   LCD_Init();
   PWM();
   Ngat();
   Lcd();
   delay_ms(100);
}
bạn có thể up file lên được không cho mình xem với, mình cop code về sao không buil được file hex, xem giúp mình với !
hamster.khin vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn
Old 09-08-2011, 12:08 AM   #228
auto_tvt
Nhập môn đệ tử
 
Tham gia ngày: Jan 2011
Bài gửi: 3
:
phần mềm lập trình cho pic Mikro-C

minh mới tập tành học vxl, va hiện mình Mikro-C , nhưng vì mới làm quen vxl nên lang thang trên mạng nhưng chẳng có code cho nó gì hết ah,
sao mọi người không ai dùng phần mềm này ah,
qua đây cho mình hỏi có ai dùng thi chỉ giáo cho mình với.. thanks mọi người.
mail của em: auto.tvt@gmail.com
auto_tvt vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn
Old 09-08-2011, 03:59 PM   #229
caremlanh
Đệ tử 3 túi
 
caremlanh's Avatar
 
Tham gia ngày: Jul 2010
Nơi Cư Ngụ: hcm
Bài gửi: 52
:
Send a message via Yahoo to caremlanh
Trích:
Nguyên văn bởi auto_tvt View Post
minh mới tập tành học vxl, va hiện mình Mikro-C , nhưng vì mới làm quen vxl nên lang thang trên mạng nhưng chẳng có code cho nó gì hết ah,
sao mọi người không ai dùng phần mềm này ah,
qua đây cho mình hỏi có ai dùng thi chỉ giáo cho mình với.. thanks mọi người.
mail của em: auto.tvt@gmail.com
tốt nhất là dùng CCS đi, ko thì HT PIC chứ Micro C chả hỏi được ai đâu
caremlanh vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn
Old 03-10-2011, 02:28 PM   #230
nguyenminhthi90
Nhập môn đệ tử
 
Tham gia ngày: May 2010
Bài gửi: 1
:
nhờ các pro chỉ giúp phần RS232

chào các bác!
em tập theo cái tuto của pác linh thì đã có thể gửi ký tự từ PC lên LCD bình thường rồi, nhưng phần ngược lại, dù có printf cỡ nào nó cũng không truyền được vào hyper terminal được ah . cái này em mô phỏng bên con 8051 thì ngon lành cành đào ạ, hix :|
sau đây là code của e:

#include <16f877a.h>
#include <def_877a.h>
#use delay(clock=20000000)
#FUSES NOWDT, HS, NOPUT, NOPROTECT, NODEBUG, NOBROWNOUT, NOLVP, NOCPD, NOWRT
#use rs232(baud=9600,parity=N,xmit=PIN_C6,rcv=PIN_C7,bi ts=9)

#include <lcd_lib_4bit.c>
//#include <input.c>

int8 count=0;
int1 t=1;

#INT_RDA
Receive_isr() {
char c;
count++;
c = getc();
putc(c);
if (c=='z')
{
LCD_putcmd(0x01); //Clear Screen
count=0;
}

if ((count<=16) && (c!='z'))
{
LCD_putchar(c);
}
if ((count > 16) && (t==1))
{
count=1;
LCD_putcmd(0xc0);
LCD_putchar(c);
t=0;
}
if ((count > 16) && (t==0))
{
count=1;
LCD_putcmd(0x01);
LCD_putchar(c);
t=1;
}
}
void main()
{

enable_interrupts(int_rda);
enable_interrupts(GLOBAL);
lcd_init();
lcd_putcmd(0x01);
lcd_putcmd(line_1);
printf("hello!");
while (1) {}
}

em có gửi theo mấy cái file, mọi người chỉ giúp e nhé .
File Kèm Theo
File Type: rar 232.rar (488.1 KB, 27 lần tải)
nguyenminhthi90 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   #231
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-01-2012, 03:13 AM   #232
ngdnhanbk
Đệ tử 2 túi
 
Tham gia ngày: Nov 2010
Bài gửi: 38
:
Trích:
Nguyên văn bởi namqn View Post
Có nhiều vấn đề liên quan đến câu hỏi của bạn mà hiện giờ tôi cũng chưa có thời gian tìm lại các tài liệu. Bạn có thể xem qua phần "Common Design Mistakes" trong tài liệu "ABCs of ADCs" của National Semiconductor (link download dưới đây), để từ đó tránh được một số lỗi thiết kế thường gặp. Điều này đôi khi có thể giúp bạn có được một thiết kế đủ tốt, chứ chưa cần đến những kỹ thuật phức tạp khác.

http://www.national.com/appinfo/adc/...Cs_of_ADCs.pdf

Thân,
Anh có thể up lại tài liệu trên được không, link die rồi ạ
ngdnhanbk vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn
Old 30-03-2012, 12:27 PM   #233
DunLop
Nhập môn đệ tử
 
Tham gia ngày: Feb 2012
Bài gửi: 4
:
đo nhiệt độ dùng lm335 và 16f877a hiển thị led 7 đoạn

e mới học vdk...đang viết 1 mạch đo nhiệt độ dùng lm335 và 16f877a hiển thị led 7 đoạn
ko bik đoạn code e viết sai chỗ nào, mong ae giúp cho..thanks
# include <16f877a.h>
# fuses hs,nowdt,nolvp
# DEVICE 16f877a*=16 ADC=10
# use delay (clock=4000000)

int Maled[10]={0XC0,0XF9,0XA4,0XB0,0X99,0X92,0X82,0XF8,0X80,0X9 0};
int hc=0,hdv=0,nhietdo,giatriadc;
# int_timer1
void ngattimer()
{
set_adc_channel(0);
delay_ms(10);
giatriadc=read_adc();
nhietdo=((giatriadc-558.558)/2.048);
hc=nhietdo/10;
hdv=nhietdo%10;
set_timer1(40536);
}
void hienthi();
void main()
{
set_tris_a (0xff);
set_tris_b (0x00);
set_tris_c (0x00);
setup_timer_1(t1_internal|t1_div_by_8);
set_timer1(40536);
enable_interrupts(int_timer1);
enable_interrupts(global);
setup_adc(adc_clock_internal);
setup_adc_ports(AN0);

while(1)
{

hienthi();
}

}
void hienthi()
{

output_high (pin_c0);
output_low (pin_c1);
output_b (Maled[hc]);
delay_ms(5);
output_high (pin_c1);
output_low(pin_c0);
output_b (Maled[hdv]);
delay_ms (5);


}

sơ đồ mạch:
Hình Kèm Theo
File Type: bmp nhietdo.bmp (1.60 MB, 11 lần tải)

thay đổi nội dung bởi: DunLop, 30-03-2012 lúc 04:10 PM. Lý do: bổ sung
DunLop vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn
Old 06-04-2012, 10:42 AM   #234
lt10dkdt
Nhập môn đệ tử
 
Tham gia ngày: Mar 2012
Bài gửi: 1
:
Trích:
Nguyên văn bởi tyhon View Post
Em có đoạn code sau nhưng em không hiểu là lệnh adcHI và adcLO làm gì (với khai báo
char adcHI,adcLO).Anh nào giải thích hộ em

Code:
   while(TRUE)
        {
               adcValue = read_adc(); // Get ADC reading
 
               adcHI = (char)((adcValue >> 5)& 0x1f);       
               adcLO = (char)((adcValue & 0x1f)|0x80);     
                      
               putc(adcHI);  
               putc(adcLO);   
 
               delay_ms(10);  // Preset delay, repeat every 10ms
        }
}
em có đoạn code sau.tình hình là như thế này.em kết hợp nút ấn bên ngoài với ngắt. đoạn nhấp nháy thì oke hết rùi.nhưng khi khai báo ở void main thì toàn báo lỗi ở *case" ai biết chỉ dùm em với.em đang học về pic thôi.tim mãi mà không ra:

#include "16f877a.h"
#use delay(clock=20000000)
#int_rb

unsigned char x,i,a,b,tre;
int16 mode;

void trai()// chuong trinh con nhay trai sang
{

x=0x01;
output_d(x);
delay_ms(tre);
for(i=1;i<=7;i++)
{x=x<<1;
output_d(x);
delay_ms(tre);
}
}

void phai()//chuong trinh con nhay phai sang
{

x=0x80;
output_d(x);
delay_ms(tre);
for(i=1;i<=7;i++)
{
x=x>>1;
output_d(x);
delay_ms(tre);
}
}

void trong() //chuong trinh con nhay trong ra
{
a=0x01;
b=0x80;
for(i=1;i<=7;i++)
{
a<<=1;
b>>=1;
output_d(a|b);
delay_ms(tre);
}
}
void ngat()
{
if(input(pin_b0))
if(mode<2)mode++;//chuyen che do tang len o b0
if(input(pin_b1))
if(mode<0 )mode--;//chuyen che do tang len o b1
if(input(pin_b2))
if(tre<100) tre=tre+100;//tang thoi gian tre cho led
if(input(pin_b3))
if(tre>100) tre=tre-100;//giam thoi gian tre cho led

}

void main()
{
set_tris_b(0xff);
enable_interrupts(int_rb);
enable_interrupts(GLOBAL);

mode=0;
while (true)
case 0: trai();break;
case 1: phai();break;
case 2: trong();break;
}
lt10dkdt vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn
Old 04-05-2012, 01:00 AM   #235
yannibandari
Nhập môn đệ tử
 
Tham gia ngày: Apr 2011
Bài gửi: 1
:
mọi người ơi giúp mình với. mình tìm chương trình pic c cả ngày rồi,cài vào rồi lại xóa không biết bao nhiêu lần mà cũng không tìm ra phiên bản thích hợp. cứ mỗi lần compile cái file.c (đã chạy tốt trên máy khác,có thể phiên bản cũ) thì nó lại báo error! mình xài win 7 64bit untimate. ức chế quá!
yannibandari vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn
Old 28-08-2012, 05:25 PM   #236
vietthanh123
Nhập môn đệ tử
 
Tham gia ngày: Apr 2011
Bài gửi: 3
:
Trích:
Nguyên văn bởi lt10dkdt View Post
đoạn nhấp nháy thì oke hết rùi.nhưng khi khai báo ở void main thì toàn báo lỗi ở *case" ai biết chỉ dùm em với.em đang học về pic thôi.tim mãi mà không ra:
Báo lỗi vì cấu trúc của hàm case bị thiếu. Cấu trúc có nó là:
switch (cmd)
{
case 0: sthing;
break;
case 1: sthing;
break;
case 2: sthing;
break;

}
vietthanh123 vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn
Old 04-11-2012, 11:14 PM   #237
tranhien5291
Nhập môn đệ tử
 
Tham gia ngày: Oct 2012
Bài gửi: 1
:
help!!!

Các bác ơi cho e hỏi e cài CCS nhưng mà bị báo lỗi " Exception EInoutError in module pcwwiz.exe at 00833f6 I/O error 123 " , k biết phải làm thế nào nữa. Các pro chỉ cho e với ạ!!! e cảm ơn ạ.

thay đổi nội dung bởi: tranhien5291, 04-11-2012 lúc 11:19 PM.
tranhien5291 vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn
Old 06-11-2012, 04:14 PM   #238
huydungsh
Nhập môn đệ tử
 
Tham gia ngày: Sep 2011
Bài gửi: 10
:
các anh cho em hỏi đoạn chương trình sau co nghĩa như thế nào ak?
#int_timer0
void interrupt_timer0(){
int1 a;
int16 count;
set_timer0(56);
++count;
if(count == 500)
{
count=0;
a=~a;
RB0=a;
}


}
theo em nghĩ thì khi timer0 đêm được 200 lần( set_timer0(56); 256-56=200) thì biến cuont tăng lên 1. vậy trong quá trình chờ biến count đếm được 500 lần tương ứng với 100ms thì con pic16f877a có làm gì không? nếu làm thì khi thỏa mãn điều kiện IF thì làm sao pic có thể thực hiện các lệnh trong điều kiện đó. thanks all!
huydungsh vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn
Old 07-11-2012, 01:31 AM   #239
quanghuy_125
Đệ tử 2 túi
 
Tham gia ngày: Apr 2009
Bài gửi: 44
:
Trích:
Nguyên văn bởi huydungsh View Post
các anh cho em hỏi đoạn chương trình sau co nghĩa như thế nào ak?
#int_timer0
void interrupt_timer0(){
int1 a;
int16 count;
set_timer0(56);
++count;
if(count == 500)
{
count=0;
a=~a;
RB0=a;
}


}
theo em nghĩ thì khi timer0 đêm được 200 lần( set_timer0(56); 256-56=200) thì biến cuont tăng lên 1. vậy trong quá trình chờ biến count đếm được 500 lần tương ứng với 100ms thì con pic16f877a có làm gì không? nếu làm thì khi thỏa mãn điều kiện IF thì làm sao pic có thể thực hiện các lệnh trong điều kiện đó. thanks all!
Đúng theo bạn nói" timer0 đêm được 200 lần( set_timer0(56); 256-56=200) thì biến count tăng lên 1. vậy trong quá trình chờ biến count đếm được 500 lần "
Cái 100ms không tính được vì nó phụ thuộc vào xung nhịp mà mình đưa vào.
Khi count=500; thì count=0; a = đảo a; chân RB0 =a; và quá trình lại được tiếp diễn...
__________________
ĐT : 0167 6455 880 Mail: quanghuy1205@gmail.com
https://www.facebook.com/ThietKeDienTu
quanghuy_125 vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn
Old 07-11-2012, 01:56 AM   #240
huydungsh
Nhập môn đệ tử
 
Tham gia ngày: Sep 2011
Bài gửi: 10
:
cảm ơn các anh đã giải thích! nguyên code là như sau:
#include <16F877A.h>
#include <DEFS_16F877A.h>
#device 16F877*=16 ADC=10
#FUSES NOWDT, HS, NOPUT, NOPROTECT, NODEBUG, NOBROWNOUT, NOLVP, NOCPD, NOWRT
#use delay(clock=4000000)
#use fast_io(b)
#use fast_io(c)
#use fast_io(d)

#int_timer0
void interrupt_timer0(){
int1 a;
int16 count;
set_timer0(56);
++count;
if(count == 500)
{
count=0;
a=~a;
RB0=a;
}


}
void main()
{
set_tris_b(0);
setup_timer_0(RTCC_INTERNAL|RTCC_DIV_2);
enable_interrupts(int_timer0);
enable_interrupts(global);
set_timer0(56);

while(true)
{
}
}
em chỉ copy ở page 1 thôi thắc ở cái đoạn đó mong các anh giải thích giúp em!! thanks all
huydungsh 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à 02:31 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