日々の記録

ほどよく書いてきます。

温度計

2012年05月30日 21時00分39秒 | その他雑記
昨日、ダイナミック点灯に成功した。

今日はマイコン内蔵のADCを使ってLM35というICの出力電圧を読み取り
温度を表示してみた。

結構うまくいったが、結構ずれがある。調べてみると内蔵1.1Vの参照電圧がずれている。
ほどよく補正してできあがり。
コメント
  • X
  • Facebookでシェアする
  • はてなブックマークに追加する
  • LINEでシェアする

ダイナミック点灯

2012年05月30日 00時16分11秒 | その他雑記


ダイナミック点灯に挑戦。うまくいった。

ArduinoのDIGIATLのPin0からPin7がPORTDに対応します。NPNトランジスタ経由でアノードコモンの7セグLEDに接続。
DIGITALのPin8から13がPORTBですが、8,9,10,11を使って表示する桁を選択します。こちらはハイサイドスイッチなのでPNPトランジスタ経由で駆動します。

何も考えずに適当に回路つくったらトランジスタ12個、抵抗20本という回路になりましたが、マイコンのポートはLEDくらいなら直接駆動できるようなので、トランジスタは不要で、抵抗8本のみでよかったのかもしれません。

あと、高い桁の部分の0表示、消灯するような場合分けをしたら成功でしょうか。
以下コード


unsigned char SevenSeg[] = {0b00111111, 0b00000110, 0b01011011, 0b01001111, 0b01100110, 0b01101101, 0b01111101, 0b00000111, 0b01111111, 0b01101111};  // an array for 7 segment LED display
unsigned char SevenSegDigits[] = {0b00001110, 0b00001101, 0b00001011, 0b00000111}; //define digits

void setup() {
 DDRD=0b11111111; //setting PORTD0-7 for output
 DDRB=0b00001111; //setting PORTB0-3 for output
}
void loop() {
 unsigned int Value;
 unsigned char DigitVal[3];

  for(int i=0;i<10000;i++){  //表示する値

   Value=i;
   for(char ii=0;ii<4;ii++){  //各桁に分ける
    DigitVal[ii]=Value%10;
    Value=Value/10;
   }
   
    for(char k=0;k<2;k++){  //表示ループ
     for(char j =0;j<4;j++){
      PORTB=SevenSegDigits[j];
      PORTD=SevenSeg[DigitVal[j]];
      delay(1);  //表示の停止待ち時間
     }
    }
  }
}
コメント
  • X
  • Facebookでシェアする
  • はてなブックマークに追加する
  • LINEでシェアする