1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

AVRマイコンでいろいろやる②-2 シリアル通信2

Last updated at Posted at 2019-05-19

ようやく解決できました。

1.信号確認

鈍って受信できていないのではないかという疑惑を明らかにするために
とりあえずTXDから出ている信号を見てみました。
直列に挿入されている抵抗値を変えてみます。

20190518_2.jpg
1kΩ

20190518_1.jpg
330Ω

20190518_3.jpg

1kΩと330Ωだとほぼ変化なし。
0Ωだときれいになっています。
抵抗いれてそこまでなまっているかと言われればそういうわけでもないので、
別のことが原因だと推測できます。
明らかに送信間隔詰め詰めなのが見て取れるので、
おそらくこっちが原因かなと思います。

2.送信間隔変更

そこでもっと送信の時間間隔を空けます。
ADCデータの送信も考慮して計算します。
最大サンプルレートは15kSample/sなのでスタートビット、ストップビットを含めると
実は300kbit/s必要でした。
なのでボーレートを500kに設定します。(これだったらパリティも入れられそう)

続いて8Bitタイマで割込みを入れて送信間隔を管理します。

設定値は2Byte同時送信を考えて15kHzです。
逆数を取って66.67μsでタイマ割込みが発生するように設定します。
20MHz/前置分周=0.4μs/1カウント
一番いいところは8分周、166カウントで検知をかけることにします。

とりあえずデバッグしてみます。
20190519_1.png
一発目割込み 73.35μs

20190519_2.png
二発目割込み 140.2μs

140.2μs - 73.35μs = 66.85μs(14.959kHz)

まあ今のところはこれで十分です。
あとあと計測時刻のずれが問題になってくるかもしれません。
そしたら水晶を16MHzにするとかは必要になってきそうです。

ということで以下のコードを流して試してみます。

main.c
# include <avr/io.h>
# include <avr/interrupt.h>


int main(void)
{
	
    /* Replace with your application code */
	
	//int mode =0;
	InitC();
	PORTC = 1;	//PORTCはデバッグ用
	UCSR0A = UCSR0A |0b00000010; //倍速設定
	UCSR0B = 0b00001000;
	UCSR0C = 0b00000110;
	UBRR0 = 4;
	PORTC = 2;
	
	TCCR0A=0b00000010;//比較一致動作に設定
	TCCR0B=0b00000010;//8分周設定
	OCR0A=166;//一致発生カウント
	TIMSK0=0b00000010;//タイマ一致割込み有効
	
	sei();//割込み有効
	
	while(1)
	{
		
	}
}
//タイマ一致割込み
ISR(TIMER0_COMPA_vect){
	while ( !(UCSR0A & (1<<5)) );
	UDR0 = 0x77;
	while ( !(UCSR0A & (1<<5)) );
	UDR0 = 0x33;
	PORTC++;
}
void InitC(){
	DDRC = 0b00111111;
}

20190519_1.jpg
信号波形は想定通りです。
パリティ2bit分入れる余裕もありそうです。

そして最後にPCで受信できるかを試します。
20190519_3.png

問題なさそうです。
後から抵抗1kΩを入れましたが、今のところは文字化けはしなかったです。

ということで次はPCからデータを送信してそのアンサバックを返すようなことをやります。

1
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?