![Rank: 6](static/image/common/star_level3.gif) ![Rank: 6](static/image/common/star_level2.gif)
- UID
- 373967
- 帖子
- 9323
- 主題
- 2609
- 精華
- 0
- 積分
- 1014
- 楓幣
- 9
- 威望
- 990
- 存款
- 37917
- 贊助金額
- 0
- 推廣
- 0
- GP
- 1205
- 閱讀權限
- 70
- 在線時間
- 472 小時
- 註冊時間
- 2023-1-12
- 最後登入
- 2025-2-16
|
需要以下材料:
ATmega4809微控制器:這是示波器的主要處理器,負責處理輸入的信號和顯示輸出結果。
示波器顯示器:顯示器類型可以是LCD顯示器、OLED顯示器或其他類型的顯示器。
示波器探頭:這些探頭用於檢測和捕捉要顯示在示波器屏幕上的信號。
聲音蜂鳴器:用於發出聲音信號,以便提示操作者。
電源供應:用於為示波器提供所需的電力。
杜邦線、面包板等電子元件:用於建立電路和連接各個零件。
以下是ATmega4809多通道示波器的程式碼示例
#include <avr/io.h>
#include <avr/interrupt.h>
// 設定ADC和DMA
void setupADC() {
// 設定ADC採樣率為20kHz
ADC0.CTRLA = ADC_ENABLE_bm | ADC_RESSEL_12BIT_gc | ADC_FREERUN_bm | ADC_RUNSTBY_bm;
ADC0.CTRLB = ADC_SAMPNUM_ACC4_gc | ADC_CURRLIMIT_HIGH_gc;
ADC0.CTRLC = ADC_PRESC_DIV4_gc | ADC_REFSEL_VDDREF_gc;
ADC0.MUXPOS = ADC_MUXPOS_AIN0_gc;
ADC0.COMMAND = ADC_STCONV_bm;
// 設定DMA
DMA.CTRL |= DMA_RESET_bm;
DMA.CTRL = DMA_ENABLE_bm | DMA_PRIMODE_CH0123_gc;
DMA.CH0.CTRLA = DMA_CH_SINGLE_bm | DMA_CH_REPEAT_bm | DMA_CH_BURSTLEN_2BYTE_gc;
DMA.CH0.CTRLB = DMA_CH_TRNINTLVL_LO_gc;
DMA.CH0.ADDRCTRL = DMA_CH_SRCRELOAD_BLOCK_gc | DMA_CH_SRCDIR_INC_gc | DMA_CH_DESTRELOAD_BURST_gc | DMA_CH_DESTDIR_INC_gc;
DMA.CH0.TRFCNT = 2;
DMA.CH0.SRCADDR0 = (uint8_t)(uintptr_t)&ADC0.RES;
DMA.CH0.SRCADDR1 = (uint8_t)((uintptr_t)&ADC0.RES >> 8);
DMA.CH0.DESTADDR0 = (uint8_t)(uintptr_t)&PORTA.OUT;
DMA.CH0.DESTADDR1 = (uint8_t)((uintptr_t)&PORTA.OUT >> 8);
DMA.CH0.DESTADDR2 = 0x04;
DMA.CH0.CTRLA |= DMA_CH_ENABLE_bm;
}
// 初始化
void setup()
{
// 設定輸入和輸出引腳
PORTA.DIRSET = PIN0_bm | PIN1_bm | PIN2_bm | PIN3_bm | PIN4_bm | PIN5_bm | PIN6_bm | PIN7_bm;
PORTB.DIRSET = PIN0_bm | PIN1_bm | PIN2_bm | PIN3_bm | PIN4_bm | PIN5_bm | PIN6_bm | PIN7_bm;
// 設定時鐘
_PROTECTED_WRITE(CLKCTRL.MCLKCTRLB, CLKCTRL_PEN_bm | CLKCTRL_PDIV_2X_gc);
// 設定中斷
sei();
}
// 主要循環
void loop() {
// 進入睡眠模式以節省電力
set_sleep_mode(SLEEP_MODE_IDLE);
sleep_mode();
}
// 主程序
int main() {
setup();
setupADC();
while (1) {
loop();
}
} |
|