ايران ويج

نسخه‌ی کامل: مشکل در ارتباط I2C
شما در حال مشاهده‌ی نسخه‌ی متنی این صفحه می‌باشید. مشاهده‌ی نسخه‌ی کامل با قالب بندی مناسب.
با سلام مشکلی در ارتباط با راه اندازی I2C در codevision برای eeprom 24c1024 دارم و اون این است که وقتی پایه های I2c رو همان جایی که در کاتالوگ میکرو نوشته قرار میدم کار نمیکنه (مثلا پایه 23 و24 در atmega16 ( در صورتی که این پایه ها مخصوص این کار در میکرو مشخص شده اند نمی دونم کجای کار اشکال داره در help برنامه نوشته شده که باید قبل از اضافه کردن سرآمد i2c.h باید محل اتصال پایه های SDA و SCL مشخص بشه که من هرجا تعریف میکنم کارمیکنه مگر سرجای اصلی خودش!!!!!!!
#asm
.equ __i2c_port=0x15 ;PORTC
.equ __sda_bit=1
.equ __scl_bit=0
#endasm
ولی مثلا وقتی روی پین های دیگه پورت B متلا تعریف میکنم کار میکنه ولی وقتی تعریف بالا رو برای پورت C میکنم اصلا سیگنال SCL هم روی پایه ایجاد نمیشه PCB مداررو هم کشیدم بدجوری کلافم کرده لطفا راهمایی کنید . ضمنا SDAو SCLرو هم با مقاومت بیرونی pullup کردم.
:lol:
دو جور می شه با این spi کار کرد یکی سخت افزاری یکی نرم افزاری سخت افزاری خودش کار هاشو می کنه و داده رو آماده داخل بافر تحویل می ده محدودیتی هم که داره پایه هاش سر جاشونن و به تعدادی هم که روی سیستم هست می شه استفاده کرد
ولی نرم افزاری هر جا خواستی می تونی تعریف کنی و ایرادشم اینه که باید کل CPU در گیر این ارسال و در یافت بشه شما داری نوع نرم افزاریشو روی سخت افزاری فعال می کنه که نمی شه قاطی می کنن خوب
باید از دستور spi بدون هیچ تعریف پینی استفاده کنی
کد:
void SPI_Send( unsigned char *buf, unsigned int Length )
{
    unsigned char temp;
    if ( Length == 0 )
        return;
    while ( Length != 0 )
    {
        temp = spi(*buf);
        //printf("Send %d & resive %d\r\n",*buf,temp);
        Length--;
        buf++;
    }
    return;
}