000000 ランダム
 ホーム | 日記 | プロフィール 【フォローする】 【ログイン】

何でもヲ屋ジ

何でもヲ屋ジ

PR

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

1 2 3 4 5 6 >

マイクロチップ

2012年02月21日
XML
カテゴリ:マイクロチップ
aitendoで買った16セグメント6桁の基板を放置していたので,動かしてみました。
600オームくらいの抵抗を,明るすぎるドット部分にかましています。その他,配線などは,写真で判断してください。時間を合わせるために,アナログピンを3本使っていますが,使い方はソースをよんでみてください。さしあたって,12時に電源を入れれば,これで動きます。
16seg6






最終更新日  2012年02月21日 09時41分28秒
コメント(0) | コメントを書く


2012年02月20日
カテゴリ:マイクロチップ
I2Cのインタフェースなので,早速,arduinoで動作確認してみました。
買ったはいいが,表示できなくて困っている人がいるかもしれないので,
アップしてみました。

SDA,SCLは,お決まりで接続してください。たぶん,SDAが,アナログ5番,SCLが,アナログ6番だと思う。
1行目の<>を半角に変換してね。

#include <Wire.h>
#define ADRS 0x38
unsigned char num_table[16]={0xd7,0x03,0xb6,0xa7,0x63,0xe5,0xf5,0x07,0xf7,0xe7,0x77,0xf1,0xd4,0xb3,0xf4,0x74};
//
void i2cstart()
{
Wire.beginTransmission(ADRS); //
Wire.send(0x48);
Wire.endTransmission();

Wire.beginTransmission(ADRS); //
Wire.send(0xe0);
Wire.send(0x00);
Wire.endTransmission();
}

void i2cclear()
{
byte i;
byte numx;
for (i=0x07; i<0x48; i=i+1)
{
Wire.beginTransmission(ADRS); // (1) ?X?^?[?g
Wire.send(0x48);
Wire.send(i);
Wire.endTransmission();

Wire.beginTransmission(ADRS);
Wire.send(0xe0);
Wire.send(0x00);
Wire.endTransmission();
}
}
//
void delay_char(unsigned char t)
{
while(--t);
}
//
void setup()
{
Wire.begin();
i2cstart();
//

}

void loop() {

for (int i=0; i<=999 ; i=i+1)
{
i2cclear();
float i;
unsigned char k;
while(1)
{
for(i = -1.10;i<100100;i = i + 0.01)
{
display(i);
for(k = 0;k <250;k ++)
{
delay_char(250);
}
}
}

}
}
//
void display(float dat)
{
unsigned long temp;
char i,sum;
unsigned char num[8]= {0}; //
if(dat < 0)
{
dat = - dat;
num[7] = 0x20; //
}
else
{
num[7] = 0; //
}
start();
write(0x48); //
stop();
start();
write(0xe0); //
write(0); //
// stop();
// start();
if(dat < 100000 ) //
{
temp = 100 * dat; //
num[6] = temp / 1000000;
num[5] = temp / 100000 %10;
num[4] = temp / 10000 %10;
num[3] = temp / 1000 %10;
num[2] = temp / 100 %10;
num[1] = temp / 10 %10;
num[0] = temp %10;
sum = 0;
for(i = 6;i >2;i--) //
{
sum = num[i] + sum;
if(sum > 0) break;
}
sum = i; //
for(i = 0;i <= sum;i++) //
{
num[i] = num_table[num[i]];
}
num[sum + 1] = num[7]; //
num[2] = num[2] | 0x08; //
for(i = 0; i < 14-sum; i++) //
{
write(0);
}
for(i = sum +1; i >= 0 ;i--) //
{
write(num[i]);
}
}
else //
{
for(i = 0; i < 16; i++)
{
write(0x20);
}
}
write(0); //
stop(); //
}
//
//============================
void start(void)
{
Wire.beginTransmission(ADRS);
}
//==============================
void stop(void)
{
Wire.endTransmission();
}
//
//===================================
void write(unsigned char dat)
{
Wire.send(dat);
}
//HT1603B






最終更新日  2012年02月20日 10時25分13秒
コメント(0) | コメントを書く
2010年12月25日
カテゴリ:マイクロチップ
GLCDとarduinoをつなげる話はあっても、以外と実用例は少ないです。
気圧センサはI2Cなので、アナログ4と5を使用、
GLCDは、アナログピンをできるだけ使わないように
以下のようにピン配置を変更しています。
一般的なGLCDは、CSELを逆にしてね。

#define CSEL1 2
#define CSEL2 14
#define R_W 3
#define D_I 12
#define EN 13


<>は小文字に変換してね。

aks0108.hは、ks0108.h の古いバージョンをリネームしています。
新しいバージョンは、私の使っているGLCDでは、画面がずれるので。


##include <Wire.h>
#include <aks0108.h>
#include <Arial14.h> // font definitions

#define I2C_ADDRESS 0x60
short sic11,sic12,sic22,sib1,sib2,sia0;
long sic11l,sic12l,sic22l,sib1l,sib2l,sia0l;
//
float hPa ;
int i=0,j=0;
boolean press[25][62];
float hPaa[10];
unsigned long startMillis;
//
void setup()
{
//
GLCD.Init(NON_INVERTED); // initialise the library, non inverted writes pixels onto a clear screen
GLCD.ClearScreen();
GLCD.SelectFont(Arial_14); // you can also make your own fonts, see playground for details
GLCD.GotoXY(0,0); // position cursor
GLCD.Puts("1020"); // write a string to the current cursor position
GLCD.GotoXY(0,20); // position cursor
GLCD.Puts("10"); // write a string to the current cursor position
GLCD.GotoXY(12,20); // position cursor
GLCD.Puts("1"); // write a string to the current cursor position
GLCD.GotoXY(18,20); // position cursor
GLCD.Puts("0"); // write a string to the current cursor position
GLCD.GotoXY(0,40); // position cursor
GLCD.Puts("1000"); // write a string to the current cursor position
GLCD.DrawLine(0,11,126,11, BLACK);
GLCD.DrawLine(0,31,126,31, BLACK);
GLCD.DrawLine(0,51,126,51, BLACK);
//
GLCD.DrawLine(126,60,126,62, BLACK);
GLCD.DrawLine(116,60,116,62, BLACK);
GLCD.DrawLine(106,60,106,62, BLACK);
GLCD.DrawLine(96,60,96,62, BLACK);
GLCD.DrawLine(86,60,86,62, BLACK);
GLCD.DrawLine(76,60,76,62, BLACK);
GLCD.DrawLine(66,60,66,62, BLACK);
GLCD.DrawLine(56,60,56,62, BLACK);
GLCD.DrawLine(46,60,46,62, BLACK);
GLCD.DrawLine(36,60,36,62, BLACK);
GLCD.DrawLine(26,60,26,62, BLACK);
//
//
Wire.begin();
//Serial.begin(9600);
//
for (i=0; i < 25; i++){
for (j=0; j <62 ; j++){
press[i][j]=false;
}
}
//
}
//
//
//
//
void loop()
{
for (int ii=0; ii < 10 ;ii++) {

Wire.beginTransmission(I2C_ADDRESS);
Wire.send(0x04);
Wire.endTransmission();
Wire.requestFrom(I2C_ADDRESS, 12); // request seven bytes
//
if(Wire.available()) {
short sia0MSB=Wire.receive();
short sia0LSB= Wire.receive();
sia0 = sia0MSB <<8; //s16 type //Shift to MSB
sia0 |= sia0LSB & 0x00FF; //Add LSB to 16bit number
sia0l = sia0;
//coeff b1 16bit
short sib1MSB= Wire.receive();
short sib1LSB= Wire.receive();
sib1 = sib1MSB <<8; //Shift to MSB
sib1 |= sib1LSB & 0x00FF; //Add LSB to 16bit number
sib1l = sib1;
//coeff b2 16bit
short sib2MSB= Wire.receive();
short sib2LSB= Wire.receive();
sib2 = sib2MSB <<8; //Shift to MSB
sib2 |= sib2LSB & 0x00FF; //Add LSB to 16bit number
sib2 &= 0xFFFF;
sib2l = sib2;
//coeff c12 14bit
short sic12MSB= Wire.receive();
short sic12LSB= Wire.receive();
sic12 = sic12MSB <<8; //Shift to MSB only by 8 for MSB
sic12 |= sic12LSB & 0x00FF;
sic12l = sic12;
//coeff c11 11bit
short sic11MSB= Wire.receive();
short sic11LSB= Wire.receive();
sic11 = sic11MSB <<8; //Shift to MSB only by 8 for MSB
sic11 |= sic11LSB & 0x00FF;
sic11l = sic11;
//coeff c22 11bit
short sic22MSB= Wire.receive();
short sic22LSB= Wire.receive();
sic22 = sic22MSB <<8; //Shift to MSB only by 8 for MSB
sic22 |= sic22LSB & 0x00FF;
sic22l = sic22;
}
//
Wire.beginTransmission(I2C_ADDRESS);
Wire.send(0x12);
Wire.send(0x01);
Wire.endTransmission();
delay(5);
Wire.beginTransmission(I2C_ADDRESS);
Wire.send(0x00);
Wire.endTransmission();
Wire.requestFrom(I2C_ADDRESS, 4); // request 4 bytes
//
if(Wire.available()) {
short uiPadcw1 = Wire.receive();
short uiPadcw2 = Wire.receive();
long uiPadc = uiPadcw1 << 8;
uiPadc |= uiPadcw2;
uiPadc &= 0xFFFF;
uiPadc >>=6;
//
short uiTadcw1 = Wire.receive();
short uiTadcw2 = Wire.receive();
long uiTadc = uiTadcw1 << 8;
uiTadc |= uiTadcw2;
uiTadc &= 0xFFFF;
uiTadc >>=6;
//

//
long a1 = sib1l + (sic11l*uiPadc /2.0/2.0/2.0/2.0/2.0/2.0/2.0/2.0/2.0/2.0/2.0/2.0/2.0/2.0) + (sic12l*uiTadc/2.0/2.0/2.0/2.0/2.0/2.0/2.0/2.0/2.0/2.0/2.0);
long a2 = (sib2l/2.0) + (sic22l*uiTadc/2.0/2.0/2.0/2.0/2.0/2.0/2.0/2.0/2.0/2.0/2.0/2.0/2.0/2.0/2.0);
float pcomp = sia0l/8.0 + (a1*uiPadc + a2*uiTadc)/8192.0;
//
hPa = (1150.0-500.0)/1023.0*pcomp + 500.0;
delay(1000);
hPaa[ii]=hPa;
//
//Serial.println(hPa);
}
}
//
hPa =(hPaa[0]+hPaa[1]+hPaa[2] +hPaa[3]+hPaa[4]+hPaa[5]+hPaa[6]+hPaa[7] +hPaa[8]+hPaa[9])/10.0;
//
int aa;
aa =(hPa-995.0)*2.0;
if (aa >= 0 & aa < 62) { press[0][aa]=true;}
//

//
for (i=0; i < 25; i++){
for (j=0; j < 62 ; j++){
if (press[i][j] == true ) {GLCD.DrawCircle(126-i*4,62-j-1,1,BLACK) ;}
}
}
//
if ( millis() - startMillis > 1440000 ) {
//
startMillis = millis();
//
for (i=24; i >= 0; i--){
for (j=0; j < 62 ; j++){
press[i+1][j] = press[i][j];
}
}
//
for (j=0; j < 62 ; j++){
press[0][j] = false;
}
//
GLCD.Init(NON_INVERTED); // initialise the library, non inverted writes pixels onto a clear screen
GLCD.ClearScreen();
GLCD.SelectFont(Arial_14); // you can also make your own fonts, see playground for details
//
GLCD.GotoXY(0,0); // position cursor
GLCD.Puts("1020"); // write a string to the current cursor position
GLCD.GotoXY(0,20); // position cursor
GLCD.Puts("10"); // write a string to the current cursor position
GLCD.GotoXY(12,20); // position cursor
GLCD.Puts("1"); // write a string to the current cursor position
GLCD.GotoXY(18,20); // position cursor
GLCD.Puts("0"); // write a string to the current cursor position
GLCD.GotoXY(0,40); // position cursor
GLCD.Puts("1000"); // write a string to the current cursor position
//
GLCD.DrawLine(0,11,126,11, BLACK);
GLCD.DrawLine(0,31,126,31, BLACK);
GLCD.DrawLine(0,51,126,51, BLACK);
//
GLCD.DrawLine(126,60,126,62, BLACK);
GLCD.DrawLine(116,60,116,62, BLACK);
GLCD.DrawLine(106,60,106,62, BLACK);
GLCD.DrawLine(96,60,96,62, BLACK);
GLCD.DrawLine(86,60,86,62, BLACK);
GLCD.DrawLine(76,60,76,62, BLACK);
GLCD.DrawLine(66,60,66,62, BLACK);
GLCD.DrawLine(56,60,56,62, BLACK);
GLCD.DrawLine(46,60,46,62, BLACK);
GLCD.DrawLine(36,60,36,62, BLACK);
GLCD.DrawLine(26,60,26,62, BLACK);
//
}
//
}







最終更新日  2010年12月25日 06時50分29秒
コメント(0) | コメントを書く
2010年10月27日
カテゴリ:マイクロチップ
回路は、16セグメントのLEDをダイレクトにarduinoにつなげています。
I2CのインタフェースでRTCとつなげているので、IOが1本足りないです。
したがって、LEDの右斜め上のセグメントがI2Cを開始すると光りません。

写真は、16セグメントで2桁を表示する時計の写真です。






最終更新日  2010年10月27日 11時28分41秒
コメント(0) | コメントを書く
2010年06月27日
カテゴリ:マイクロチップ
買い漁った部品、付録基板を使わないと、もったいないので、多機能ベースボードを作ってみました。

ベースボードの基本は、下記のサイトを参考にしました。
http://cac-japan.com/electronics/r8ctiny2/index.htm
http://www.cac-japan.com/electronics/r8ctiny3/index.htm

I2Cインタフェースについては、秋月のRTCモジュールを使わずに、
超高性能時計モジュールであるマキシム社のDS3232を使っている関係で、
上記のサイトのプログラムでは動かすことができませんでした。

そこで、以下のサイトのHEWに入っているモジュールを使い、
RTC周辺のプログラムをしています。
http://www.elektor.de/forum/foren-ubersicht/foren-zu-elektor-projekten/real-time-clock-fur-den-r8c.177181.lynkx

上記のモジュールは、とっても使いやすいDS3232専用モジュールです。
R8CとDS3232を使って、もうひとつ、作りたくなります。

DS3232は、正確でとっても使いやすいRTCです。
写真では、ピッチ変換基板に斜めに半田付けされてしまっています。






最終更新日  2010年06月27日 09時26分27秒
コメント(0) | コメントを書く
2010年06月17日
カテゴリ:マイクロチップ
どうも、ちっこいものしか作っていないので、
最終的には、宇宙へのメッセージを目指していますが、、、、
さしあたって、ちょこっと、大きい物を作ってみました。
写真は、RS232cで、メッセージを入れられる、ただのメッセージボードです。
左端に、10円玉を乗せています。結構、でかいです。
このために、RS232C の端末、および、
RS232Cに出力するRTCを使ったarduinoのシールドを作っています。
写真は、後者をメッセージボードに接続して時計にして使っています。
もちろん、RS232cの端末を接続して、メッセージを出すことも可能です。

RS232cって、便利です。







最終更新日  2010年06月17日 23時48分52秒
コメント(0) | コメントを書く
2010年05月24日
カテゴリ:マイクロチップ
すでに紹介済みのデロリアン型のタイムマシンで、未来に行ってきました。
そこで、量産型タイムマシンのIO装置を作成したので、
皆さんに紹介します。

youtubeのURLです。 酔っ払っているので、いつも以上にひどい英語です。

http://www.youtube.com/watch#!v=DHMvbad6Flo&feature=channel






最終更新日  2010年05月25日 00時42分22秒
コメント(0) | コメントを書く
2010年05月15日
カテゴリ:マイクロチップ
雑誌の付録を集めていたのですが、コレクションするだけではもったいので、実際に使ってみることにしました。

第1弾はデロリアンクロックです。
付録の基板を中心にデザインしています。

この時計、なんと、タイムマシン機能がついています。
未来にいけるのです。

youtube の 動画をごらんあれ。

http://www.youtube.com/watch?v=fqL7O6RxhuY







最終更新日  2010年05月15日 06時21分35秒
コメント(0) | コメントを書く
2010年04月30日
カテゴリ:マイクロチップ
1個50円は安いです。写真の十円玉を見てください。
大型でしょう。
写真の左の米印は、秒針です。点滅しながら、くるくる回ります。
arduinoに直付けで、ここまで光ります。

これを20×5個、合計100個買って、超大型LED時計を作りたい。
展示場所は、屋上です。

宇宙ステーションへ日本時間を知らせるのが目的です。
世界各地でやって、ワールドクロックを作ろう。






最終更新日  2010年04月30日 08時44分13秒
コメント(0) | コメントを書く
2010年04月28日
カテゴリ:マイクロチップ
300円の変換基板と500円のnokiaのカラーLCD、
総額800円の出力装置?をarduinoに繋げてみました。

3.3vと5vのレベル変換をしなければならないのですが、
抵抗で分圧したところ表示ができず、
計算よりも高めの電圧が必要だったので、
そのまま繋げてしまいました。
ちゃんと動いているようです。

この変換基板とLCDは、
アキバのaitendoの実店舗にあるのですが、
何故か、ぜんぜん売れていない。

アキバにいくと、毎回、1セットずつ買っています。
私は中国人の店員さんも大好きです。

中国の若者がいっぱい日本にくるとよいですね。

スイッチを付けて、オセロのできるarduinoもありますが、
このオセロ、強い!!!!







最終更新日  2010年04月28日 10時44分29秒
コメント(0) | コメントを書く

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

1 2 3 4 5 6 >


© Rakuten Group, Inc.