Compatible with ATM0177B3A
秋月電子で販売されているATM0177B3AをNucleo F303K8で動かしました。https://akizukidenshi.com/catalog/g/gK-14032/
フォーク元は以下になります。ピン番号の変更とライブラリの更新のみでも一応動きます。https://os.mbed.com/users/morita/code/DL144128_LCD/file/c0be4e018a09/ili9163lcd.h/
変更点
- SPIクロックの極性を変更→データシートでは立下りでデータ出力です。
void lcdWriteCommand(uint8_t address) { uint8_t i; CS_ = 0; A0_ = 0; for(i=0;i<8;i++){ if(address & 128)SDA_= 1; else SDA_ = 0; SCK_ = 0;//変更箇所 address <<= 1; SCK_ = 1;//変更箇所 } wait_us(1); CS_ = 1; }
- RGBの並びを変更→データシートではMSBファーストでRGBの並びです。
inline uint16_t decodeRgbValue(uint8_t r, uint8_t g, uint8_t b) { return (r << 11) | (g << 6) | (b); }
- 画面サイズをdefine
//128x160 #define COL_MAX 0x7f #define PAGE_MAX 0x9f
- 画面表示方向のdefine定義名を変更 →LCD_ORIENTATION0 がエラーのため
#define LCD_ORIENTATION0 0//変更前 #define ROT_TOP 0b00000000//変更後
機能追加
- グラデーション
void grade(void);
- カラーバー
void colorbar(void);
- バースト機能→ 1byte転送毎にwait_us(1)が呼び出され、速度低下していました。 wait_us(1)を削除した関数を2つ作成しました。
void lcdWriteData_burst(uint16_t *burst_data,uint16_t length); void lcdWriteData_sameburst(uint16_t data,uint16_t length);
他省略
- ガンマカーブ設定のコメントアウト →初期設定で問題なし
- 画面サイズ設定のコメントアウト →HWで設定済、ballとbatはVRAMを部分的に書き換えているため、毎度caset、rasetの設定が必要です。
HW構成
- VFのTYPが3.3Vと精度が疑わしく、電流制限抵抗の設計が難しい→バックライトの実測
負荷抵抗:10Ω、電源電圧:3.276V時 VR=0.335V、従ってVF=2.941V、IF=33.5mA
負荷抵抗:100Ω時 VR=0.621V、従ってVF=2.655V、IF=26.55mA →若干暗いけど問題ないので採用
- ピン配置
DigitalOut SCK_(A4); DigitalOut SDA_(A6); DigitalOut A0_(A2); DigitalOut RESET_(A1);//10kプルアップ DigitalOut CS_(A3);