ATMELのAT-Tiny26,ATmega,R8Cなどのワンチップマイコン,C言語,JAVAなどのプログラミング言語の入門のためのページです.サンプルプログラムを中心に紹介します.他にもLinixや数学ソフトなどの紹介も行います.

このブログを検索

あなたは 番目のお客様です.

2010年6月22日火曜日

PSocでIrDA
























PSocでIrDAのテスト

(送信側)
IrDAでは,常時信号がHigh(1)で,信号がLow(0)の時だけ0Vとなる.そして信号がLow(0)の時だけIRLEDが発光する.
データシートでは,送信で,CLKOutputとTXOutputの出力端子,をプルダウンに設定し,これら2つの出力端子を外部で接続すればORとなるとあるが,この場合直接LEDを駆動するのには出力が弱すぎる.そこで今回は,CLKOutputとTXOutputをPSOC内部でORをとり,P00(Strong)に出力した.VCC-IRLED-P00と接続し,出力LOWでLEDが発光する.IRLEDは数10mA電流が流せるので,抵抗を使わずVCC-IRLED-P00と直結した.
IrDATXのテストプログラム'a','b','c','d'の文字を9600bpsで送信する
27443を使い6_MHz(SysClk/4),3V駆動
VC1=SysClk/4
VC2=VC1/6
VC3=VC2/13(≒9800×8)
VC3をBitClock,BaudClkとした


ソースプログラム

#include <m8c.h> // part specific constants and macros
#include "PSoCAPI.h" // PSoC API definitions for all User Modules
void main(void)
{
unsigned int i;
char x='a';
IrDATX_Start();
while(1){
IrDATX_SendData(x);
x++;
if(x>'d')x='a';
for(i=0;i<30000;i++){}//wait
for(i=0;i<30000;i++){}
for(i=0;i<30000;i++){}
for(i=0;i<30000;i++){}
}
}

(受信側)
受信では,フォトトランジスタの信号を,赤外受光でLowとなるようコンパレータで信号を変換した.今回は,IRフォトトランジスタの信号をコンパレータTLV2461でHighが0Vになるようレベル変換した.
27443でIrDARXのテストプログラム,受信したデータ9600bpsをLCDに表示する
LCD表示のため5V駆動
PSOCの信号入力端子は,P00(High Z),
BitTimerOutputの出力端子はP01(Pull Up),P00とP01を接続し
受信信号を1kΩでP00,P01に接続する.
BitTimerのInvertBitTimerFeedBackINをInvertにする
VC1=SysCLK(24M)/4
VC2=VC1/6
VC3=VC2/13≒9600×8
BitTimerCLKとBaudCLKは,通信速度9600の8倍VC3にした

ソースプログラム

#include <m8c.h> // part specific constants and macros
#include "PSoCAPI.h" // PSoC API definitions for all User Modules


void main(void)
{
BYTE a,bRxStatus;
IrDARX_Start();
LCD_Start(); // Initialize LCD
LCD_Position(0,0); // Place LCD cursor at row 0, col 5.
while(1){
// wait for receiver to detect start bit
while( !( IrDARX_bReadRxStatus() & IrDA_RX_ACTIVE ) ) {}
// Start bit detected, wait to receive rest of data
while ( !( bRxStatus = IrDARX_bReadRxStatus() & IrDA_RX_COMPLETE ) ){}
a = IrDARX_bReadRxData();
/*
LCD_WriteData(a);
*/
if(a>='d'){LCD_Position(0,0);LCD_PrCString(" ");LCD_Position(0,0);}// Clear LCD
else LCD_WriteData(a);
}
}