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 Tìm Kiếm Bài Trong Ngày Ðánh Dấu Ðã Ðọc 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 20-03-2009, 06:48 PM   #1
conglong
Đệ tử 4 túi
 
Tham gia ngày: Jan 2008
Bài gửi: 68
:
Trích:
Nguyên văn bởi namqn View Post
Về câu hỏi liên quan đến duty cycle, bạn xem hình 14-4 trong datasheet của dsPIC30F2010.

Thân,
Em đã đọc datasheet dsPIC30f2010 phần PWM rồi , em hiểu là dutycycle là khoảng phần trăm thời gian HIGHT trong một chu kỳ phần đối với chân PWMxH , còn đối với PWMxL thì dutycycle lại là khoảng phần trăm thời gian LOW (với giả sử deadtime = 0), nhưng khi vào làm thực tế , cụ thể là ví dụ 5.1 của thấy :
Em dùng biến trở chỉnh điện áp tại chân RB0(AN0) là 1V thì theo lí thuyết , khi đó giá trị mình thu được tại thanh ghi ADCBUF0 là: 1x(2^10 - 1) / 5 = 204.6 hay là 11001101B sau lệnh dịch bit qua phải và gắn vào giá trị này vào PDC1 thì PDC1 = 102, mà duty_cycle = 2 * PDC1 / PTPER, mà ở đây PTPER = Fcy/Fpwm - 1 , với Fcy= 10Mhz ( do em dung thạch anh ngoài 10Mhz với PLL_4), Fpwm = 40Khz => PTPER = 249
Vậy duty_cycle = 2 * 102 / 249 = 0.8193 = 81.93 %, do đó khi dùng VOM để đo trên chân PWML ( RE0 ) thì điện áp DC phải là : (1 - 0.8193 ) * 5V = 0.9035 V.
Mà em đo thực tế lại là : 3.1 V !!!!
Em hiểu như vậy có đúng không Thầy , hay lỗi do đâu thầy ?
Em cảm ơn .
Trân trọng !.

thay đổi nội dung bởi: conglong, 20-03-2009 lúc 06:54 PM.
conglong vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn
Old 21-03-2009, 06:03 PM   #2
conglong
Đệ tử 4 túi
 
Tham gia ngày: Jan 2008
Bài gửi: 68
:
Trích:
Nguyên văn bởi namqn View Post
Về câu hỏi liên quan đến duty cycle, bạn xem hình 14-4 trong datasheet của dsPIC30F2010.

Thân,
Thầy Nam ơi mọi hôm em nói sai về Duty_cycle rồi thầy ơi đúng ra phải là :
Duty_cycle là khoảng phần trăm thời gian HIGHT trong một chu kỳ đối với chân PWMxH , còn đối với PWMxL thì dutycycle lại là khoảng phần trăm thời gian LOW (với giả sử deadtime = 0) KHI TA ĐANG DÙNG pwm Ở MODE complementary , còn PWM ở MODE independence thì duty_cycle cũng là khoảng phần trăm thời gian HIGHT trong một chu kỳ đối với chân PWMxL hay chân PWMxH (tùy vào chân nào được set). Tại em đo thực tế thấy như vậy,
Trân trọng !.

thay đổi nội dung bởi: conglong, 22-03-2009 lúc 01:11 AM.
conglong vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn
Old 19-03-2009, 02:50 AM   #3
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 conglong View Post
Thầy Nam cho em hỏi là trong file p30f2010.h của phần mềm mplap C30 có đoạn họ định nghĩa về 16 buffer chứa kết quả tạm thời của ADC là :
" extern volatile unsigned int ADCBUF0 __attribute__((__sfr__));
extern volatile unsigned int ADCBUF1 __attribute__((__sfr__));
extern volatile unsigned int ADCBUF2 __attribute__((__sfr__));
extern volatile unsigned int ADCBUF3 __attribute__((__sfr__));
.........."
vậy ở đây __attribute__((__sfr__)) có nghĩa là gì hả thầy?

Cho em hỏi câu nữa là em muốn cùng một lúc 6 ngõ vào AD là AN0 ... AN5 , thì em phải làm thiết lập sao? bởi vì em thấy trong Farmily rerence .... chỉ thấy có 4 chanels chuyển đổi nên khi dung 6 ngõ vào AD có vấn đề ? chắc em hiểu chưa cặn kẽ về AD module mong thầy chỉ rõ dùm em.
Em cảm ơn.
Trân trọng !.
__attribute__((__sfr__)) thể hiện rằng các thanh ghi này là các thanh ghi SFR (Special File Register) của dsPIC.

dsPIC30F2010 chỉ có một bộ chuyển đổi A/D (là phần tử ADC trong sơ đồ ở hình 18-1 của datasheet). dsPIC30F2010 có thể lấy mẫu (sample) mỗi lần 1 ngõ vào, 2 ngõ vào, hay 4 ngõ vào, tùy theo sự thiết lập của các bit CHPS trong thanh ghi ADCON2. dsPIC30F2010 có thể lấy mẫu cả 4 kênh một lần nhờ vào sự hiện diện của 4 bộ S/H (Sample and Hold), được ký hiệu là CH0 đến CH3 trong sơ đồ nêu trên. Dù bạn lấy mẫu kiểu nào đi nữa, mỗi tín hiệu được lấy mẫu đều được xử lý bởi cùng một bộ chuyển đổi A/D.

Để chuyển đổi 6 ngõ vào AN0 đến AN5, bạn sẽ phải lấy mẫu 6 ngõ vào đó theo một thứ tự nào đó (phù hợp với sự bố trí các chân analog đến các bộ S/H), và lần lượt chuyển đổi các tín hiệu đã được lấy mẫu đó. Ví dụ, bạn có thể chỉ dùng một bộ S/H CH0 và lần lượt lấy mẫu, sau đó chuyển đổi các ngõ vào AN0 đến AN5. Hoặc bạn có thể dùng 2 bộ S/H CH0 và CH1, để cùng lúc lẫy mẫu AN0 và AN1, sau đó lần lượt chuyển đổi các ngõ vào này, rồi sau đó thiết lập để dùng 4 bộ S/H từ CH0 đến CH3, để cùng lúc lấy mẫu AN2 đến AN5, và sau đó lần lượt chuyển đổi các ngõ vào này.

Với mỗi cách thực hiện, code để hiện thực sẽ có sự thay đổi tương ứng. Đề nghị bạn đọc thêm về bộ ADC 10-bit trong tài liệu "dsPIC30F Family Reference Manual" (mã của tài liệu là DS70046) trước khi đặt tiếp câu hỏi (điều này sẽ giúp bạn hiểu được những câu trả lời).

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

thay đổi nội dung bởi: namqn, 24-03-2009 lúc 12:40 AM. Lý do: thiếu 2 từ
namqn vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn
Old 23-03-2009, 01:23 PM   #4
silvadk2
Đệ tử 2 túi
 
Tham gia ngày: Nov 2008
Bài gửi: 42
:
anh Nam ơi, xem hộ em lỗi này là sao ạ :
c:\program files\microchip\mplab c30\bin\pic30-coff-ld.exe Error: A heap is required, but has not been specified
Link step failed.
em đã có đủ những tập tin cần thiết rồi mà nó vẫn báo vậy.
silvadk2 vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn
Old 23-03-2009, 03:05 PM   #5
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 silvadk2 View Post
anh Nam ơi, xem hộ em lỗi này là sao ạ :
c:\program files\microchip\mplab c30\bin\pic30-coff-ld.exe Error: A heap is required, but has not been specified
Link step failed.
em đã có đủ những tập tin cần thiết rồi mà nó vẫn báo vậy.
Bạn xem post #18 của luồng sau:
http://www.picvietnam.com/forum/showthread.php?p=2663

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 23-03-2009, 04:29 PM   #6
silvadk2
Đệ tử 2 túi
 
Tham gia ngày: Nov 2008
Bài gửi: 42
:
Em đang làm việc với con dspic30f4011. Em đang làm 1 bài toán là đo nhiệt độ rồi hiển thị lên lcd. anh có thể nói cho em về phần xử lí số liệu lấy ra từ module ADC để đưa lên LCD để hiển thị nhiệt độ ko anh ? Em dùng lm35 đó.
silvadk2 vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn
Old 24-03-2009, 12:37 AM   #7
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 silvadk2 View Post
Em đang làm việc với con dspic30f4011. Em đang làm 1 bài toán là đo nhiệt độ rồi hiển thị lên lcd. anh có thể nói cho em về phần xử lí số liệu lấy ra từ module ADC để đưa lên LCD để hiển thị nhiệt độ ko anh ? Em dùng lm35 đó.
Bạn còn dùng dsPIC30F4011 vào việc gì khác không? Nếu chỉ với mục đích trên thì đâu cần dùng đến dsPIC.

Nguyên tắc chung: bạn xác định dải nhiệt độ cần đo, xác định dải điện áp ra tương ứng và xử lý để nó tận dụng dải điện áp analog mà PIC/dsPIC có thể đọc. Từ đó, xác định công thức chuyển đổi từ kết quả A/D và nhiệt độ thực. Việc còn lại chỉ là đưa chuỗi ký tự ra LCD.

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 24-03-2009, 01:28 AM   #8
silvadk2
Đệ tử 2 túi
 
Tham gia ngày: Nov 2008
Bài gửi: 42
:
Đây chỉ là 1 phần trong đề tài của em. Dải nhiệt độ của em cần đo là từ 0-100 độ C.Em xem trên datasheet của lm35 thấy khoảng điện áp ra tương ứng la-1000mV cho khoảng nhiệt độ từ 0-100 độ C.Phần hiển thị lên LCD thì em làm rồi, nhờ anh xem phần xử lý số liệu hộ em mới. Thank anh nhiều nhiều
silvadk2 vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn
Old 24-03-2009, 11:18 AM   #9
conglong
Đệ tử 4 túi
 
Tham gia ngày: Jan 2008
Bài gửi: 68
:
Trích:
Nguyên văn bởi silvadk2 View Post
nhờ anh xem phần xử lý số liệu hộ em mới. Thank anh nhiều nhiều
số liệu gì bạn, bạn phải nói rõ chứ, LM35 có tầm điện áp như vậy trong khoảng nhiệt độ như bạn đã nêu thì bạn đọc giá trị điện áp thông qua thanh ghi ADCBUF0 rồi chyển thầnh nhiệt độ và hiển thị lên LCD , (dùng hàm sprintf() để chuyển số DECIMAL ra chuỗi ASCII ),
Trân trọng !.
__________________
Không có gì là Không thể, chỉ một điều Không thể khi bạn nghĩ nó Không thể !.
Bạn có thể nếu bạn tin bạn có thể !.
conglong vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn
Old 27-03-2009, 04:25 PM   #10
silvadk2
Đệ tử 2 túi
 
Tham gia ngày: Nov 2008
Bài gửi: 42
:
Đây là code của em, đo nhiệt độ đưa vào RB8 rồi hiển thị ra LCD, nhưng sao dòng 2 chỉ hiện ra là 0. Em không biết là sai chỗ nào, hic

Code:
#include	<p30f4011.h>
#include 	<string.h>
#include 	<stdio.h>

_FOSC(CSW_FSCM_OFF & HS);	
_FWDT(WDT_OFF);				
_FBORPOR(MCLR_EN & PBOR_ON & BORV_27);
_FGS(CODE_PROT_OFF);		

#define		LCD_EN		LATFbits.LATF2		//Tin hieu Enable cho LCD, chan RF2
#define		LCD_RS		LATFbits.LATF6		//Tin hieu Reset cho LCD, chan RF6
#define		LCD_RW		LATFbits.LATF3		//Tin hieu doc ghi cho LCD, chan RF3
#define 		RW_TRIS 	 TRISFbits.TRISF3
#define 		RS_TRIS 		TRISFbits.TRISF6
#define		E_TRIS 		TRISFbits.TRISF2
#define 		LCD_PORTB 	PORTB
#define		LCD_DATA	LATB				//Cac tin hieu Data cho LCD
#define		LCD_TRIS	TRISB				//Tristate cua cac tin hieu Data cho LCD

#define		LCD_CLEAR		0x01		//Xoa man hinh LCD
#define		LCD_HOME		0x02		//Tro ve dau dong
#define		LCD_NORMAL		0x06		//Che do nhap du lieu binh thuong
#define		LCD_NORMAL_S	0x07		//Che do nhap du lieu binh thuong, dich man hinh
#define		LCD_OFF 		0x08		//Tat man hinh
#define		LCD_ON	 		0x0C		//Bat man hinh
#define		LCD_ON_CRSR 	0x0E		//Bat man hinh va con tro
#define		LCD_ON_BLINK 	0x0F		//Bat man hinh va con tro (nhap nhay)
#define		LCD_8B2L		0x38		//Che do 2 dong, giao tiep 8 bit du lieu
#define		LCD_HOMEL1		0x80		//Ve dau dong 1
#define		LCD_HOMEL2		0xC0		//Ve dau dong 2

#define		ShortDelay()	{Nop() Nop() Nop() Nop() Nop() Nop() Nop() Nop() Nop()}
//***************************************************************************//
unsigned int ADCValue;


//***************************************************************************//
//
//	Function:		LCDdelayms
//	Description:	LCDdelayms for LCD		
//	Input:			Number of ms
//	Output:			None
//
//***************************************************************************//
void LCDdelayms(unsigned int ms)
{
	#define		FCY				2500*4
	unsigned int i=0;
	while(ms--){while(++i<FCY/7);	i=0;}
}
//*************************** END OF LCDDELAYMS ****************************//

void LCD_CMD(unsigned char CMD)
{

	LCD_RW=0;
	LCD_RS = 0;	
    LCD_DATA = CMD;						
	LCD_EN = 1;	ShortDelay();	LCD_EN = 0;
		
}
//************************* End of LCD_CMD *********************************//

void LCD_DAT(unsigned char DATA)
{
	LCD_RW=0;
	LCD_RS = 1;	
    LCD_DATA = DATA;						
	LCD_EN = 1;	ShortDelay();	LCD_EN = 0;	//Xung Enable
	
}
//****************************** END OF LCD_DATA ****************************//



void InitLCD(void)
{
	LCD_CMD(LCD_8B2L);			//Dat che do giao tiep 8-bit, man hinh 2 dong
	LCDdelayms(1);
	LCD_CMD(LCD_8B2L);			//Dat che do giao tiep 8-bit, man hinh 2 dong
	LCDdelayms(1);
	LCD_CMD(LCD_8B2L);			//Dat che do giao tiep 8-bit, man hinh 2 dong
	LCDdelayms(1);
	LCD_CMD(LCD_OFF);			//Tat man hinh
	LCDdelayms(1);
	LCD_CMD(LCD_CLEAR);			//Xoa man hinh
	LCDdelayms(1);
	LCD_CMD(LCD_ON);			//Bat man hinh
	LCDdelayms(1);
	LCD_CMD(LCD_NORMAL);		//Che do nhap lieu binh thuong
								//Cursor move Increment, Not to shift the display
	LCDdelayms(1);
	LCD_CMD(LCD_CLEAR);			//Xoa man hinh
	LCDdelayms(5);
}
//************************** END OF InitLCD *********************************//

void LCD_PutChar(unsigned char character)
{
		LCD_DAT(character);
	LCDdelayms(1);
}
//************************** END of LCD_PutChar *****************************//

void LCD_WriteString(const char *str)
{
//	LCDdelayms(1);
	char ps;
	ps = *str;		
	while(ps>0)		
	{
		str++;			
		if (ps==0) break;
		LCDdelayms(1);
		LCD_DAT(ps);		
    	ps = *str;		
	}	
}
//*********************** END OF LCD_Writestring ****************************//



void LCD_Gotoxy(char x, char y)
{
	char tg;
	LCDdelayms(5);
    switch (y)
	{
		case 1:tg = 0x80+x;
			break;
		case 2:tg = 0xC0+x;
			break;
    }
	LCD_CMD(tg);
}
//************************* END OF LCD_Gotoxy *******************************//

void LCD_Clear(void)
{
	LCD_CMD(LCD_CLEAR);
}

void SystemInit(void)
{
	//Init IO
	TRISB = TRISB & 0xFF00;		//RB0..RB7 Output.
	TRISBbits.TRISB8 = 1;
	TRISFbits.TRISF6 = 0;		
	TRISFbits.TRISF2 = 0;		
	TRISFbits.TRISF3 = 0;		
	LATB = 0xFF00;
	LATFbits.LATF6 = 0;		
	LATFbits.LATF2 = 0;
	LATFbits.LATF3 = 0;		
		//InitLCD
	InitLCD();
}
//******************************* End of SystemInit *************************//
void Init_ADC10(void) {
	ADPCFG = 0xFEFF;		//Cac chan khac la digital, chan AN8/RB8 la analog

	ADCON1 = 0x0040;		//Timer 3 cham dut lay mau va kich hoat
							//viec chuyen doi A/D
	ADCON2 = 0;
	ADCHS =  0x0008 ;				//Kenh 0 doc tin hieu giua AN8 va AVss
	ADCSSL = 0;				//Khong quet cac ngo vao
	ADCON3 = 0x0103;		//Dung 1 TAD cho lay mau, dung clock he thong,
	TMR3 = 0;				//Xoa thanh ghi dem cua Timer 3
	PR3 = 0x03E8;			//Nguong delay cho TMR3 la khoang 1 ms
	T2CON = 0x8010;			//Prescale = 1:8, bat cho TMR3 chay

	_ADIF = 0;				//Xoa co ngat ADC
	_ADIE = 1;				//Cho phep ngat ADC
	_ADON = 1;				//Bat module ADC
	_ASAM = 1;				//Khoi dong che do tu dong lay mau
}
void _ISR _ADCInterrupt(void)
{
	ADCValue = ADCBUF0 ;		
	_ADIF = 0;
}
int main(void)
{
	int ADCVoltage;
	char Nhietdo[40];
	ADPCFG = 0xFEFF; 
	SystemInit();
	Init_ADC10();
	LCD_Gotoxy(1,1);	
	LCD_WriteString("nhiet do la");	
	LCDdelayms(10);
	LCD_Gotoxy(3,2);
	ADCVoltage=ADCValue/2;
	sprintf(Nhietdo, "%d",ADCVoltage );
	LCD_WriteString(Nhietdo);
	
	while(1);		//Dung chuong trinh.
}
//********************************* End of Main *****************************//

thay đổi nội dung bởi: namqn, 27-03-2009 lúc 06:20 PM.
silvadk2 vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn
Old 27-03-2009, 05:20 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ước khi dùng kết quả chuyển đổi A/D, bạn đặt một giá trị đã biết vào biến ADCVoltage để xem lệnh gọi hàm LCD_WriteString() thứ hai của bạn chạy có ổn không. Nếu ổn thì bạn xem lại phần đọc tín hiệu analog, vì bạn chưa có kết quả chuyển đổi A/D hợp lý.

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 27-03-2009, 05:54 PM   #12
silvadk2
Đệ tử 2 túi
 
Tham gia ngày: Nov 2008
Bài gửi: 42
:
Em đã đặt 1 biến vào ADCVoltage để thử rồi, chạy tốt anh ạ.
silvadk2 vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn
Old 27-03-2009, 06:55 PM   #13
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 silvadk2 View Post
Em đã đặt 1 biến vào ADCVoltage để thử rồi, chạy tốt anh ạ.
Như tôi đã nói, bạn xem lại phần đọc tín hiệu analog. Bạn đã thử một trong hai tutorial của tôi chưa? Nếu đã thử thì bạn có thể chỉnh code lại để đọc từ RB8 thay vì RB0 xem có thành công hay không.

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 27-03-2009, 07:04 PM   #14
conglong
Đệ tử 4 túi
 
Tham gia ngày: Jan 2008
Bài gửi: 68
:
Sai ở hàm main đó bạn,

Trích:
Nguyên văn bởi silvadk2 View Post
Em đã đặt 1 biến vào ADCVoltage để thử rồi, chạy tốt anh ạ.

Vong lặp while(1) của bạn đặt ở cuối chương trình nên không hiện thị nhiệy độ đúng, bạn sửa lại như sau:

Code:
void main(void)
{
	int ADCVoltage;
	char Nhietdo[40];
	ADPCFG = 0xFEFF; 
	SystemInit();
	Init_ADC10();
	LCD_Gotoxy(1,1);	
	LCD_WriteString("nhiet do la");	
	LCDdelayms(10);
   while(1){
	LCD_Gotoxy(3,2);
	ADCVoltage=ADCValue/2;
	sprintf(Nhietdo, "%d",ADCVoltage );
	LCD_WriteString(Nhietdo);
           };
}
Nó sẽ chạy nhưng code này vẫn chưa tối ưu.
__________________
Không có gì là Không thể, chỉ một điều Không thể khi bạn nghĩ nó Không thể !.
Bạn có thể nếu bạn tin bạn có thể !.

thay đổi nội dung bởi: namqn, 27-03-2009 lúc 07:14 PM. Lý do: định dạng code
conglong vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn
Old 27-03-2009, 07:16 PM   #15
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 conglong View Post
Vong lặp while(1) của bạn đặt ở cuối chương trình nên không hiện thị nhiệy độ đúng, bạn sửa lại như sau:

Code:
void main(void)
{
	int ADCVoltage;
	char Nhietdo[40];
	ADPCFG = 0xFEFF; 
	SystemInit();
	Init_ADC10();
	LCD_Gotoxy(1,1);	
	LCD_WriteString("nhiet do la");	
	LCDdelayms(10);
   while(1){
	LCD_Gotoxy(3,2);
	ADCVoltage=ADCValue/2;
	sprintf(Nhietdo, "%d",ADCVoltage );
	LCD_WriteString(Nhietdo);
           };
}
Nó sẽ chạy nhưng code này vẫn chưa tối ưu.
Bạn silvadk2 chỉ muốn thử hiển thị một giá trị nhiệt độ rồi cho dừng chương trình, do đó không hẳn là sai. Vấn đề là biến ADCValue chưa có được giá trị digital tương ứng với tín hiệu analog ở ngõ vào, theo ý của bạn silvadk2. Nguyên nhân có thể do phần cứng, cũng có thể do cách thiết lập cho module ADC của bạn ấy chưa đúng.

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
Trả lời

Tags
dspic30f adc, dspic30f pwm

Ðiều Chỉnh
Xếp Bà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

Similar Threads
Ðề tài Người gửi Chuyên mục Trả lời Bài mới
dsPIC Tutorial 3-Đọc ngõ vào và giao tiếp LCD namqn dsPIC - Bộ điều khiển tín hiệu số 16-bit 92 19-02-2017 11:15 PM
dsPIC Tutorial 2-Các kỹ thuật cơ bản namqn dsPIC - Bộ điều khiển tín hiệu số 16-bit 33 17-10-2013 11:09 PM
dsPIC Tutorial 1-Tạo và biên dịch một project (ASM30) namqn dsPIC - Bộ điều khiển tín hiệu số 16-bit 16 22-08-2012 12:35 AM
dsPIC Tutorial 4-Module UART và I2C namqn dsPIC - Bộ điều khiển tín hiệu số 16-bit 76 09-05-2012 10:55 AM
RF module khanh_pic Tìm mua sản phẩm 22 20-08-2007 11:25 AM


Múi giờ GMT. Hiện tại là 06:07 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