Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: PIC24FJ256GB106 + DS1621
Форум разработчиков электроники ELECTRONIX.ru > Микроконтроллеры (MCs) > Все остальные микроконтроллеры > PIC
vangraf
Люди добрые помогите запустить PIC24FJ256GB106 + DS1621
Датчики температуры подключены к I2C2 резисторы по 10кОм.
код прилагается:

void InitI2C(void){
I2C2CON = 0;
I2C2BRG = I2C_BRG;

_TRISF4 = 1;
Nop();
_TRISF5 = 1;
Nop()

I2C2STAT = 0x0000;
I2C2CON = 0x1200;
I2C2RCV = 0x0000;
I2C2TRN = 0x0000;
I2C2CON = 0x9200;
IdleI2C();
}
void StartI2C(void){
I2C2CONbits.SEN = 1;
while (I2C2CONbits.SEN);
}
void RestartI2C2(void)
{
I2C2CONbits.RSEN = 1;
while (I2C2CONbits.RSEN);
}
void StopI2C(void)
{
I2C2CONbits.PEN = 1;
while (I2C2CONbits.PEN);
}
unsigned char ACKStatus(void)
{
return (!I2C2STATbits.ACKSTAT);
}
void AckI2C(unsigned char ack){
I2C2CONbits.ACKDT = !ack;
I2C2CONbits.ACKEN = 1;
while(I2C2CONbits.ACKEN);
I2C2CONbits.ACKDT = 0;
}
void WrI2C(unsigned char byte)
{
I2C2TRN = byte;
while (I2C2STATbits.TBF);
IdleI2C();
}
unsigned char RdI2C(unsigned char ack)
{
I2C2CONbits.RCEN = 1;
while(I2C2CONbits.RCEN);
AckI2C(ack);
return I2C2RCV;
}
//-----------------------------------------------------------------------------
// For DS1621 -----------------------------------------------------------------
void dsConfig( BYTE address, BYTE data )
{
WrI2C( DS_ADDRESS | ( address << 1 ) | 0);
WrI2C( ACCESS_CONFIG );
WrI2C( data );
StopI2C();
}
//-[ end of dsConfig ]---------------------------------------------------------
void dsInit(BYTE address)
{
StartI2C(); //Send the Start Bit
WrI2C( DS_ADDRESS | ( address << 1 ) | 0);
WrI2C( START_CONVERT_T );
dsConfig( address, 8 );
}
//-[ end of dsInit ]-----------------------------------------------------------
char dsRead( BYTE address )
{

WORD_VAL data;
char temperature;

StartI2C(); //Send the Start Bit
WrI2C( DS_ADDRESS | ( address << 1 ) | 0);
WrI2C( READ_TEMPERATURE );
RestartI2C2(); //Send the Restart condition
i2c_wait(10);
WrI2C( DS_ADDRESS | ( address << 1 ) | 1);

data.byte.HB = RdI2C(1); /* save byte received */
data.byte.LB = RdI2C(0); /* save byte received */

StopI2C();

temperature = data.byte.HB;
temperature <<= 1;
temperature |= data.bits.b7;
return ( temperature );
}
//-[ end of dsRead ]-----------------------------------------------------------
vangraf
Тема закрыта. Разобрался)
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.