امتیاز موضوع:
  • 1 رأی - میانگین امتیازات: 5
  • 1
  • 2
  • 3
  • 4
  • 5
وصل كردن دو ميكرو از طريق i2c
نویسنده پیام
aftabi آفلاین
تازه وارد

ارسال‌ها: 1
موضوع‌ها: 1
تاریخ عضویت: مرداد ۱۳۸۶

تشکرها : 0
( 0 تشکر در 0 ارسال )
ارسال: #1
وصل كردن دو ميكرو از طريق i2c
سلام
من مي خوام از طريق i2cدو ميكرو رو راه اندازي كنم . لطفا مرا راهنمايي كنيد.
(با codevision مي نويسم)
۰۹-مرداد-۱۳۸۶, ۱۱:۱۴:۱۳
ارسال‌ها
پاسخ
ha_60 آفلاین
بنيانگذار سايت
******

ارسال‌ها: 4,637
موضوع‌ها: 216
تاریخ عضویت: آبان ۱۳۸۳

تشکرها : 560
( 6556 تشکر در 2385 ارسال )
ارسال: #2
 
کد:
/* write a byte to the EEPROM */
void eeprom_write(unsigned char address, unsigned char data) {

i2c_start();
i2c_write(EEPROM_BUS_ADDRESS);
i2c_write(address);
i2c_write(data);
i2c_stop();
توی خود کدویژن یه سرچ بکنی کلی توضیحات می تونی براش پیدا کنی

هادی امین زاده
دیدن چیزی که همه می بینند هنر نیست
بانک اطلاعات صنایع ایران.
۰۹-مرداد-۱۳۸۶, ۱۳:۱۹:۵۳
وب سایت ارسال‌ها
پاسخ
تشکر شده توسط : t3r!p3000, ایلیاایرانی
mehdi_ghp آفلاین
كاربر تک ستاره
*

ارسال‌ها: 31
موضوع‌ها: 14
تاریخ عضویت: فروردین ۱۳۸۶

تشکرها : 2
( 1 تشکر در 1 ارسال )
ارسال: #3
 
تو بسکام چه جوریه؟
۱۴-بهمن-۱۳۸۶, ۲۲:۰۴:۴۸
ارسال‌ها
پاسخ
newdesign آفلاین
مدیر بازنشسته
*****

ارسال‌ها: 218
موضوع‌ها: 14
تاریخ عضویت: فروردین ۱۳۸۶

تشکرها : 0
( 30 تشکر در 22 ارسال )
ارسال: #4
 
به هلپ بسکام مراجعه کنی داره
کد:
Declare Sub Write_eeprom(byval Adres As Byte , Byval Value As Byte)
Declare Sub Read_eeprom(byval Adres As Byte , Value As Byte)

Const Addressw = 174                                          'slave write address
Const Addressr = 175                                          'slave read address

Dim B1 As Byte , Adres As Byte , Value As Byte                'dim byte

Call Write_eeprom(1 , 3)                                      'write value of three to address 1 of EEPROM


Call Read_eeprom(1 , Value) : Print Value                     'read it back
Call Read_eeprom(5 , Value) : Print Value                     'again for address 5


'-------- now write to a PCF8474 I/O expander -------
I2csend &H40 , 255                      'all outputs high
I2creceive &H40 , B1                    'retrieve input
Print "Received data " ; B1             'print it
End

Rem Note That The Slaveaddress Is Adjusted Automaticly With I2csend & I2creceive
Rem This Means You Can Specify The Baseaddress Of The Chip.




'sample of writing a byte to EEPROM AT2404
Sub Write_eeprom(byval Adres As Byte , Byval Value As Byte)
    I2cstart                                                  'start condition
    I2cwbyte Addressw                                         'slave address
    I2cwbyte Adres                                            'asdress of EEPROM
    I2cwbyte Value                                            'value to write
    I2cstop                                                   'stop condition
    Waitms 10                                                 'wait for 10 milliseconds
End Sub


'sample of reading a byte from EEPROM AT2404
Sub Read_eeprom(byval Adres As Byte , Value As Byte)
   I2cstart                                                   'generate start
   I2cwbyte Addressw                                          'slave adsress
   I2cwbyte Adres                                             'address of EEPROM
   I2cstart                                                   'repeated start
   I2cwbyte Addressr                                          'slave address (read)
   I2crbyte Value , Nack                                      'read byte
   I2cstop                                                    'generate stop
End Sub
۱۵-بهمن-۱۳۸۶, ۰۱:۲۴:۲۶
وب سایت ارسال‌ها
پاسخ
تشکر شده توسط : t3r!p3000
mehdi_ghp آفلاین
كاربر تک ستاره
*

ارسال‌ها: 31
موضوع‌ها: 14
تاریخ عضویت: فروردین ۱۳۸۶

تشکرها : 2
( 1 تشکر در 1 ارسال )
ارسال: #5
 
تو help فقط ارتباط با eepromهست.نه دو میکرو .من یه برنامه نوشتم برای دو میکرو جواب نداد
۱۵-بهمن-۱۳۸۶, ۰۶:۴۸:۲۳
ارسال‌ها
پاسخ
morteza_uve2 آفلاین
كاربر تک ستاره
*

ارسال‌ها: 34
موضوع‌ها: 9
تاریخ عضویت: مهر ۱۳۸۶

تشکرها : 0
( 11 تشکر در 6 ارسال )
ارسال: #6
 
فكر كنم بايد آدرس بندي كني... مثل spi بايد مستر و اسليو تعريف كني
كه ميكروييكه ميخواد اطلاعاتو بگيره يه آدرس ميدي بين 0-128 بعد ميكروييكه ميخواد بفرسته اول ادرس اسليو ميدي بعد اطلاعاتو ميفرستي . :roll: :idea:
۱۶-بهمن-۱۳۸۶, ۰۴:۰۷:۲۶
ارسال‌ها
پاسخ
تشکر شده توسط : t3r!p3000
agape آفلاین
مدیر بازنشسته
*****

ارسال‌ها: 68
موضوع‌ها: 6
تاریخ عضویت: آذر ۱۳۸۶

تشکرها : 1
( 36 تشکر در 19 ارسال )
ارسال: #7
 
کاری نداره
باید یه میکرو تو حالت مدیر و یکی دیگه تو حالت تابع باشه . میدونم که این کار رو خود میکرو با سخت افزار میکنه ولی این که کتابخونه ای تو بیسکام هم داشته باشه یا مه رو درست نمی دوم
ولی خوب میتونی در مورد رابط I2C که رو میکرو هست بخونی و خودت به صورت دستی کدش رو بنویسی
۲۱-بهمن-۱۳۸۶, ۱۱:۱۶:۲۵
وب سایت ارسال‌ها
پاسخ
تشکر شده توسط : t3r!p3000
reza_12 آفلاین
تازه وارد

ارسال‌ها: 23
موضوع‌ها: 4
تاریخ عضویت: فروردین ۱۳۸۶

تشکرها : 0
( 4 تشکر در 3 ارسال )
ارسال: #8
 
سلام به دوستان
من هم مشکل توی دستورات i2c داوم. :!:
من میخوام از میکروatmega16 با i2c به مکرو atmega16 دیگری وصل کنم اما نمیدونم که چه جوری دستوراتش رو بنویسم لطفا یک نمونه در این مورد تو سایت بگزارد. (bascom) :?: ممنون
۲۶-بهمن-۱۳۸۶, ۱۸:۲۰:۲۸
ارسال‌ها
پاسخ
goolden آفلاین
تازه وارد

ارسال‌ها: 1
موضوع‌ها: 0
تاریخ عضویت: شهریور ۱۳۸۸

تشکرها : 0
( 0 تشکر در 0 ارسال )
ارسال: #9
RE: وصل كردن دو ميكرو از طريق i2c
سلام دوست عزيز برنامه اي براي modbus با زبان بيسيك نداري
۱۷-تير-۱۳۸۹, ۲۲:۲۷:۱۲
ارسال‌ها
پاسخ
most آفلاین
تازه وارد

ارسال‌ها: 1
موضوع‌ها: 0
تاریخ عضویت: تير ۱۳۸۹

تشکرها : 0
( 0 تشکر در 0 ارسال )
ارسال: #10
RE: وصل كردن دو ميكرو از طريق i2c
سلام.نمونه برنامه ای برای ارتباط دو توسط I2Cمخوام.باتشکر
۱۶-مرداد-۱۳۸۹, ۱۶:۱۱:۰۷
ارسال‌ها
پاسخ
t3r!p3000 آفلاین
         
*****

ارسال‌ها: 5,050
موضوع‌ها: 83
تاریخ عضویت: اردیبهشت ۱۳۸۵

تشکرها : 34447
( 17423 تشکر در 5116 ارسال )
ارسال: #11
RE: وصل كردن دو ميكرو از طريق i2c
از کتاب سعید یه نفر :

ارتباط سريال i2c يا 2-wire


ويژگي هاي اين ارتباط به شرح زير است:

1-
در اين ارتباط از دوسيم همرا با گراند و VCC ، که درمجموع چهار سيم مي شود ، براي انتقال ديتا استفاده مي شود

2-
بالا ترين فرکانس کلاک 400 کيلو هرتز است

3-
در اين ارتباط ميتوان تعداد نامحدود وسيله جانبي با آدرس سخت افزاري مختلف را به هم متصل کرد

4-
حداکثر طول کابل ارتباطي باسيم شيلد 80 سانتي متر است

5-
کلاک ارتباط I2C به شدت به کلاک سيستم (فرکانس کريستال ) وابسته است

براي ارتباط I2C از دو پايه SCL و SDA (PORTC.0 و PORTC.1 ميگرو مگا 16) استفاده مي شود که پايه SDA پايه داده و پايه SCL پايه کلاک ميباشد.( دو پايه مزکور پايه هاي پيش فرض ميباشند ، شما ميتوانيد با دستوراتي که گفته مي شود آنها را به پايهاي دلخواه خود تغيير دهيد)

دستورات مربوط به راه اندازي I2C :


تعيين کلاک I2C :

کد php:
Config I2cdelay 

X ميتواند از 1 تا 255 باشد ، رابطه اي بين کلاک و عدد وجود ندارد ، مثلا براي عدد 10 کلاک 100 کيلو وبراي عدد 5 کلاک 200 کيلو و براي عدد 1 کلاک 400 کيلو هرتز است ( کلاک I2C به فرکانس کريستال وابسته است ، در اين ارتباط بايد کريستال نوشته شده در برنامه با کريستال استفاده شده يکي باشد ، همچنين کلاک هر دو دستگاه بايد مساوي باشد)

تعيين پايه هاي داده و کلاک I2C :

با دستور زير پايه SCL (پايه کلاک) تعيين مي شود :

کد php:
CONFIG SCL pin 

Pin نام يکي از پايه هاي دلخواه ميکرو ميباشد .
با دستور زير پايه SDA (پايه داده) تعيين مي شود :

کد php:
CONFIG SDA pin 

Pin نام يکي از پايه هاي دلخواه ميکرو ميباشد
بعد از انکه I2C پيکر بندي شد با استفاده از دستور زير ميتوان ارتباط را اغاز کرد

کد php:
I2CSTART 

با اين دستور ارسال ودريافت داده شروع مي شودشما همچنين ميتوانيد با دستور زير به ارسال ودريافت داده خاتمه دهيد:

کد php:
I2CSTOP 

با استفاده از دستور زير ميتوان داده اي را به باس I2C فرستاد:

کد php:
I2CSEND slave, var
I2CSEND slave, var , bytes 

Slave :آدرس گيرنده اطلاعات است که ميتواند به فرم يک عدد ثابت يا متغيير باشد
Var : عدد ثابت يا متغييري است که ميخواهيسم آن را ارسال کنيم
: bytesبا اين گزينه شما ميتوانيد تعداد بايت دلخواه را به باس ارسال کنيد (اين گزينه اختياري است)

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

کد php:
I2CWBYTE val 

Val : عدد ثابت يا متغييري است که کد دريافت شده در آن قرار ميگيرد .

مثال:
برنامه فرستنده:

کد php:
$regfile "m32def.dat"
$crystal 1000000
Config Lcd 
16 2
Config Lcdpin 
Pin Db4 Pinb.2 Db5 Pinb.3 Db6 Pinb.4 Db7 Pinb.5 Rs Pinb.0 Pinb.1
Config Kbd 
Porta
Config I2cdelay 
5
Config Sda 
Portc.1
Config Scl 
Portc.0
Dim A 
As Byte
I2cstart
W
:
Getkbd()
If 
15 Then
Goto W
End 
If
I2csend &H40 A
Locate 2 
1
Lcd A
Goto W
End 

در مثال با کلاک I2C ، 200کيلو هرتز انتخاب شده است همچنين پايهSCL (پايه کلاک)به پورت c.0 ( پايه22 مگا16)و پايه SDA (پايه داده) به پين c.1 (پايه 23 مگا 16) متصل شده است.

با دستور I2cstartپروتکل i2c شروع به کار کرده وعدد گرفته شده از کيپد را بخ باس i2c ميفرستد ، براي گيرنده آدرس &h40 در نظر گرفته شده است ، براي درک بيشتر موضوع متغير ارسالي بر روي يک lcd به نمايش در ميايد.

با استفاده از دستور زير ميتوان داده اي را از باس I2C دريافت کرد:

کد php:
I2CRECEIVE slave, var
I2CRECEIVE slave, var , b2Wb2R 

Slave :آدرس فرستنده اطلاعات است که ميتواند به فرم يک عدد ثابت يا متغيير باشد.
Var : عدد ثابت يا متغييري است که کد دريافت شده در آن قرار ميگيرد
: bytesبا اين گزينه شما ميتوانيد تعداد بايت دلخواه را از باس دريافت کنيد (اين گزينه اختياري است).(توجه داشته باشيد که تعداد بايت دريافتي و ارسالي بايد با هم برابر باشند در غير اينصورت اطلاعات دريافتي ناقص خواهد بود.)

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

کد php:
I2CRBYTE var, ack/nack 

Var : عدد ثابت يا متغييري است که کد دريافت شده در آن قرار ميگيرد
ack/nack :زماني که بخواهيم بيشتر از يک بايت را از باس بخوانيم بايد از ack استفاده کنيم و زماني که ميخواهيم اخرين بايت را از باس بخوانيم از nack استفاده ميکنيم.


[تصویر:  7a59b3ec26a94b349c36.PNG]


مثال:
اين برنامه مربوط به گيرنده مداري است که برنامه آن را در بالا مشاهده فرموديد:

کد php:
$regfile "m32def.dat" $crystal 1000000
Config Lcd 
16 2
Config Lcdpin 
Pin Db4 Pina.0 Db5 Pina.1 Db6 Pina.2 Db7 Pina.3 Rs Pina.4 Pina.5
Config I2cdelay 
5
Config Sda 
Portc.1
Config Scl 
Portc.0
Dim A 
As Byte
I2cstart
W
:
I2creceive &H40 A
If 16 Then Locate 1 Lcd A End If
Goto 
W
End 

در مثال بالا کلاک I2C ، 200 کيلو هرتز(Config I2cdelay = 5) انتخاب شده است همچنين پايهSCL (پايه کلاک)به پورت c.0 ( پايه22 مگا16)و پايه SDA (پايه داده) به پين c.1 (پايه 23 مگا 16) متصل شده است.

با دستور I2cstartپروتکل i2c شروع به کار کرده وعدد گرفته شده از باس را بر روي lcd نمايش ميدهد ، براي فرستنده آدرس &h40 در نظر گرفته شده است .
۱۶-مرداد-۱۳۸۹, ۱۶:۵۷:۰۰
ارسال‌ها
پاسخ
تشکر شده توسط : رسول, salehjg, reza555, vitaliran, abbasalifix


موضوعات مرتبط با این موضوع...
موضوع نویسنده پاسخ بازدید آخرین ارسال
Exclamation ارتباط سريال بين دو ميكرو و نمايش روي lcd با codevision ali313 13 28,959 ۰۱-شهریور-۱۳۹۷, ۱۱:۰۸:۴۳
آخرین ارسال: farhadtavakkol
  ورودي ديجيتال در ميكرو ها cinapa 0 1,891 ۲۰-بهمن-۱۳۹۴, ۱۱:۱۳:۴۱
آخرین ارسال: cinapa
  روشن کردن LED از طريق PORT USB hamid67fathi 19 16,992 ۱۰-دى-۱۳۹۴, ۰۰:۳۶:۱۳
آخرین ارسال: sharin
  مشكل با ميكرو ATMEGA64 elec645 12 10,853 ۰۲-شهریور-۱۳۹۴, ۱۳:۳۹:۲۰
آخرین ارسال: mbir92
  مشكل در راه اندازي ميكرو atmega8 fateme67hj 9 6,255 ۲۸-خرداد-۱۳۹۴, ۱۳:۳۲:۱۲
آخرین ارسال: fateme67hj
  كمك در مورد پروژه ميكرو دماسنج ديجيتال networkamn2014 4 3,804 ۱۳-اردیبهشت-۱۳۹۴, ۱۹:۰۲:۲۵
آخرین ارسال: khaleghi897
Exclamation اتصال وبكم يا دوربين به ميكرو amirnajjar 15 23,023 ۰۱-مرداد-۱۳۹۳, ۱۷:۰۷:۴۲
آخرین ارسال: hamid-reza
  مشكل در پرگرام كردن avr vb_1985 8 5,637 ۲۴-اردیبهشت-۱۳۹۳, ۱۵:۰۶:۳۱
آخرین ارسال: behzady
  پاك كردن يه متغير string در بسكام sinaitg 1 1,532 ۲۵-بهمن-۱۳۹۲, ۰۰:۳۲:۱۷
آخرین ارسال: ترانسپورتر
  [فوری] مشكل در چك كردن كليد با دستور debounce velakat 12 12,149 ۱۱-دى-۱۳۹۲, ۰۰:۵۸:۱۵
آخرین ارسال: sharin

پرش به انجمن:


کاربرانِ درحال بازدید از این موضوع: 4 مهمان

صفحه‌ی تماس | IranVig | بازگشت به بالا | | بایگانی | پیوند سایتی RSS