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 29-12-2006, 08:45 AM   #1
daihang86
Đệ tử 1 túi
 
Tham gia ngày: Jun 2005
Bài gửi: 15
:
EPWM trong Pic18f458 !

Em dùng CCS để lập trình full-bridge với khối EPWM trong PIC, nhưng không chạy ! Đại ca nào làm chạy rồi chỉ cho em phát.
Cảm ơn.
daihang86 vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn
Old 29-12-2006, 08:42 PM   #2
namqn
Trưởng lão PIC bang
 
Tham gia ngày: Feb 2006
Nơi Cư Ngụ: Tp. HCM, Việt Nam
Bài gửi: 3,025
:
Send a message via Yahoo to namqn
Trích:
Nguyên văn bởi daihang86 View Post
Em dùng CCS để lập trình full-bridge với khối EPWM trong PIC, nhưng không chạy ! Đại ca nào làm chạy rồi chỉ cho em phát.
Cảm ơn.
Bạn viết code như thế nào mà không chạy?

Thân,
__________________
Biển học mênh mông, sức người có hạn.

Đang gặp vấn đề cần được giúp đỡ? Hãy dành ra vài phút đọc luồng sau:
http://www.picvietnam.com/forum/showthread.php?t=1263
namqn vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn
Old 29-12-2006, 11:09 PM   #3
daihang86
Đệ tử 1 túi
 
Tham gia ngày: Jun 2005
Bài gửi: 15
:
Em dung cac ham nhu sau:

setup_timer_2();
setup_ccp1(CCP_PWM1_H_H) hoac "CCP_PWM_FULL_BRIDGE"
set_pwm1_duty(400)

Em dung cac ham nay cho pwm binh thuong thi chay ngon, nhung cho epwm thi chiu. Mong bac giup em phat, em rat khoai cai epwm cua no, do phai them mach ngoai.
daihang86 vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn
Old 30-12-2006, 08:11 AM   #4
namqn
Trưởng lão PIC bang
 
Tham gia ngày: Feb 2006
Nơi Cư Ngụ: Tp. HCM, Việt Nam
Bài gửi: 3,025
:
Send a message via Yahoo to namqn
Trích:
Nguyên văn bởi daihang86 View Post
Em dung cac ham nhu sau:

setup_timer_2();
setup_ccp1(CCP_PWM1_H_H) hoac "CCP_PWM_FULL_BRIDGE"
set_pwm1_duty(400)

Em dung cac ham nay cho pwm binh thuong thi chay ngon, nhung cho epwm thi chiu. Mong bac giup em phat, em rat khoai cai epwm cua no, do phai them mach ngoai.
Dùng ECCP1 thì phải set up theo khuyến cáo của hãng, trình tự ở mục 16.5.8 trong datasheet của PIC18F458. Nếu dùng các hàm có sẵn của CCS thì không có gì đảm bảo thứ tự set up, hơn nữa, địa chỉ của ECCP1 ứng với CCP2 trong CCS.

Thân,
__________________
Biển học mênh mông, sức người có hạn.

Đang gặp vấn đề cần được giúp đỡ? Hãy dành ra vài phút đọc luồng sau:
http://www.picvietnam.com/forum/showthread.php?t=1263
namqn vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn
Old 01-01-2007, 08:39 AM   #5
bantrang25
Nhập môn đệ tử
 
Tham gia ngày: Oct 2006
Bài gửi: 2
:
Anh Namqn oi! anh co ctrinh mau CCS nao viet cho con AD 16bit (AD7715) ko?No co ctr mau trong CCS, em viet theo no ma ko chay?
bantrang25 vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn
Old 01-01-2007, 09:38 PM   #6
namqn
Trưởng lão PIC bang
 
Tham gia ngày: Feb 2006
Nơi Cư Ngụ: Tp. HCM, Việt Nam
Bài gửi: 3,025
:
Send a message via Yahoo to namqn
Trích:
Nguyên văn bởi bantrang25 View Post
Anh Namqn oi! anh co ctrinh mau CCS nao viet cho con AD 16bit (AD7715) ko?No co ctr mau trong CCS, em viet theo no ma ko chay?
CCS C đã có driver cho AD7715 rồi, bạn chỉ cần đặt các hàm (bit banging) đó vào trong chương trình của bạn, rồi dùng chúng là được. Bạn nên post phần code mà bạn đã thử, và cả sơ đồ phần cứng của bạn nữa.

Thân,
__________________
Biển học mênh mông, sức người có hạn.

Đang gặp vấn đề cần được giúp đỡ? Hãy dành ra vài phút đọc luồng sau:
http://www.picvietnam.com/forum/showthread.php?t=1263
namqn vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn
Old 02-01-2007, 05:11 PM   #7
daihang86
Đệ tử 1 túi
 
Tham gia ngày: Jun 2005
Bài gửi: 15
:
To Namqn, em đã thử với ECCP2 vẫn chẳng thấy tín hiệu ra cả, anh có thời gian xem hộ em phát. Chứ em thử hết các kiểu trong CCS rồi, vì mỗi EPWM mà phải học thêm phần mền biên dịch khác thì cũng mệt.
daihang86 vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn
Old 02-01-2007, 08:07 PM   #8
namqn
Trưởng lão PIC bang
 
Tham gia ngày: Feb 2006
Nơi Cư Ngụ: Tp. HCM, Việt Nam
Bài gửi: 3,025
:
Send a message via Yahoo to namqn
Trích:
Nguyên văn bởi daihang86 View Post
To Namqn, em đã thử với ECCP2 vẫn chẳng thấy tín hiệu ra cả, anh có thời gian xem hộ em phát. Chứ em thử hết các kiểu trong CCS rồi, vì mỗi EPWM mà phải học thêm phần mền biên dịch khác thì cũng mệt.
Dưới đây là đoạn chương trình thử ECCP của tôi, viết trong Basic của PIC18 Simulator, bạn chuyển thành CCS C đi nhé:

Code:
TRISD = TRISD Or 0xf0
PR2 = 0x80
ECCPR1L = 0x40
ECCP1CON = 0x4c
PIR1.TMR2IF = 0
T2CON = T2CON And 0xfc
T2CON.TMR2ON = 1
While PIR1.TMR2IF = 0
Wend
TRISD = TRISD And 0x0f
loop:
Goto loop  'loop forever
Thân,
__________________
Biển học mênh mông, sức người có hạn.

Đang gặp vấn đề cần được giúp đỡ? Hãy dành ra vài phút đọc luồng sau:
http://www.picvietnam.com/forum/showthread.php?t=1263
namqn vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn
Old 05-01-2007, 10:10 AM   #9
Sangcao
Đệ tử 1 túi
 
Tham gia ngày: May 2006
Bài gửi: 25
:
Anh Nam a , day la ctr cua em, em hien thi tren led 7 doan, phan hien thi ko co gi , chan cua ad7715 em noi chan nhu trong huong dan. day la code:
Code:
#include <16f877.h>
#include <defs_16f877A.h>
//#include <AD7715.c>
//#device *=16 ADC=10
#FUSES NOWDT, HS, NOPUT, NOPROTECT, NODEBUG, NOBROWNOUT, NOLVP, NOCPD, NOWRT//HS,NOWDT,NOLVP,NOPUT, NOCPD, NOWRT, NOBROWNOUT, NOPROTECT  //NOWDT, HS, NOPUT, NOPROTECT, NODEBUG, NOBROWNOUT, NOLVP, NOCPD, NOWRT
#use delay(clock=11059200)  // Su dung Fuse nay thi co nhieu , ko biet tai sao?
#use fast_io(b)
#use fast_io(d)
#use fast_io(c)

int8 const  BCD2LED[]={ 0x41, 0xED, 0x54, 0xC4, 0xE8,\
							0xC2, 0x42, 0xE5, 0x40, 0xC0, };
int8      COUNT1 ,COUNT2;

int16     COUNTX,T1,T2;          // Bien trong ngat
int16      BUFF[4], Y0, Y1;        // Bo dem de hien thi so tat hay khong
int8      BCD[4];
 int16 value;
//-------------------------------------------------------------//
#define LED1 RB4              // =0 thi LED sang
#define LED2 RB5
#define LED3 RB6
#define LED4 RB7
//-----------
#define ADC_CS    RC7  // Noi dat GND
#define ADC_RESET RC6   // Noi VCC
#define ADC_DRDY  RC2
#define ADC_DI    RC4
#define ADC_DO    RC5
#define ADC_CLK   RC3



 Void LamTuoi()

   {
       if(COUNT1 >=4)   {COUNT1 = 0;     }
		     PORTB = 0xf0;
           PORTD = BCD2LED[BCD[COUNT1]];  // CHOT*/

              switch (COUNT1) {
               case 0: LED1 =0; //bat led1
                       break;
               case 1: LED2 =0; //bat led2
                       break;
               case 2: LED3 =0; //bat led3
                       break;
               case 3: LED4 =0; //bat led4
                       break;

                       }
              COUNT1 ++;
 }
#int_timer0
void ngat()
   {
       Set_timer0(0);
             COUNT2 ++;
       if (Count2 == 10){
                        Count2 = 0;
                        LamTuoi();
                        //COUNTX = read_adc();
                        }
   }
void InBCD(int8 value4,int8 value3,int8 value2,int8 value1)
     {
          BCD[0]= value4;
          BCD[1]= value3;
          BCD[2]= value2;
          BCD[3]= value1;
     }


void LedView( int16 Value) // DUA SO VAO DE HIEN THI
   {
          BUFF[3]  = Value/1000;
          Y0       = Value%1000;
          BUFF[2]  = Y0/100;
          Y1       = Y0%100;
          BUFF[1]  = Y1/10;
          BUFF[0]  = Y1%10;

          InBCD(BUFF[3],BUFF[2],BUFF[1],BUFF[0]);
   }

void write_adc_byte(Byte data);

adc_init()
{
	ADC_RESET = 0;
   ADC_CLK =1;
	ADC_CS =1;	//Set low to AD7715 chip select low pin
	ADC_RESET =1;	//Set high to AD7715 reset low pin
	delay_ms(30);

	write_adc_byte( 0x12 );			//Communications Register
	write_adc_byte( 0x62 );			//Setup Register info here
}

void write_adc_byte(BYTE data) {
     int8 i;

     ADC_CS =0;
   for(i=1;i<=8;++i) {
      ADC_CLK =0;
     output_bit(PIN_C4,shift_left(&data,1,0));  // Output the MSB of data to

    // DI and at the same time  shift 0 into the LSB of data

      ADC_CLK =1;
                      }
   ADC_CS =1;
}


 int16 read_adc_word() {
   int8 i;
   BYTE data;

   ADC_CS =0;
   for(i=1;i<=16;++i) {
      ADC_CLK =0;
      ADC_CLK =1;
      shift_left(&data,2,input(PIN_C5));
   }
   ADC_CS =1;
   return data;
}



 int16 read_adc_value() {
        int16 value;  //long mac dinh kieu int16

	while ( input(PIN_C2) );
	while ( !input(PIN_C2) );
	while ( input(PIN_C2) );

	write_adc_byte(0x3a);
	value=read_adc_word();

//	return value;
}



void KhoiTao()
{
     set_tris_b(0b00001111);           // 1 Dau vao =0 la dau ra
     set_tris_d(0);                     // ra
     set_tris_c(0b11111111);
     enable_interrupts(global);
     //enable_interrupts(int_ext);
     enable_interrupts(int_timer0);
     Setup_timer_0(RTCC_INTERNAL| RTCC_DIV_4);
     Set_timer0(0) ;              //vao
     Value=0;
     Delay_ms(10);

}
     //-------------------------------------------------------------


void main()
 {    Khoitao();
     adc_init();
       ledview(Value);
       Lamtuoi();

   while (1) {

      read_adc_value() ;

      ledview(Value);
      Lamtuoi();

   }


 }

thay đổi nội dung bởi: namqn, 05-01-2007 lúc 09:34 PM.
Sangcao vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn
Old 05-01-2007, 10:20 AM   #10
Sangcao
Đệ tử 1 túi
 
Tham gia ngày: May 2006
Bài gửi: 25
:
Anh xem cho em tai sao lai ko chay nhe! Em nghi chi can trong ctr chinh goi ham Read_adc_value(), sau do hien thi kq value la ok, em lam the sao no ko chay? anh xem ho em nhe! thank!
Sangcao vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn
Old 05-01-2007, 09:33 PM   #11
namqn
Trưởng lão PIC bang
 
Tham gia ngày: Feb 2006
Nơi Cư Ngụ: Tp. HCM, Việt Nam
Bài gửi: 3,025
:
Send a message via Yahoo to namqn
Trích:
Nguyên văn bởi Sangcao View Post
Anh xem cho em tai sao lai ko chay nhe! Em nghi chi can trong ctr chinh goi ham Read_adc_value(), sau do hien thi kq value la ok, em lam the sao no ko chay? anh xem ho em nhe! thank!
Lệnh gọi hàm read_adc_value() trả về giá trị 16-bit, nhưng trong main lại không ghi giá trị trả về đó vào biến value. Trong C, hai biến 'Value' và 'value' có phải là 1 biến hay không?

Chương trình con read_adc_value() dùng biến cục bộ value để lưu giá trị trả về, sau đó trả về bằng lệnh return. Bạn lại chú thích lệnh return đó, do đó chương trình không thực hiện đúng ý đồ là lẽ đương nhiên.

Thân,
__________________
Biển học mênh mông, sức người có hạn.

Đang gặp vấn đề cần được giúp đỡ? Hãy dành ra vài phút đọc luồng sau:
http://www.picvietnam.com/forum/showthread.php?t=1263
namqn vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn
Old 08-01-2007, 12:55 PM   #12
Sangcao
Đệ tử 1 túi
 
Tham gia ngày: May 2006
Bài gửi: 25
:
Cam on anh Nam nhieu! Ve nha em se thu lai! co gi em hoi anh tiep nhe
Sangcao vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn
Old 09-01-2007, 09:56 AM   #13
moihocpic1985
Nhập môn đệ tử
 
Tham gia ngày: Aug 2006
Bài gửi: 9
:
ADC 8bit

Trích:
Nguyên văn bởi namqn View Post
Lệnh gọi hàm read_adc_value() trả về giá trị 16-bit, nhưng trong main lại không ghi giá trị trả về đó vào biến value. Trong C, hai biến 'Value' và 'value' có phải là 1 biến hay không?

Chương trình con read_adc_value() dùng biến cục bộ value để lưu giá trị trả về, sau đó trả về bằng lệnh return. Bạn lại chú thích lệnh return đó, do đó chương trình không thực hiện đúng ý đồ là lẽ đương nhiên.

Thân,
Em dung assemly tren 16f877a thi co the chuyen doi adc va hien thi ra led tot nhung khi dung CCSC thi khong chay gi ca. Anh xem doan code sau co sai cho nao khong gium em nha:
Code:
#include <16f877a.h>
#device *=16 ADC=8
#use delay(clock=4000000)
#byte portb=0x06

#fuses nolvp,nowdt,hs,noprotect

int8 ADC_delay;
 
void hienthi()
{
   set_adc_channel(0);
   delay_ms(5);
   ADC_delay=read_adc();
   portb=0x00;
   delay_ms(ADC_delay);

   portb=0xff;
   delay_ms(ADC_delay);
}

void main()
{
   setup_adc_ports(AN0_AN1_AN3);
   setup_adc(adc_clock_internal);
   set_adc_channel(0);
   while(1);
   {
      hienthi();
      
   }
}

thay đổi nội dung bởi: namqn, 09-01-2007 lúc 07:00 PM.
moihocpic1985 vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn
Old 09-01-2007, 01:23 PM   #14
Sangcao
Đệ tử 1 túi
 
Tham gia ngày: May 2006
Bài gửi: 25
:
Ban thu ctrinh nay, da co trong Pic viet Nam: Tu do phat trien len nhe!
Code:
#include <16F877A.h>
#fuses HS,NOWDT,NOPROTECT,NOLVP  //Ðây là 1 ví du nho ve ADC,chân RA0 lay tín hieu Analog tu bien tro
#device 16F877*=16 ADC=8        //và xuat giá tri se bien doi tuong ung qua tám led noi o portB
#use delay(clock=10000000)
Int8 adc;
main()
{
setup_adc(adc_clock_internal);
setup_adc_ports(AN0);
set_adc_channel(0);
delay_ms(10);
while(true)
{
adc=read_adc();
output_B(adc);
}
}

thay đổi nội dung bởi: namqn, 09-01-2007 lúc 07:01 PM.
Sangcao 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à 04:40 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