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 16-06-2007, 11:33 AM   #1
minhquancdt
Đệ tử 2 túi
 
minhquancdt's Avatar
 
Tham gia ngày: Mar 2006
Bài gửi: 26
:
ADC 12bit

Em đang bị vướn phần ADC 12bit, ADC 10bit chạy trên 30F2010 rất tốt, nhưng khi chuyển sang 30F3012 lấy ADC 12bit, em đưa thẳng chân V+ 5V vào AN2, nhưng giá trị gửi lên Hyper terminal chỉ dao động quanh 950h, tức cỡ 2.91V. Em đã xem kĩ nhưng ko phát hiện sai chỗ nào cả. Đau đầu quá . Anh Nam giúp em với!
Code:
#include "p30f3012.h"
/* Macros for Configuration Fuse Registers (copied from device header file):*/
_FOSC(CSW_FSCM_OFF & XT_PLL4);  /* Set up for Crystal multiplied by 4x PLL */
_FWDT(WDT_OFF);                 /* Turn off the Watch-Dog Timer.  */
_FBORPOR(MCLR_EN & PWRT_OFF);   /* Enable MCLR reset pin and turn off the power-up timers. */
_FGS(CODE_PROT_OFF);            /* Disable Code Protection */

/*-----------------------------------------------------------------------------------------------
	Cac hang so cua chuong trinh
-----------------------------------------------------------------------------------------------*/
#define	Fcy	8000000			//Tan so thuc thi lenh
#define	baud	38400			//Toc do baud cua RS232

/*-----------------------------------------------------------------------------------------------
	Cac prototype cho cac chuong trinh con
-----------------------------------------------------------------------------------------------*/
void Init_PORTS(void);
void Init_ADC12(void);
void Init_TMR1(void);
void Init_UART1(void);
/*-----------------------------------------------------------------------------------------------
	Bang hang so trong ROM
-----------------------------------------------------------------------------------------------*/

/*-----------------------------------------------------------------------------------------------
	Cac bien toan cuc
-----------------------------------------------------------------------------------------------*/
unsigned int ADCValue, flag, idx;
unsigned char HexTable[] = "0123456789ABCDEF";

/*-----------------------------------------------------------------------------------------------
	Chuong trinh chinh
-----------------------------------------------------------------------------------------------*/
int main(void) {
	Init_PORTS();								//Khoi tao cac cong I/O
	Init_TMR1();								//Khoi tao Timer 1
	Init_ADC12();								//Khoi tao module ADC
	Init_UART1();								//Khoi tao module UART1
	flag = 0;
	while (1) {
		if (flag) {						//Neu co ket qua moi thi xuat ket qua
			idx = (ADCValue >> 8);				//Nibble cao nhat ( 4 bit)
			U1TXREG = HexTable[idx];			//Chuyen thanh ky tu tuong ung
			while (!U1STAbits.TRMT);			//Cho den khi truyen xong ky tu
			idx = ((ADCValue >> 4) & 0x000F);	        //Nibble thu hai
			U1TXREG = HexTable[idx];			//Chuyen thanh ky tu tuong ung
			while (!U1STAbits.TRMT);			//Cho den khi truyen xong ky tu
			idx = (ADCValue & 0x000F);			//Nibble thap nhat
			U1TXREG = HexTable[idx];			//Chuyen thanh ky tu tuong ung
			while (!U1STAbits.TRMT);			//Cho den khi truyen xong ky tu
			U1TXREG = 0x0A;					//Cap ky tu CR, LF (xuong dong, ve dau hang)
			while (!U1STAbits.TRMT);			//Cho den khi truyen xong ky tu
			U1TXREG = 0x0D;
			flag = 0;						//Xoa co bao hieu co ket qua moi
		};
	};
}

//Chuong trinh con khoi tao cac cong I/O, de xuat cac tin hieu PWM, va doc tin
void Init_PORTS(void) {
	TRISB = 0x0004;			//Chan RB2 la ngo vao analog AN0, cac chan khac
					//la ngo ra
	PORTB = 0x0000;						
	TRISD = 0x0000;
	PORTD = 0x0001;						
}

//Chuong trinh con khoi tao Timer 1, tran sau moi 1 giay o muc xung 8 Mips
void Init_TMR1(void) {
	TMR1 = 0;			//Xoa so dem trong TMR1
	PR1 = 0x186A;			//Nguong tran la 0.2 giay ung voi clock = 32 MHz
	_T1IF = 0;			//Xoa co ngat cua Timer 1
	T1CON = 0x8030;			//Dung fcy lam clock, prescale = 1:256
	_T1IE = 1;			//Cho phep ngat khi Timer 1 tran
}

//Chuong trinh con khoi tao module chuyen doi A/D, doc ngo vao AN0
void Init_ADC12(void) {
	ADPCFG = 0xFFFB;		//Cac chan khac la digital, chan AN2/RB2 la analog
	ADCON1 = 0x00E0;		//Module ADC cham dut lay mau va kich hoat
					//viec chuyen doi A/D
	ADCON2 = 0;
	ADCHS =  2;			//Kenh 0 doc tin hieu giua AN6 va AVss
	ADCSSL = 0;			//Khong quet cac ngo vao
	ADCON3 = 0x1F03;		//Dung 31 TAD cho lay mau, dung clock he thong,
					//TAD = 2xTcy = 250 ns
	ADCON2 = 0;						
	_ADIF = 0;			//Xoa co ngat ADC
	_ADIE = 1;			//Cho phep ngat ADC
	_ASAM = 1;			//Tu dong lay mau
}

//Chuong trinh con khoi tao module UART1
void Init_UART1(void) {
	U1MODE = 0x8000;		//Main I/O, 8-bit, no parity, 1 stop bit
	U1STA = 0x0400;			//bit10=UTXEN
	U1BRG = (((Fcy/baud)/16)-1);	//38400 bps @ Fcy = 8 MHz
}

//Chuong trinh xu ly ngat Timer 1
void _ISR _T1Interrupt(void) {
	_ADON = 1;				//Bat module ADC
	_T1IF = 0;				//Xoa co ngat
}

//Trinh phuc vu ngat cho ADC
void _ISR _ADCInterrupt(void)
{
	ADCValue = ADCBUF0;		        //Lay ket qua ADC vao bien ADCValue
	_ADON = 0;				//Tat module ADC
	flag = 1;				//Bat co bao hieu co ket qua moi
	_ADIF = 0;
}
minhquancdt vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn
Old 16-06-2007, 09:48 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
ADC 12-bit trong dsPIC30F cần có Tad tối thiểu là 334 ns cho tốc độ 200 kSPS, bạn phải chỉnh lại ADCON3 để đảm bảo điều này (code hiện thời có Tad = 250 ns). Ngoài ra, nên xem phần tương ứng trong datasheet của chip về các tụ bypass và các chân ref cho module ADC 12-bit (nếu tốc độ chuyển đổi từ 100 kSPS trở xuống thì Tad tối thiểu là 668 ns).

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

Ð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


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