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

 
 
Ðiều Chỉnh Xếp Bài
Prev Previous Post   Next Post Next
Old 16-06-2007, 11:33 AM   #11
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
 


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:18 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