以前、AVRを使ってaitendoのNokia5110液晶に出力して遊んだことがあります。
AVRでNokia5110を使ってみる (初ネギ)
Nokia5110液晶の高速描画
今回はNetduinoで出力してみました。
この液晶は、SPIで通信する必要があるので、今回初めて使ってみました。関連するクラスは次の2つです。
SPI SPIの本体
SPI.Configuration SPIの設定 (通信速度等)
通信のビット幅は指定できず8ビット固定です。4種類あるフォーマットは全てサポートされています。
ソースコードです。
今回は、ジャンプワイヤーの色に凝ってみました。3pinがオレンジ、4pinが黄色、5pinが緑、6pinが青、7pinが紫です。実に分かりやすいですね(笑)。
いつもながら何を出力するのか困りましたが、最近は触覚が生えていて猫耳なのがいいらしいです。
参考
.NET Micro Framework WikiのSPI
Lynx-EyEDの電音鍵盤さんの「netduinoでOLED制御してみた」
ニコニコ大百科「中野梓とは」
AVRでNokia5110を使ってみる (初ネギ)
Nokia5110液晶の高速描画
今回はNetduinoで出力してみました。
この液晶は、SPIで通信する必要があるので、今回初めて使ってみました。関連するクラスは次の2つです。
SPI SPIの本体
SPI.Configuration SPIの設定 (通信速度等)
通信のビット幅は指定できず8ビット固定です。4種類あるフォーマットは全てサポートされています。
ソースコードです。
using System; using System.Threading; using Microsoft.SPOT; using Microsoft.SPOT.Hardware; using SecretLabs.NETMF.Hardware; using SecretLabs.NETMF.Hardware.Netduino; namespace Netduino_Nokia5100 { public class Program { static byte [] pic = new byte[48 * 6]{ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x4c,0xb0,0x0c,0x38,0x08,0x18,0x58,0x30,0x60,0xe0,0xe0,0xe0,0xf0,0xe0,0xf0,0xe0,0xe0,0xe0,0xe0,0xe0,0xe0,0xf0,0xb0,0x18,0x38,0x08,0x3c,0xec,0x10,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xc0,0x33,0xdc,0xf0,0xd3,0xfc,0xfe,0xfc,0xff,0x7f,0xff,0xff,0x4c,0xf7,0xdf,0xff,0xff,0xff,0xff,0xff,0xff,0xfa,0xee,0xb8,0x60,0xf0,0xe8,0x07,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0xc0,0xf0,0xfc,0xfe,0x7b,0x7c,0xff,0xff,0xff,0xff,0x3f,0x87,0x7f,0x83,0x84,0x8b,0x17,0x3f,0xff,0xff,0x3f,0x07,0x00,0x5f,0x83,0xc7,0xbf,0x1f,0xff,0xff,0xff,0xff,0x1f,0xff,0xfe,0xf8,0xb0,0xc0,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x50,0xee,0xfb,0x3e,0x07,0x00,0x00,0x01,0x57,0x7f,0xff,0xef,0x89,0x00,0x07,0x07,0x07,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x01,0x07,0x03,0x07,0x01,0x45,0xff,0xff,0xef,0x0a,0x00,0x00,0x17,0x7f,0xff,0xff,0xfe,0xe8,0xa0,0x00,0x00, 0x00,0xf0,0xff,0xff,0xff,0x01,0x00,0x00,0x00,0x00,0x00,0x01,0x0d,0x77,0xff,0xff,0x0a,0x00,0x00,0x00,0xa0,0x40,0x20,0xc0,0x00,0xc0,0x20,0x40,0x80,0x00,0x00,0x00,0xff,0x7f,0x7b,0x0e,0x00,0x00,0x00,0x00,0x00,0x07,0x7f,0xff,0xff,0xff,0xe8,0x00, 0x14,0xff,0xef,0x9f,0xea,0x00,0x00,0x00,0x80,0xc0,0xc0,0xc0,0xe0,0xf0,0xf0,0xfd,0xfc,0xff,0xfb,0x82,0x80,0x35,0x52,0xac,0x4f,0x9c,0x61,0x82,0x40,0xff,0xfe,0xfc,0xf8,0xf1,0xe0,0xc0,0x80,0x80,0x00,0x00,0x00,0x00,0x00,0xc3,0xff,0xff,0xff,0xa0, }; // Nokia5110 <-> Netduino // pin1 Vcc ------ 3.3V // pin2 GND ------ GND // pin3 SCE ------ D8 pull-up w/ 10k ohm resister // pin4 RESET ---- D9 pull-down w/ 10k ohm resister // pin5 D/C ------ D10 // pin6 SDIN ----- D11 // pin7 SCLK ----- D13 // pin8 LED+ ----- open or 3.3V public static void Main() { // write your code here // initialize // rst = D9; dc = D10; sce = D8 Nokia5100 lcd = new Nokia5100(Pins.GPIO_PIN_D9, Pins.GPIO_PIN_D10, Pins.GPIO_PIN_D8); // draw picture uint x, y, p; p = 0; for (y = 0; y < 6; y++) { lcd.locate(18, y); for (x = 0; x < 48; x++) lcd.write(pic[p++]); } // loop forever Thread.Sleep(Timeout.Infinite); } } public class Nokia5100 { OutputPort rst, dc; SPI spi; byte[] buf = new byte[1]; public Nokia5100(Cpu.Pin rst, Cpu.Pin dc, Cpu.Pin sce) { this.rst = new OutputPort(rst, false); // rst = low this.dc = new OutputPort(dc, true); // d/c = high (data) spi = new SPI(new SPI.Configuration( sce, // ChipSelect_Port false, // ChipSelect_ActiveState : active low 0, // ChipSelect_SetupTime 0, // ChipSelect_HoldTime false, // Clock_IdleState : the idle state of the clock is low true, // Clock_Edge : rising edge 1000, // Clock_Rate : 1000KHz SPI.SPI_module.SPI1 // SPI_mod : D11 MOSI, D12 MISO, D13 SCK )); // initialize Thread.Sleep(100); // wait 100ms this.rst.Write(true); // rst = high sendcmd(0x20 | 1); // FSET : PD = 0, H = 1 sendcmd(0x10 | 3); // BIAS : BS = 3 (1/48 duty) sendcmd(0x80 | 16); // VOP : Vop = 16 (contrast) sendcmd(0x04 | 1); // TMP : TC = 1 sendcmd(0x20); // FSET : PD = 0, H = 0 sendcmd(0x08 | 4); // DISP : D = 1, E = 0 clear(); } void sendcmd(uint cmd) { dc.Write(false); // d/c = low (command) buf[0] = (byte)cmd; spi.Write(buf); dc.Write(true); // d/c = high (data) } public void locate(uint x, uint y) { sendcmd(0x80 | (x & 0x7f)); // SETX 0-83 sendcmd(0x40 | (y & 7)); // SETY 0-5 } public void clear() { int i; for (i = 0; i < 84 * 6; i++) write(0); locate(0, 0); } public void write(uint data) { buf[0] = (byte)data; spi.Write(buf); } public void write(byte[] data) { spi.Write(data); } } }
今回は、ジャンプワイヤーの色に凝ってみました。3pinがオレンジ、4pinが黄色、5pinが緑、6pinが青、7pinが紫です。実に分かりやすいですね(笑)。
いつもながら何を出力するのか困りましたが、最近は触覚が生えていて猫耳なのがいいらしいです。
参考
.NET Micro Framework WikiのSPI
Lynx-EyEDの電音鍵盤さんの「netduinoでOLED制御してみた」
ニコニコ大百科「中野梓とは」