PIC Vietnam

Go Back   PIC Vietnam > Microchip PIC > dsPIC - Bộ điều khiển tín hiệu số 16-bit

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

dsPIC - Bộ điều khiển tín hiệu số 16-bit Theo dự kiến của Microchip, vào khoảng năm 2011 dsPIC sẽ có doanh số lớn hơn PIC

Trả lời
 
Ðiều Chỉnh Xếp Bài
Old 03-11-2010, 04:30 PM   #1
trinhdieuhvktqs
Đệ tử 1 túi
 
Tham gia ngày: Sep 2009
Bài gửi: 13
:
hỏi về nháy led bằng dspic

các bác ơi..em mới bắt đầu vói dspic bằng việc nháy led nhưng mãi mà k dc.các bác kiểm tra giúp em cái code nháy led đơn này với
em viết code...khi biên dịch nó k báo lỗi gì nhưng lại không biên dịch thành công dc.
chỉ cảnh báo ở chõ delay thôi..các bác giúp em với nhé.


Code:
#include <p30F4011.h>
_FOSC(CSW_FSCM_OFF & FRC_PLL4);
_FWDT(WDT_OFF);
_FBORPOR(PBOR_OFF & MCLR_EN & PWMxL_ACT_HI & PWMxH_ACT_HI);
_FGS(CODE_PROT_OFF);


int main(void)
{
  ADPCFG = 0xffff;
  LATE = 0x0000;
  TRISE = 0;
  while(1)
  {
    LATEbits.LATE5 = 0;
    delay_ms(1000);
    LATEbits.LATE5 = 1;
    delay_ms(1000);
  }
}

thay đổi nội dung bởi: phamminhtuan, 03-11-2010 lúc 05:14 PM. Lý do: Nhớ bỏ code vào thẻ [code] ...[/code]
trinhdieuhvktqs vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn
Old 03-11-2010, 06:49 PM   #2
hcmut.khoamaisi
Đệ tử 4 túi
 
hcmut.khoamaisi's Avatar
 
Tham gia ngày: Dec 2009
Nơi Cư Ngụ: TPHCM
Bài gửi: 79
:
Send a message via Yahoo to hcmut.khoamaisi
Trích:
Nguyên văn bởi trinhdieuhvktqs View Post
các bác ơi..em mới bắt đầu vói dspic bằng việc nháy led nhưng mãi mà k dc.các bác kiểm tra giúp em cái code nháy led đơn này với
em viết code...khi biên dịch nó k báo lỗi gì nhưng lại không biên dịch thành công dc.
chỉ cảnh báo ở chõ delay thôi..các bác giúp em với nhé.
bạn đã thiết lập môi trường trong MPLAB là C30 chưa ?
__________________
My blog: http://autumnneverreturn.blogspot.com/
Đối thủ khó chiến thắng nhất là bản thân !!!
hcmut.khoamaisi vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn
Old 03-11-2010, 10:01 PM   #3
trinhdieuhvktqs
Đệ tử 1 túi
 
Tham gia ngày: Sep 2009
Bài gửi: 13
:
em thiet lap roi ma...noi chung ve dung mplap thi em cung thanh thao roi...chi con truc trac o van de viet code thoi ah
trinhdieuhvktqs vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn
Old 03-11-2010, 10:14 PM   #4
ak47
Đệ tử 2 túi
 
Tham gia ngày: Jun 2010
Bài gửi: 29
:
code?

Hic! cậu này học c30 cơ bản chưa ? Lấy đâu ra cái hàm delay_ms() thế? Không phải ccs hay mikroC đâu nhá! Viết hàm delay không đơn giản chút nào (với yêu cầu chính xác !).Nếu không yêu cầu khắt khe lắm thì có thể dùng vòng for hoặc dùng timer (tương đối chính xác!)
Còn nếu yêu cầu chính xác thì cần dùng thư viện libpic30.h của C30.
Mà cậu học khóa bao nhiêu vậy? Sao không hỏi luôn mấy anh trong trường ấy?

thay đổi nội dung bởi: ak47, 03-11-2010 lúc 10:25 PM.
ak47 vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn
Old 05-11-2010, 04:54 PM   #5
trinhdieuhvktqs
Đệ tử 1 túi
 
Tham gia ngày: Sep 2009
Bài gửi: 13
:
cac bac oi...em sua lai code roi...e da khai bao ham delay va bien dich thanh cong roi
nhung khi nap vao mach thi led lai k nhay cac bac ah
em do dien ap o chan ra noi voi led thi chi co khoang 2v thoi
code cua em day...cac bac test giup em voi nhe
#include <p30F4011.h>
_FOSC(CSW_FSCM_OFF & FRC_PLL4);
_FWDT(WDT_OFF);
_FBORPOR(PBOR_OFF & MCLR_EN & PWMxL_ACT_HI & PWMxH_ACT_HI);
_FGS(CODE_PROT_OFF);

#define ms_count 125 //So dem tuong ung voi 1 ms, cho timer 1

void Delay_ms(unsigned int); //Tao tre mot so ms
void Init_TMR1(void); //Khoi tao Timer 1

unsigned char time_out;

int main(void)
{
Init_TMR1(); //Khoi tao cho TMR1
//LATB = 0x0000;
TRISB = 0x0000;
ADPCFG = 0xFFFF; // Cong B la dau vao so
while(1)
{
PORTBbits.RB5 = 0;
Delay_ms(1000);
PORTBbits.RB5 = 1;
Delay_ms(1000);
}
}

void Init_TMR1(void) {
TMR1 = 0; //Xoa so dem trong TMR1
PR1 = ms_count; //TMR1 tran moi ms
_T1IF = 0; //Xoa co ngat cua Timer 1
T1CON = 0x0020; //Dung fcy lam clock, prescale = 1:64, tat Timer 1
_T1IE = 1; //Cho phep ngat Timer 1
}

void Delay_ms(unsigned n) {
PR1 = n*ms_count; //Dat nguong tran vao PR1
time_out = 0; //Xoa co het thoi gian cho
T1CONbits.TON = 1; //Bat timer 1
while (time_out == 0); //Cho den khi het thoi gian cho
T1CONbits.TON = 0; //Tat timer 1
TMR1 = 0;
}

//Chuong trinh xu ly ngat Timer 1
//------------------------------------------------------------------------------
void _ISR _T1Interrupt(void) {
_T1IF = 0; //Xoa co ngat
time_out = 1;
}
trinhdieuhvktqs vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn
Old 16-11-2010, 10:23 PM   #6
hang1988
Đệ tử 1 túi
 
Tham gia ngày: May 2008
Bài gửi: 21
:
Bạn hãy tham khảo code này! Code nháy 8 LED đơn giản! Cần gì dùng timer cho phiền ra! để đó còn ùng cái khác!
Code:
/* 
										CHUONG TRINH NHAY LED DON - DSPIC30F4011  

+ Phan cung :             Dung LED don  noi vao RB0 - RB7 ----------------------
+ Yeu cau : Nhay tu 0 den 7 va 7 ve 0 . Sau do nhap nhay linh tinh
*/
#include <p30F4011.h> // Thu vien chuan
#include <libpic30.h> // Thu vien ham delay
  //-------------ConFig cho DsPic-------------------
		_FOSC(CSW_FSCM_OFF & FRC_PLL4);
		_FWDT(WDT_OFF);
		_FBORPOR(PBOR_OFF & MCLR_EN & PWMxL_ACT_HI & PWMxH_ACT_HI);
		_FGS(CODE_PROT_OFF);

unsigned char LED[8] = {0xfffe,0xfffd,0xfffb,0xfff7,0xffef,0xffdf,0xffbf,0xff7f}; // Ham sang cac LED tu RB0 den RB7

void INTPORT()
 { 
   TRISB = 0xff00; // Cho cac cong tu RB0 den RB7 la chan out
   PORTB=0xffff;
 }

void LED_K1()
  {
   unsigned int n,m;
   for(n=0;n<8;n++)
     {
       PORTB=LED[n];
       __delay32(500000); // Chu ki tre la 0.5s
     }
   for(m=0;m<8;m++)
     {
       PORTB=LED[7-m];
       __delay32(500000);
     }
    
 }
void LED_K2()
  {
    unsigned int a,b;
    for(b=0;b<20;b++) // cho toi 50 cho no dep
    {
     for(a=0;a<7;a++)
     {
         PORTB=LED[a];
       __delay32(500000);
      if(a=0) {PORTB=LED[4];__delay32(500000);}
      if(a=1) {PORTB=LED[7];__delay32(500000);}
      if(a=2) {PORTB=LED[5];__delay32(500000);}
      if(a=3) {PORTB=LED[6];__delay32(500000);}
      if(a=4) {PORTB=LED[1];__delay32(500000);}
      if(a=5) {PORTB=LED[3];__delay32(500000);}
      if(a=6) {PORTB=LED[2];__delay32(500000);}
      if(a=7) {PORTB=LED[4];__delay32(500000);}
     } 
  }
}
int main()
  {
   INTPORT();
   while(1)
     {    
      LED_K1();
      LED_K2();

       }
  }
hang1988 vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn
Old 16-11-2010, 10:52 PM   #7
pk178
Đệ tử 5 túi
 
Tham gia ngày: Jan 2009
Bài gửi: 100
:
Đo điện áp ra 2V, có thể xảy ra 1 trong những nguyên nhân sau :

1. Chập nguồn.
2. Nguồn cung cấp không đủ, gây sụt nguồn.
3. Thời gian delay quá nhanh, dẫn đến việc không thể nhìn thấy led nhấp nháy, chỉ thấy nó sáng mờ mờ.

Bạn thử check lại xem nhé !
pk178 vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn
Old 18-11-2010, 01:02 AM   #8
trinhdieuhvktqs
Đệ tử 1 túi
 
Tham gia ngày: Sep 2009
Bài gửi: 13
:
em cảm ơn các bác nhé..em đã biết được lỗi sai của code đó rồi..đó là phải sử dụng cả LATB = 0x0000;
TRISB = 0x0000;
code ở trên em chỉ sử dụng mỗi trisb còn latb thì không
ah bác HANG1988 oi...bác có thể cho mạil của bác dc k.em thấy bác cũng sành về thằng dspic này...để có gì k hiểu em sẽ mail để hỏi bác..
em đang bắt đầu tìm hiểu về dspic nên cũng gặp nhiều khó khăn...
phiền bác bớt chút time chỉ bảo em với nhé.em thấy ví dụ của bác up lên cũng đơn giản và dễ hiểu.
nếu bác có mấy cái ví dụ đơn giản viet bang c cho dspic dành cho người mới tìm hiểu thì phiền bác gủi cho em với nhé
mail cua em la trinhdieuhvktqs@gmail.com
cảm ơn các bác nhiều
trinhdieuhvktqs vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn
Old 13-06-2013, 05:38 PM   #9
playgemboy
Nhập môn đệ tử
 
Tham gia ngày: Dec 2011
Bài gửi: 1
:
Re: nháy led bằng dspic

Mình không biết ở thời điểm 2010 thì tập tin libpic30.h đã có hàm __delay_ms() và __delay_us() hay chưa, nhưng hiện tại với C30 bản 3.21 mình thấy nó có 2 hàm này, sử dụng bình thường như trong Hi-Tech hay CCS vậy. Có thể delay hẳn 500ms (thực tế chạy thì tương đối).
Nếu bạn là người mới bắt đầu với dsPIC thì hãy thử đoạn code sau, áp dụng cho PIC30F, sử dụng clock nội nên ko cần quan tâm bạn dùng thạch anh bao nhiêu.
Code:
/* 
 * File:   main.c
 * Author: pls
 * Nhấp nháy LED nối ở chân RD0
 * Created on June 13, 2013, 3:26 PM
 */
#include <p30Fxxxx.h>
_FOSC(CSW_FSCM_OFF & FRC_PLL4);		//Clock = 32 MHz, dùng Clock nội 8M x 4 = 32MHz
//Clock Switching and Monitor:  Sw Disabled, Mon Disabled
//Oscillator:                   Internal Fast RC w/PLL 4x
_FWDT(WDT_OFF);
//Watchdog Timer:       Disabled
_FBORPOR(MCLR_EN & PBOR_OFF);
//Master Clear Enable:  Enabled
//PBOR Enable:          Disabled
_FGS(GSS_OFF);
//General Segment Code Protection: Disabled

//Thiết lập tần số:
#define FOSC  32000000LL  // clock-frequecy in Hz with suffix LL (64-bit-long), eg. 32000000LL for 32MHz
#define FCY       (FOSC/4)  // MCU is running at FCY MIPS
#include <libpic30.h> //Thư viện chung cho PIC30, có hàm delay... (phải khai báo  FOSC và  FCY trước dòng này)



int main(void) {
    //Khởi tạo port:
    TRISDbits.TRISD0 = 0; //Cho chân D0 là ngõ ra
    while(1){ //Nhấp nháy D0
        LATDbits.LATD0 = 1;
        __delay_ms(500);
        LATDbits.LATD0 = 0;
        __delay_ms(500);
    }
}
playgemboy 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:20 PM.


Đượ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