久久人妻精品人妻视频五月天一区二区三区,,自慰午夜喷水久久久av国产成人a视频高在线,,欧美日韩免费专区在线97精品国产手机

  • <cite id="cwywg"></cite>
    <button id="cwywg"></button>
  • <button id="cwywg"><source id="cwywg"></source></button>
    <button id="cwywg"><tbody id="cwywg"></tbody></button>
  • <button id="cwywg"></button>
  • 
    
  • logo logo
    • BANNER
    • BANNER
    • BANNER
    您的位置 : 首頁 > 新聞資訊 > 技術支持
    stm8s單片機實現(xiàn)多通道轉換
    發(fā)布者:江蘇瑞易通電子科技有限公司 人氣:690 發(fā)布日期:2021-04-23 10:10:40

    今天在使用stm8s單片機的AD功能,單片機上有AN0到AN9十個通道。想只用其中的三路AN5到AN7。

    //ADC初始化
    void ADC_Init(void)
    {
     ADC_CR1 = 0x50;
     ADC_CR2 = 0x38;
     ADC_TDRL = 0xE0;  //禁止施密特觸發(fā)
    }

    unsigned int Read_ADC_Temp(unsigned channel)
    {
     unsigned int i,ADtemp;
     ADC_Init();
     //ADC_CSR = 0x00;
     ADC_CSR = channel;
     ADC_CR1 = 0x01;           // CR1寄存器的最低位置1,使能ADC轉換
     for(i = 0;i < 300;i ++);       // 延時一段時間,至少7uS,保證ADC模塊的上電完成
     ADC_CR1 = ADC_CR1 | 0x01; // 再次將CR1寄存器的最低位置1
                   // 使能ADC轉換
     while(!(0x80&ADC_CSR)); // 等待ADC結束
     ADtemp = (unsigned int)(ADC_DRH<<8) | ADC_DRL;
     ADC_CR1 = 0x00;
     return ADtemp;
    }

    當單獨使用某個通道時

    adtemp = read_a2d_dis(0x07);

    printf("%d ",adtemp);

    讀出的數(shù)值是正確的。接地是0接到VDDA上是1023。

    但是

    adtemp = read_a2d_dis(0x07);

    adtemp1 = read_a2d_dis(0x06);

    printf("%d ",adtemp);

    printf("%d ",adtemp1);

    切換通道后,讀出的數(shù)據(jù)不對,接到地時分別是768,254。切換通道后重新初始化也不行。一開始以為是每次采樣讀玩數(shù)據(jù)后應該延時。后來在讀取數(shù)據(jù)的時候分別延時1S還是不行。測得硬件的電壓也是正確的。datasheet上設置的也都對的。后來無奈,就多讀幾次,看看結果是不是一樣。

    后來發(fā)現(xiàn)只要在同一個通道連續(xù)讀兩次。取出的結果是正確的。

    unsigned int read_a2d_dis(unsigned char channel)
    {
     unsigned int tempTab[5];
     unsigned int i,j,temp;
     temp = 0;
     for(i = 0;i < 5;i ++)
     {
      tempTab[i] = Read_ADC_Temp(channel); 
     }
     for(j=0;j<5;j++)
     {
      for (i=0;i<5-j;i++)
      {
       if (tempTab[i]>tempTab[i+1]) 
       {
        temp=tempTab[i];
        tempTab[i]=tempTab[i+1];
        tempTab[i+1]=temp;
       }
      }
     }
     return tempTab[2]; 
    }

    做了如上修改后,一共讀五個數(shù)據(jù),取中位數(shù)。才養(yǎng)值沒有問題,但是為什么必須在切換通道的時候要讀兩次才能得到正確的數(shù)據(jù)依然沒有找到答案。只是懷疑是否是切換通道后,單片機將數(shù)據(jù)存儲到ADC_DRH,和ADC_DRL里時移位寄存器發(fā)生了錯位。只能在以后慢慢尋找答案。


    返回新聞列表