AVRとuLCD220RD(4DSystems)のUART通信

フォーラム(掲示板)ルール
フォーラム(掲示板)ルールはこちら  ※コードを貼り付ける場合は [code][/code] で囲って下さい。詳しくはこちら
keysumer

AVRとuLCD220RD(4DSystems)のUART通信

#1

投稿記事 by keysumer » 10年前

AVRマイコン(ATmega164P-20PU)と4DSystems社製のuLCD220RDをUARTで接続し、AVRから送信されたデータによってLCDの表示を切り替える、というプログラムを作成しています。

現状、AVRとPCの通信させ、送信するデータを'1'のように文字データに変換して、ディスプレイ上に表示させることは成功しています。

また、専用のソフトを用いて、PCとLCDとの接続も行い、PCが送信するデータによってLCDの表示を切り替えることに成功しています。

現在、このPCの部分をマイコンに変更し通信を行おうとしているのですが、どうも上手くいきません。

プログラムは現在以下の様になっておりまして、send()の()の中を変更して試しているのですが、どうも上手くいきません。

コード:

#include<avr/io.h>
#include<util/delay.h>
#include<math.h>

#define FOSC 1000000;	/*fosc=1MHz*/

typedef unsigned short byte;	/*0~65535*/


/*UARTch1送信用関数*/
void send1(byte d1){

	while(!(UCSR0A & _BV(UDRE0)));	/*UART送信準備完了まで待機*/
	UDR0 = d1;
	_delay_ms(500);
}

/*UARTch2送信用関数*/
void send2(byte d2){

	while(!(UCSR1A & _BV(UDRE1)));	/*UART送信準備完了まで待機*/
	UDR1 = d2;
	_delay_ms(500);
}


int main(void){

//////////PORT//////////

	DDRD  = 0b11111111;
	PORTD = 0b01000000;

//////////Resister//////////

	/*UART_ch1*/
	UBRR0  = 12;	/*ボーレート=9600bps, UBRRn=(fosc/(16*BAUD))-1*/
	UCSR0A = 0b00100010;
	UCSR0B = 0b00011000;
	UCSR0C = 0b00000110;

	/*UART_ch2*/
	UBRR1  = 12;
	UCSR1A = 0b00100010;
	UCSR1B = 0b00011000;
	UCSR1C = 0b00000110;


	//while(1){

		_delay_ms(10000);

		PORTD = 0x00;

		send2(0xFF);
		send2(0x82);

	//}
	return 0;
} 
LCDのボーレートはデフォルトで9600bpsなので、マイコンの方もそれに合わせて
設定しています。実際に9600bpsにしたPCと通信が成功しているので、問題ないと思います。

send()の()内が原因だろうと思うのですが、どう変更すればいいか分からず困っています。

どなたか回答お願いします。

keysumer

Re: AVRとuLCD220RD(4DSystems)のUART通信

#2

投稿記事 by keysumer » 10年前

補足です。PD6には動作確認用のLEDを接続しています。

閉鎖

“C言語何でも質問掲示板” へ戻る