5: 2009-08-04 (火) 12:58:25 takaboo[6] [7] | 6: 2009-11-18 (水) 03:59:54 takaboo[6] [8] | ||
---|---|---|---|
Line 1: | Line 1: | ||
*ダウンロード[#l493db9b] | *ダウンロード[#l493db9b] | ||
+ | #ref(http://www.besttechnology.co.jp/download/ATMEGA32SMPL1.5.ZIP) | ||
+ | |||
*一覧 [#j8c69fab] | *一覧 [#j8c69fab] | ||
- | **smpl1(USART).c [#y20358e6] | + | **USART1.c [#y20358e6] |
マイコンのUSARTを使ったシリアル通信を行う。シリアル通信はGCC Developer Liteで提供される専用のライブラリを直接使用し、文字及び文字列の送受信や書式化文字列の送信を行う。 | マイコンのUSARTを使ったシリアル通信を行う。シリアル通信はGCC Developer Liteで提供される専用のライブラリを直接使用し、文字及び文字列の送受信や書式化文字列の送信を行う。 | ||
Line 35: | Line 37: | ||
short rs_printf (const char *, ...); | short rs_printf (const char *, ...); | ||
- | **smpl2(USART).c [#jbe6dac4] | + | **USART2.c [#jbe6dac4] |
マイコンのUSARTを使ったシリアル通信を行う。avr-libcで提供される標準I/Oルーチンを中継し、シリアル通信はGCC Developer Liteで提供される専用のライブラリを間接的に使用する。 | マイコンのUSARTを使ったシリアル通信を行う。avr-libcで提供される標準I/Oルーチンを中継し、シリアル通信はGCC Developer Liteで提供される専用のライブラリを間接的に使用する。 | ||
- | 初期化まではsmpl1とほぼ同様だが、fdevopenで初期化された以後はC言語でよく使われる標準I/Oルーチン(putcharやprintf等)を使用する事ができる。 | + | 初期化まではUSART1.cとほぼ同様だが、fdevopenで初期化された以後はC言語でよく使われる標準I/Oルーチン(putcharやprintf等)を使用する事ができる。 |
// 通信ポートを初期化 ボーレートは115200[bps] | // 通信ポートを初期化 ボーレートは115200[bps] | ||
rs_init (br115200, txb, sizeof(txb), rxb, sizeof(rxb)); | rs_init (br115200, txb, sizeof(txb), rxb, sizeof(rxb)); | ||
Line 45: | Line 47: | ||
標準I/Oルーチンではまかないきれない機能は、シリアル通信ライブラリで提供されるサブルーチンで補填出来る。 | 標準I/Oルーチンではまかないきれない機能は、シリアル通信ライブラリで提供されるサブルーチンで補填出来る。 | ||
- | **smpl3(LED).c [#d0e3aab7] | + | **LED1.c [#d0e3aab7] |
PC4にソース接続されたLEDを点滅させる。~ | PC4にソース接続されたLEDを点滅させる。~ | ||
#ref(led1234.png) | #ref(led1234.png) | ||
Line 58: | Line 60: | ||
_delay_ms (500); // 500ms待つ | _delay_ms (500); // 500ms待つ | ||
- | **smpl4(4bitLED).c [#k0566312] | + | **LED2.c [#k0566312] |
PC4~PC7へそれぞれLEDをソース接続し点滅させる。 | PC4~PC7へそれぞれLEDをソース接続し点滅させる。 | ||
Line 68: | Line 70: | ||
} | } | ||
- | **smpl5(ALLPIO).c [#i281618a] | + | **ALLPIO.c [#i281618a] |
PC2~3にDIPスイッチ、PD2~PD3にプッシュボタンを接続し、逐次それらの状態を取り込んでLED1~4に反映させる。~ | PC2~3にDIPスイッチ、PD2~PD3にプッシュボタンを接続し、逐次それらの状態を取り込んでLED1~4に反映させる。~ | ||
#ref(switch.png) | #ref(switch.png) | ||
Line 95: | Line 97: | ||
} | } | ||
- | **smpl6(PIOINT).c [#g253e09b] | + | **PIOINT.c [#g253e09b] |
外部割り込みを使ってプッシュボタンの押下を検出し、各々のボタンで異なる機能を持たせる。さらに、割り込みが発生しない間はマイコンをスリープモードにし、低消費電力モードに移行させる。 | 外部割り込みを使ってプッシュボタンの押下を検出し、各々のボタンで異なる機能を持たせる。さらに、割り込みが発生しない間はマイコンをスリープモードにし、低消費電力モードに移行させる。 | ||
Line 126: | Line 128: | ||
} | } | ||
- | **smpl7(ADC).c [#h9ecd904] | + | **ADC.c [#h9ecd904] |
PA0~PA7の端子に入力されるDC0~5Vの電圧を計測し、シリアル通信で送信する。 | PA0~PA7の端子に入力されるDC0~5Vの電圧を計測し、シリアル通信で送信する。 | ||
Line 151: | Line 153: | ||
ADC=[ 0.57V,0.32V,1.21V,1.18V,1.55V,1.93V,1.82V,1.78V ] | ADC=[ 0.57V,0.32V,1.21V,1.18V,1.55V,1.93V,1.82V,1.78V ] | ||
- | **smpl8(TIMERINT).c [#abc72a43] | + | **TIMERINT.c [#abc72a43] |
タイマ/カウンタ0のオーバーフローを使用して一定間隔で割り込みを励起する。 | タイマ/カウンタ0のオーバーフローを使用して一定間隔で割り込みを励起する。 | ||
Line 173: | Line 175: | ||
} | } | ||
- | **smpl9(2chPWM).c [#p286a3ce] | + | **2chPWM.c [#p286a3ce] |
タイマ/カウンタ1の高速PWMモードにてPD4(OC1B)端子とPD5(OC1A)端子から個別のデューティー比でPWM信号を出力できる様に構成し、PWMの1周期(コンペアマッチ)毎に割り込みを発生させてLED1の点滅と周期の更新を行う。~ | タイマ/カウンタ1の高速PWMモードにてPD4(OC1B)端子とPD5(OC1A)端子から個別のデューティー比でPWM信号を出力できる様に構成し、PWMの1周期(コンペアマッチ)毎に割り込みを発生させてLED1の点滅と周期の更新を行う。~ | ||
PWM信号を五感で把握するにはPD4とPD5端子にオシロスコープ等を接続し、オシロスコープのディスプレイ上に表示される波形にて確認する。 | PWM信号を五感で把握するにはPD4とPD5端子にオシロスコープ等を接続し、オシロスコープのディスプレイ上に表示される波形にて確認する。 | ||
Line 207: | Line 209: | ||
} | } | ||
- | **smpl10(EEPROM).c [#v4acb9af] | + | **EEPROM.c [#v4acb9af] |
マイコンに内蔵されたEEPROMの読み書きを行う。操作及び状況の確認はシリアル通信にて行う。 | マイコンに内蔵されたEEPROMの読み書きを行う。操作及び状況の確認はシリアル通信にて行う。 | ||
Line 217: | Line 219: | ||
eeprom_write_byte ((uint8_t *)i, c); | eeprom_write_byte ((uint8_t *)i, c); | ||
sei (); | sei (); | ||
- | **smpl11(CONSTMEM).c [#gc65cc96] | + | **CONSTMEM.c [#gc65cc96] |
avr-libcで提供される特殊なメモリアクセス方法の紹介。 | avr-libcで提供される特殊なメモリアクセス方法の紹介。 | ||
Line 226: | Line 228: | ||
avr-libcにはSRAMにコピーせずにフラッシュROM上に確保したデータへアクセスするために、宣言時と利用時に特殊な命令が用意されている。 | avr-libcにはSRAMにコピーせずにフラッシュROM上に確保したデータへアクセスするために、宣言時と利用時に特殊な命令が用意されている。 | ||
const char gyao[27000] PROGMEM = {0,0,0,0,0,0,}; | const char gyao[27000] PROGMEM = {0,0,0,0,0,0,}; | ||
- | **smpl12(BUZZER).c [#e8471f5c] | + | **BUZZER.c [#e8471f5c] |
- | **smpl13(SPI_MOTOR).c [#j47c03d0] | + | 指定周波数で圧電ブザーを鳴らす。 |
- | **smpl14(RCSERVO).c [#l9555243] | + | |
+ | **SPI_BRIDGE.c [#j47c03d0] | ||
+ | SPIバスで接続されたATA6831(3ch ハーフブリッジドライバ)と通信を行い、任意のパターンで各チャネルのトランジスタをON/OFFさせる。 | ||
+ | |||
+ | **RCSERVO.c [#l9555243] | ||
+ | 1chのPWM信号をマルチプレクサを介して見かけ上8chに分配する。出力端子を変更する毎にPWMのデューティを更新しなくてはならないので少し面倒。 | ||
+ | |||
+ | **ARRAYFUNC.c [#e780cbb7] | ||
+ | C言語の分岐命令等で条件別に関数を呼ぶのではなく、初期化済み配列に関数自体を登録しておき簡便に呼び出すプログラム。 |
(This host) = http://www.besttechnology.co.jp