|
Namazu for hns による簡易全文検索 詳しくは 詳細指定/ヘルプを参照して下さい |
|||||||||||||||||||||||||||||||||||||||||||||
2012年01月16日(月) 旧暦 [n年日記] [更新:"2012/01/17 23:25:39"]#1 [工作] AVR ATtiny2313 で直列通信
先日
書いた
通り
Peter Fleury
さんの
uartlibrary.zip
を使って RS-232/C の口で通信するようにして見た。
結果的には実に簡単だったのだけれど、 実は STK500 の良く説明を読んでいなくて、 一か所接続が必要なことに気が付くのに時間がかかった。 これはオシロスコープで波形を見る必要があるかな、 としばらく考えていたが、結局、普通の (安い) デジタル・マルチメータで電圧を測って入出力を確認したら、 間違いに気が付いた。 (RS232 の線に直線か交叉線のどちらが必要なのかも良く理解していない問題を含む) STK500 に ATtiny2313 を挿して内蔵の 1MHz クロックで、 RS-232/C の口での通信を試すには
右側の写真の中で、上にあるのが通信用の Let's Note R4。xterm の窓で cu -l /dev/dtyU0 している。また左側にあるのは AVR Studio 4.0 が動いている PC (VM Fusion の上の XP で試している)。LCD 部品が写っているが、この時には使っていない @ LCD + UART はまだうまく行っていない:
この後 lcdlib と uartlibrary
を合せて、簡単な確認をするコードを書いて見たが、
(僕の作ったものでは)
どうも delay を使っている部分が、動いていない気がする。いや、delay でなくて、
while ( (c=lcd_read(0)) & (1<<LCD_BUSY)) {}ここがおかしい (抜けて来ない)。RS232 側に入力があると、抜けて来る。 ピン接続は 以前に示した覚え と同じ。 lcd_read で読むポートは PB0 で、 #define LCD_BUSY 7 /* DB7: LCD is busy */DB7 は PB3 から読んでいる。 ちなみに同じコードは、Serial 無で LCD だけを動かした時には 期待通り動作する。 @ 1 pin だけ入力になっている I/O ポートの他の bit に出力:
PD0 は Serial の RXD になっている。ここの他の(実際には上の) 4 bit に出力する場合に、
#define lcd_e_high() LCD_E_PORT |= _BV(LCD_E_PIN); #define lcd_e_low() LCD_E_PORT &= ~_BV(LCD_E_PIN); #define lcd_e_toggle() toggle_e()こんなことして大丈夫なのかな。(_BV は bit_value の意味だと思う。bit_position_value かな) PD0 に前回書いた値を覚えていて、それを使う必要があるのでは ? 入力ピンだから、何を書いても大丈夫 ? このような使い方は、多分普通なので、あまり心配しなくても動くはず、 と考える方が自然だと思う。 @ 上の while 文の付近だけ割込禁止にする必要があるのかな:( つっこみ )
|
最近の日記 2025年01月15日 ・今更 advent calendar 2025年01月12日 ・金柑収穫 2025年01月07日 ・sh: 1: not found ・sh: 1: not found 2025年01月02日 ・geography/R-s2 | ||