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

このブログを検索

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

2010年12月7日火曜日

PSOCでクロックモジュールを使う









PSOC24123でクロックモジュールRTC-8564NBを使います.
PC+Teraterm+FT232+CY8C24123+RTC8564NB
PSOCとRTCの電源はFT232から供給する.
RTC-8564NBは,CR2032電源のモジュール化し切り離せるようにした.
CY8C24123の設定:5V 24MHz CPU=SysClk/3

VC3:UARTのクロック
VC1=SysClk/8,VC3=VC1/39=9600bps*8
P10:SDA P11:SCL P02:RX P03:TX
RTC-8564NB:Slave Adress=0B10100010
FT232とPSOCのGNDを共通にする必要あり!
cGetChar()を使うとデータが来るまで止まってしまう
's'でs=0,"txxxx"でRTC-8564NBの指定するアドレスの値を変更する.
cReadChar()は,最新のUARTの値を読むので,tをタイプしたあと
十分に待ってから後続の数値を打ち込む
02(Sec),03(Min),04(Hour),05(Day)

#include <m8c.h> // part specific constants and macros
#include "PSoCAPI.h" // PSoC API definitions for all User Modules
#define AD 0B1010001 //Address of Clock

void main(void)
{
unsigned int i;
unsigned char a,b,x1,x2,x3,j,Buf[32];


for(i=0;i<60000;i++){}//wait
UART_CmdReset();
UART_IntCntl(UART_ENABLE_RX_INT);
UART_Start(UART_PARITY_NONE);
I2Cm_Start(); // Initialize I2C Master interface


while(1){
//a=UART_cGetChar();//Waits for valid character in UART RX and return its value.
a=UART_cReadChar();
//Set s =0
if(a=='s'){ I2Cm_fSendStart(AD,I2Cm_WRITE);
I2Cm_fWrite(0x02);//Address
I2Cm_fWrite(0x00);//Data s=0
I2Cm_SendStop();
}//t
//Set m h d
if(a=='t'){ a=UART_cGetChar(); b=UART_cGetChar();
x1=(a-'0')*16+(b-'0');//Address
a=UART_cGetChar(); b=UART_cGetChar();
x2=(a-'0')*16+(b-'0');//Data
I2Cm_fSendStart(AD,I2Cm_WRITE);
I2Cm_fWrite(x1);//Address
I2Cm_fWrite(x2);//Data
I2Cm_SendStop();
}//t

//read s m h d
Buf[0]=0x02;// address from seconds
I2Cm_bWriteBytes(AD,Buf,1,I2Cm_NoStop );
I2Cm_fReadBytes(AD,Buf,4,I2Cm_RepStart );
//D
a=Buf[3]/16; if(a>3)a-=4;
UART_PutChar(a+'0');//Upper bits
UART_PutChar(Buf[3]%16+'0');//Lower bits
UART_PutChar('d');
//H
a=Buf[2]/16; if(a>3)a-=4;
UART_PutChar(a+'0');//Upper bits
UART_PutChar(Buf[2]%16+'0');//Lower bits
UART_PutChar('h');
//M x4218421
a=Buf[1]/16; if(a>7)a-=8;
UART_PutChar(a+'0');//Upper bits
UART_PutChar(Buf[1]%16+'0');//Lower bits
UART_PutChar('m');
//S x4218421
a=Buf[0]/16; if(a>7)a-=8;
UART_PutChar(a+'0');//Upper bits
UART_PutChar(Buf[0]%16+'0');//Lower bits
UART_PutChar('s');
UART_PutChar(0x0a);//LF
UART_PutChar(0x0d);//CR
for(j=0;j<20;j++)for(i=0;i<20000;i++){}//Wait
}//while(1)

}