技術を間違った情熱に使いがちな人のページ

電子

[AVRexample] UART

Posted on:
火曜日, 1月 10th, 2012
Author:
admin

平たく言うとCOMポート使った通信の事。 RS232Cとか呼ばれる。 ●簡単な送信(定数文字列) Flashメモリ上に置かれた文字列定数データを送信。 AVRWiki「簡単な送信プログラム」のほぼそのまんまコピーです。 wiki執筆の方に大感謝です! #include <avr/io.h> #include <avr/pgmspace.h> #include <util/delay.h> // cbi()    addrのbit番目をLowに // sbi()    addrのbit番目をHighに #define cbi(addr,bit)     addr &= ~(1<<bit) #define sbi(addr,bit)     addr |=  (1<<bit) #define    UART_RX    0        //ATtiny2313 では PD0:RxD PD1:TxD #define    UART_TX    1 const prog_char a[]  = “This is a test message”;        //送信したい文字列 void uart_putchar(char c) {     loop_until_bit_is_set(UCSRA, UDRE); [...]

Posted in AVR, 電子 | コメントは受け付けていません。

[AVRexample] Timer1 オーバーフロー

Posted on:
水曜日, 1月 4th, 2012
Author:
admin

<<目次へ戻る 8bit の Timer0 に比べてずっと長い時間が扱える。 また、カウンタ値が大きく1/256 1/64 などの短いプリスケーラでもイケるので 生成できる周波数が多彩。 今の所 5Hz (100ms割り込み) 50Hz(10ms割り込み) を確認(測定器が無いので実際正確な値が出てるか?はわからん) ●多分正確?100ms毎の割り込み CPUは内蔵発振 8MHz 8bit版 Timer0 と違う場所は赤で示す #include <avr/io.h> #include <avr/interrupt.h> /*     AVRwiki より拝借マクロ     cbi()    addrのbit番目をLowに     sbi()    addrのbit番目をHighに    */ #define cbi(addr,bit)     addr &= ~(1<<bit) #define sbi(addr,bit)     addr |=  (1<<bit) volatile int led; ISR (TIMER1_OVF_vect) {     TCNT1 = 62411;     [...]

Posted in AVR, 電子 | コメントは受け付けていません。

[AVRexample] Timer0 オーバーフロー

Posted on:
火曜日, 12月 27th, 2011
Author:
admin

<<目次へ戻る 8bitタイマー 0 の件です。 タイマーは割り込みで使う場面がほとんどなので割り込み使用のサンプルのみ。 周波数は内蔵発振 8MHz。 オーバーフロータイマを使うより、CTCを使った方がずっと楽。

Posted in AVR, 電子 | コメントは受け付けていません。

[AVRexample] Timer0 CTC

Posted on:
月曜日, 12月 26th, 2011
Author:
admin

<<目次へ戻る CTCは結局の所 自由な矩形周波数生成 オーバーフロータイマーを便利にしたもの 割り込みルーチン内でフロー再定義の必要が無い と言える。

Posted in AVR, 電子 | コメントは受け付けていません。

[AVRexample] sleep

Posted on:
金曜日, 12月 23rd, 2011
Author:
admin

<<目次へ戻る ●概要 割り込みを使って目覚めるので、割り込み処理必要。 sleep自体は set_sleep_mode( mode ) でスリープモードを指定 sleep_mode()で眠りにつく 割り込みで目覚めて割り込みベクタへ飛ぶ プログラム中でまた sleep_mode() を呼び出して眠らせる と、これだけ。とてもシンプル。 スリープイネーブル(SE)ビットの立て下げ処理はsleep_mode()の中でやってくれる。 実用的なスリープモードは アイドル SLEEP_MODE_IDLE パワーダウン  SLEEP_MODE_PWR_DOWN の2パターンなので、2パターンだけ例を示しておく。

Posted in AVR, 電子 | コメントは受け付けていません。

[AVRexample] serial 7seg 4桁LED

Posted on:
木曜日, 12月 22nd, 2011
Author:
admin

<<目次へ戻る スイッチサイエンス社で販売してる シリアル接続7セグメント4桁LED の動作方法。 SparkFunで売っている物と同様。 コツというか注意がたくさんある。 SparkFunのページにマニュアル有り。サンプルコードはごちゃごちゃしてて解読しづらい。

Posted in AVR, 電子 | コメントは受け付けていません。

[AVRexample] LEDフラッシャー

Posted on:
水曜日, 12月 21st, 2011
Author:
admin

<<目次へ戻る ●目的 RAMメモリの節約手法の例文。 LEDフラッシャーを作る事を通して、 RAMではなくFlashROMに定数データを記述する方法を習得。 フォントの導入やグラフィックLCDへ画像を表示したい場合などの応用が考えられる。

Posted in AVR, 電子 | コメントは受け付けていません。

[AVRexample] LEDの点滅

Posted on:
火曜日, 12月 20th, 2011
Author:
admin

<<目次へ戻る 一番基本になる物です。 LEDの点滅・ピカピカ・blink ブレッドボードに構築すると良いかと。 内蔵発振8MHz 周波数は他の物にしてもOKそうです。 点滅速度が変わるだけ。 C で示すパスコンは無くても動いた。

Posted in AVR, 電子 | コメントは受け付けていません。

[AVRexample] delay関数の使用

Posted on:
火曜日, 12月 20th, 2011
Author:
admin

<<目次へ戻る delay関数を使ってみます ●動作 1秒毎にLEDの点滅 ●ソース #include <avr/io.h> //マイコンの周波数を定義。delay.h を include する前に書く //ここで実際の動作クロックを決められるわけではない。あくまで内部計算用 //AVR StudioのProject→Configuration Optionsのfrequencyに入力してやることで指定することもできる #define    F_CPU    8000000UL #include <util/delay.h> int main(void) {     long i;         DDRB = 1;         while(1)         {             _delay_ms(1000);             PORTB ^=1;         }         return 0;  } ●注意 _delay_ms(); には定数しか書けない。変数はダメ。 【OK例】         while(1)         {             _delay_ms(1000); [...]

Posted in AVR, 電子 | コメントは受け付けていません。

[AVRexample] ATmega88/168 の場合

Posted on:
月曜日, 12月 19th, 2011
Author:
admin

<<目次へ戻る ●外部割り込み ●INT0とINT1両方使うコード 2313版とレジスタ名が違っている。その程度。 【動作】 INT0で portB.0 のみピカピカッっと点滅 INT1で portB.0 のみ1秒間点灯

Posted in AVR, 電子 | コメントは受け付けていません。