iT邦幫忙

2023 iThome 鐵人賽

DAY 23
0
自我挑戰組

MCU功能介紹與實作系列 第 23

Day 23:ADC和DAC的應用範例程式

  • 分享至 

  • xImage
  •  

ADC的應用範例:

使用ADC來讀取光敏電阻的數值,以測量光線強度。

#include <avr/io.h>

void ADC_init() {
    // 配置ADC,選擇參考電壓和通道
    ADMUX = (1 << REFS0); // 使用AVcc作為參考電壓,並選擇通道0
    ADCSRA = (1 << ADEN) | (1 << ADPS2) | (1 << ADPS1); // 啟用ADC,設定ADC分頻為64
}

uint16_t ADC_read(uint8_t channel) {
    // 選擇要讀取的通道
    ADMUX = (ADMUX & 0xF0) | (channel & 0x0F);

    // 啟動ADC轉換
    ADCSRA |= (1 << ADSC);

    // 等待轉換完成
    while (ADCSRA & (1 << ADSC));

    // 回傳ADC數值
    return ADC;
}

int main() {
    ADC_init();
    uint16_t light_intensity;

    while (1) {
        // 讀取光敏電阻的數值
        light_intensity = ADC_read(0);

        // 使用light_intensity的數值做其他運算
    }

    return 0;
}

DAC的應用範例:

#include <avr/io.h>
#include <util/delay.h>

void DAC_init() {
    // 配置DAC,選擇參考電壓
    // 假設使用內部參考電壓,輸出範圍為0~5V
    // 在MCU的具體規格中查找相關設定
}

void DAC_output(uint16_t value) {
    // 寫入DAC數值
    // 在MCU的具體規格中查找相關設定
}

int main() {
    DAC_init();

    while (1) {
        // 生成模擬輸出信號
        for (uint16_t i = 0; i <= 1023; i++) {
            DAC_output(i);
            _delay_ms(10); // 延遲以控制輸出速度
        }
    }

    return 0;
}

上一篇
Day 22:ADC和DAC的基本原理
下一篇
Day 24:UART通訊
系列文
MCU功能介紹與實作30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言