超音波浮揚の実験1 / 相補パルスを作る

参考:
makezine.com
levitator ヴァテイタ

まず周波数40 kHz、デューティ50%の相補パルスを作る。参考記事は、Nano、タイマー1 (16ビットタイマー)を使っているが、ここでは、素のATmega328P、内蔵8 MHzクロック、タイマー0 (8ビットタイマー)を使うことにする。

80 kHzの頻度で割り込みを発生させ、そのたびに出力をトグルして周波数40 kHz、デューティ50%の相補パルスを作る。出力端子はどこでもよいがPD5、PD6を使った。

#include <avr/io.h>
#include <avr/interrupt.h>

volatile uint8_t complePulse = (1 << PD6);
ISR(TIMER0_COMPA_vect){
    PORTD = complePulse;
    complePulse = ~complePulse; // ポートDの全端子をトグルする。
    //complePulse ^= (1 << PD6 | 1 << PD5); // PD6、PD5だけをトグルする。
}

int main(){
    DDRD |= (1 << PD6 | 1 << PD5);

    TCCR0A = 1 << WGM01;  // CTCモード
    TCCR0B = 1 << CS00;   // 1分周
    OCR0A  = 99;          // コンペア値A
    TIMSK0 = 1 << OCIE0A; // コンペアマッチA割り込みを有効化
    sei();

    while(1);
    return 0;
}

f:id:ti-nspire:20200323081235p:plain:w500