آموزش ساخت برنامه I2C SCANNER

در این آموزش قصد ساخت یک دستگاه  I2C SCANNER توسط میکروکنترلر اردوینو را داریم.خیلی وقت ها در پروژه نیاز به راه اندازی سنسور یا ماژولی داریم که از رابط I2C پشتیبانی می کند ولی در راه اندازی برنامه دچار مشکل شده ایم و می خواهیم اطمینان پیدا کنیم که سنسور یا ماژول ما سالم است یا اینکه ارتباط I2C به درستی برقرار شده است.در اینجا یک کلید در نظر گرفتیم که با زدن ان میکروکنترلر توسط پورت I2C از پایین ترین ادرس I2C (ادرس 1 , ادرس صفر به ادرس سراسری اختصاص و کاربرد خاص دارد) تا حداکثر ان (در حالت ادرس دهی 7 بیتی حداکثر مقدار عدد 127 است) شروع به اسکن ادرسهای I2C می کند و در صورت برقراری درست ارتباط  (دریافت ACK) عبارت Connection Success توسط پورت سریال پرینت شده و در صورت مابقی حالتهای پیش امده خطای مربوطه به کاربر گزارش داده می شود.

توضیحات برنامه :

#include "Wire.h"

فراخوانی کتابخانه مربوطه به I2C

uint16_t scanSpeed = 10;//speed of scan

متغییر برای تنظیم سرعت اسکن برحسب میلی ثانیه

uint8_t  yourAddress = 0;

متغییر نگه داری ادرس مورد نظر جستجو.در صورت صفر بودن کل ادرسها بررسی می شود.ولی در غیر اینصورت بعد از رسیدن به ادرس مورد نظر برنامه اسکن متوقف می شود.

#define pin 7

تنظیم پایه کلید ورودی

void setup(){

 pinMode(pin,INPUT);
  
 Serial.begin(9600); 

تنظیم بادریت پورت سریال

Serial.println("Scanner ... ");
 
 Wire.begin(0xFF);//Fake Address 

Init پورت i2c

}

void loop() {

    if(digitalRead(pin)== LOW){

       i2c_scanner();

       delay(1500);
       
    }
       
}


void i2c_scanner(){

  Serial.println(F("----------  ----------"));
  Serial.println(F("Start Of I2C Scanner:"));
  Serial.println();
  Serial.println(F("----------  ----------"));

  for(uint8_t x = 1; x <= 127; x++){

شروع ادرس از 1 تا 127 .در صورتی که i2c میکروکنترلر شما 10 بیتی می باشد می توانید این عدد را تغییر دهید.

delay(scanSpeed);

تاخیر برای اماده سازی ارسال بعدی

        Wire.beginTransmission(x);

ارسال ادرس مورد نظر و شروع ارتباط

Wire.write(0xAA);//Fake Data

ارسال یک دیتای دلخواه به گیرنده

        uint8_t _status = Wire.endTransmission();

خواندن وضعیت دیتای ارسالی در پایان ارتباط

        switch(_status){
          case 0:
          
            Serial.print(F("Connection Success , Address is : 0X"));

ارسال موفق دیتا به گیرنده و دریافت سیگنال ACK

            if(x < 16){
              Serial.print("0");

در صورت کمتر بودن ادرس ما از عدد 16 یک صفر قبلا از ان پرینت می گیریم تا عدد در مبنای هگز در پورت سریال به درستی دیده شود.

            }
            
            Serial.print(x,HEX);
            Serial.println();

            delay(500);
          
          break;
          case 1:
            Serial.print(F("Data To Long , Address is : 0X"));

خطا در صورت ارسال حجم زیاد دیتا.در این برنامه کاربردی ندارد.

            if(x < 16){
              Serial.print("0");
            }
            Serial.print(x,HEX);
            Serial.println();
          break;
          case 2:
          
            Serial.print(F("Received NACK On Transmit Of Address , Address is : 0X"));

خطا در صورت دریافت نکردن Ack سیگنال از ادرس مورد نظر

             if(x < 16){
              Serial.print("0");
            }
            Serial.print(x,HEX);
            Serial.println();
          break;
          case 3:
            Serial.print(F("Received NACK On Transmit Of Data , Address is : 0X"));

خطا در صورت دریافت نکردن Ack سیگنال از ارسال دیتای مورد نظر

             if(x < 16){
              Serial.print("0");
            }
            Serial.print(x,HEX);
            Serial.println();
          break;
          case 4:
            Serial.print(F("Other Error , Address is : 0X"));

در صورت اتفاق دیگر خطاها

             if(x < 16){
              Serial.print("0");
            }
            Serial.print(x,HEX);
            Serial.println();
          break;
          case 5:
            Serial.print(F("Timeout , Address is : 0X"));

خطای پایان مدت زمانی ارسال اطلاعات به گیرنده

            if(x < 16){
              Serial.print("0");
            }
            Serial.print(x,HEX);
            Serial.println();
          break;
        }

  }
  
      Serial.println();
      Serial.println(F("End."));

      
}

شما می توانید فایل برنامه و فایل شبیه سازی را از لینک زیر دانلود نمایید:

دانلود فایل

دیدگاهتان را بنویسید!

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *

گیل الکترونیک
سبد خرید
empty basket

هیچ محصولی در سبد خرید نیست.