山本ワールド
PIC18F46K22でI2C液晶(AQM0802A-RN-GW)に文字を表示(アセンブラ)
概要
PIC18F46K22のI2Cモジュール1にI2Cキャラクタ液晶モジュール(8桁*2行)AQM0802A-RN-GBWを接続し文字の表示とコントラストの調整を実施するサンプルである。
電源はUSBから供給するので5Vである。液晶モジュールは標準電圧が3.3Vなので他の3.3V系のI2Cデバイスも接続できるように3.3V電源回路とレベル変換回路を設けた。液晶モジュール自体の最大定格は5V以上あるため、5Vを直接接続できるのではないかと思うが、試していない。
コントラスト調整は、lcd_contサブルーチンで制御できる。
本サンプルではAQM0802 PIC18を表示する。
秋月電子 PIC18F46K22使用 マイコンボードをベースとし半田付けされている水晶20MHzをH8/3048ボードの16MHzと交換し64MHzで動作可能とした。このボードはICSP端子を備えておりPICKIT 3で書き込みができ、電源はミニUSBで供給可能である。またユニバーサル基板になっているので簡単に回路を追加することができる。
ちなみに水晶が20MHzの場合は、動作が遅くなるだけである。
回路はPIC18F46K22でI2C液晶(AQM0802A-RN-GW)に文字を表示(C言語)と同一である。
プログラムの説明
ソースファイル
以下のファイルで構成されているlcd1a.asm ・・・ メインプログラム i2c.asm ・・・ i2cサポートライブラリ Version 1.00 i2c.inc ・・・ i2cサポートライブラリ Version 1.00 i2clcd.asm ・・・ lcdサポートライブラリ Version 1.00 i2clcd.inc ・・・ lcdサポートライブラリ Version 1.00
ソースファイルのダウンロード lcd1a.zip
i2c.asm
PIC内蔵のI2Cモジュールを使用したI2Cの基本的なプロトコルをサポート スタート・ストップ・リスタート・1byte書き込み・1byte読み込みをサブルーチン化している。 詳細は以下のリンクを参照されたいi2c.asm
i2clcda.asm
AQM0802を制御するライブラリである。初期化、コントラスト制御、文字列出力をサポートしている。
詳細は以下のリンクを参照されたい
i2clcd.asm
lcd1a.asm
メインルーチンである。
; I2C接続液晶 AQUM0802A-RN-GBWの表示サンプル Version 1.00 2014/02/23
; 慈渓博瑞テクノロジー株式会社 PIC18F46K22 マイコンキット Ver2013.12.08用
; http://akizukidenshi.com/catalog/g/gK-07231/
; 水晶は16MHzに交換してPICを64MHzで駆動
; MPLAB X IDE v1.85 Microchip MPASM(v5.51)
; PicKit 3
; 表示例
; AQUM0802A
; PIC18
; 使用端子
; SCK1(RC3),SDA1(RC4)
#INCLUDE <p18f46k22.inc>
#INCLUDE "i2c.inc"
#INCLUDE "i2clcd.inc"
; 水晶発振(16MHz) クロック分周無 PLL有効(*4) プライマリクロック有効 ウォッチドッグタイマ無効 低電圧プログラム書き込みモード無効
CONFIG FOSC = HSHP,PLLCFG=ON,PRICLKEN=ON,WDTEN=OFF,LVP=OFF
bank0 UDATA ; 変数の定義 バンク0
temp1 RES 1
temp2 RES 1
Tcount1 RES 1
Tcount2 RES 1
lcd_buf RES 20
GLOBAL temp1,temp2,Tcount1,Tcount2
; プログラムメモリのアドレスadsをTBLPTRレジスタに設定
LDTBLPTR MACRO ads
movlw UPPER ads
movwf TBLPTRU
movlw HIGH ads
movwf TBLPTRH
movlw LOW ads
movwf TBLPTRL
ENDM
CODE
ORG 0
goto start ; リセット時
start
movlb d'15'
; i2cで使用する端子をIOに変更
movlw b'11100111'
movwf ANSELC,BANKED
LDTBLPTR msg
lfsr FSR0,lcd_buf
; プログラムメモリからRAMへ文字列を転送
loop1
tblrd *+ ; プログラムメモリTBLPTRから読み出し後TBLPTRを+1する
movf TABLAT,W
movwf POSTINC0
bnz loop1
; i2c初期化
movlw b'00101000' ; SSPモジュールon,I2Cマスターモード(FOSC/4)
movwf SSP1CON1
clrf SSP1CON2
clrf SSP1CON3
movlw d'39' ; 約400kbps
movwf SSP1ADD
clrf SSP1STAT
; 液晶初期化
movlw d'3' ; 200ms/64Mhz/16/256/256=13
call delay1024kc
call lcd_init ; 液晶初期化
lfsr 1,lcd_buf
call lcd_puts ; 文字列表示
goto $
msg ; 表示される文字列 改行コード0ah 文字終了は0
DB "AQM0802",00ah,"PIC18",0
END
Copyright (C) 2012 山本ワールド All Rights Reserved.