忍者ブログ

Azukish

消えゆく世界と流れる未来に最後の灯を since 2006/4/3

2024/05/07

[PR]

×

[PR]上記の広告は3ヶ月以上新規記事投稿のないブログに表示されています。新しい記事を書く事で広告が消えます。

コメント

ただいまコメントを受けつけておりません。

2018/03/25

MSP-EXP430FR2433でNokia 5110の液晶を動かす


Nokia 5110の液晶部を$4.3セールしてたMSP430FR2433でプログラムしてみた。
なぜMSP430G2じゃないのかというと、LinuxでIDEが使用不可のため。

ArduinoやRaspberrypiでコントロールする例は結構見つかるが、やっぱりMSP430の情報は少し少なめだ。
Arduinoで動かした例: Nokia 5110 LCD 動かして見ました ( おもちゃ ) - 趣味の電子工作
Raspberry PIで動かした例: Nokia 5110/3310 LCD Python Library | Adafruit
MSP430G2で動かした例: Nokia 5110 display - 43oh
とりあえず、最低限のコードで書くだけ書いてみた。




このNokia 5110の液晶モジュールは個人的にMSP430と非常に相性が良いと思う、というのも3.3V駆動なのだ。
5V駆動のディスプレイとしては有名どころだとSC1602シリーズがあると思う。
ただ、文字の表示特化で、文字数の制限もあるので使いづらい。
Nokia 5110の液晶モジュールは84x48ドットで、自由にドットが打てるので非常に柔軟性がある。
基本的な操作は4-wire SPIで可能。一点除いて結構簡単だった。

接続は以下のような感じ。
LED → 未接続
SCLK → P2.4 (UCA1のSPI SCLK)
DN(MOSI) → P2.6 (UCA1のSPI MOSI)
D/C → P2.0 (GPIO)
RST → P2.1 (GPIO)
SCE → P3.1 (UCA1のSPI STE)
GNDとVCCはそれぞれGNDと3.3Vに接続 (5Vは動作範囲外)

コードは下みたいな感じ。
#include <msp430.h>
#define COMDSEND P2OUT &= ~BIT0
#define DATASEND P2OUT |= BIT0

int main(void)
{
    WDTCTL = WDTPW | WDTHOLD;	// stop watchdog timer
    P2SEL0 |= BIT4 | BIT6; // SPI
    P3SEL0 |= BIT1; // SPI STE
    UCA1CTLW0 |= UCMST | UCSYNC | UCCKPH | UCMSB | UCSSEL__SMCLK | UCMODE1 | UCSTEM;
    P2DIR  |= BIT0 | BIT1;
    P2OUT  |= BIT1;
    UCA1CTLW0 &= ~UCSWRST;
    PM5CTL0 &= ~LOCKLPM5;
    P2OUT  &= ~BIT1;
    _delay_cycles(10);
    P2OUT  |= BIT1;

    COMDSEND;
    UCA1TXBUF = 0b00100001;
    while (!(UCA1IFG&UCTXIFG));

    UCA1TXBUF = 0b10111111;
    while (!(UCA1IFG&UCTXIFG));

    UCA1TXBUF = 0b00100000;
    while (!(UCA1IFG&UCTXIFG));

    UCA1TXBUF = 0b00001100;
    while (!(UCA1IFG&UCTXIFG));

    DATASEND;
    UCA1TXBUF = 0b00011111;
    while (!(UCA1IFG&UCTXIFG));

    UCA1TXBUF = 0b00000101;
    while (!(UCA1IFG&UCTXIFG));

    UCA1TXBUF = 0b00000111;
    while (!(UCA1IFG&UCTXIFG));

    UCA1TXBUF = 0b00000000;
    while (!(UCA1IFG&UCTXIFG));

    UCA1TXBUF = 0b00011111;
    while (!(UCA1IFG&UCTXIFG));

    UCA1TXBUF = 0b00000100;
    while (!(UCA1IFG&UCTXIFG));

    UCA1TXBUF = 0b00011111;
    while (!(UCA1IFG&UCTXIFG));
    while (1);
}

意味としては、上のCOMDSENDまでがSPIやピンの設定。
SPIのチップセレクトで毎回GPIOをパタパタさせるのは面倒なので、UCSTEMでSPIとGPIOを連動させた。
GPIOはPM5CTL0のLOCKLPM5のビットをリセットしておかないと機能しないらしいMSP430 FRAM FR5/FR6 外部pinとDIO設定 [msp430info FRAM DIO])。
また、Nokia 5110液晶を制御しているチップ(Philips PCD8544)のデータシートの8.1 Initializationに起動直後にリセットをかけることと書いてあるので、P2.1をパタつかせた。

その後のSPI通信は一点を除いてPCD8544データシートの13 Application Information - Table 6に書いてある制御のSTEP1-12までと同じ。
その一点というのがVopの設定。
ICの中にチャージポンプ型の昇圧回路が入っていて、その電圧設定値がLCDのものと異なると動作しない(当然)。
で、たぶん物とか温度とかによって変わるのだろうと思うんだけれど、2つめのSPIコマンドの0b10111111の部分を状況によって適当に変更するべきらしい。

温度係数とかも色々と設定項目があるらしく、Nokia 5110 display - Projects - 43ohでは、
Vopの設定=0x80|0x3F (Vop=3.06+0.06x63=6.84V)
温度計数の設定=0x04|0x02 (TC2, 17mV/K)
バイアス電圧の設定(これはよくわからん)=0x10|0x03 (Mux Rate=1:48?デューティ比?)
というふうになっているみたい。
最後のバイアス電圧の設定はよくわからないが、これらを盛り込むことで不自然にディスプレイが真っ黒になったり白っぽくなったりするのは改善されるみたい。
とりあえず、僕のボードではVopの設定のみで動いたが、もしやってみて駄目だったらこのあたりを弄ってみることを推奨。

拍手

コメント













カレンダー

04 2024/05 06
S M T W T F S
1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31

アーカイブ

AD

Azkishはamazon.co.jpを宣伝しリンクすることによって サイトが紹介料を獲得できる手段を提供することを目的に設定されたアフィリエイト宣伝プログラムである、 Amazonアソシエイト・プログラムの参加者です。