Sim's blog

電子工作はじめてみました

2周年

2009-03-31 21:25:58 | その他
このブログをはじめてから、2年が過ぎました。早いものですね。少しは成長できたでしょうか。
なんにせよ、2年も続いたってのは、今までの人生で奇跡に近いです。
今後ともよろしくお願いいます。

1周年

SG12864Aのテスト回路

2009-03-29 21:16:22 | AVR
SG12864Aを使ってみましたの続きになります。

書いてみた回路図です(クリックで拡大します)。


Voがコントラストの入力です。Voutから-10Vくらいが出ているので、GNDとの間で分圧して-4Vくらいを入力します。

以前試したときは、busy待ちをしないで適当に待つとうまく動きませんでした。busy待ちのために入力と出力を頻繁に切り替えるので、途中浮いた状態になります。データラインはプルアップした方がいいかもしれません。

リセットだけプルダウンしてます。

バックライト用の電流制限抵抗はないので、外部に抵抗をつないでやる必要があります。正確にはR8の0Ωがつながっています。10Ωで100mAちょい流れています。バックライトを使うときは、パスコンを増強してやらないとうまく動きませんでした(C2の100uF)。

PFM制御ステップアップDC-DCコンバータHT7737

2009-03-29 00:13:57 | 電子工作
共立エレショップHT7737というHT7733AやHT7750Aの仲間が入荷しています(1個63円、商品コード 註93H318)。10個単位で504円(商品コード 註93H319)。

入力:0.7~6.0V
出力:3.7V
出力電流:100mA(Max)
スイッチング周波数:115KHz
消費電流:4uA(typ)
効率:85%(typ)
パッケージ:TO-92

白色や青色のLEDをつける用途だと、出力が3.7VなのでHT7733Aよりこちらの方がよさそうです。

メーカーのページ

SG12864Aを使ってみました

2009-03-28 23:24:45 | AVR
秋月でSG12864Aという128x64ドットのグラフィック液晶が売られています(通販番号P-02159)。発売当時はもっと高かったのですが、いつのまにか値下げしています(2100円→1700円)。発売当時に書いた記事です。

この液晶の特長はなんといっても5Vで動かせることです。他に手に入るものは3.3V系のものが多いです。どうして5Vかというと、ATmarquinoで動かしたかったからです。でもって、慣れないせいもあってか、未だに動かせていません。しかたないので、配線やロジックの確認のために素のATMega168を使ってCでプログラムを書いてみました。一応、以前V850用に書いたことがあったので、すんなり動きました。そのときは、サイキットさんの液晶用だったのですが、秋月のも互換性があります。って、久々にサイキットさんを見たら液晶が値下がりしてます。

出力例です。

ネギは振りません。とりあえず静止画です。

配線はもじゃー

データが8本、制御が6本です。

コードです。<と>は全角になっています。
#include <avr/io.h>
#include <util/delay.h>
#include <avr/pgmspace.h>

#define DC PB5  // 19→4
#define RW PB4  // 18→5
#define E  PB3  // 17→6
#define D0 PD0  //  2→7
#define D1 PD1  //  3→8
#define D2 PD2  //  4→9
#define D3 PD3  //  5→10
#define D4 PD4  //  6→11
#define D5 PD5  // 11→12
#define D6 PD6  // 12→13
#define D7 PD7  // 13→14
#define CS1 PB2 // 15→16
#define CS2 PB1 // 14→17
#define RST PB0 // 13→18

#define lcd_d() PORTB |= _BV(DC)
#define lcd_c() PORTB &= ~_BV(DC)
#define lcd_r() PORTB |= _BV(RW)
#define lcd_w() PORTB &= ~_BV(RW)
#define lcd_e1() PORTB |= _BV(E)
#define lcd_e0() PORTB &= ~_BV(E)
#define busy (PIND & 0x80)


void busywait(void)
{
    DDRD = 0x00;
    lcd_c();
    lcd_r();
    do {
        lcd_e1();
        lcd_e0();
    } while(busy);
    DDRD = 0xff;
    lcd_w();
}

void left(void)
{
    PORTB &= ~_BV(CS2);
    PORTB |= _BV(CS1);
}

void right(void)
{
    PORTB &= ~_BV(CS1);
    PORTB |= _BV(CS2);
}

void lcd_cmd(uint8_t c)
{
    busywait();
    lcd_c();
    PORTD = c;
    lcd_e1();
    lcd_e0();
}

void lcd_data(uint8_t c)
{
    busywait();
    lcd_d();
    PORTD = c;
    lcd_e1();
    lcd_e0();
}

void lcd_locate(uint8_t x, uint8_t y)
{
    lcd_cmd(0x40 | (x & 0x3f));
    lcd_cmd(0xb8 | (y & 7));
}

void lcd_init(void)
{
    DDRD = 0xff;
    DDRB = 0xff;

    // リセット
    PORTB = 0x00;
    _delay_ms(1);
    PORTB |= _BV(RST);

    left();
    lcd_cmd(0xc0);
    lcd_cmd(0x3f);

    right();
    lcd_cmd(0xc0);
    lcd_cmd(0x3f);
}

PROGMEM uint8_t pic[128*8] = {
    0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x40,0xe0,0xf0,0xfc,0xf8,0xf0,0xe0,0xe0,0x80,0x00,0x00,0x00,0x00,0xe0,0xe0,0xf0,0xf0,0xf8,0xc0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
    0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x04,0x09,0x1b,0x17,0x3f,0x7f,0xff,0xff,0xff,0xfe,0xfc,0xf8,0xf1,0xff,0xff,0xff,0xff,0xff,0xfc,0xe0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xc0,0xe0,0xf0,0xf8,0xf8,0xfc,0xfe,0xfd,0xfd,0xfd,0xfe,0xfe,0xfe,0xfe,0xfe,0xfe,0xff,0xff,0xff,0xff,0xff,0xff,0xfe,0xfe,0xfe,0xfe,0xfc,0xfc,0xfc,0xf8,0xf0,0xf0,0xf0,0xf8,0xfc,0xf4,0xfc,0xfc,0xf0,0xe0,0xc0,0x80,0x00,0x00,0x00,0x00,0x00,
    0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x03,0x03,0x07,0x0f,0x1f,0x3f,0x7f,0xff,0xff,0xff,0x7f,0x3f,0x3e,0x60,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xc0,0xf0,0xf8,0xfe,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x7f,0x3f,0x1f,0x0f,0x0f,0x07,0x07,0x03,0xff,0xff,0xff,0xff,0xff,0x0f,0x03,0x07,0x0f,0x1f,0x3f,0x7f,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xfc,0xf0,0xc0,0x00,
    0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x03,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xc0,0xfc,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xdf,0x47,0x27,0x20,0x42,0x82,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x07,0x1f,0x7f,0xff,0xff,0x00,0x04,0x84,0x40,0x48,0x48,0x81,0x17,0x3f,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
    0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x08,0x60,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x80,0xe0,0xfc,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x3f,0x9f,0x0f,0x00,0x03,0x06,0x04,0x04,0x06,0x03,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x00,0x00,0x00,0x03,0x03,0x03,0x07,0x0c,0x08,0x08,0x07,0x00,0x00,0x07,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
    0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x08,0xe0,0xff,0xfc,0xfc,0xfe,0xfe,0xfe,0xfe,0xfe,0xfe,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xf8,0xf9,0xf0,0x80,0x80,0x00,0x00,0x00,0x00,0xff,0x03,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0xc1,0x3f,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x80,0xc0,0xe0,0xff,0xff,0xff,0xff,0x7f,0x3f,0x1f,0x0f,0x0f,0x0f,0x07,0x07,0xff,0xff,0xff,0xff,0xff,
    0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x3f,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x24,0x40,0x4e,0x59,0x10,0x90,0x90,0x90,0x90,0x90,0xf0,0xf0,0x7f,0x70,0x70,0xf0,0xf0,0xf0,0xf8,0xf8,0xf0,0x7c,0x0c,0x0f,0x0f,0x1f,0x1f,0x3f,0x23,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x03,0xff,0xff,0xff,0xff,
    0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xc3,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x0f,0x0f,0x0f,0x1f,0x98,0xd0,0x70,0x30,0xfc,0xfe,0xff,0xff,0xff,0xff,0x3f,0xfc,0xf8,0xf8,0x3e,0x0f,0x07,0x07,0x7f,0xe3,0x80,0x80,0x00,0x20,0x20,0x00,0x82,0x8c,0xf0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xff,0xff,0xff,0xff,
};

int main()
{
    uint8_t *p = pic;
    uint8_t x, y;

    DDRC = _BV(PC5);

    lcd_init();
    for(y = 0; y < 8; y++){
        left();
        lcd_locate(0, y);
        for(x = 0; x < 64; x++) lcd_data(pgm_read_byte(p++));
        right();
        lcd_locate(0, y);
        for(x = 0; x < 64; x++) lcd_data(pgm_read_byte(p++));
    }

    while(1){
        PORTC ^= _BV(PC5);
        _delay_ms(200);
    }
}


Arduinoを使って分かったことは、デジタル出力の0と1はなるべく使わない方がいいということです。RXとTXなのでプログラミングするのにも使われているからです。あとは、DDRB、PORTB、PINBといったポートへのバイト入出力が普通に使えることです。
回路図は後で描きます。

ATMega168って、実質的に連続して8ビットとれるポートがPORTDしかないです。Arduinoだとデジタル出力の0~7です。

うーん、せっかくのArduinoなのに、全然プロトタイプしてないです><

イチから作って丸ごと学ぶ! H8マイコン道

2009-03-27 07:34:21 | 電子工作
@IT組み込み開発で「イチから作って丸ごと学ぶ! H8マイコン道」という連載が始まっています。
秋月のH8マイコンボードを載せるベースボードをP板.comCADLUS Xで設計しちゃおうという内容みたいです(第1回)。今後が楽しみです。

以前、マイコミジャーナルにも「一歩進んだ電子工作をやってみよう」という連載がありました。こちらは全6回で完了しています。

日昇テクノロジー通販のARM用簡易JTAG

2009-03-26 00:11:11 | その他のマイコン
日昇テクノロジー通販さんでARM用の格安JTAGケーブルがなんと1000円ぽっきりです。コネクタが10ピンなので、そのままつなぐというわけにはいきませんが、それにしても安いです。

他にもマイコンボードやCPLDボードなんかも販売されています。

AVR用USBダウンロードケーブルも1500円ぽっきりです。



LPC2388基板でLEDチカチカ

2009-03-25 00:49:00 | その他のマイコン
イヤホンのコードが断線したのでヨドバシに行ったら、なぜかInterface 5月号が山積みになってました。速攻でレジに向かったのは言うまでもありません。

LPC2388付録基板は、こんなのです。


p.47の写真5にある、最低限必要なコネクタを実装しました。

裏面には、チップ部品がちりばめられているので、はんだごてで触ってチップ部品をはずさないように気をつけました。

とりあえず、USBケーブルをつないでPCにつないでみました。USBシリアル変換のCP2102はV850付録基板やFR60付録基板と同じ石なのでドライバは導入済みなので、インストール作業はスキップできました。COM11につながっています。

p.69の「内蔵フラッシュROM書き換えツールFlashMagicの使い方」を見て、FlashMagicをダウンロードしてインストールしました。

Interfaceのダウンロードページから4月号のファイル「第3章 開発環境を使ってC言語プログラムをコンパイルしてみよう/サンプル・プロジェクト一式」をダウンロードします。ファイル名はCQ.lzhです。
解凍したフォルダの下のInterface¥IAR_Workspace¥FirstProject¥Debug¥Exeの下にあるFirstProject.hexが4月号p.72にあるLEDチカチカプログラムをコンパイルしたhexファイルです。

5月号p.45の左上に書いてあるようにJP2をショートしてJP1をリセットするとISPモードで起動します。FlashMagicを使って、FirstProject.hexを書きこみました。
ジャンパーやコネクタの使用法一覧がp.45下の表5にまとまっています。

JP2をオープンにしてリセットするとLEDチカチカが開始します。


JTAG用の20pinのコネクタCN4のピン配置は、olimexのARM-JTAGと互換があるみたいです(ソリトンウェーブ)。ソリトンウェーブのページには色々なツールへのリンクがあります。

p.37に載っている「LAN&SDカード・ソケット拡張子基板」がよさげな感じです。CN3に直接させる子基板に、LAN、SDカードソケット、USBホストのコネクタが搭載されています。たぶんLANのphyチップも載っているものと思われます。なんか最強のグレードアップです。ちょっと気になるのは、こんなに載せて、電源はUSBだけで足りるんでしょうか?

回路図にはあるんですが、L1、L2、L3が実装されていません。USBのフレームグランドとGNDの間のインダクタです。型番はBNX18AG120となっていますが、ぐぐっても見つかりませんでした。murataのチップインダクタかな?

さてさて、先月号から復習です。

トランジスタティーセット

2009-03-23 23:00:00 | 電子工作
amazonでトランジスタをキーワードにして検索すると、「トランジスタティーセット ~電気街路図~ (1)」というマンガがヒットしました。表紙は電気街っぽいところで、はんだごてを手にもつ少女・・・。どんな中身なのか気になります。
atomさんという方のレビューには、「秋葉原好きなら買うべき」とあります。うーん、気になる。

LPC2388基板の部品セットが若松に出ています

2009-03-22 05:38:21 | その他のマイコン
Interface 2009年5月号(3/25発売)の付録ARM基板の部品セットの広告が若松通商のオンラインショップに出ています。って、ARNはちょっぴり悲しいです。 3/25 追記 ARMに修正されています。

インターフェース 2009年5月号付録マイコンARM7基板周辺実装部品一式」1150円
あまり特殊な部品はないです。32.768KHzと思われる水晶発振子くらいでしょうか。今までだと、外部の水晶発振子はオプションでつけなくても動作には困らないことが多かったので、USBコネクタとピンヘッダくらいあればよさそうです。

ベースボードもあるようです。
インターフェース 2009年5月号 94ページ 拡張ベースボード CQ-BBEL」8000円
写真では2桁の7セグLEDやディップスイッチが見えます。左と右下にある細長いのは何でしょうか?
LPC2388は、Ethernetの物理層がないのでphy chipを外付けしてやる必要があるそうです。このボードはEthernet用の拡張はないように見えます。

LPC2388付録基板には20ピンのピンヘッダがあります。これはたぶんJTAG用のコネクタです。CP2102が載っているので、USBからプログラミングすることもできるっぽいですが、それ以外にJTAG経由でプログラミングやデバッグを行えるようになっているのだと思います。ソリトンウェーブでolimexのARM JTAG製品を売ってます(リンク)。千石でも買えます。
そういえば去年のCortex-M3基板のときにJTAG基板を作ろうとして挫折してました。あのときは何がいけなかったんだろう。Cortex基板は書き込むのにツールをいくつも使わないといけなく結構面倒だったので、JTAG基板を作ろうとして失敗したまま放置してたのでした。

Arduinoのアナログ入力ピン

2009-03-19 23:50:06 | AVR
Arduinoのアナログ入力ピンって、デジタル出力にも使えたんですね。気づいていませんでした。

アナログ入力の0 デジタル出力の14
アナログ入力の1 デジタル出力の15
アナログ入力の2 デジタル出力の16
アナログ入力の3 デジタル出力の17
アナログ入力の4 デジタル出力の18
アナログ出力の5 デジタル出力の19

全部でデジタル出力は20ピン使えることになります。

ATmarquinoのアナログ入力ピンからLEDチカチカです。


WinAVR20090313のバグ

2009-03-19 23:34:48 | AVR
WinAVRの最新版20090313を使ってみて気づいたバグです。
CPUをATmega328Pにした場合、PB0等が使えません。本来だとiom328p.hで#defineされているはずですが、なぜかありませんでした。回避方法は自分で#defineすることです^^
ATmega168だと、このバグはありませんが、168Pにすると出ます。