トップ 新規 編集 差分 一覧 ソース 検索 ヘルプ PDF RSS ログイン

サンプルプログラム

Getting Started Notes へ戻る


 数値→文字列変換

ふつ〜itoa(val,s,radix) ?

AVR-LibCのマニュアル参照。142Bytes(mega8)、262-957サイクル。速く小さくなった?

表示幅一定のitoa

char s[8],s2[8];
strcpy_P(s,PSTR("       "));
itoa(val,s2,radix);
strcpy(s+7-strlen(s2),s2);
itoa(data,s,10);
sl=strlen(s);
for(i=sl;i<7;i++) lcd_putchar(' ');
lcd_puts(s);

小数点付加機能つき

1.23を表示するには123を小数点以下2桁表示させる。表示幅は7桁固定。

// 符号なし表示用 (0〜65535)
char *itoaf(char *s,uint16_t data,uint8_t deci) {
       // limitation : wid<=8,deci<=4
       char *s2,a,w;
       int8_t k;
       
       s2=s;
       for (k=7;k>0;k--) *s++=' '; *s=0;
       for (k=0;k<=4;k++) {
               if ((deci)&&(k==deci)) *--s='.';
               a=(data%10)+'0';
               data /= 10;
               *--s=a;
       }
       // ここまで5桁の数値と(deci>0なら)小数点が入る。ゼロサプレスなし
       // 0.0123 00.123 001.23 0012.3 00123
       
       // ZERO supress
       while ((*s)=='0') *s++=' ';
       if ((*s=='.')||(*s==0)) *--s='0'; // ".123"→"0.123",""→"0"
       return s2;
}
// こちらは符号付き表示用 (-32768〜+32767)
char *itoaf(char *s,int16_t data,uint8_t deci) {
       // limitation : wid<=8,deci<=4
       char *s2,a,sgn;
       int8_t k;
       
       if (data<0) { data=-data; sgn='-'; } else sgn=' ';
       s2=s;
       for (k=7;k>0;k--) *s++=' '; *s=0;
       for (k=0;k<=4;k++) {
               if ((deci)&&(k==deci)) *--s='.';
               a=(data%10)+'0';
               data /= 10;
               *--s=a;
       }
       // ここまで5桁の数値と(deci>0なら)小数点が入る。ゼロサプレスなし
       // 0.0123 00.123 001.23 0012.3 00123
       
       // ZERO supress
       while ((*s)=='0') *s++=' ';
       if ((*s=='.')||(*s==0)) *--s='0'; // ".123"→"0.123",""→"0"
       *--s=sgn;
       return s2;
}

 アセンブラによる関数の書き方

→[avrgccでアセンブラを使う] 上記のをアセンブラにしたら106バイトまで縮まります。

 ATmega48/88/168対応eepromルーチン

avr-libc-1.2.3用 eepromアクセスルーチン

eeprom.c(167)

  • avr-livc 1.23のオリジナルの eeprom.S を元にATmega48/88/168対応版をCで作成しました。
  • ATmega48/88/168以外のAVRでも使用可能です
  • 機能的にはclassic-avrと互換です。追加された拡張部分は使用していません。
  • ヘッダは <avr/eeprom.h>を使用してください。
  • ATmega48/88/168の場合warningが出ますが無視してください。
avr-libc-1.2.5について 2005-08-01
  • avr-libc-1.2.6公開 (bugfix-only) 2005-11-12
  • Atmega48/88/168等のMCUでもライブラリが使用できるようになりました。
  • これらのMCUではEECRに追加された EEPM1,EEPM0を初期化していません。データシートではリセット時不定となっていますのでEEPROMを使用する場合はリセット後1度は EECR = 0 と設定する必要があります(互換モードの場合)。
  • 新しいモードで使用する場合は適宜EECRを設定してライブラリを呼んでください。
  • コンパイル済みのavr-libcをAVRバグ情報においておきます

 シリアル液晶ファーム

液晶モジュールをUARTシリアル通信で使えるようにするための亀の子ボード用ATTiny26Lのファームです。
  • 2本の信号線(GND入れて)しか使わないので、ISP用コネクタを流用してデバッグに使うなどの用途に。

 I2C

I2C(TWI)を扱いやすくしたつもり
twi_test.lzh(143)

サンプル プログラムはmega8+秋月のRTCで動作するものです。

 USB