ربط pic microcontroller باخر باستخدام I2C PROTOCOL
قسم الميكروكنترولر والروبوت ودوائر الاتصال بالحاسب الاليقسم المتحكمات الـ microcontroller و المعالجات microprocessor و التحكم الرقمي بالكمبيوتر CNC والانظمة الآلية والروبوت Robots
السلام عليكم :
شكرا على مجهودك الرائع وان شاء الله في ميزان حسناتك
عندي سؤال انا عملت هاد البرنامج ب MPLAB X IDE بس مش عم ينفع اذا ممكن مساعده اذا فيه بعض الاخطاء ,نوع المتحكم pic16lf1783 وبتردد 4mhz وشكرااا .
_____
هاد الجزء الخاص ب I2C protocol :
void I2C_Init()
{
TRISCbits.TRISC3 = 1; //make C3 input
TRISCbits.TRISC4 = 1; //make C4 input
APFCONbits.SCKSEL = 0; //SCL is on pin RC3
APFCONbits.SDISEL = 0; //SDA is on pin RC4
INTCON = 0xC0; //Enables all active interrupts & all active peripheral interrupts
PIE1bits.SSP1IE = 1; //Enables the MSSP interrupt
PIE2bits.BCL1IE = 0; //Disables the MSSP Bus Collision Interrupt it flag BCL1IF ,
SSPADD = 0x09; //For 100k clock rate
SSPSTATbits.SMP = 1; //Slew rate control disabled
SSPCON1 = 0x38; //Enables the serial port(SSPEN) and configures the SDA and SCL pins & Enable clock
//I2C Master mode, clock = FOSC / (4 * (SSPADD+1))=> 4000000/((9+1)*4) = 100khz
SSPSTATbits.CKE = 0; //Disable SMBus specific inputs
SSPCON3bits.PCIE = 1; //Enable interrupt on detection of Stop condition
SSPCON3bits.SCIE = 1; //Enable interrupt on detection of Start or Restart conditions
SSPCON3bits.SDAHT = 0; //Minimum of 100 ns hold time on SDA after the falling edge of SCL
PIR1bits.SSP1IF = 0;
return ACKSTAT; // 0 there is ACK , 1 NACK,
}
////////////////////////////////////////////////////////////////////////////////
unsigned char I2C_Read(unsigned char ack)
{//1
unsigned char DA1;
if(SSPCON1bits.SSPOV==1) // if previous data had not been read from the SSPBUF so we must read it;
DA1=SSPBUF;
SSPCON2bits.RCEN=1;
while(SSPSTATbits.BF == 0);
//while(PIR1bits.SSP1IF == 0); //wait to complet receive data ,
PIR1bits.SSP1IF = 0;
DA1=SSPBUF; //raed data, to receive more byte send ACK (SDA=ACKDT=0)
if(ack == 1)SSPCON2bits.ACKDT=0; //to receive more byte send ACK (SDA=ACKDT=0)
else SSPCON2bits.ACKDT=1; //to stop receive byte send NACK (SDA=ACKDT=1)
SSPCON2bits.ACKEN=1;
while(PIR1bits.SSP1IF == 0); //wait to end ack,
PIR1bits.SSP1IF = 0;
شكرا اخي الكريم على تعاونك
لكن اعتقد لا يوجد فرق كبير بين mplab x ide و mikroC PRO for PIC
مثلا طريقة الوصول ل بيت معين في رجستر تختلف
(SSPCON2.SEN--->>SSPCON2bits.SEN)لكن بالنهاية الاثنين عباره عن مترجم بلغة السي .
شكرا اخي الكريم على تعاونك
لكن اعتقد لا يوجد فرق كبير بين mplab x ide و mikroC PRO for PIC
مثلا طريقة الوصول ل بيت معين في رجستر تختلف
(SSPCON2.SEN--->>SSPCON2bits.SEN)لكن بالنهاية الاثنين عباره عن مترجم بلغة السي .
اخي كما تعلم يوجد العديد من الكمبايلرات compilers باسماء مختلفه ولكل منها طريقته بالعمل وطبعا كل شركه تكتب المكتبات lib خاصتها لتدعم جزء او كل الخصائص داخل الميكرو .....الخ من التفاصيل..
لكن ادا اعطيتنا بعض التفاصيل عن mplab x ide وكان افضل واقوى من ميكروسي بالتاكيد سنتعلم mplab x ide...
الساعة معتمدة بتوقيت جرينتش +3 الساعة الآن: 01:41 AM
موقع القرية الالكترونية غير مسؤول عن أي اتفاق تجاري أو تعاوني بين الأعضاء
فعلى كل شخص تحمل مسئولية نفسه إتجاه مايقوم به من بيع وشراء وإتفاق وأعطاء معلومات موقعه
التعليقات المنشورة لا تعبر عن رأي موقع القرية الالكترونية ولايتحمل الموقع أي مسؤولية قانونية حيال ذلك (ويتحمل كاتبها مسؤولية النشر)