色哟哟视频在线观看-色哟哟视频在线-色哟哟欧美15最新在线-色哟哟免费在线观看-国产l精品国产亚洲区在线观看-国产l精品国产亚洲区久久

0
  • 聊天消息
  • 系統(tǒng)消息
  • 評(píng)論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會(huì)員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識(shí)你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

用MCP4725與Arduino連接來將數(shù)字值轉(zhuǎn)換為模擬值的方法

科技觀察員 ? 來源:circuitdigest ? 作者:Pramoth Thangavel ? 2022-09-20 15:33 ? 次閱讀

我們都知道微控制器只能處理數(shù)字值,但在現(xiàn)實(shí)世界中我們必須處理模擬信號(hào)。這就是為什么ADC模數(shù)轉(zhuǎn)換器)可以將現(xiàn)實(shí)世界的模擬值轉(zhuǎn)換為數(shù)字形式,以便微控制器可以處理信號(hào)。但是,如果我們需要來自數(shù)字值的模擬信號(hào)怎么辦,那么就來了DAC數(shù)模轉(zhuǎn)換器)。

數(shù)模轉(zhuǎn)換器的一個(gè)簡單示例是在錄音室錄制歌曲,藝術(shù)家歌手正在使用麥克風(fēng)唱歌。這些模擬聲波被轉(zhuǎn)換為數(shù)字形式,然后存儲(chǔ)在數(shù)字格式文件中,當(dāng)使用存儲(chǔ)的數(shù)字文件播放歌曲時(shí),這些數(shù)字值被轉(zhuǎn)換為模擬信號(hào)用于揚(yáng)聲器輸出。所以在這個(gè)系統(tǒng)中使用了 DAC。

DAC 可用于許多應(yīng)用,例如電機(jī)控制、控制 LED 燈的亮度、音頻放大器視頻編碼器、數(shù)據(jù)采集系統(tǒng)等。

在許多微控制器中,都有一個(gè)可用于產(chǎn)生模擬輸出的內(nèi)部 DAC。但是 ATmega328/ATmega168 等 Arduino 處理器沒有內(nèi)置 DAC。Arduino 具有 ADC 功能(模數(shù)轉(zhuǎn)換器),但它沒有 DAC(數(shù)模轉(zhuǎn)換器)。它在內(nèi)部 ADC 中有一個(gè) 10 位 DAC,但該 DAC 不能單獨(dú)使用。所以在這個(gè) Arduino DAC 教程中,我們使用了一個(gè)名為MCP4725 DAC 模塊的附加板和 Arduino。

MCP4725 DAC 模塊(數(shù)模轉(zhuǎn)換器)

MCP4725 IC 是一款12 位數(shù)模轉(zhuǎn)換器模塊,用于生成(0 至 5V)的輸出模擬電壓,并通過I2C 通信進(jìn)行控制。它還帶有板載非易失性存儲(chǔ)器 EEPROM

該 IC 具有 12 位分辨率。這意味著我們使用(0 到 4096)作為輸入來提供相對(duì)于參考電壓的電壓輸出。最大參考電壓為 5V。

計(jì)算輸出電壓的公式

O/P 電壓 = (參考電壓/分辨率) x 數(shù)字值

例如,如果我們使用 5V 作為參考電壓,假設(shè)數(shù)字值為 2048。因此要計(jì)算 DAC 輸出。

O/P 電壓 = (5/ 4096) x 2048 = 2.5V

MCP4725的引腳排列

下面是 MCP4725 的圖像,清楚地標(biāo)明了引腳名稱。

poYBAGMpbCGAD5ZhAAFYysmWS00441.pngpYYBAGMpbByAD4wsAAAXYSDVsx0077.png

MCP4725 DAC 中的 I2C 通信

該 DAC IC 可通過 I2C 通信與任何微控制器連接。I2C 通信只需要兩條線 SCL 和 SDA。默認(rèn)情況下,MCP4725 的 I2C 地址為 0x60 或 0x61 或 0x62。對(duì)我來說它是 0x61。使用 I2C 總線,我們可以連接多個(gè) MCP4725 DAC IC。唯一的事情是我們需要更改 IC 的 I2C 地址。Arduino中的 I2C 通信已在之前的教程中詳細(xì)解釋過。

poYBAGMpbBaAG-hEAAAYHH6Maf4861.png

在本教程中,我們將MCP4725 DAC IC 與 Arduino Uno 連接,并使用電位計(jì)為 Arduino 引腳 A0 提供模擬輸入值。然后ADC將用于將模擬值轉(zhuǎn)換為數(shù)字形式。之后,這些數(shù)字值通過 I2C 總線發(fā)送到 MCP4725,以使用 DAC MCP4725 IC 轉(zhuǎn)換為模擬信號(hào)。Arduino 引腳 A1 用于從引腳 OUT 檢查 MCP4725 的模擬輸出,最后在16x2 LCD 顯示屏上顯示 ADC 和 DAC 值和電壓。

所需組件

Arduino Nano / Arduino Uno

16x2液晶顯示模塊

MCP4725 DAC集成電路

10k 電位器

面包板

跳線

電路原理

pYYBAGMpbBCADHQEAAF8qs6EDHI016.png

下表顯示了 MCP4725 DAC IC、Arduino Nano 和萬用表之間的連接

poYBAGMpbA2AZ8yPAAATMKTgrZ0338.png

16x2 LCD 和 Arduino Nano 之間的連接

pYYBAGMpbAmAAPNKAAAcx5tmmvo516.png

使用電位器,中心引腳連接到 Arduino Nano 的 A0 模擬輸入,左側(cè)引腳連接到 GND,最右側(cè)引腳連接到 Arduino 的 5V。

poYBAGMpbASAR0laAAR0wK8fJ_k604.png

DAC Arduino 編程

DAC 教程的完整 Arduino 代碼在最后附有演示視頻。這里我們逐行解釋了代碼。

首先,使用wire.h和liquidcrystal.h庫包含I2C 和LCD庫。

#include             
#include 

接下來根據(jù)我們與 Arduino Nano 連接的引腳定義和初始化 LCD 引腳

液晶液晶(2,3,4,5,6,7); //定義LCD顯示引腳RS,E,D4,D5,D6,D7

接下來定義 MCP4725 DAC IC 的 I2C 地址

#define MCP4725 0x61

在 void setup()

首先在 Arduino Nano 的引腳 A4 (SDA) 和 A5 (SCL) 開始 I2C 通信

Wire.begin(); //開始I2C通信

接下來將 LCD 顯示屏設(shè)置為 16x2 模式并顯示歡迎信息

lcd.開始(16,2);//將 LCD 設(shè)置為 16X2 模式
lcd.print("CIRCUIT DIGEST");   
  延遲(1000);
  lcd.clear(); 
  lcd.setCursor(0,0); 
  lcd.print("Arduino"); 
  lcd.setCursor(0,1);  
  lcd.print("帶有 MCP4725 的 DAC"); 
  延遲(2000);
  lcd.clear();    

在無效循環(huán)()

1.首先在buffer[0]中放入控制字節(jié)值(0b01000000)

(010-將 MCP4725 設(shè)置為寫模式)

緩沖區(qū)[0] = 0b01000000;              

2. 以下語句從引腳 A0 讀取模擬值并將其轉(zhuǎn)換為數(shù)字值(0-1023)。Arduino ADC 是 10 位分辨率,因此將其乘以 4 得出:0-4096,因?yàn)?DAC 是 12 位分辨率。

adc = 模擬讀取(A0)* 4;       

3.此語句是從ADC輸入值(0到4096)和參考電壓為5V求電壓

浮動(dòng) ipvolt = (5.0/4096.0)* adc;  

4. 第一行下方通過在 ADC 變量中向右移動(dòng) 4 位將最高有效位值放入緩沖區(qū) [1],第二行通過在 ADC 變量中向左移動(dòng) 4 位將最低有效位值放入緩沖區(qū) [2]。

緩沖區(qū)[1] = adc >> 4;              
緩沖區(qū)[2] = adc << 4;              

5. 以下語句從作為 DAC 輸出(MCP4725 DAC IC 的 OUTPUT 引腳)的 A1 讀取模擬電壓。該引腳也可以連接到萬用表以檢查輸出電壓。在此處了解如何使用萬用表。

無符號(hào) int 類比讀取 = 類比讀取(A1)*4 ;  

6. 此外,變量analogread的電壓值使用以下公式計(jì)算

浮動(dòng) opvolt = (5.0/4096.0)* 模擬讀數(shù);

7. 以下語句用于開始使用 MCP4725 進(jìn)行傳輸

Wire.beginTransmission(MCP4725);    

將控制字節(jié)發(fā)送到 I2C

Wire.write(buffer[0]);

將 MSB 發(fā)送到 I2C

Wire.write(buffer[1]);

將 LSB 發(fā)送到 I2C

Wire.write(buffer[2]);

結(jié)束傳輸

Wire.endTransmission();

現(xiàn)在最后使用 lcd.print() 在 LCD 16x2 顯示器中顯示這些結(jié)果

lcd.setCursor(0,0);     
lcd.print("A IP:"); 
  lcd.print(adc);         
  lcd.setCursor(10,0); 
  lcd.print("V:");        
  lcd.print(ipvolt);
  lcd.setCursor(0,1); 
  lcd.print("D OP:"); 
  lcd.print(模擬讀取);   
  lcd.setCursor(10,1); 
  lcd.print("V:"); 
  lcd.print(opvolt);         
  延遲(500);
  lcd.clear();    

使用 MCP4725 和 Arduino 進(jìn)行數(shù)模轉(zhuǎn)換

完成所有電路連接并將代碼上傳到 Arduino 后,改變電位器并觀察 LCD 上的輸出。LCD 第一行顯示輸入 ADC 值和電壓,第二行顯示輸出 DAC 值和電壓。

您還可以通過將萬用表連接到 MCP4725 的 OUT 和 GND 引腳來檢查輸出電壓。

poYBAGMpa_yAb45gAAaiV9F__GU239.png

#include //包含用于使用 I2C 功能的 Wire 庫

#include //包含用于使用 LCD 顯示功能的 LCD 庫


#define MCP4725 0x61 //MCP4725 地址為 0x61 相應(yīng)地更改你

的 LiquidCrystal lcd(2,3,4,5,6,7); //定義LCD顯示引腳RS,E,D4,D5,D6,D7



unsigned int adc;

字節(jié)緩沖區(qū)[3];


void setup()

{

Wire.begin(); //開始 I2C 通信

lcd.begin(16,2); //將 LCD 設(shè)置為 16X2 模式

lcd.print("CIRCUIT DIGEST");

延遲(1000);

lcd.clear();

lcd.setCursor(0,0);

lcd.print("Arduino");

lcd.setCursor(0,1);

lcd.print("帶有 MCP4725 的 DAC");

延遲(2000);

lcd.clear();




}


無效循環(huán)()


{

緩沖區(qū)[0] = 0b01000000;//使用控制字節(jié)設(shè)置緩沖區(qū)0(010-設(shè)置為寫入模式)

adc = analogRead(A0) * 4; //從引腳 A0 讀取模擬值并轉(zhuǎn)換為數(shù)字 (0-1023) 乘以 4 得到 (0-4096)



float ipvolt = (5.0/4096.0)* adc; //求電壓公式(A0)

buffer[1] = adc >> 4; //放置最高有效位值

buffer[2] = adc << 4; //輸入最低有效位值





unsigned int analogread = analogRead(A1)*4 ; //從 A1 讀取模擬電壓



float opvolt = (5.0/4096.0)* analogread; //求電壓公式 (A1)



Wire.beginTransmission(MCP4725); //通過地址為0x61的MCP4725加入I2C總線



Wire.write(buffer[0]); //發(fā)送控制字節(jié)到I2C

Wire.write(buffer[1]); //將 MSB 發(fā)送到 I2C

Wire.write(buffer[2]); //發(fā)送LSB到I2C



Wire.endTransmission(); //結(jié)束傳輸


lcd.setCursor(0,0);

lcd.print("A IP:");

lcd.print(adc); //從A0打印ADC值

lcd.setCursor(10,0);

lcd.print("V:"); //在 A0 打印輸入電壓

lcd.print(ipvolt);

lcd.setCursor(0,1);

lcd.print("D OP:");

lcd.print(模擬讀取);//從 A1 (From DAC) 打印 ADC 值

lcd.setCursor(10,1);

lcd.print("V:");

lcd.print(opvolt);



//在 A1(來自 DAC)延遲(500)處打印輸入電壓;

lcd.clear();

}

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場(chǎng)。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請(qǐng)聯(lián)系本站處理。 舉報(bào)投訴
  • adc
    adc
    +關(guān)注

    關(guān)注

    99

    文章

    6567

    瀏覽量

    546720
  • 模數(shù)轉(zhuǎn)換器

    關(guān)注

    26

    文章

    3239

    瀏覽量

    127281
  • Arduino
    +關(guān)注

    關(guān)注

    188

    文章

    6479

    瀏覽量

    188680
收藏 人收藏

    評(píng)論

    相關(guān)推薦

    MCP4725單通道數(shù)模轉(zhuǎn)換器的驅(qū)動(dòng)設(shè)計(jì)與實(shí)現(xiàn)

    在產(chǎn)品設(shè)計(jì)過程中,我們經(jīng)常會(huì)遇到數(shù)模轉(zhuǎn)換的應(yīng)用需求。在本篇種我們就來討論一下MCP4725單通道數(shù)模轉(zhuǎn)換器的驅(qū)動(dòng)設(shè)計(jì)與實(shí)現(xiàn)。
    發(fā)表于 12-07 10:14 ?4665次閱讀
    <b class='flag-5'>MCP4725</b>單通道數(shù)模<b class='flag-5'>轉(zhuǎn)換</b>器的驅(qū)動(dòng)設(shè)計(jì)與實(shí)現(xiàn)

    EasyEDA開源硬件——I2C數(shù)字模擬轉(zhuǎn)換器模塊(MCP4725

    from a microcontroller, the MCP4725 is the DAC that will let you do it! The MCP4725 is an I2C
    發(fā)表于 02-15 10:18

    如何ascii字符轉(zhuǎn)換為十進(jìn)制

    只顯示一行小方框,可能暗示有損壞/空數(shù)據(jù)。如果有人能給我指出正確的方向,如何最好地ascii字符轉(zhuǎn)換為十進(jìn)制,那就太好了……注意,我想把它保持為一個(gè)數(shù)組,因?yàn)楝F(xiàn)在我仍然需要將NMEA格式的坐標(biāo)
    發(fā)表于 09-05 14:19

    基于Arduino Nano的MCP4725模塊簡介

    MCP4725模塊 數(shù)字轉(zhuǎn)模擬輸出測(cè)試-基于Arduino NanoMCP4725 模塊簡介單通道(1路DA輸出)12位分辨率I2C 接口(
    發(fā)表于 07-26 06:23

    關(guān)于MCP4725模塊的知識(shí)點(diǎn)總結(jié)的太棒了

    關(guān)于MCP4725模塊的知識(shí)點(diǎn)總結(jié)的太棒了
    發(fā)表于 09-27 07:06

    arduino atmega328P MCP4725 proteus仿真程序分享

    #include/* Include the Wire library toI2C *//* This is the I2C Address of the MCP4725, by default
    發(fā)表于 12-03 06:15

    MCP4725 pdf datasheet

    The MCP4725 is a low-power, high accuracy, singlechannel, 12-bit buffered voltage output
    發(fā)表于 08-07 12:54 ?54次下載

    基于MCP4725帶 EEPROM 存儲(chǔ)器的 12 位數(shù)模轉(zhuǎn)換

    MCP4725 是低功耗、高精度、單通道的 12 位緩沖電壓 輸出數(shù)模轉(zhuǎn)換器(Digital-to-Analog Convertor, DAC),具有非易失性存儲(chǔ)器(EEPROM)。其片上精 密輸出放大器使其能夠達(dá)到軌到軌模擬
    發(fā)表于 06-28 14:22 ?32次下載
    基于<b class='flag-5'>MCP4725</b>帶 EEPROM 存儲(chǔ)器的 12 位數(shù)模<b class='flag-5'>轉(zhuǎn)換</b>器

    MCP4725 PICtail Plus子板開發(fā)工具的詳細(xì)中文資料概述

    本文檔介紹了如何使用 MCP4725 PICtail? Plus 子板開發(fā)工具在目標(biāo)電路板上仿真和調(diào)試固件。
    發(fā)表于 06-13 10:27 ?26次下載

    12位數(shù)碼轉(zhuǎn)換MCP4725 模塊 支持I2C 控制的DAC

    12位數(shù)碼轉(zhuǎn)換MCP4725 模塊 支持I2C 控制的DAC(電腦電源配合)-12位數(shù)碼轉(zhuǎn)換MCP4725 模塊,支持I2C 控制的DAC
    發(fā)表于 07-26 14:04 ?44次下載
    12位數(shù)碼<b class='flag-5'>轉(zhuǎn)換</b>器<b class='flag-5'>MCP4725</b> 模塊 支持I2C 控制的DAC

    arduino atmega328P MCP4725 proteus 仿真 程序

    of the MCP4725, by default (A0 pulled to GND). */#define MCP4725_ADDR 0x60/* For devices with A0
    發(fā)表于 11-23 17:51 ?7次下載
    <b class='flag-5'>arduino</b> atmega328P <b class='flag-5'>MCP4725</b>  proteus  仿真 程序

    MSP432 P401R 單片機(jī) 呼吸燈 PWM MCP 4725 DAC

    arduino上的MCP4725實(shí)驗(yàn):https://blog.csdn.net/x1131230123/article/details/109365296MSP430上的MCP4725實(shí)驗(yàn)
    發(fā)表于 12-16 16:54 ?22次下載
    MSP432 P401R 單片機(jī) 呼吸燈 PWM <b class='flag-5'>MCP</b> <b class='flag-5'>4725</b> DAC

    Σ?Δ模數(shù)轉(zhuǎn)換器(SDADC)用于模擬信號(hào)轉(zhuǎn)換為數(shù)字

    Σ?Δ 模數(shù)轉(zhuǎn)換器(SDADC)用于模擬信號(hào)轉(zhuǎn)換為數(shù)字。SDADC 在 1ksps 采樣率下
    的頭像 發(fā)表于 02-28 10:36 ?6571次閱讀

    基于MCP4725 DAC設(shè)計(jì)一個(gè)使用Raspberry Pi的數(shù)模轉(zhuǎn)換

    今天我們將使用相同的 MCP4725 DAC IC 來設(shè)計(jì)一個(gè) 使用 Raspberry Pi 的數(shù)模轉(zhuǎn)換器。假設(shè)您已經(jīng)在 Raspberry PI 上安裝了最新的操作系統(tǒng),并且可以通過 SSH 訪問它。
    發(fā)表于 09-07 16:20 ?2532次閱讀
    基于<b class='flag-5'>MCP4725</b> DAC設(shè)計(jì)一個(gè)使用Raspberry Pi的數(shù)模<b class='flag-5'>轉(zhuǎn)換</b>器

    基于MCP4725設(shè)計(jì)使用STM32F103C8的數(shù)模轉(zhuǎn)換

    今天我們將使用相同的 MCP4725 DAC IC 來設(shè)計(jì)一個(gè)使用 STM32F103C8 微控制器的數(shù)模轉(zhuǎn)換器。
    發(fā)表于 09-08 15:24 ?4986次閱讀
    基于<b class='flag-5'>MCP4725</b>設(shè)計(jì)使用STM32F103C8的數(shù)模<b class='flag-5'>轉(zhuǎn)換</b>器
    主站蜘蛛池模板: 久久精品黄AA片一区二区三区 | 国产精品久久久久久久久久免费 | 国产成人国产在线观看入口 | 后式大肥臀国产在线 | 91久久夜色精品 | 国产婷婷色综合AV蜜臀AV | 久久re视频这里精品一本到99 | 午夜日韩久久影院 | 伊人久99久女女视频精品免 | 久色乳综合思思在线视频 | 亚洲午夜精品久久久久久抢 | 国产免费麻传媒精品国产AV | 青青草视频在线ac | 超碰视频在线 | 亚洲国产综合人成综合网站00 | 男插女高潮一区二区 | 国产毛片女人18水多 | 91久久精品国产亚洲 | 亚洲AV无码影院在线播放 | 伊人久综合 | 久久ZYZ资源站无码中文动漫 | 国产福利视频第一导航 | 在线看片av以及毛片 | 丰满少妇被猛烈进出69影院 | 69式国产真人免费视频 | 成人18视频在线观看 | 精品国产精品人妻久久无码五月天 | 欧美色妞AV重囗味视频 | 国产亚洲福利精品一区 | 灌满内射HP1V1 | 武侠古典久久亚洲精品 | 韩日美无码精品无码 | 全身无赤裸裸美女网站 | 蜜桃无码AV视频在线观看 | 久久精品热只有精品 | 99久久99久久久精品齐齐鬼色 | 国产精品日本一区二区在线播放 | 和美女啪啪啪动态图 | 欧美MV日韩MV国产网站 | 狠狠色狠狠色88综合日日91 | 亚洲精品久久久无码一区二区 |