-1

ここで、C のオシロスコープに波形を出力する必要があります。これは、立ち上がりのこぎり波である必要があります。コードが正しいかどうかはわかりません。ヘルプや提案はありますか?

while(1)
{
    for (i = 1; i < 360; i++);

    // Check to see if status.TRDY is 1
    while(*(base+2) & 0x40 != 1);

    // while shift register is not empty
    // Make the sawtooth pattern
    if (saw == 0x1fff){
        saw = 0x1000;
    }
    else {
        saw = saw+1; 
    }
    // transmit sawtooth to the oscilloscope
    *(base+1) = saw;
}
4

1 に答える 1

0

これは、OP の投稿されたコードを整理するだけです。DAC のプログラム方法については回答しません。OP は 16 ビットの振幅値を使用していますが、彼のレジスタ アドレス指定は 8 ビット レジスタを示唆しています。おそらく 2 回の書き込みが必要です。

ノコギリ波の周期とステップ数を定義する関数引数も必要であることをお勧めします。終了条件も必要です。これらの点はあなたに任せます。

@Chris Stratton は、I/O ポートは正しい言語タイプでなければならないとコメントしました。

#define MINSAW  0x1000
#define MAXSAW  0x1FFF

unsigned *base = (unsigned *)0xD000;  // "insert your value"

int main()  {
    unsigned saw, i;
    while(1) {
        for (i = 0; i < 360; i++) {
            // ratio the waveform amplitude
            saw = MINSAW + i * (MAXSAW - MINSAW) / 359;

            // Check to see if status.TRDY is 1
            while((*(base+2) & 0x40) != 0x40);

            // transmit sawtooth to the oscilloscope
            *(base+1) = saw;
        }
    }
    return 1;
}
于 2014-11-17T18:15:29.927 に答える