皆様,
G13(CCRL)にてチョコさんのIICサンプルプログラムのMD_STATUS put_data_IIC00( uint8_t s_addr, uint8_t buffer1, uint8_t buffer2)を修正し,以下のプログラムを作成しました.
これはEEPROMのByte Writeを行うためのものです.これを5msのインターバルをおいて連続的に書き込むと,非常に不安定で正常に書き込めないことが多発しています.buffer1, buffer2 がEEPROMのアドレス,buffer3がデータです.ストップコンデイション云々の問題でしょうか?
ご指導お願いします.
=======
MD_STATUS put_3byte_IIC00( uint8_t s_addr, uint8_t buffer1, uint8_t buffer2, uint8_t buffer3){ MD_STATUS status; //uint8_t work1, work2; //work1 = (uint8_t) ((buffer2 >>8) & 0x00FF); //work2 = (uint8_t) (buffer2 & 0x00FF); g_write_data[0] = buffer1; /* set data1 */ g_write_data[1] = buffer2; /* set data2 */ g_write_data[2] = buffer3; /* set data3 */ /*-------------------------------------- start transmission --------------------------------------*/ status = R_IIC00_Master_Send(s_addr, (uint8_t *__near)g_write_data, 3); if( IIC_SUCCESS == status ) /* check start successfully */ { /*-------------------------------------- transmit start and wait for transmission end --------------------------------------*/ do { /* wait for transmission end */ status = R_IIC00_check_comstate(); /* get IIC status */ }while( IIC_USING == ( status & IIC_STS_MASK ) ); /* release IIC bus */ R_IIC00_StopCondition(); /* issue stop condition */ } else { /* do nothing */ } return (status); }
(追加)
2回連続して別なアドレスに書き込むを行う,最初の書き込みは正常ですが,2番目の書き込みが不安定です.int 16200, 900, 17200 が各々16383,771,17407のようになります.うまく書きこめる時もあります.