2011年6月21日 星期二

人氣6000的經驗分享 : Digital-To-Analog Source Code ---- DAC8830


最近有點忙, 加上人氣增加的速度, 超乎我的想像, 所以有點措手不及.....有點晚才打這一篇文章
DAC8830這一顆IC, 算是相當優秀的IC, 它的Linearity error(線性誤差)只有+/- 0.5 LSB, 可輸出電壓範圍為0~+Vref, 如果你的+Vref接5V, 那麼它的輸出電壓範圍就是0~5V, 而且它走SPI interface, 最快可到50MHz, 當然它的身價也相當的不凡, 一顆賣270元, 就算是對岸也要220元, 在我的應用, 原本是要用MCU本身的Hardware SPI interface去驅動DAC8830, 怎知當我要輸出電壓5V時, 得到竟然只剩2.5V, 一開始實在是不瞭解, 後來用了software的方法去模擬, 才得到正確的輸出電壓, 原來是CCS在寫入SPI data時是用8bit mode, 所以DAC8830的16bit要分成兩次來寫, 無奈這麼一個小小的gap timing, 就讓DAC8830誤以為你只寫8bit, 所以才會得到2.5V的輸出電壓, 但是用軟體去模擬實在是浪費了這一顆DAC, 目前還沒想到方法去解決這個問題, 如果有人知道, 請教我一下, 我會給你按個讚



下面是CCS's source code for DAC8830, 有用到的人就拿去用吧, 沒用到的人看看也無坊

/******************* Driver for DAC8830 D/A Converter *******************
*                                                                                                                 *
*     Init_DAC8830()                          Call after power up                                     *
*                                                                                                                 *
*     Write_DAC8830(data)                 Converts to Analog number                          *
*                                                   and sends to MCU                                      *
****************************************************************/

void Init_DAC8830()
{
   output_high(DAC8830_CS);
   output_low(DAC8830_SCK);
}

void Write_DAC8830(unsigned int16 data)
{
   int i;
  
   output_low(DAC8830_CS);
   for(i=0;i<16;++i)
      {    
      if(data & 0x8000) 
         output_high(DAC8830_SDO);
      else            
         output_low(DAC8830_SDO);
      output_high(DAC8830_SCK);
      data = data << 1;
      output_low(DAC8830_SCK);
      }
   output_high(DAC8830_CS);
}

沒有留言:

張貼留言

歡迎大家來討論交流一下~~~