Microchip
直播中

徐磊

7年用户 927经验值
私信 关注
[问答]

Interfacing PIC18F24K40 with POT

亲爱的各位,我在寻找能显示从0到1024改变值的样例代码,然后把那个值转换成电压。该值必须是16位寄存器。低字节存储在一个地址和另一个高位字节。有示例代码吗?
                    
                    
以上来自于百度翻译

               
                                                                                      以下为原文

                                                                            Dear all,

I am looking for sample code which could display the  change the value from 0-1024 then convert that value into voltage . The value must be 16bit register. lower byte store in one address and higher byte in another. Is there example code.

回帖(16)

张娜

2018-8-27 15:24:24
当然,你自己已经取得了什么成就?硬件可以吗?
                    
                    
以上来自于百度翻译

               
                                                                                      以下为原文

                                                                            Sure there is
 
What have you already achieved by yourself? Hardware is ok?
举报

杨阳

2018-8-27 15:34:32
我使用RBO和Rb1连接到10K锅。我想看到价值的变化。我的代码看起来像下面我看不到变化是价值
                    
                    
以上来自于百度翻译

               
                                                                                      以下为原文

                                                                            i m using RBO & Rb1 connected to 10k pot.  I would like to see change in value.
my code look like below i cant see change is value
unsigned int curr1;
float curr[27] = 0;
bit select = 0,Auto_flag = 0, curr1_min=0, curr2_min=0, curr3_min=0, curr4_min=0, curr5_min=0, curr6_min=0, curr7_min=0, curr8_min=0, curr9_min=0, curr10_min=0;


void PIN_MANAGER_Initialize(void) {
 /**
 LATx registers
 */
 LATA = 0x00;
 LATB = 0x00;
 LATC = 0x00;

 /**
 TRISx registers
 */
 TRISA = 0x00;
 TRISB = 0x00;
 TRISC = 0x80;

 /**
 ANSELx registers
 */
 ANSELC = 0x00;
 ANSELB = 0x3F;
 ANSELA = 0x00;

 /**
 WPUx registers
 */
 WPUE = 0x00;
 WPUB = 0x00;
 WPUA = 0x00;
 WPUC = 0x00;

 /**
 ODx registers
 */
 ODCONA = 0x00;
 ODCONB = 0x00;
 ODCONC = 0x00;

 bool state = (unsigned char)GIE;
 GIE = 0;
 PPSLOCK = 0x55;
 PPSLOCK = 0xAA;
 PPSLOCKbits.PPSLOCKED = 0x00; // unlock PPS

 RC6PPS = 0x09; //RC6->EUSART:TX;
 RXPPSbits.RXPPS = 0x17; //RC7->EUSART:RX;

 PPSLOCK = 0x55;
 PPSLOCK = 0xAA;
 PPSLOCKbits.PPSLOCKED = 0x01; // lock PPS

 GIE = state;
}




float Adc12_Cha(unsigned char val) {
 unsigned char adc_hbit,adc_lbit;
 unsigned long adc_temp,adc_temp0,adc_val;
 ADCON2=0x95; //ADFM=1,adc_clk=FOSC/4
 adc_temp0=0;
 for(unsigned char j=0; j<10; j++) {
  ADCON0=val<<2;
  ADON=1;
  __delay_ms(5);
  GODONE =1;
  while(GODONE==1);
  adc_hbit=ADRESH;
  adc_lbit=ADRESL;
  adc_temp = adc_lbit + (256*adc_hbit);
  adc_temp0+=adc_temp;
 }
 adc_val=adc_temp0/10;
 return adc_val;
}


void ADC_Manipulation() {
 curr1 = (int)(curr[0]);
 if ((curr1<=102) ||(curr1>=502 && curr1<=514)||(curr1>=922)) {
  curr1=0;
  curr1_min=0;
 } else if (curr1>514) {
  if((curr1>514)||(curr1<540)) curr1= (((curr1-512)*74)/100);
  else curr1=(((curr1-512)*74)/100);
  curr1_min=0;
 } else {
  if((curr1>102)||(curr1<150)) curr1= (((511-curr1)*74)/100);
  else curr1=(((510-curr1)*74)/100);
  // curr1_min=1;
 }
}


void main(void) {
 while (1)

 {

  curr[0] = Adc12_Cha(10);
  ADC_Manipulation();

  __delay_ms(100);

 }

}





 
举报

张娜

2018-8-27 15:53:48
您需要将这些引脚设置为输入,以及模拟能力(以及其他数字)。此外,我将避免所有的平均值,直到您确信可以正确读取ADC。
                    
                    
以上来自于百度翻译

               
                                                                                      以下为原文

                                                                            You need to set those pins as inputs, and analog capable (and the others, digital).
 
also, I'd avoid all of that averaging until you're sure you can read ADC correctly.
举报

杨阳

2018-8-27 16:12:35
我在这里附上了配置细节。我使用RB0&AMP;RB1作为模拟端口。如果我被配置为输入,它将不会编译。甚至它的警告它不会更新到芯片。
                    
                    
以上来自于百度翻译

               
                                                                                      以下为原文

                                                                            I have attached config details here.
I am using RB0 & RB1 as analog ports. If i am config as input it wont compile at all.
even its warning it wont update in to chip.
 
 
unsigned int ADCRead(unsigned char ch)
{
   if(ch>13) return 0; //Invalid Channel

   ADCON0=0x00;

   ADCON0=(ch<<2); //Select ADC Channel

   ADON=1; //switch on the adc module

   GODONE=1; //Start conversion

   while(GODONE); //wait for the conversion to finish

   ADON=0; //switch off adc

   return ADRES;
}
void main(void) {

 unsigned char c=0;
 ADCON2=0b10001010;
 // ANSELH=0X3F;


 while (1)

 {
  val=ADCRead(12);
  __delay_ms(100);

 }

//}

}
                                 Attached Image(s)

举报

更多回帖

发帖
×
20
完善资料,
赚取积分