|
Tài trợ cho PIC Vietnam |
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 |
16-06-2007, 11:33 AM | #11 |
Đệ tử 2 túi
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; } |
|
|