929710 ランダム
 HOME | DIARY | PROFILE 【フォローする】 【ログイン】

緑のボタンを押せ! Press the green button

PR

Category

Keyword Search

▼キーワード検索

Archives

2019.11
2019.10
2019.09
2019.08
2019.07

Comments

 Jun@ Re:「いっちゅう」さんのiEPG用ソフト入れてみた(09/15) TVdeIEPG Ver.1.2.1.0がリンク切れしてい…
 スター@ Re:hauppauge HD PVR 速報(08/25) スタービーチ <small> <a href="http://c…
 ASOBO@ Re:hauppauge HD PVR 速報 ASOBO攻略 <small> <a href="http:/…
 ハッピーメール@ Re:hauppauge HD PVR 速報 ハッピーメール <small> <a href="http:/…
 恋も遊びもイクヨクルヨ@ Re:hauppauge HD PVR 速報 イクヨクルヨ <small> <a href="http://f…

Freepage List

Favorite Blog

まだ登録されていません

全119件 (119件中 1-10件目)

1 2 3 4 5 6 ... 12 >

電子工作

2010.12.01
XML
テーマ:私のPC生活(6787)
カテゴリ:電子工作

T-Zoneが廃業したそうだ。もともとは、亜土電子という新大久保の小さな部品屋さんから始まった会社で、高校生のころは、TTLとかをよく買いにいったものです。Z-80も(アキバに移転してからの)亜土電子で買ったように思う。

PCの需要の高まりにあわせ、業態を変え、資本関係が変わったりして、95年ころには、シリコンバレーのサニーベールのローレンス通り沿いのFry'sの隣(注、当時はFry'sサニーベール店はローレンス沿いにあった)にあって、結構気の利いたものも置いていたように記憶しています。 

最後に利用したのは、1年くらい前に、インテルのD945GSEJ (Aton N270)買ったときかなぁ…そのときも、とりあえずツクモへ行ったけど、無かったので立ち寄った気がする。まあ、確かに(少なくとも私にとっては)ここのところあまり魅力的なお店ではなくなってしまっていたことも事実。最近はほとんど通販だし。。。 時代ですなぁ







Last updated  2010.12.01 22:08:41
コメント(0) | コメントを書く
2008.08.11
テーマ:電子工作(481)
カテゴリ:電子工作

え~、ソフトウェアです。実は、7/20には、(シミュレーションでの)デバッグも終わっているのですが、完全に夏バテでその後の作業に手をつけられず3週間近くホッポリぱなし。
ソフトも公開して、これで「出来上がりませんでした」というわけにはいかんでしょうな…

だれか部屋の片付けを手伝ってください…(笑)
とりあえず、「夏休みの自由研究」ということで8月中の完成を目指すことにします。
ソースコードは最後にのせておきます。HITECH社のPICC(フリー版)用です。

----
[本日の御託]
インテルの「Nehalem」というプロジェクト名で呼ばれていた新しいプロセッサは「Core i7」と呼ばれるようになるようです。ま、ワタシ的には「Larrabee(ララビー)」の方が興味ありますね。
また、Atomのデュアルコア版は9月21日に発売が決まったようですが、肝心のコンパニオンチップはどうなのでしょう?Dual AtomのTPDは8Wとのことですが、現行のAtom(デスクトップ、230でTPD4W)用のマザーボードは945GCという激熱野郎が載っています。ちょっとTPDはすぐには見つけられませんでしたが、おそらく20W近いと思います。(サイテー)
 G43+セレロン440あたりの方がトータルの性能・パワー比は優れてるなんてことになりかねません。

そういや、VIAのNano(Isaiah)なんてのもありますね。IBMの65nmプロセスとのことですが、性能はどうなのでしょう?Atomをやや下回る感じでしょうか?インテルが、AtomでOOEを止めたのに対し、こちらはOOE機能を追加。なんとも面白いものです。


//
// Video Line selector
// (c) 2008 B.O
//

#include

#define UNTIL(x) while( !(x))
//
// RA[4:0] --> targetline_in
// RA[5] --> OddEven_in
// RA[7,6] --> for osc
// RB0/INT --> HSYNC_bar_in used for interrupt
// RB1 --> VSYNC_bar_in
// RB2 --> OE_in
// RB3 --> Both_in
// RB4 --> TRIG_out
// RB5 --> LED0_out
// RB6 --> LED1_out
// RB7 --> spare (tentative out)
//

// alias
static volatile unsigned char targetline_in @((unsigned)&PORTA) ;
static volatile bit OddEvenSel_in @((unsigned)&PORTA*8)+5;
static volatile bit HSYNC_bar_in @((unsigned)&PORTB*8)+0;
static volatile bit VSYNC_bar_in @((unsigned)&PORTB*8)+1;
static volatile bit OE_in @((unsigned)&PORTB*8)+2;
static volatile bit BOTH_in @((unsigned)&PORTB*8)+3;
static volatile bit TRIG_bar_out @((unsigned)&PORTB*8)+4;
static volatile bit LED0_out @((unsigned)&PORTB*8)+5;
static volatile bit LED1_out @((unsigned)&PORTB*8)+6;
static volatile bit spare @((unsigned)&PORTB*8)+7;

// globals
static volatile short count , total, line , maxval, maxval_half,
maxval_half2, initialval, initialval2, target_line;
static bit prev_vsync, vsync ;
static bit blink ;

// constant
static const short target_line_offset = 0 ;
void interrupt isr(void)
{
// debug
spare = 1 ;

prev_vsync = vsync ;
vsync = VSYNC_bar_in ;

// manage count
if( (prev_vsync == 1) && ( vsync == 0 )) {
total = count ;
count = 0 ;
} // if
else {
count = count++ ;
}

// manage real line number in 'line'
// in case of VSYNC, aligning counter
if( (( BOTH_in == 1 )
&& (prev_vsync == 1) && ( vsync == 0 ))
||(( BOTH_in == 0 )
&& (prev_vsync == 1) && ( vsync == 0 )
&& ( OddEvenSel_in == OE_in ) ) ) {

if ( OE_in == 1 ) {
line = initialval ;
} // if
else {
line = initialval2 ;
} // else
}// if
// overflow control
else if((BOTH_in == 1) // in case of interlace, both fileds
&& ( ((OE_in == 1 ) && ( line >= maxval_half))
|| ((OE_in == 0 ) && ( line >= maxval_half2)) ) ) {
line = 1 ; // interlace both fiels overflow, line count
} // elseif
else if( line >= maxval ) { // in case of Odd or Even
line = 1 ;
} // else if
else {
line = line ++ ;
} // else

// update TRIG_bar
TRIG_bar_out = ( line == target_line ) ? 0 : 1 ;

// debug
spare = 0 ;

// To Do end of interrupt
INTF = 0 ;

}

void get_target_line(void)
{
target_line = target_line_offset + ( targetline_in & 0x1f);
}

void decode( short total_lines )
{
// decoder for maxval , initialval, D1,D2 ...
unsigned char reduced_total ;
reduced_total = (total_lines >> 5) & 0x3f ;
switch ( reduced_total ) {
case 0b001000 : // 'b00_1000 : // D1 480i
LED0_out = 1 ;
LED1_out = 0 ;
maxval = 525 ;
maxval_half = 525 / 2 + 1 ;
maxval_half2 = 525 / 2 ;
initialval = 6 ;
initialval2 = 5 ;
break ;
case 0b010000 : // 'b01_0000 : begin
//D_o <= 5'b0_0010 ; // D2 480p
LED0_out = 0 ;
LED1_out = 1 ;
maxval = 525 ;
maxval_half = 525 ;
maxval_half2 = 525 ;
initialval = 9 ;
initialval2 = 9 ;
break ;
case 0b010001 : // 'b01_0001 : begin // D3 1080i
LED0_out = 0 ;
LED1_out = 1 ;
maxval = 1125 ;
maxval_half = 1125 /2 + 1 ;
maxval_half2 = 1125 /2 ;
initialval = 3 ;
initialval2 = 2 ;
break ;
case 0b010111 : // 'b01_0111 : begin // D4 720p
LED0_out = 1 ;
LED1_out = 1 ;
maxval = 750 ;
maxval_half = 750 ;
maxval_half2 = 750 ;
initialval = 3 ;
initialval2 = 3 ;
break ;
case 0b100011 : // 'b10_0011 : begin // D5 1080p
LED0_out = 0 ;
LED1_out = 0 ;
maxval = 1125 ;
maxval_half = 1125 ;
maxval_half2 = 1125 ;
initialval = 3 ;
initialval2 = 3 ;
break ;
default : // begin
// D_o <= 5'b0_0000 ; // out of range
LED0_out = LED1_out = blink ;
maxval = 0 ;
maxval_half = 0 ;
initialval = 0 ;
initialval2 = 0 ;
break ;
}
}

void wait0( short delay)
{
short i ;
for( i = 0 ; i < delay ; i++ ) {
;
}
}
void
main(void)
{
short total_lines ;
// setup hardware
CMCON = 0x07 ;
TRISA = 0x3f ;
// RA5-0 for input
// RB0 --> HSYNC_bar_in
// RB1 --> VSYNC_bar_in
// RB2 --> OE_in
// RB3 --> Both_in
// RB4 --> TRIG_out
// RB5 --> LED0_out
// RB6 --> LED1_out
// RB7 --> spare tentative output
TRISB = 0x0f ; // 0000_1111
OPTION = 0x40 ; // 0100_0000

// setup for interrupt
INTF = 0 ;
INTE = 1 ;
// init globals
blink = 0 ;
count = 0 ;
total = 0 ;
decode( 0 ) ;
get_target_line() ;
// enable interrupt
GIE = 1 ;
while (1){
// debug
//spare = 1 ;
// WAIT
wait0( 2400 ) ;
// debug
//spare = 0 ;

GIE = 0 ;
total_lines = total ;
GIE = 1 ;

if( total_lines != 0 ) { // locked
GIE = 0 ;
total = 0 ;
GIE = 1 ;
}
decode( total_lines) ;
blink = !blink ;
get_target_line() ;
}
}








Last updated  2008.08.14 03:57:32
コメント(1) | コメントを書く
2008.08.02
テーマ:電子工作(481)
カテゴリ:電子工作

schematicえー回路図です。主要部品は3個ですね。
ひさしにチェックしたら、Bschがバージョンアップされてました。ライブラリのコンポーネントがスケマにとりこまれるようになったのは、Good。
 週末のうちに、LMH1981周りだけでも作らねば・・・

---
[本日の御託]
おお、これ欲しいっす・・・

【送料無料】Gakken 大人の科学マガジン 特別編集版 シンセサイザー クロニクル 学研 別冊 大人の科学マガジン アナログシンセ付き







Last updated  2008.08.02 18:47:04
コメント(0) | コメントを書く
2008.07.20
テーマ:電子工作(481)
カテゴリ:電子工作

 一応、シミュレーション上ではちゃんと動作するようになりました。うまく動作しなかったのは、PIC16F648のI/Oの設定がまずかったり、ソースコードの大半をVerilogからコピペしていたので、代入文が <= のままだったり(orz cでは代入ではないですが、文法上は誤りではないです),LMH1981のモデルにバグがあったり・・・。 

 あと、HI-TECH社のPCCにもちょっと問題を見つけました。いや、正確にはPCCの問題というのは、正しくないかもしれません。たとえば、short形の変数iを使用するとします。メイン・ルーチンとインタラプト・サービス・ルーチン(ISR)の両方で、参照・変更する場合に気をつける必要があります。メインルーチンで代入を行う場合、
   i=0 ;
は、
   CLRF _i
   CLRF _i +1

のように、コンパイルされますが、2つの命令の間で、割り込みが受けつれられ、ISRの中で、iを参照したり、変更したりするとへんてこな値が参照されたり、メインルーチンで値を壊すことになります。
 代入する場合、
   GIE =0 ;
       i = 0 ;
   GIE = 1 ;

とすればよいでしょう。参照の場合も同様ですが、割り込み禁止区間を短くしたいのであれば、
   GIE = 0 ;
       i_snapshot = i ;
      GIE = 1 ;

として、実際の演算は、スナップショットである、i_snapshotに対して行うようにします。
本質的には、マルチスレッド(もしくは並行プログラム)とアトミックな命令の問題ですが・・・
---
[本日の御託]
 とりたてて、「用事」があるわけではなかったのだが、ラゾーナ川崎へ出かけた。謎にすっげぇ混んでた。
 ラゾーナ川崎って、エスカレーターがわかりにくい。中庭に面したエスカレータの場所がまちまちで、ちょっと「イラっ」とする。ついでにいえば、中庭のステージでなにもしていないときも、がんがん音楽をかけているのも×。
 「コールド・ストーン」は、となりの「銀だこ」(決してきらいじゃないけど)のにおいが立ち込めていて、食べる気がせず。







Last updated  2008.07.20 22:47:59
コメント(0) | コメントを書く
2008.07.18
テーマ:電子工作(481)
カテゴリ:電子工作
 HI-TECH社のPICCの統合環境である、HI-TIDEもなんとなく使い方がわかったので、サクッとプログラムを書いてみました。Cで200行ちょっと。Verilog-HDLで既にアルゴリズムの検討は終えているのでCへの移植は簡単です。普通は、Cでアルゴリズムの検討をしてVerilogでハードウェアにするのに、逆ですね(笑)。
 ただ、割り込み処理ルーチン(ISR)での処理をある程度軽くする必要があるので、デコード部分は、メインルーチン側でちんたらやることにします。

 前に作ったPICのVerilogモデルとLMH1981も一緒にして、「一発で動け!」とばかりに、Veritak上でシミュレーションして見ますが、どうも動作がヘンです。よく見ると、PICクロックが10分の1。 orz
 クロックを修正し、気を取り直して再度トライしてみますが、ちゃんと動きません。ぬぅ・・・どうも、PICの方がおかしいみたいです。デバッグをする気にもなれず、今日はここまで・・・

あぁ、私D3とD4を逆に考えてますね・・・お恥ずかしい  orz
---
[本日の御託]
 PICのプログラムと並行して、秋月にいくつか部品を頼もうと思うのですが、送料などのことを考えるとある程度まとめて買わないともったいない気がします。なに買おうかな~っ♪






Last updated  2008.07.19 06:29:51
コメント(0) | コメントを書く
2008.07.17
テーマ:電子工作(481)
カテゴリ:電子工作

 PICのプログラムですが、さすがにアセンブラはきついので、PICCをチェックすべくHi-Tech社のWebページにいったら、PICC Liteがバージョンアップされています。

 統合環境のHi-Tideもバージョンアップされていて、見た目がずいぶん変わってしまいました。どうやら、eclipseベースになったようですが、使い方がよくわかりません。 orz
 3連休で仕上げようと思っていましたがちょっと無理・・・
---
[本日の御託]
 実はDigiKeyに注文していた、LMH1981が届いてしまいました。4日位で届くので、秋月と大差ないですね・・・
 写真は、前後して届いたDigikeyのカタログ。「電話帳」ですね。、「でこピンマーク」のイタズラ書きは、家内いわく、郵便受けではみ出しているカタログを見つけた時の本人の怒り、をあらわしているそうです(大笑)。
DigiKey







Last updated  2008.07.17 23:47:59
コメント(2) | コメントを書く
2008.07.16
テーマ:電子工作(481)
カテゴリ:電子工作
 割り込みの周期が、D4の場合で60μSくらいになってしまう件ですが、手元に余っている16F648Aでは内蔵クロック(4MHz)を使うと、1μS/インストラクション(実際には分岐するときのムダがあるのでもっと遅い)ですので、せいぜい40ステップくらいになってしまいます。D5の場合はさらに半分の時間になります。2バイトデータの比較だけで4ステップ以上喰いますから、とても無理そうです。

 外部の発振素子を使うことにして、20MHzとかにするしかなさそうです。これでも、200ステップくらいなので、ぎりぎりかな?D5はあきらめることにします。また、ただでさえ少ないIOピンがまた少なくなってしまうので、機能をすこしケチることにします。本当は、16F877あたりを使えばよいのですが、なにせ648Aが余っているので・・・

 ラインセレクトの範囲ですが、どうせ見たいのはVSYNCの辺りだけです(笑)。そこで、本来11ビット必要なところですが、5ビットだけ割り当てることにします。また、奇数/偶数フィールドの選択に1ビット、インターレースの両方または奇数、偶数ののどちらかを選択するのに1ビット、LMH1981からのインターフェースに3ビットで入力は合計10ビット。
 ラインセレクトの出力に1ビット、入力フォーマットD1~D4の表示で2ビット合計3ビット、あと1ビット余りますが、イザというときのための予備とします。
---
[本日の御託]
 麦茶に牛乳を入れてみた。意外においしかった。。。






Last updated  2008.07.17 05:16:38
コメント(0) | コメントを書く
2008.07.15
テーマ:電子工作(481)
カテゴリ:電子工作

Hardtest

 Verilogの設計をVeritakでシミュレーションしてみました。調べた範囲では、うまく動作しているようです。ところで、PICで実装するつもりでいましたが、D4の場合でも1Hの時間は60μSくらいしかありません。ん~、ちょっとつらいかな…
---
[本日の御託]
 我が家の夕飯は、イサキの塩焼きであった。家内は、頭のついているサカナが怖くて触れないのだが、週末に私の誕生日ということで行ったすし屋で食った塩焼き(イナダのカマ焼き)がよっぽど気に入ったらしく、焼き魚をやってみる気になったらしい。
 聞くと、スーパーの魚屋でワタを抜いてもらったはいいが、家で調理しようとしたら、やっぱり怖くて触ることができず、「手術用のゴム手袋」(なんでそんなものがあるんだ?笑)をして、やったらしい。途中、化粧塩をひれにつけていたら、手袋に刺さり、手袋をひれが貫通したり、と大騒ぎだったらしい。(大笑)
 でも、イサキはおいしかったよんっ!







Last updated  2008.07.15 21:16:28
コメント(0) | コメントを書く
2008.07.14
テーマ:電子工作(481)
カテゴリ:電子工作

 昨日の方針に従って、アルゴリズムの検証をするために、Verilog-HDLでさくっと回路を書いてみることにします。
 最終的にはPICでインプリメントするつもりですが、回路をシミュレーションで検証するにはこのほうが簡単なので・・・RTLは最後に載せます。

 最初のalwaysブロックは、HSYNCによるカウンタの制御です。
 // manage line count
のコメント以下のifブロックは、1フィールドあたりのHSYNCの数をreg [10:0] count で数えています。数えた結果は、totalというregに入ります。

 この結果を // decoder for maxval , initialval, D1,D2 ...
以下のalwaysブロックでデコードしています。D_oは、D1~D4を表示します。その他の変数は、「本当のline」数を数えているカウンタの制御に用いられます。

 すこし戻り、 // manage real line number in 'line'
以下のifブロックでは、「本当のline」数-1をreg [10:0]line に数えています。

 最後のassign文はlineと目標とするラインの比較、同期パルスの作成をしています。信号gateNにはダイナミックハザードが乗ってしまいますが、HSYNCの立ち上がり周辺に限られるので問題にはなりません。
 論理合成可能な記述にしましたので、XilinxのISEにかけて見ましたが、特に問題はないようです。

---
[本日の御託]
 相変わらず庭の芝の雑草がひどいです。昨日も朝から雑草抜きをしていたら、お隣のご主人が、ペンチ型の雑草抜きを教えてくれました。周りの芝も一緒に抜いてしまうのがなんだが、確かに手でやるより楽です。早速ホームセンターで買い求めてみたが、調子にのってやっていたら、親指にマメができてしまいました。ううむ、なかなかうまくいかんものよのう・・・

//
// line selecter
//  (c) 2008 B.O.
//
module lineSel(
    input hs_i ,    // H Sync  -- from LMH1981
    input vs_i ,    // V Sync  -- from LMH1981
    input oe_i ,     // Odd (oe=1), Even (oe=0) -- from LMH1981

    input [10:0] linesel_i,    // line to select
    input linesel_oe_i,     // Odd/Even field select Odd(=1)
    input linesel_both_i,   // =0, Odd or Evn/ =1 Both
    input por_i,     // power on reset

    output reg [5:1] D_o,     // indicater D1,D2,,D5
    output sel_o     // Selecter out
);
    reg [10:0] count , total, line , maxval, maxval_half, maxval_half2,
     initialval, initialval2;
    reg prev_vsync ;

    always@( posedge hs_i or posedge por_i ) begin
 if( por_i ==1'b1 ) begin
     count <= 11'b0 ;
     line <= 11'd20 ;
     total <= 11'b0 ;
     prev_vsync <= 1'b0 ;
 end // if
 else begin
     prev_vsync <= vs_i ;

     // manage line count
     if( (prev_vsync == 1'b1) && ( vs_i == 1'b0 )) begin
  total <= count ;
  count <= 11'b0 ;
     end // if
     else begin
  count <= count + 11'b1 ;
     end

     // manage real line number in 'line'
     //  in case of VSYNC, aligning counter
     if(  (( linesel_both_i == 1'b1 ) 
   &&  (prev_vsync == 1'b1) && ( vs_i == 1'b0 ))
      ||(( linesel_both_i == 1'b0 ) 
   &&  (prev_vsync == 1'b1) && ( vs_i == 1'b0 )
   && ( linesel_oe_i == oe_i ) ) ) begin
  if ( oe_i == 1'b1 ) begin // odd
      line <= initialval ;
  end // if
  else begin
      line <= initialval2 ;
  end // else
     end // if
     //  overflow control
     else if((linesel_both_i == 1'b1) //  in case of interlace, both fileds
      && (   ((oe_i == 1'b1 ) && ( line == maxval_half))
          || ((oe_i == 1'b0 ) && ( line == maxval_half2)) ) ) begin
  line <= 11'b1 ;    // interlace both fiels overflow, line count
     end // elseif
     else if( line == maxval )  begin  // in case of Odd or Even
  line <= 11'b1 ;   
     end // else if
     else begin
  line <= line + 11'd1 ;
     end // else

 end // else
    end // always
 
    // decoder for maxval , initialval, D1,D2 ...
    always@( total ) begin
 case ( total[10:5] )
     'b00_1000 : begin
  D_o <= 5'b0_0001 ; // D1 480i
  maxval  <= 525 ;
  maxval_half <= 525 / 2 + 1 ;
  maxval_half2 <= 525 / 2 ;
  initialval <= 11'd6 ;
  initialval2 <= 11'd5 ;
     end
     'b01_0000 : begin
  D_o <= 5'b0_0010 ; // D2 480p
  maxval <= 525 ;
  maxval_half <= 525 ;
  maxval_half2 <= 525 ;
  initialval <= 11'd9 ;
  initialval2<= 11'd9 ;
     end
     'b01_0111 : begin
  D_o <= 5'b0_0100 ; // D3 720p
  maxval <= 750 ;
  maxval_half <= 750 ;
  maxval_half2 <= 750 ;
  initialval <= 11'd3 ;
  initialval2 <= 11'd3 ;
     end
     'b01_0001 : begin
  D_o <= 5'b0_1000 ; // D4 1080i
  maxval <= 1125 ;
  maxval_half <= 1125 /2 + 1 ;
  maxval_half2 <= 1125 /2 ;
  initialval <= 11'd3 ;
  initialval2 <= 11'd2 ;
     end
     'b10_0011 : begin
  D_o <= 5'b1_0000 ; // D5 1080p
  maxval <= 1125 ;
  maxval_half <= 1125 ;
  maxval_half2 <= 1125 ;
  initialval <= 11'd3 ;
  initialval2 <= 11'd3 ;
     end
     default  : begin
  D_o <= 5'b0_0000 ; // out of range
  maxval <= 0 ;
  maxval_half <= 11'd0 ;
  initialval <= 11'd0 ;
  initialval2 <= 11'd0 ;
     end
 endcase
    end // always

    assign gateN = ~( line ==  linesel_i ) ;
    assign sel_o  = ~( ~gateN & ~ hs_i ) ;
   
endmodule // lineSel
// [EOF] lineSel.v







Last updated  2008.07.15 06:04:49
コメント(0) | コメントを書く
2008.07.13
テーマ:電子工作(481)
カテゴリ:電子工作
 LMH1981以降の回路だが、余っているPICを使うつもりです。HSYNCの数を数えるのが基本だが、同期したクロックが作れれば、ソフトでラインセレクト信号をかなり正確に作れるはずです。
 HSYNCに同期したクロックを作るにはPLLしかないのですが、結構範囲が広いですね。D1の場合、約15.8KHz、(D5は実際にはあまり対応した機器はないので、省略としても)D4の場合で、約29.6KHzになります。ざっと倍のロック範囲が必要になります。正直ちょっと自信ないですね~(笑)。もっともこの範囲で連続的にロックする必要はないので、複数のPLLを用意して、ほかの方法で切り替えるという方法もありますね。
 まあ、いずれにしても結構複雑なのでボツ。ソフトウェアでは、大まかなイネーブル信号を作成し、HSYNCとANDをとることで、正確なラインセレクト用の同期パルスを作ることにしました。外付けのANDとかを使うのは、ちょっとしゃくに障りますが、PLL用のICよりは単純に済むでしょう。

 HSYNCの数え方ですが、LMH1981のデータシートを見ると、HSYNCとVSYNCの関係はイマイチはっきりしないのですが、HSYNC(負論理)の↑エッジでカウントするほうがよさそうです。また、ライン・カウンタは、VSYNC(これも負論理)をHSYNCの立ち上がりで微分してエッジを検出して、リセットすることでなんとかなりそうです。リセットする際に再設定する値は0ではなく、適切な値にしなければなりませんが、ビデオのフォーマットによって適切な値にする必要があります。
 LMH1981にはフォーマットを出力する機能がありますが、どうせ、ラインを数えなければならないので、自分で数えてしまったほうが、全体の処理は簡単そうです。

 あと、いわゆる測定器としてのラインセレクタでは、インターレース(D1、D4)の場合、フレーム単位ではなく、フィールド単位、あるいは奇数/偶数の区別なくライン選択の機能があったほうが便利です。
---
[本日の御託]
 我が家の冷蔵庫の製氷機能が壊れました。結婚したときに買ったのでそろそろ11年になる。家内によると、自動製氷がうまく働かず、水タンクに水があるのに「水切れ」と誤解してしまう。また、出来た氷が溶けて、さらに固まったようになってしまうそうです。

 さすがにこの時期氷なしはきついので、気の早い私はカタログを集めてきたりしたのだが、カタログの自動製氷の仕組みの説明を見ていて家内が、「製氷皿が反転したままになっているんじゃないか?」と言い出した。
 なるほど、そうだとすると説明がつく。水タンクの水は製氷皿ではなく、氷を貯蔵するところに直接流れ、そのあとで凍っているのだ。
 修理は火曜日だそうだが、果たして「正解」だろうか?






Last updated  2008.07.14 05:54:19
コメント(0) | コメントを書く

全119件 (119件中 1-10件目)

1 2 3 4 5 6 ... 12 >


Copyright (c) 1997-2019 Rakuten, Inc. All Rights Reserved.