PIC Vietnam

PIC Vietnam (http://www.picvietnam.com/forum/index.php)
-   dsPIC - Bộ điều khiển tín hiệu số 16-bit (http://www.picvietnam.com/forum/forumdisplay.php?f=29)
-   -   hỏi về nháy led bằng dspic (http://www.picvietnam.com/forum/showthread.php?t=7310)

trinhdieuhvktqs 03-11-2010 04:30 PM

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);
  }
}


hcmut.khoamaisi 03-11-2010 06:49 PM

Trích:

Nguyên văn bởi trinhdieuhvktqs (Post 39847)
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 ?

trinhdieuhvktqs 03-11-2010 10:01 PM

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

ak47 03-11-2010 10:14 PM

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?

trinhdieuhvktqs 05-11-2010 04:54 PM

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;
}

hang1988 16-11-2010 10:23 PM

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();

      }
  }


pk178 16-11-2010 10:52 PM

Đ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é !

trinhdieuhvktqs 18-11-2010 01:02 AM

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

playgemboy 13-06-2013 05:38 PM

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);
    }
}



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

Tên diễn đàn: vBulletin Version 3.8.11
Được sáng lập bởi Đoàn Hiệp.
Copyright © PIC Vietnam