らっきー☆れーさーの景品来た

blog20100710-HaruhiMoviePop

映画「涼宮ハルヒの消失」のPOP(立て看板)。らっきー☆れーさーLink 第1期の景品。来るとは思わなかった。近くで見るとすごい解像度低い(ドット数の少ないCGを無理に引き伸ばしてある)のですがorz

らっきー☆れーさーというのは、2010年4月から毎週計10回放送されたらき☆すたスピンアウト企画。個人的には以下に書くように失敗感漂う感じで終わったのですが、これ書くためにHP見直したら予想外の第2期開始w

第1期のルールはうろ覚えですが、
  • カートで勝負、1位になった人だけその人が推す商品を広告できる。
  • 番組パーソナリティである白石稔さんが勝ったときは京都アニメーションLink の商品宣伝。
  • 声優ほかアニメ関係のゲスト参戦もあるよ!
という感じ。私の興味はゲスト参戦者。今野宏美さん(小神あきら役)は出るのだろうか、でも彼女運動神経鈍いらしいしなぁ、とか思いつつ第1回の参戦者をみて拍子抜け。

白石稔以外は京アニスタッフしかいねぇ

これ誰が勝っても京アニ商品の宣伝じゃないか。オープニングが「第1回目から雨!」で始まったので、「雨女の今野さん来たのか!?」と期待したのにねぇorz 第2レースも同じレース場ってことは同じメンバーで2回撮り。なんだかなぁ。

そんな感じで固定メンバーで回を重ね、毎回京アニ商品の宣伝。レースの意味が感じられない状態でした。う~ん、広告希望者がいないのだろうか。

広告主が付きゲスト参戦者が現れれば状態が変わるかなと思っていた中、第5回に水原薫さん(日下部みさお役)がゲスト参戦。お、これで状況が変わるかなと思ったのですが、逆に現在のルールの欠陥に気づかされました。
ハンデを貰っても水原さん完敗
レギュラー陣、過去数回のレースで上達してまして、初心者の水原さん歯が立たず。アニメ関係者でカートが上手いなんて人、かなり敷居高いでしょう。ゲストを立てて勝たせようものなら出来レースにも取られかねないわけで、ゲストが商品紹介する機会は高くない。
1位にならないと宣伝できない
宣伝してもらえない確率が高いなら、広告主も手が出しにくくないかなと。類似した企画の熱湯コマーシャルLink は時間の違いはあれど宣伝はできたわけで、まったく宣伝できないでは旨みが無い。無料で宣伝させてくれるならまだ挑戦する気になるかもしれないけど、新感覚の「商品紹介番組」なわけでして、広告費取るだろ?

ちなみに次のレースで水原さん勝ちましたが、京アニ商品の宣伝でしたorz

苦境に立たされた番組には付き物のマイナーチェンジを繰り返しながら回を重ね、たどり着いたのは、
  • F1よろしく順位に応じてポイントをレーサーに付与、累計ポイントを争う形式。事実上のゲスト参戦者廃止ですね。
  • さらに視聴者にある時点での累計ポイント順位クイズを提供、正解者にはプレゼント。
という内容でした。

で。直前まで気づかなかった私も馬鹿ですが、応募締め切りが全レース終了後だったんですね。しかもご丁寧にWeb上では毎レースの結果と累計ポイントを掲載。ほとんどヒントとして下に答えが書いてある懸賞クイズの状態w さすがにこんなクイズ、当選者5名だし当選は期待できないと思いつつ応募したら、当たってしまったというお話でした。運がよかったのか応募者が少なかったのか、悩むところ。

私の考えていた番組の欠点がある程度は当たっていたのか、2010年7月から始まった第2期は順位に応じて秒数が違うながらも全商品紹介など修正がされてきたようです。ただ疑っちゃキリ無いんだけど、最初から各商品の秒数決まっててレース後に誰が何を紹介するか割り当てても分からないんだよねぇ。どうせなら、各レーサーに広告主を結び付けておいて「毎回紹介時間が短いって怒られた」とか内情暴露ネタ入れたほうが面白いかなと思ったり。 商品紹介とポイント争奪戦のレースを分けた(2レース開催)ようです。というわけで、動画配信のある商品紹介レースは(凶悪なハンデなど)脚色OK、ゲストカモ~ンですね。

ちなみに第2期も同様のクイズがありまして、締め切りは全レース終了後です☆

— posted by mu at 11:11 am   commentComment [0]  pingTrackBack [0]

シリアルポートの名前取得

blog20100704-GetSerialPortEntries

ミリ秒測定のAVR側は一段落ついたLink ので、Windows側のプログラムに着手。Windows側からはシリアルポートと認識されるので、そのポートと通信するプログラムにすればOK。実際これまでの動作確認はTeratermLink を使ってました。.NET Framework 2.0以降はシリアルポートをサポートLink してますので、Visual C# 2010 Expressなら通信もさほど苦労しないでしょう。

まずは利用可能なシリアルポートの取得。最初に見つけたのはSystem.IO.Ports.SerialPort.GetPortNames()。これは'COM1', 'COM2'といったポートの番号を返してくれます。しかしTeratermでは'通信ポート (COM1)', 'AT90USBxxx CDC USB to UART MGM (COM3)'のようにより詳細な名前が表示され分かりやすいので、できればこういう表示をしたいところ。

こういう時はWMIを使えばよいそうで、以下サンプルコード。
using System.Collections.Generic;
using System.Management;
(略)
Dictionary PortsTable = new Dictionary<string, string>();
ManagementClass mcW32SerPort = new ManagementClass("Win32_SerialPort");
foreach (ManagementObject aSerialPort in mcW32SerPort.GetInstances())
{
  PortsTable.Add(
    (string)aSerialPort.GetPropertyValue("Caption"),
    (string)aSerialPort.GetPropertyValue("DeviceID"));
}

comboBoxCOMPorts.Items.Clear();
foreach (string aPortCaption in PortsTable.Keys)
{
  comboBoxCOMPorts.Items.Add(aPortCaption);
}
GetPropertyValue("Caption")が画面表示用の詳細な名前を返してくれます。わざわざDictionaryオブジェクトで格納してるのは、この後ポートを開くときにはDeviceIDで指定しないといけないからです。

画面はシリアルポートのリストが取得できているという画面。下のテキストはAVR側からの応答で、受信もちゃんとできていることを確認。

ちなみに'Caption'や'DeviceID'といった文字列は、PowerShellで以下のコマンドを入力すると参考になります。
> Get-WmiObject -Class Win32_SerialPort
または
> $wmiser = new-object System.Management.ManagementClass "Win32_SerialPort"
> $wmiser.GetInstances()
[参考]

— posted by mu at 05:52 pm   commentComment [0]  pingTrackBack [0]

PCでmsec時間測定(4) - AVR側ひとまず完成

前回Link から結構進み、AVR側は一通り動作するようになりました。長時間安定稼動するか確認しつつ、次はWindows側の作成に取り掛かろうかと。

ここまでで遭遇したトラブルは
  • Windows側でUSBデバイスとして認識される前にタイマー割り込みを有効にすると、Windows側で認識されないことがある。割り込みの頻度よりは1回の割り込みでかかる処理数のほうが影響あり(一回の割り込み処理に時間がかかるようだと不具合になりやすい)。
  • 64ビット用ドライバ。基本的にWindows標準のドライバ(usbser.sys)を使用するのですが、それでもINFファイルが必要。AtmelのCDCサンプルコードLink には32ビット版のINFファイルしかありませんでした。見よう見まねで64ビット用INFを作成、とりあえず動いているみたい。

[参考]64 bit CDC (AVR Freaks)Link

[2010/10/14 追記] つづきLink

添付ファイル: at90usbxxx_cdc_x64.inf 

— posted by mu at 12:07 am   commentComment [0]  pingTrackBack [0]

PCでmsec時間測定(3) - 割り込み

blog20100626-msecTimerOpFlow

前回LinkAtmelのUSB-シリアルポート変換サンプルプログラムLink の動作を確認したので、これをベースに改造していくことに(だって一からUSBの送受信する部分書きたくないもん)。

現在考えている構成は図の通り。
  • 右のループはこの手のワンチップマイコンには高確率で搭載されているCPUクロックによる割り込みを利用。1k-10kHz位で割り込みをかけ、その度に内部のカウンタを+1。次に外部に接続されるボタンのOn/Offをチェック、変化があれば左ループに通知する。幸いにもシリコンリナックスのボードはUSB通信する必要があるからか、CPUクロックに水晶発振器を使用しているので精度は期待できそう。できればチャタリング処理もこのループでやりたい。
  • 右のループは主にPCとのやり取り。USB経由でPCからの命令を受信し設定変更。またボタンのOn/Offに変化があればそのときのカウンタ値をUSB側に送る。AT80USB162に負荷をかけたくないので、カウンタは右ループで増加するのみ。受信したPC側が前回のOn/Off変化のカウンタ値を記録しておいて、そのカウンタ値の差からOn/Off感覚を計算する。

前回は左側のループで必要なUSB経由でPCとのデータ送受信が確認できたので、今回は右側ループに必要となるUSB通信を維持したまま定期的な割り込み処理ができるかの確認。なのですが、これ、前回にソースコードを読んでいる途中でRXDでデータを受信したときに割り込み処理が使われいるのを見たので、できるだろうなとは分かっていたりします。

とりあえず、今後COMポート側の機能は不要だし変な割り込みかけられても困るので削除。Sim氏Link の記事を参考にしながら割り込み処理を追加。

blog20100626-AVRCDCandTimer_TerminalOutput

今回変更したのはcdc_task.cのみ。変更内容は
  • RXD-TXD接続なしにプログラム内でループバック。
  • 1秒に1回USB側にピリオドを送信
結果がTeratermの画面。1秒に1個ピリオドが表示されつつ、PCからの入力に対してオウム返しします。この1秒間隔内で、axion/sakura/ne/jpとキーを叩けば、このサイトのアドレスが画面に表示されることになるのですが、キータイプが遅くてなかなかsakuraが入力できませんでしたorz

[参考]AVR でタイマー割り込み (Sim's blog 2008/9/20)Link

[2010/7/2 追記] つづきLink

[2010/10/12 追記] この記事に貼りつけてあるcdc_task.cを使用したHEXファイルをアップロード。TXD-RXDの短絡不要でPCから打ち込んだ文字をそのまま返します。また1秒に1回PC側に'.'(ピリオド)を送信します。

— posted by mu at 10:51 pm   commentComment [0]  pingTrackBack [0]

PCでmsec時間測定(2) - AT90USB162購入

blog20100624-AT80usb162

前回Link の内容で提案してみたところ、AVRでゴーサイン(というか、できるやつでやってて感じw)出たので、ストロベリーリナックスLink のボードを購入。

この手のワンチップマイコンはPIC&アセンブラしかやったことないので、まずは開発環境の使い方を知る意味で手堅くサンプルプログラムのCDC(USBシリアルポート)を動かしてみることに。

  • AVR Studio 4.18LinkFLIP 3.4.1LinkWinAVR-20100110Link をダウンロード、インストール。
  • AT80USB162が分類されるSeries 2 software packageLink からAVR272: USB CDC Demonstration: UART to USB BridgeLink をダウンロード、ZIPファイルの中からSTK526-series2-cdc-2_0_3-doc.zipを適当なところに展開。
  • AVR Studio 4を立ち上げ、(展開したディレクトリ)¥STK526-series2-cdc-2_0_3¥demo¥STK526-series2-cdc¥gcc内にあるapsファイルを開く。
  • (展開したディレクトリ)¥STK526-series2-cdc-2_0_3¥demo¥STK526-series2-cdc¥conf¥config.hを開き、#define FOSC 8000を16000に変更。
ここまではすん氏Link のサイトに書いてあったことに従っただけ。ここでコンパイルすると、
../main.c:107: error: expected expression before 'do'
../main.c: In function '__low_level_init':
../main.c:126: error: expected expression before 'do'
なるエラーが出て二日悩む。答えはSTK526-series2-cdc-2_0_3¥lib_mcu¥power_drv.hの以下の部分を以下のように()を削除。
#ifdef  __GNUC__
   #define Clear_prescaler()   (clock_prescale_set(0))
    ↓
   #define Clear_prescaler()    clock_prescale_set(0)
関数clock_prescale_setがWinAVR側のヘッダファイルでマクロとして定義されているのですが、これがカッコ内で展開されると文法エラーになるため。たぶんここLink に書いてあるinline関数を使っても解決できると思います。

すん氏のサイトを参考に、gccディレクトリにできたSTK526-series2-cdc.hexファイルをFLIP 4を使って書き込み。一度抜いて差し込むと新規デバイスとして認識するので、STK526-serise2-cdc-2_0_3-doc¥demo¥sTK526-series2-cdcディレクトリにあるINIファイルを指定してドライバをインストール。無事XP/Vista上で仮想COMポートとして認識される。

ところがループバック(入力をオウム返しする)はずなのにターミナルソフトで通信しても何の反応もないことにまた二日悩み、ある勘違いに気づく。このプログラム、USB側に対してオウム返しするデバイスになるんじゃなくって、USBと本当のCOMポートの変換しているのね。

AT80USB162の端子でCOMポートの役割を担っているのが、PD2(RXD)・PD3(TXD)・PD5(XCK)・PD6(RTS)の4つ。これを9ピンD-Subに接続すれば本当にUSB-COMポート変換機。ループバックさせるにはRXDとTXDを接続して、自分が発した信号を自分で受け取るようにしないといけないわけか。同期信号は自分で自分の出した信号受けるから不要(自然と同期されている)と。すん氏のページよく読んだら両方を接続しろと書いてあるぢゃないかorz

写真のようにPD2とPD3を短絡して再度ターミナルソフトで入力すると無事オウム返しするのを確認。またcdc_task.cを
uart_putchar(uart_usb_getchar());   // loop back USB to USART
↓
uart_putchar(uart_usb_getchar()+1);   // loop back USB to USART
と変更して、入力文字がアルファベット順で一文字ずれる(HALとタイプするとIBMと返ってくる)のも確認。よし、これでPCと通信ができるようになりましたと。

[参考]

[2010/6/26 追記] 続きLink

[2010/10/12 追記] 16MHz用機能変更なしのHEXファイルをアップロード。USB側に接続したPCがデータを受け取るにはRXDとTXDを接続する必要があります。

添付ファイル: STK526-series2-cdc_default_16MHz.hex 

— posted by mu at 10:38 pm   commentComment [11]  pingTrackBack [0]

T: Y: ALL: Online:
ThemeSwitch
  • Basic
Created in 0.0201 sec.
prev
2025.9
next
  1 2 3 4 5 6
7 8 9 10 11 12 13
14 15 16 17 18 19 20
21 22 23 24 25 26 27
28 29 30