何度も体当たりしてギブアップしました。

こんどは、MikroCコンパイラにしてみました。これは、2Kワードまでなら無料で、各種関数が整備されています。


16F648AでLCD表示
16F88でLCD表示


  
MikroCコンパイラで 16F648A のLCDに挑戦
まずは、サンプルプログラムをそのまま使ってみましょう。
ディフォルトのピン配置でPORTBを使っています。
RS=>PORTB.2
R/W=>PORTB.0
E=>PORTB.3
DB4=>PORTB.4
DB7=>PORTB.7
です。

LCDにmikroElektronikaと表示して、PORTB.1につないだLEDを0.5秒間隔で
点滅させてみました。




この状態でターゲットデバイスを16F648Aにしてビルドします。
あとは秋月ライターで書き込みますが、こんな感じの設定です。


     
これで、めでたく16F648AでLCDが動作します。
なんだかコンパイラだけ変わって、プログラムの内容はほとんど同じですね。

このプログラムで、ROMは91%フリー、RAMは84%フリーです。

MikroCコンパイラで 16F88 のLCDに挑戦。
こんどは、16F88でLCD表示です。16F88はAD入力が可能なPICです。
まずは、同じソースでコンパイルして、書き込みますが、コンフィグレジスタの書き込みエラーが
発生しました。16F648Aとは、コンフィグレジスタの設定に違いがあるようです。
よく見てみると、CFG2がアクティブになっています。なにやら、Enableになっているので
さしあたり、Disableにしてみました。
これで書き込みエラーはなくなりました。



しかし、動作してくれません。下記のANSEL設定を追加したところ動作しました。

   char *text = "mikroElektronika";

   void main() {
   // CMCON = 7; //disable comparators
   TRISA = 0;
   TRISB = 0;
   PORTA = 0;
   PORTB = 0;
   ANSEL = 0b00000000;
   Lcd_Config(&PORTB,2,3,0,7,6,5,4);
   Lcd_Init(&PORTB);
   LCD_Cmd(LCD_CLEAR); // Clear display
   LCD_Cmd(LCD_CURSOR_OFF); // Turn cursor off
   LCD_Out(1,1, text); // Print text to LCD, 2nd row, 1st column
   while(1)
    {
    }
}

16F648Aでは、CMCON = 7;が判らず、16F88では、ANSEL = 0b00000000;が判らず、それぞれ1週間くらい
悩みました。ANSELについては、”PICについて語ろう”の掲示板で、教えていただきました。
また、”久世に訊け!!ver.2007”にも詳しく説明がありました。



このようにブレッドボードでテストしています。中央のチップが16F88です。



チップにはこのように、テプラで作成したシールを張っています。
最近小さな文字がぁ...これならすぐに判ってとっても便利です。