我希望从pic16f877a,4Mhz HS(如果给它一个正弦波输入)取样并绘制相同的图。我给出230vp正弦波50hz作为输入并将其转换为5v范围并将其转换为正值电压。
这是我的代码
// Loop variable
float val,val1;//Declare the adcvalue stored variables
char uart_rd[50],uart_rd1[50];
void rmsv();
void adc_uart();//adc read and uart write
void interrupt(){
if (PIR1.ADIF) {
PIR1.ADIF=0; // clear AD interrupt flag
val= (ADRESH << 8) | ADRESL; // read dadta from channel 0
{
val1=(val*325.0)/1023.0;
FloatToStr(val1,uart_rd1);
strncpy(uart_rd,uart_rd1,3);
UART1_Write_Text(uart_rd1);
//UART1_Write(10);
UART1_Write(13);
delay_us(1);
}
Delay_Cyc(3); //wait acquisition time
ADCON0.F2=1; //start conversion again
}
}
void main()
{
TRISA=0XFF;//porta as input
ADCON1 = 0x82; // AN0->AN4 selected as analog input
ADCON0 = 0b11000001; // Configue analog mode
INTCON.GIE = 1; //Enable global interrupt
INTCON.PEIE = 1; //Enable peripheral interrupt
PIE1.ADIE = 1; //Enable ADC interrupt
Delay_us(20); //wait for acquisition time
ADCON0.F2 = 1; //start conversion
// ADCON1=0X81;
UART1_Init(9600); // Initialize UART module at 9600 bps
//ADC_Init();
while(1);
}
我检查了超级终端中的值,看到控制器甚至没有采样峰值电压。我希望正确的样本,以便能够正确绘制波形
答案 0 :(得分:0)
可能这不是软件问题。你说&#34;控制器甚至没有采样峰值电压&#34;信号范围在5V和0V之间。那么,如果您使用PIC电源电压(Vp)作为参考电压配置PIC ADC,并且如果电源电压小于5V(Vp <5V),那么您的最大adc电压范围是Vp。它可能导致ADC采集后的sin信号峰值出现削减。
Vp ________ _________ _________
\ / \ /
\ / \ /
\ / \ /
\ / \ /
0 \_/ \_/
测量PIC引脚上的电源电压,如果是原因,则调整电压源或将信号转换为Vp范围。