新規記事の投稿を行うことで、非表示にすることが可能です。
2017年12月17日
sysdown(int dly) について調べたこと(備忘録)
ソースコードは下記の通り。
レジスターに値を代入し、D13のLEDを点滅させる内容。
レジスターに値を代入し、D13のLEDを点滅させる内容。
void
sysdown(int dly) // dly .. in msec
{
int i;
byte s;
SPCR = 0x00; // disable SPI
TCCR0B = 0x00; // stop timer0
TCCR0A = 0x02; // ctc mode
TIMSK0 = 0x00; // Disable all timer0 irqs
TIFR0 = 0x07; // clear flags
TCNT0 = 0x00;
OCR0A = 250 - 1;
TCCR0B = 0x03; // start timer0 pre = 1/64 i.e 250kHz
s = 0;
while(true) {
if (++s & 1)
PORTB |= 0x20; // D13 == HIGH (LED on)
else
PORTB &= 0xdf; // D13 == LOW (LED off)
for(i = 0; i < dly; i++) {
while((TIFR0 & 2) == 0)
;
TIFR0 = 0x07; // clear flags
}
}
}
2017年12月15日
txinit()について調べたこと(備忘録)
ソースコードは下記の通り。
void
txinit(void)
{
if (txn >= TXBSZ) // TXBSZは1100のこと、ソースコードの冒頭に定義してありました!
sysdown(200); // tx buffer overflow has been detected.
txn = 0;
txr = TXBSZ;
}
header(byte typ, byte reqid)について調べた(備忘録)
ソースコードは下記の通り。ヘッダーのデータを作成しているらしい。
詳細は現時点では不明。
@Arduino_UNOに送るためのオシロスコープの設定を作っているらしい。
Atxbuf[]に書き込む回数と読みだす回数が一致していない理由が不明。
詳細は現時点では不明。
@Arduino_UNOに送るためのオシロスコープの設定を作っているらしい。
Atxbuf[]に書き込む回数と読みだす回数が一致していない理由が不明。
void
header(byte typ, byte reqid)
{
static byte seq;//staticだから前の値を保持している
txinit();
uartjob();
// prologue
//序章?
txput0(0xaa);//txbuf[]に書き込み
txput0(0x55);//txbuf[]に書き込み
txput0(0xa5);//txbuf[]に書き込み
txput0(0x5a);//txbuf[]に書き込み
uartjob();//ここまでtxbuf[]に4回書き込んだが、txbuf[]から読みだしたのはこの1回、
txput1(typ);
if (typ == 3)//3だとrollmodeなの?
txput1(seq++); // rollmode
else
txput1(reqid);
txput1(oscspeed);
txput1(oscinput);
uartjob();//txbuf[]に書き込む回数と読みだす回数が一致しないのは?
txput1(osctrig);
txput1(osccupgain);
txput1(osctdly >> 8);
txput1(osctdly);
uartjob();
txput1(oscofreq >> 16);
txput1(oscofreq >> 8);
txput1(oscofreq);
txput1(oscoduty);
uartjob();
}
moderoll()について調べたこと(備忘録)
moderoll()は、kit_scope.ino 中の loop() の中にある関数です。
詳細はまだ不明。
@rmon==0の時(プログラム開始直後の時か?)
各種レジスターに値を代入
Aheader(3, 0)を実行
txput1(0)
txput1(osctvolt)
txputcrc(false)
上記は何かしらデータを送信している
Btxgo()を実行 パケットを送信開始
Cfor文を実行 この中でおそらく初めにヘッダーデータを、次に波形データを送信しているらしい
Dtxputcrc(false)
txfinish(true, true) を実行し、一連のデータ送信が完了ということらしい
ソースコードは下記の通り。
詳細はまだ不明。
@rmon==0の時(プログラム開始直後の時か?)
各種レジスターに値を代入
Aheader(3, 0)を実行
txput1(0)
txput1(osctvolt)
txputcrc(false)
上記は何かしらデータを送信している
Btxgo()を実行 パケットを送信開始
Cfor文を実行 この中でおそらく初めにヘッダーデータを、次に波形データを送信しているらしい
Dtxputcrc(false)
txfinish(true, true) を実行し、一連のデータ送信が完了ということらしい
ソースコードは下記の通り。
void
moderoll()
{
byte i;
if (rmon == 0) { // start rollmode
// reset and initialize timer1
TCCR1B = 0x00; // stop
TCCR1A = 0x00;
TIMSK1 = 0x00; // no irq
TCNT1 = 0x0000;
ICR1 = 200; // 100 usec
TIFR1 = 0x27; // clear flags;
ACSR = 0x94; // disable analog comparator
ADCSRB = 0x00;
ADCSRA = 0x84; // adc enable
ADMUX = 0x60; // adc target is A0 pin to get trigger value;
ADCSRB = 0x07; // timer1 capture event;
ADCSRA = 0xf4; // adc auto trigger, force start 1st conversion
TCCR1B = 0x1a; // timer1 CTC-ICR1 mode pre1/8
TCCR1A = 0x00; // CTC mode;
// wait until the 1st conversion finishes.
while((ADCSRA & 0x10) == 0x00)
uartjob();
osctvolt = ADCH; // trigger level
ADMUX = 0x61;
ADCSRA = 0xb4; // clear flag, 1MHz, adate on
rminit(true);
}
header(3, 0);
txput1(0);
txput1(osctvolt);
txputcrc(false);
txgo(); // start to trasmit a packet
for(i = 0; i < 200; i++) {
while(rmw == rmr)
uartjob();
txput1(rmbuf[rmr++]);
}
txputcrc(false);
txfinish(true, true);
}
kit_scope.ino について調べたこと(備忘録)
kit_scope.inoは、Arduino開発環境のソースコードです。v0.72 Mar 20, 2016版を使用しています。
ATmega328Pのデータシートは支障がない限り、下記(日本語)を参照します。
https://avr.jp/user/DS/PDF/mega328P.pdf
Arduino開発環境については支障がない限り、下記(日本語)を参照します。
http://www.musashinodenpa.com/arduino/ref/
この部分で行っているのは、入力信号のAD変換とUARTでPCへの送信、UARTでPCからのコマンドの受信となります。
Arduino のソースコードの形式はC言語に従いますが、setup()に初期設定を書き、loop()に通常処理を書きます。setup()は文字通り1回だけ実行されます。loop()も文字通りで、これは無限ループになります。setup()とloop()を置く順番は、特に無いようです。大文字で記載されている変数は、CPU(AtMega)のレジスターとなります。レジスターはAtMegaの仕様書に記載されている名称そのままで、変数宣言しないで使用します。cli()の関数もArdino環境固有のもので、全ての割り込みを禁止にする関数です。
ATmega328Pのデータシートは支障がない限り、下記(日本語)を参照します。
https://avr.jp/user/DS/PDF/mega328P.pdf
Arduino開発環境については支障がない限り、下記(日本語)を参照します。
http://www.musashinodenpa.com/arduino/ref/
この部分で行っているのは、入力信号のAD変換とUARTでPCへの送信、UARTでPCからのコマンドの受信となります。
Arduino のソースコードの形式はC言語に従いますが、setup()に初期設定を書き、loop()に通常処理を書きます。setup()は文字通り1回だけ実行されます。loop()も文字通りで、これは無限ループになります。setup()とloop()を置く順番は、特に無いようです。大文字で記載されている変数は、CPU(AtMega)のレジスターとなります。レジスターはAtMegaの仕様書に記載されている名称そのままで、変数宣言しないで使用します。cli()の関数もArdino環境固有のもので、全ての割り込みを禁止にする関数です。
オシロスコーププログラムについて調べたこと(備忘録)
九州工業大学情報工学部においてあるオシロスコーププログラムについて調べたことを書いていきます。
Kyutech Arduino Scope
http://www.iizuka.kyutech.ac.jp/faculty/physicalcomputing/pc_kitscope/
オシロスコープ(Kyutech Arduino Scope)のハードウエアはArduino UNOで、ソースコードはArduino環境で作成されているプログラムです。オシロスコープの表示部は、PC側となります。こちらはProcessingで作成されています。
Arduino UNOに、ブレッドボードで簡単な回路を追加するだけで、オシロスコープになるところがとても素晴らしい作品です。
Kyutech Arduino Scope
http://www.iizuka.kyutech.ac.jp/faculty/physicalcomputing/pc_kitscope/
オシロスコープ(Kyutech Arduino Scope)のハードウエアはArduino UNOで、ソースコードはArduino環境で作成されているプログラムです。オシロスコープの表示部は、PC側となります。こちらはProcessingで作成されています。
Arduino UNOに、ブレッドボードで簡単な回路を追加するだけで、オシロスコープになるところがとても素晴らしい作品です。