「PIC AVR 工作室」サイトの日記的なブログです。
サイトに挙げなかった他愛ないことを日記的に書き残してます。
PIC AVR 工作室 ブログ



arduinoとLM1881を使って、ビデオオーバーレイ表示を
やってみようという実験の続き (↓これの続き)
http://brown.ap.teacup.com/nekosan0/249.html

ひとまず、74HC125(バッファIC)を通すことで
シンク/ソース電流に余裕を持たせてみたんですが、
やはり上手く行ってません。

arduinoの代わりにTINY2313でやってみると、やはり
上手く動くところをみると、74HC125バッファ自体は
きちんと動作している様子なのですが…

なんか悔しいので、不具合の原因の切り分けをもう少し
キッチリやってみようと思いました。
事前の実験によってソフト側の不具合ではないことは
判ったつもりだったのですが、74HC125を通しても
やはり上手く割り込みがかからないところをみると、
本当にソフト側のバグは無いのか?と気になってしまって…

で、スケッチを以下のようにちょっと修正し、
ラインカウントをシリアルでPC宛に送信するという
処理を挟み込み、ブレッドボードで実験をして
みました。
(スケッチ中の不等号と&記号は全角に変換してあります)

// arduino video overlay sketch
// with interrupt 0 (v sync)
// and interrupt 1 (c sync)
// output video signal on digital pin 4

#define video_out 4


volatile int line_no;

volatile char bitmap[12] = {0b00011000,0b01111000,
0b00100100,0b01000100,
0b00100100,0b01111000,
0b00111100,0b01000100,
0b01000010,0b01000010,
0b01000010,0b01111100};


void v_sync()
{
line_no = 0;
}


void c_sync()
{
int disp_line;
int char_location;
char bitmap1;
char bitmap2;
int i;
int n;
boolean bit_out[] = {LOW,HIGH};

line_no ++;

if((line_no >= 40) && (line_no <= 87)){

disp_line = (line_no - 40) / 8; //line no now display
char_location = disp_line;

bitmap1 = bitmap[char_location * 2]; //left bitmap for display
bitmap2 = bitmap[char_location * 2 + 1]; //right bitmap for display



n = 0;
for (i=7;i>-1;i--){
n = (bitmap1 >> i) && 1; //pick up 1bit for display
digitalWrite(video_out,bit_out[n]); //display a bit
}

digitalWrite(video_out, LOW); //display black

n = 0;
for (i=7;i>-1;i--){
n = (bitmap2 >> i) && 1; //pick up 1bit for display
digitalWrite(video_out,bit_out[n]); //display a bit
}
}

digitalWrite(video_out,LOW);

}



void setup()
{
Serial.begin(9600);
pinMode(video_out, OUTPUT); // set digital pin4 for output video signal
digitalWrite(video_out, LOW);

line_no = 0;

attachInterrupt(0, v_sync, RISING);
attachInterrupt(1, c_sync, RISING);
}

void loop()
{
Serial.println(line_no);
}


int0が立ち上がる時にv_sync関数が呼び出されて
ラインカウントが0クリアされます。
int1が立ち上がる時にc_sync関数が呼び出されて
ラインカウントがインクリメントされます。

で、int0、int1ともに抵抗を介してVccに繋いでおき
(常時HIGHレベル入力)、適宜int0端子、int1端子を
手でGNDとショートさせます(LOWレベル入力)。
ショートさせてから離した瞬間が立ち上がり波形
の入力となり、割り込みが発生するはずです。

で、これで散々弄ってみたんですが、思ったとおりに
ラインカウントがアップしたり0クリアしたりと
想定どおりの動作をしてくれます。

ところが、このスケッチでLM1881を繋いでみると、
やはり上手く動きません。ラインカウントはずーーっと
0のままです。
そしてTINY2313に繋ぎ換えるとちゃんと動きます。

うーん、ソフトではない。回路設計ではない、
部品の故障でもない。とすると、やっぱりデジタル3ピン
に繋がったLED用電流制限抵抗(470Ω)による
電圧上昇と、それによる弁別閾電圧との相性としか
思えないんだけどなぁ…

74HC125を通しても上手く動かないということを考慮
すると、470Ωの抵抗ではどんなICをつないでも
LOWレベルを入力させられないのでは?と
思えてしまいます… (TへT)

ひとまず、スケッチをこのままMEGA8用にコンパイル
してみたらエラー無く通ったので、この間作った
シリアル版MEGA8のarduinoで一旦実験してみたい
と思います。

MEGA8でもMEGA168でも、CPUコア自体は殆ど変わりが
無いので、MEGA8のシリアル版で動くなら、reduino-nano
のボードの仕様(限界)ということになるのでしょうか。

場合によっては、470Ωの抵抗を1kΩ程度に換えちゃう
っていう手も有るかな…
(LEDは薄暗くなっちゃうけど…)




コメント ( 0 )
  • X
  • Facebookでシェアする
  • はてなブックマークに追加する
  • LINEでシェアする




TINY2313でビデオのオーバーレイ表示が出来たので、
調子に乗ってarduinoでもオーバーレイが出来るだろう
と思って実験してみたんですが、意外な落とし穴が…

今回実験台に使ってみたarduinoはreduino-nano。
ブレッドボードで便利な細型タイプのほうが便利かと。

で、実際にやってみました。

TINY2313の時と同じように、LM1881のc-sync、v-syncを
int0、int1に入力するように繋いでみます。

LM1881と繋ぐ前には、スケッチがちゃんと機能するか
int0、int1に手動でパルスを入力してみてうまく動作
することの確認は出来ていたのでが、実機では上手く
動いてくれません。

ソフト側はちゃんと動いているようなので、
どうやら回路上の問題みたい…。

一生懸命回路の接続内容を見直したんですが、
おかしなところはやっぱり無し。

まてよarduinoのint1=デジタル3番にはLEDが
ボード上に載ってたなぁ、と。

Vccから抵抗を挟んでLEDがデジタル3番に
繋がっているので、言い換えればプルアップ
されているって事です。
それを踏まえてLM1881の電気特性を見直して見ます。

c-sync、h-syncの出力シンク電流は5mAと書いて
あります。ということは、あまり小さい抵抗で
たくさんの電流を流し込んでしまうと、あっという間に
LOW出力時の電圧が上昇しちゃうって事です。

繋がっている抵抗は470Ω。5V470Ωってことは、10mA
くらい流れこむわけですね…。アウトです。

そもそもLM1881の出力電圧って(バッファが入って
いないのかわかりませんが)LOW出力は高いし、
HIGH出力は低いみたい。
特にLOW側は電圧が上がりやすいみたいで、
I/F先でLOWと認識されなくなっちゃう恐れが
大きいです。

で実際、LED用の電流制限抵抗で電圧が上がって
しまい、LOWレベルと認識され無くなったようです。
上手く割り込みが発生しませんでした。

この回路をTINY2313に置き換えるとちゃんと画面に
オーバーレイされるということは、原因は
ここしか思いつかない…

だからと言って、arduinoの外部ピン割り込み
(attachInterrupt)で使えるのはint0とint1の
2つしかないし、しかもその2つとも必要になるので、
いかんともし難い状態です。

デジタル3はPWMの端子なので、reduino-nanoは
アナログ出力が標準で使えて便利だなぁと思って
いたのですが、LM1881のように出力バッファが
弱いICと繋ぐ場合にはその抵抗がプルアップ抵抗
としてはたらく事に注意が必要のようです。

うーん、この自作したシリアル版arduinoを
mega8からmega168に載せ換えて実験しなおして
みたいところ…。

もしかしたら、出力電流が大きく取れるような
バッファICでも挟めば上手く動くのかな?

スケッチはもう出来ているので、後で時間が出来たら
また挑戦してみます。



コメント ( 2 )
  • X
  • Facebookでシェアする
  • はてなブックマークに追加する
  • LINEでシェアする