قسم الميكروكنترولر والروبوت ودوائر الاتصال بالحاسب الالي قسم المتحكمات الـ microcontroller و المعالجات microprocessor و التحكم الرقمي بالكمبيوتر CNC والانظمة الآلية والروبوت Robots

   

hamzazayyad
:: مهندس متميز ::
تاريخ التسجيل: Aug 2005
الدولة: موزنبيق
المشاركات: 696
نشاط [ hamzazayyad ]
قوة السمعة:
قديم 03-09-2015, 10:07 PM المشاركة 25   
افتراضي



السلام عليكم :
شكرا على مجهودك الرائع وان شاء الله في ميزان حسناتك
عندي سؤال انا عملت هاد البرنامج ب MPLAB X IDE بس مش عم ينفع اذا ممكن مساعده اذا فيه بعض الاخطاء ,نوع المتحكم pic16lf1783 وبتردد 4mhz وشكرااا .
_____
هاد الجزء الخاص ب I2C protocol :

////////////////////////////////////////////////////////////////////////////////
void I2C_init(void);
void I2C_Start(void);
void I2C_Stop(void);
void I2C_Repeted_Star();
unsigned char I2C_Write(unsigned char DAT);
unsigned char I2C_Read(unsigned char ack);
unsigned char I2C1_Bus_IsFree();
////////////////////////////////////////////////////////////////////////////////

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;

}
////////////////////////////////////////////////////////////////////////////////
void I2C_Start()
{
SSPCON2bits.SEN = 1;
while(PIR1bits.SSP1IF == 0);
PIR1bits.SSP1IF = 0;
}
////////////////////////////////////////////////////////////////////////////////
unsigned char I2C_Write(unsigned char DAT)
{//0
SSPBUF=DAT;
while(PIR1bits.SSP1IF == 0);
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;

return DA1;
}

////////////////////////////////////////////////////////////////////////////////
void I2C_Stop()
{
SSPCON2bits.PEN=1;
while(PIR1bits.SSP1IF == 0);
PIR1bits.SSP1IF = 0;
}
////////////////////////////////////////////////////////////////////////////////
unsigned char I2C_Bus_Is_Free()
{
if(SSPSTATbits.P == 0 && SSPSTATbits.S ==1 ) return 1; //the bus is busy now,
return 0;
}
////////////////////////////////////////////////////////////////////////////////
void I2C_Repeted_Star()
{
SSPCON2bits.RSEN=1;
while(PIR1bits.SSP1IF == 0);
PIR1bits.SSP1IF = 0;
}
للاسف اخي لم اتعامل مغ mplab x ide فقط تعاملت مع mplab ايام assembly فقط ولم يكن لديهم لغه السي ايامها.

اعلانات

rashad shubita
:: مهندس متواجد ::
تاريخ التسجيل: Jul 2014
الدولة: Palestine
المشاركات: 80
نشاط [ rashad shubita ]
قوة السمعة:
قديم 04-09-2015, 12:19 PM المشاركة 26   
Post


شكرا اخي الكريم على تعاونك
لكن اعتقد لا يوجد فرق كبير بين mplab x ide و mikroC PRO for PIC
مثلا طريقة الوصول ل بيت معين في رجستر تختلف
(SSPCON2.SEN--->>SSPCON2bits.SEN)لكن بالنهاية الاثنين عباره عن مترجم بلغة السي .

اعلانات اضافية ( قم بتسجيل الدخول لاخفائها )

hamzazayyad
:: مهندس متميز ::
تاريخ التسجيل: Aug 2005
الدولة: موزنبيق
المشاركات: 696
نشاط [ hamzazayyad ]
قوة السمعة:
قديم 04-09-2015, 01:48 PM المشاركة 27   
افتراضي


شكرا اخي الكريم على تعاونك
لكن اعتقد لا يوجد فرق كبير بين mplab x ide و mikroC PRO for PIC
مثلا طريقة الوصول ل بيت معين في رجستر تختلف
(SSPCON2.SEN--->>SSPCON2bits.SEN)لكن بالنهاية الاثنين عباره عن مترجم بلغة السي .
اخي كما تعلم يوجد العديد من الكمبايلرات compilers باسماء مختلفه ولكل منها طريقته بالعمل وطبعا كل شركه تكتب المكتبات lib خاصتها لتدعم جزء او كل الخصائص داخل الميكرو .....الخ من التفاصيل..

لكن ادا اعطيتنا بعض التفاصيل عن mplab x ide وكان افضل واقوى من ميكروسي بالتاكيد سنتعلم mplab x ide...


بالتوفيق .



الساعة معتمدة بتوقيت جرينتش +3 الساعة الآن: 01:41 AM
موقع القرية الالكترونية غير مسؤول عن أي اتفاق تجاري أو تعاوني بين الأعضاء
فعلى كل شخص تحمل مسئولية نفسه إتجاه مايقوم به من بيع وشراء وإتفاق وأعطاء معلومات موقعه
التعليقات المنشورة لا تعبر عن رأي موقع القرية الالكترونية ولايتحمل الموقع أي مسؤولية قانونية حيال ذلك (ويتحمل كاتبها مسؤولية النشر)