I2C स्लेव्हकडून मिळालेल्या 2 बाइट्सची अॅरेमध्ये कॉपी करण्यासाठी कोडचा एक सोपा तुकडा काय आहे यासह संघर्ष करत आहे जेणेकरून मी नंतर INT मध्ये रूपांतरित करू शकेन आणि डेटावर गणित करू शकेन.
हा कोड यशस्वीरित्या (माझ्या I2C विश्लेषकानुसार) 16 बिट एडीसीवरील एका रजिस्टर पत्त्यावरून सलग 2 बाइट्स वाचतो.
void ADC_Initialise( void )
{
_DINT() ; // disable all maskable interrupts
I2C_SCL_HIGH() ;
I2C_SCL_OUTPUT() ;
I2C_SDA_HIGH() ;
I2C_SDA_OUTPUT() ;
I2C_Write_Register_3B( ADC, 0x01, 0xC0, 0x83) ; // Write 2 bytes to ADC Config Register
for(i=0; i < 10000; i++);
I2C_Read_Register( ADC, 0x00 ); // Read the 2 byte ADC value
for(i=0; i < 10000; i++);
_EINT() ; // re-enable the interrupts
}
static unsigned char I2C_Read_Register( char Device_Address, char Register_Address )
{
unsigned char Value ;
I2CM_Start( ) ;
if( I2CM_Out( Device_Address << 1 ) ) //send write control byte + chip address
return 0 ;
else if( I2CM_Out( Register_Address ) ) //send register number
return 0 ;
I2CM_Start( ) ; // Restart
if( I2CM_Out(( Device_Address << 1 ) | 0x01 )) //send read control byte + chip address
return 0 ;
I2CM_In( &Value, 2 ) ; //RJ 6.8.19 input 2 byte ADC value to 'buf'
// return Value ; //rj placed after IC2M_In
I2CM_Stop( ) ;
return Value ; //rj placed after IC2M_Stop
}
static void I2CM_In( unsigned char* buf, int count )
{
unsigned char data ;
for( ; count--; ) // How do I store these 2 bytes in a char[] or INT
{
data = 0 ;
I2C_SDA_INPUT() ;
volatile unsigned int i = 0 ;
for( ; i < 8 ; ++i )
{
//Set Clock High
I2C_SCL_HIGH() ;
//shift the bit over
data <<= 1 ;
if( I2C_SDA_IS_HIGH() )
{
data |= 0x01 ;
}
//Set Clock Low
brief_pause( 0x04 ) ;
I2C_SCL_LOW() ;
}
//put the input data byte into the buffer, inc buffer pointer
*buf++ = data ;
//take sda to output ack
I2C_SDA_OUTPUT() ;
//Set Clock High
I2C_SCL_HIGH() ;
//Set Clock Low
brief_pause( 0x04 ) ;
I2C_SCL_LOW() ;
}
}
त्यामुळे, परिणामी वाचन संकलित करण्यासाठी/संग्रहित करण्यासाठी मला अॅरे (अस्वाक्षरित चार अॅडकॅरे [२]) आवश्यक आहे, म्हणून मी प्रयत्न केला -
*buf++ = data ;
adcarray[] = data ;
adcarray[] = buf ;
'एक्स्प्रेशन अपेक्षित आहे' याचा अर्थ असा आहे की मला प्रत्येक पासवर अॅरे भरण्यासाठी काही फॉर्म फॉर लूपची आवश्यकता आहे, जरी *बफ लाइन आधीच काउंट 2 लूपमध्ये आहे.
मदतीची प्रशंसा केली (MSP430 आणि ADS1115 ADC वर IAR मध्ये C). विनम्र, राल्फ
adcarray
किंवाValue
म्हणजे काय - तुम्ही त्या व्हेरिएबल्ससाठी घोषणा सोडल्या आहेत. - person Chris Turner   schedule 07.08.2019Value
म्हणजे काय? त्यात 'I2CM_In. What's wrong with the content of
Value` ने वाचलेले 2 बाइट असावेत? तुम्ही तुमच्या विश्लेषकात जे पाहता ते वेगळे आहे का? - person Gerhardh   schedule 07.08.2019unsigned char Value;
हे 2 बाइट्स कसे धरायचे? - person Gerhardh   schedule 07.08.2019buf
आहेValue
च्या मागे वास्तविक व्हेरिएबल, जे फक्त मेमरीचे बाइट वाटप करते. मूल्य बहुधा अॅरे किंवा 16 बिट इंट असावे आणिI2C_Read_Register
फंक्शनने 16 बिट इंट दिले पाहिजे. जर तुम्ही*buf++ = data ;
वर ब्रेकपॉईंट हलवला, तर तुमचा विश्लेषक जे पाहतो तीच गोष्ट तुम्हाला दिसते का? - person yhyrcanus   schedule 07.08.2019