JJ1WKN Log

自作や移動運用関連のログです。

Charlieplexingの実験 その4

2010-02-15 | Tanukino
その4です。

回路の一部を「ikkeiplexing」に改造しました。

元の回路では、桁がOFFの時、ベースが浮いていますので、薄っすら光るセグメントがありました。
ベースをグラウンドに落とす抵抗を省略したのですが、レイアウトの関係で追加するのも面倒なので、「ikkeiplexing」方式に変更しました。


きたないですが、スケッチを掲載しておきます。
1mSごとにカウントアップするようにしたので、999.999秒までのストップできないウォッチです。
ストップウォッチで測定してみましたが結構正確でした。
<>は半角にしてください。
#include <MsTimer2.h>
/*
Ikkeiplexing 7seg Led 6Digit Demo
2010-02-14 JJ1WKN
Keta 6  5  4  3  2  1  Vcc-[C1]-[C2]-[C3]-[C4]-[C5]-[C6]   
D10  A  A  A  A  A  A  D10-R180-A6-A5-A4-A3-A2-A1 
 D9  B  B  B  B  B  B   D9-R180-B6-B5-B4-B3-B2-B1
 D8  C  C  C  C  C  C   D8-R180-C6-C5-C4-C3-C2-C1 
 D7  D  D  D  D  D  K1  D7-[B1]-R180-[E1]-Acom1-D6-D5-D4-D3-D2
 D6  E  E  E  E  K2 E   D6-[B2]-R180-[E2]-Acom2-E6-E5-E4-E3-E1
 D5  F  F  F  K3 F  F   D5-[B3]-R180-[E3]-Acom3-F6-F5-F4-F2-F1
 D4  G  G  K4 G  G  G   D4-[B4]-R180-[E4]-Acom4-G6-G5-G3-G2-G1
 D3  P  K5 P  P  P  P   D3-[B5]-R180-[E5]-Acom5-P6-P4-P3-P2-P1
 D2  K6 P  G  F  E  D   D2-[B6]-R180-[E6]-Acom1-P5-G4-F3-E2-D1
*/
// 7seg Led Font
unsigned char font[10] = {
//ABCDEFGP 0:on 1:off
  0b00000011, // 0
  0b10011111, // 1
  0b00100101, // 2
  0b00001101, // 3
  0b10011001, // 4
  0b01001001, // 5
  0b01000001, // 6
  0b00011111, // 7
  0b00000001, // 8
  0b00011001  // 9
};

byte Keta,KetaMask;
unsigned char buff[6];
long NumCount;

void setup()
{
  AllInput();
  Keta = 0;
  KetaMask = B00010000;
  NumCount = 0;
  MsTimer2::set(1,Display); // 1mS
  MsTimer2::start();
}

void loop()
{
}

void AllInput()
{
  byte i;
  for(i = 2;i <11;i++) 0;i--)
  {
    s = tmp / div;
    buff[i-1] = font[s];
    tmp = tmp % div;
    div = div / 10;
  }
}

void Display()
{
  byte i,v,mask,FontBuff;
  SetFont();
  AllInput();
  FontBuff = buff[Keta];
  v = FontBuff & KetaMask;
  if(v == 0)
  {
    pinMode(2,OUTPUT);
    digitalWrite(2,LOW);
  }
  FontBuff = FontBuff | KetaMask;
  mask = B00000001;
  for(i = 3;i <11;i++)
  }
  pinMode(7 - Keta,OUTPUT);
  digitalWrite(7 - Keta,HIGH);
  Keta++;
  KetaMask = KetaMask >> 1;
  if(Keta > 5)
  {
    Keta = 0;
    KetaMask = B00010000;  
  }
  NumCount++;
 if(NumCount == 1000000)
    NumCount = 0;
}