先日、電子工作も行き詰まりで、海外のyoutubeを見ていました。そしたら、一人卓球?の画像が出てきました。見て思わず笑ってしまいました。
ユニークな発想です。簡単に作れそうなので、私も作ってしまいました。
画像の様な簡単なものですが、ねっと代わりの板の両側でピンポン球を打つわけです。これが、慣れないと意外と難しく継続して打てません。台を水平にしてピンポン玉がうまく台の上に落ちるようにするのが大変です。
なるべく高く上げると落ちてくるまで時間がありますので次の打つ体制がとりやすくなります。
ベニヤ板、ピンポン玉の跳ね返りが結構いいのです、ちょっと跳ね返りすぎかと、コルクのシートを上に置いたのですが、これはNG。
全く跳ね返りません。やはり、ベニヤのままが良さそうです。でもピンポン球が当たる音が意外とうるさく、夜は家族の顰蹙を買いそうです。
でも、30分もやればちょっとした運動にはなりますよ。
発想力を養わないと、、、、、。
タイマー割り込みと、__delay_cycles()の動作状態をロジアナで見ました。
プログラムは下記です。
#include "msp430g2553.h"
volatile int n = 0;
int main(void) {
WDTCTL = WDTPW | WDTHOLD; // Stop watchdog timer
BCSCTL1 = CALBC1_1MHZ; // Set DCO to 1MHz
DCOCTL = CALDCO_1MHZ; // Set DCO to 1MHz
P1DIR |= BIT6 + BIT0;
//P1SEL |= BIT6;
//P1SEL2 &= ~BIT6;
TA1CCTL0 = OUTMOD_7 + CCIE;
TA1CTL = TASSEL_2 + ID_3 + MC_1; // SMCLK/8, Up, clr, interrupt enable
TA1CCR0 = 62500;
__bis_SR_register(/*LPM0_bits +*/ GIE);
// __no_operation();
while(1){
P1OUT |= BIT6;
//__no_operation();
//__no_operation();
__delay_cycles(500000);
__delay_cycles(500000);
P1OUT &= ~BIT6;
//__no_operation();
__delay_cycles(500000);
__delay_cycles(500000);
}
}
#pragma vector=TIMER1_A0_VECTOR
__interrupt void BP1(void) {
n++;
if(n==1)
{
P1OUT ^= BIT0;
n = 0;
}
}
ロジアナのPulseView.exeは色々便利な機能がありそうですが、取り合えず、タイミングを見るだけの操作で、より詳しい使い方はこれからです。と云っても、そんなに複雑な波形を見るハードもプログラムもありません。
__NO_OPERATION(); に要する時間を調べて見ました。
プログラムは下記の簡単なものです。
#include "msp430g2553.h"
int main(void) {
WDTCTL = WDTPW | WDTHOLD; // Stop watchdog timer
BCSCTL1 = CALBC1_1MHZ; // Set DCO to 1MHz
DCOCTL = CALDCO_1MHZ; // Set DCO to 1MHz
P1DIR |= BIT6; // + BIT0;
while(1){
P1OUT |= BIT6;
__no_operation();
__no_operation();
//__delay_cycles(500000);
//__delay_cycles(500000);
P1OUT &= ~BIT6;
__no_operation();
//__delay_cycles(500000);
//__delay_cycles(500000);
}
}
MCKは1MHzです。
上の画像は __no_operation(); 無しの状態のP1_BIT6の状態です。
__no_operation();を1個追加したのが上の画像です。 1uS delayが認められます。
次にBit6がLowに__no_operation();を1個追加して見ました。
1uS low レベルが伸びました。
因みに__no_operation();を2個にすると2uSのdelayになる事を確認しました。
このことから、MCLK=DCO=1MHzですから、1uSのdelayの結果から__no_operation();の実行サイクルはOne Clockであることが分ります。
ここで、大活躍のtoolは中国製のチープなLogic Analyzer、saleae(800円、正確には750円でしたか、、、)十分使えます。
P1OUT |= BIT6; 5uS
P1OUT &= ~BIT6; 7uS
上記の様な__no_operation(); 無しの場合、 highとlowの時間は異なります。何故かな?対象にはなっていません。
Timer 割り込みをロジアナで捉えてみました。
P1OUT_BIT0が500m high、500ms lowで変化しています。