I2C hakkinda bilgi

Başlatan ei, 28 Ekim 2004, 13:04:08

ei

merhaba,
PBP'da i2c kullanımı hakkında detaylı bilgi ve örnekleri bulabileceğim bir adres / kitap önerisi olan var mı? Özellikle i2c protokolünü kullanan PLL tümdevreleri ile ilgileniyorum.
teşekkürler.

GSMdesigner

Merhaba,

Merak ettim ve yeni üye olmak istedim!  Merak ettiğim şey ise yeni üyeler forum hakkında bilgilendiriliyormu diye! Sakın yeni üye olan arkadaşım beni yanlış anlamasın. Şimdi söyleyeceklerim kendisinin hatası değil, çünkü forum kuralları gibi yönlendirici bir mesaja yer verilmemiş.

Arkadaşımızın sorusu muhtemelen forum içerisinde var. Aynı şekilde internette de bolca kaynak vardır. Ama nedense ilk mesajlar böyle araştırılmadan alelacele gönderiliyor. Hazır konma olasılığını bile düşünmek istemiyorum.

Açıkcası bu beni biraz rahatsız etti. O yüzden yazmak istedim. Aslında bu olayın çözümü var. Üye olanlar, hatta üye olmadan önce onaylanması gereken bir şekilde, şöyle bazı yerleri kalınca vurgulanmış bilgilendirici bir mesaj ile muhatap olabilirler.

Yani forum hakkında madde madde kural ve öneriler. Böylece yeni gelen üyelerimizi doğru bir şekilde yönlendirmiş oluruz. Yanılıyor muyum? Aslında eskiden vardı şimdi niye yok? Arkadaşlar sizce bu mesaj nasıl olmalı? Bence eskisinde daha iyi olmalı! Sanki eskisi phpBB ile birlikte gelen, genel bir mesajdı.

Sevgiler, saygılar...
 [email]salihdb@akeltelekom.com[/email]

aster

DumrulBey, uyarıların için ya admine pm atmanı yada isteklerini istekler bölümüne yazmanı rica edeceğim
@ei senide gözüm bir yerden ısırıyo, ei nin dandik bir markaya ait olduğunu biliyorsun herhalde çok kötü tr yapardı

ei

GSMdesgner nick'li sayın üye,
Benim sorumun cevabının "muhtemelen forum içinde var" olduğunu söyleyip, ihtimale dayalı olarak ve kibarca beni "hazırcılık" ile suçluyorsunuz.. üzüldüm.. sebebini yazacağım.
ASTER nickli süper moderator de "ei" yi bir yerden gözü ısırdığından yola çıkıp "dandik"lik ile işi başlamış; ne diyeyim..
ei, TA2EI'da yeralan ei'den geliyor ve TA2EI benim amatör telsizci call-sign'ım.
Kendim hukukçuyum ve dolayısı ile elektronikle "profesyonelce" uğraşanlar kadar elektronikten anlamam; o sebeple zaten i2c konusunda "bilgi" ve "örnek" arayışı içindeyim. Yok değilse hazırcılık için değil.
http://www.qsl.net/ta2ei adresindeki sayfama bir göz atarsanız, bir "hukukçu" olarak hiç te hazırcı olmadığımı, amatörce birşeyler yapmaya çalıştığımı anlarsınız.

"önyargı"sız günler dileğiyle.

fsan

merhaba TA2EI,
Picbasic pro da i2c ile bazi  bilgiler:

I2C_HOLD 1
pause 12C transfer while the tact is on a low level ; instruction on which it acts: I2COUT, I2COUT

I2C_INTERNAL 1
internal EEPROM in series 16Cexxx and 12Cxxx of the PIC microcontroller ; instruction on which it acts: I2COUT, I2COUT

I2C_SCLOUT 1
serial tact is a bipolar at the place of an open collector ; instruction on which it acts: I2CWRITE, I2CREAD

I2C_SLOW 1
for the tact > BMHz OSC with the devices of a standard velocity ;  instruction on which it acts: I2CWRITE, I2CREAD

I2CREAD
Reading data from I2C peripheral device
Syntax: I2CREAD Data, Frequency, Control_byte, {Address,} [Variable {, Variable...}]{,Label}
Description: Sends control and address data via I2C lines and receieved bytes are stored into "Variable".
I2CREAD and I2CWRITE can be used for reading and writing data to peripheral units. These instructions work with I2C master byte in read and write modes and can be also used for communication with other devices with I2C interface, such as temperature sensors, A/D converters, etc. Higher 7 bits of control byte contain control code for chip selection or extra information on addresses, depending on device. The lowest bit is flag indicating the current mode - read or write.
For example, for communicating with 24LC01B, requested address is 8-bit, control code is %1010 and chip select is unused, so that control byte would be %10100000 or $A0.
Formats of control bytes for several other serial EEPROMs are given in the table below:
EEPROM Capacity Control word Address size
24LC01B 128 bytes %1010xxx0 1 byte
24LC02B 256 bytes %1010xxx0 1 byte
24LC04B 512 bytes %1010xxb0 1 byte
24LC08B 1K bytes %1010xbb0 1 byte
24LC16B 2K bytes %1010bbb0 1 byte
24LC32B 4K bytes %1010ddd0 2 bytes
24LC65 8K bytes %1010ddd0 2 bytes
bbb = block selection
ddd = device selection bits
xxx = has no effect

If 2-byte data (WORD) is received, higher byte is received first, and lower thereafter. For string transfer, STR goes before the name of the string, and number of clocks after \ .

a var byte[8]

I2CREAD PORTC.4, PORTC.3, $a0, 0, [STR a\8]

If optional label is used, program will jump to the label if there is no response signal over the I2C interface. Standard transfer rate (100kHz) is achieved with 8MHz oscillator. For higher transfer rate (400kHz) 20MHz oscillator is used. If slower oscillator is used for the
transfer, following directive should be used :

DEFINE I2C_SLOW 1

In order to have bipolar I2C clock interface and not an open collector, following DEFINE directive should be used:

DEFINE I2C_SCLOUT

Operating any peripheral units with I2C communication demands that you read supplier manuals and specifications.

Example:
B0 var byte
addr var byte
cont con %10100000 ‘ Control address of EEPROM
addr = 17 ‘ Data address is 17
Main:
I2CREAD PORTA.0, PORTA.1, cont, addr, [B0] ‘ Get data to variable B0
Loop: goto Loop
end

I2CWRITE
Writing data to I2C peripheral device
Syntax: I2CWRITE Data, Frequency, Control_byte, {Address,} [Vari {, Vari...}]{,Label}
Description: I2WRITE sends control and address data via I2C interface. We define 8-bit or 16-bit
address while defining variable put to address parameter (in order to correctly define
address size, we must have accurate information on device we are communicating with).

If peripheral device is serial EEPROM, it is necessary to wait for 10ms (depending on device) until writing has ended. New communication with device is possible after 10ms have elapsed. If new data write occurs before the last one has ended, request will be ignored. Address size is either 1 or 2 bytes, depending on device connected. A problem
may occur when trying to write multiple bytes in one instruction, depending on specific EEPROM. Such instances can be avoided if, instead of EEPROM, we use devices without the need for pause between writing. If 2-byte data (WORD) is sent, higher byte goes first, then the lower. For string transfer, STR goes before the name of the string, and number
of clocks after \ .

a var byte[8]

I2CWRITE PORTC.4, PORTC.3, $a0, 0, [STR a\8]

If optional label is used, program will jump onto the label if there is no response signal over the I2C interface. Standard transfer rate (100kHz) is achieved by 8MHz oscillator. For higher transfer rate (400kHz) 20MHz oscillator is used. If slower oscillator is used for the transfer program should contain the following directive:

DEFINE I2C_SLOW 1

In order to have bipolar I2C clock interface and not an open collector, following DEFINE directive should be used:

DEFINE I2C_SCLOUT

Operating any peripheral units with I2C communication requires that you study the supplier manual and specifications.

Example:
B0 var byte
addr var byte
cont con %10100000 ‘ Control address of EEPROM
Main:
addr = 17 ‘ EEPROM address where data will be written is 17
i2cwrite PORTA.0, PORTA.1, cont, addr, [6] ‘ Write number 6 to address 17
pause 10 ‘ Wait 10ms until writing is finished
addr = 1 ‘ Set address of writting to 1
B0 = 23
i2cwrite PORTA.0, PORTA.1, cont, addr, [B0] ‘ Write value of variable B0 to address 1
pause 10 ‘ Wait 10ms until writing is finished
Loop: goto Loop
end


Sevgiler, Saygilar..
/Fikret

aster

Sayın ei,
sizi gözüm bir yerden ısırıyor demiş ve yanılmamışım
dandiklik konusunun sizlen alakası yok sadece ei olayını görünce o firma aklıma geldi hoş biz onlar kadar da olamadık olmamak için de hala kendimizi zorluyoruz, bir arkadaşım türk bayrağını microchip in sitesinde görememiş ( orada 40 ülke ile sınırlamış ve onları adam yerine koymuş )
bende bir kamyon para verip aldığım aletin sitesine kayıt olmak için girdiğimde 1001 ülkenin bulunduğunu ama Türkiye'nin adını göremediğimde aleti kırasım geldiğini belirteyim. Şahsen artık Türk'lüğümden utanır duruma geldim, her ne kadar bizi bu hale getirenler utanmasada
Neyse mevzuya dönersek bu yazışma olmasaydı sizin TA2EI olduğunuzu bilemiyecek ve sitenizde verdiğiniz bilgilerden faydalanamıyacaktık
Aramıza hoş geldiniz

DumrulBey

Alıntı yapılan: "ei"GSMdesgner nick'li sayın üye,
Benim sorumun cevabının "muhtemelen forum içinde var" olduğunu söyleyip, ihtimale dayalı olarak ve kibarca beni "hazırcılık" ile suçluyorsunuz.. üzüldüm.. sebebini yazacağım.
Dostum kusura bakma, amacım şu Ramazan günü kimseyi kırmak değildi! Senin gibi o kadar çok ilk mesajında araştırmadan hemen cevap arayan var ki ister istemez bunun nedenini araştırma ihtiyacı hissettim. Nedeni de yukarıda yazdıklarımdı.

Alıntı yapılan: "Aster"DumrulBey, uyarıların için ya admine pm atmanı yada isteklerini istekler bölümüne yazmanı rica edeceğim.
Aster, MSN'de dediğim gibi kendilerine ulaşamıyorum, en son yazdıklarıma icabet edilmemişti. Aslında amacım bir metin hazırlamaktı. Şöyle herkesin katkısı olduğu bir şey. Ne dersiniz? Yeni üyeleri yönlendirecek ne uzun, ne kısa! Şimdi ben yazsam sayfalarca. Hadi el atalım şuna...:)

Sevgiler, saygılar...
Bilgi paylaştıkça bir bakmışız; kar topu olmuş ve çığ gibi üzerimize geliyor...:)

fsan

Alıntı yapılan: "ei"merhaba,
PBP'da i2c kullanımı hakkında detaylı bilgi ve örnekleri bulabileceğim bir adres / kitap önerisi olan var mı? Özellikle i2c protokolünü kullanan PLL tümdevreleri ile ilgileniyorum.
teşekkürler.

@ei
merhaba usta, bahsettigin PLL tümdevrelerin ismini verirsen i2c ile ilgili  registerlerini datasheet den inceler daha detayli bilgi verebiliriz.. asagidaki linkte picbasic pro da i2c ile ilgili faydali bilgiler var merak ettigin veya takildigin yerler olursa yaz.
http://www.picbasic.co.uk/forum/search.php?s=ca2c145a707884fcc627959c2f6c6931&action=showresults&searchid=30462&sortby=lastpost&sortorder=descending

kolay gelsin.

DumrulBey

Merhaba,

Sahuru boş oturmayıp aşağıdaki gibi bir mesaj hazırladım. Eğer katılım olursa ayrı bir başlık açıp mesaj içeriğini hep birlikte yapılandıralım. Ne dersiniz? Sonra yöneticilerin desteğiyle sitemize yerleştirelim. Bundan da kısasını yazamazdım herhalde. Nasıl iyi mi? Elimden geldiğince kısa ve samimi yazmaya gayret ettim. Amacım sıkıcılığı azaltıp okunma oranını yükseltmekti. Kanaatimce, siteye aşağıdakine benzer bir metin acil lazım.

Alıntı yapılan: "GSMdesigner"...
Yani forum hakkında madde madde kural ve öneriler. Böylece yeni gelen üyelerimizi doğru bir şekilde yönlendirmiş oluruz. Yanılıyor muyum? Aslında eskiden vardı şimdi niye yok? Arkadaşlar sizce bu mesaj nasıl olmalı? Bence eskisinde daha iyi olmalı! Sanki eskisi phpBB ile birlikte gelen, genel bir mesajdı.

Sevgiler, saygılar...
Tebrikler! Artık sen de bizdensin, değerli bir üyemizsin. Üstelik bir taşla iki kuş vurdun: Hem siteye üye oldun, hem de capcanlı forumumuza paylaşma imkanına kavuştun. İster foruma katılım sağla, isterseniz bir makaleni paylaş veya ilgini çeken bir makaleyi hemen okumaya başla.

Henüz hiç mesajın yok! Ama sakın bu durum seni foruma katılım sağlamaktan alıkoymasın. Çünkü toplam mesaj adeti diğer üyelere göre az olması bir fark değil! Sadece olsa olsa matematiksel bir değerdir. Farkı bize kendini farkettirerek yapabilirsin. Evet, ne duruyorusun!

Biliyoruz, ilk mesajı göndermek için sabırsızlanıyorsun. Ama başlamadan önce aşağıdaki kuralları okumaya ne dersin? Bu sayede siteden daha iyi faydalanıp yazdıklarınla farkedilmeni en iyi şekilde sağlayabilirsin. Ben hesapladım okumak 3 dakikanı almıyor. Hadi o zaman:

Alıntı Yap- Yazdıklarında mümkün olduğunca imla kurallarına dikkat et. Böylece yanlış anlaşılmayı en aza indirebilirsin. Öyle ya, bu ortama duygu ve düşüncelerimizi iyi bir şekilde aktaramıyoruz! Ayrıca soruların mümkün olduğunca kısa ve öz olsun. Eğer uzun uzadıya anlatman gerekirse önemli cümleleri koyu olarak işaretle. Bu sayede fazla vakti olmayan ve mesajında göz gezdiren üyemizin de dikkatini çekersin.

- Mesajının tamamını sakın BÜYÜK HARFLER ile yazma. Gerekiyorsa belli bölümü dikkat çekmek için kullanılabilir. Çünkü bu davranış yazılı sohbet geleneklerinde pek hoş karşılanmayan bir uygulamadır ve bağırarak konuştuğun anlamı çıkarılır. Zaten büyük harfler gözleri yorar ve doğal olarak mesajına ilgiyi azaltır.

- Eğer mesajına hiç cevap yazılmamışsa gözden kaçmış olabilir. Tekrar ikinci bir mesaj yazmak yerine yazdıklarını hafızaya kopyalayarak (CTRL+C) başlığı veya son mesajı silip tekrar oluşturabilirsin. Bazen gün içerisinde çok mesaj gönderildiği için güncel mesajlar arasında seninki kaynayabiliyor. Hoş karşılayacağını umarız.

- Yeni bir başlık açmadan önce eski mesajları ilgili kategoriden veya arama yaparak incelemeni tavsiye ederiz. Hem böylece hazır bilgiye daha çabuk ve daha doyurucu bir şekilde ulaşırsın. Eksik kalan yerler veya cevap bulamadıkların olursa lütfen ilgili kategori içinde ve başka kategorilerde tekrar yapmadan başlık aç ki senden sonra gelenler düzenli bir forum ile karşılaşsın.

- Arama yaparken daha çok sonuç için '*' karakterini anahtar sözcüğün başında veya sonuda, ya da her iki tarafında kullanabilirsin. Yeni başlık açacağın zaman mesaj içinde işlev gören özel işaretleri başlık isminde kullanamazsın. Çünkü orada yazdığın gibi gözükürler.

- Hani dedik ya, bu ortamda duygu ve düşünceleri tam olarak aktaramıyoruz diye. İşte imdadımıza mesaj yazdığın ekranda hazırda duran surat ifadeleri yetişiyor. Ama sakın yazıyı süslemek veya dikkat çekmek için abartma. Gerektiğinde duygularını ifade etmek için cümle veya paragraf sonlarında kullan ki ne demek istediğini anlayalım. Zaten her şey fazlası kötü değil mi? Ne gerek var süse, komikliğe...:)

- Belki henüz yazacak bir şeyin yoktur ve merhaba demek istemiş olabilirsin. Bunun için bir başlık açmak yerine sayfa üstünde kırmızı kutuda bir süre gösterilecek genel mesaj gönderebilirsin. Ayrıca cevaplar neticesinde teşekkür için bir mesaj göndermene hiç gerek yok. Bunun yerine cevap veren kişiye özel mesaj atabilirsin. Bu sayede yavaş yavaş üyeler ile yakında tanışma fırsatı da edineceksin.
Saatine bak üç dakikayı geçmedi öyle değil mi! Ama sakın forumdaki bilgi kaynağı seni sarhoş ederse unutup da işlerinden kendini alıkoyma. Biz senin ne derslerinden ne işlerinden geri kalmanı isteriz. Hem bize lazımsın! Çalış, oku ki bizle paylaşasın...:)

Forum ile ilgili dilek ve önerilerin için "İstekler" kategorisini kullanabilirsin. Ayrıca herkesin okumasını istemediğin düşüncelerin olursa hemen admin@picproje.org adresiyle site sahibiyle irtibat kurmaktan çekinme. Mutlaka yazdıkların okunup değerlendirilecektir.

"Bilgiyi paylaştıkça bir bakmışsın ki, çığ olmuş!"
Bilgi paylaştıkça bir bakmışız; kar topu olmuş ve çığ gibi üzerimize geliyor...:)

PicProje

butun mesajlari okuyup degerlendiriyorum :arrow:
İzindeyiz Ulu önder Mustafa Kemal ATATÜRK

cozturk

Arkadaşlar benim bu I2c'den anladığım şudur. diyelim adres olarak 2 byte data olarak 3 byte gönderdik. Eğer bus üzerinde IClerin 1 tanesine bu adres baytlarından ilki uyuyorsa  bu IC geriye kalan 4 baytı  data olarak kabul edip yanlış bir iş yapabilir.

GSMdesigner

Merhaba,

Arkadaşlar aklıma geldi unutmadan ekleyeyim dedim. Yeni üyelere için karşılama mesajında şu çok çok önemli maddeyi şiddetle önerinize sunuyorum:

Alıntı Yap- Kimliğinle ilgili vesika veya canlandırmayı küçük boyutlar da olsun ki çevirmeli ağ (dial-up) ile bağlanan kullanıcılar bundan etkilenmesin. Çünkü mesaj içinde resimler olmasa bile isminin altındaki resimlerin yüklenmesi sayfanın yüklenmesini dolayısıyla mesajın zor okunmasına sebep olabilir. Beraberinde lütfen iyileştirilmemiş (optimization) resimleri mesaj içinde kullanma. Bu tür durumlar olunca yöneticiler haber vermeksizin diğer üyelerin haklarını korumak için müdahale edecektir.

Aslında bu tür uyarılar ile beraber çözüm de üretmek lazım, haksız mıyım? Mesela bu eklediğim maddenin hemen altında resimleri iyeleştirmek için bir takım programların adreslerine yer versek ne iyi olur. Böylesi yani sorunları dile getirmekten çok çözüm üretmek daha isabetli olacak. Çünkü herkes resmi küçük boyutlara düşürmek nasıl olur bilmeyebilir!

Dip Not: Evet arkadaşlar... Sizin aklınıza bir şey gelmiyor mu? Öneri veya düzeltme falan. Yoksa bu şekilde ortaklaşa öneriler olmadan çıkan metin hiç demokratik değil. Kendimi Irak'ı işgal edipte anayasasını Amerika'nın hazırlaması gibi hissetim vallahi...:) Olmaz ki ortak bir şeyler çıkaralım. Bu forum hepimizin!

Başarılar...
 [email]salihdb@akeltelekom.com[/email]

fsan

i2c
bazı mikrokontrolcuların haberleşme protokolü. i2c bus protocol. seri bir protokol olup, destekleyen cihazların programlanmaları için kullanılır

multi-master özelliğini destekleyen,high speed'de 400kb/s ye kadar çıkan haberleşme protokolü. bir data hattı ve bir de clock hattı vardır. protokolde master ve slave kavramları mevcuttur.

Klasik settinglerin yapıldığını kabul edersek,i2c en kabaca şöyle çalışır:
master clock dominanattayken data hattını ressesive'den dominanta çeker. ardından clock sinyalini üretmeye başlar. data hattındaki logic level değişimi sadece clock sinyalinin ressesive olduğu zamanlarda yapılabilir. clock ne zaman dominantsa, data hattı örneklenir ve görülen logic level data olarak kabul edilir. ardından 9. bitte master data hattını ressesive'e çeker. slave hattı dominanata çekmek zorundadır yoksa acknowledgement (kabul etmek, tanima) olmamış sayılır.
master data iletimini sona erdirmek isterse, clock dominanttayken hattı dominanttan ressesive'e şeker. daha bir de bus arbitrationveya stretchingdiye özellikleri vardır ama onlar başka bir entry'nin konusudur. ksaca i2c eeprom yazımı veya peripherallara ulaşım gibi işlerde kullanılır.

fsan

The I2C Bus Protocol

The BUS physically consists of 2 active wires and a ground connection. The active wires ,SDA and SCL,are both bidirectional . Where SDA is the Serial DAta line and SCL is the Serial CLock line.

Every component hooked up to the bus has its own unique address whether it is a CPU,LCD, driver, memory or complex function chip . Each of these chips can act as a receiver and/or transmitter depending on it's functionality . Obviously an LCD driver is only a receiver , while a memory or I/O chip can both be transmitter and receiver. Furthermore there may be one or more BUS MASTER's.

The BUS MASTER is the chip issuing the commands on the BUS . In the I2C protocol specification it is stated that the IC that initiates a data transfer on the bus is considered the BUS MASTER. At that time all the others are regarded to as the BUS SLAVE .

As mentioned before , the IC bus is a Multi-MASTER BUS. This means that more than one IC capable of initiating data transfer can be connected to it. As MASTERs are generally microcomputers let's take a look at a general 'inter-IC chat' on the bus.

Lets consider the following setup :

Case : The CPU wants to talk to one of it's slaves.

The CPU will issue a START condition (see further on for description of all these conditions) This acts as an 'ATTENTION' signal to all of the connected ic's.All IC's on the bus will listen to the bus for incoming data.

Then the CPU sends the address of the device he wants to access . This takes 8 clock pulses. At this moment in time all IC's will compare this address with their own . If it doesn't match they simply do nothing and wait until the bus is released by the STOP condition . If the address matches however the chip will produce a responce called the ACKNOWLEDGE signal .

If the cpu gets this ACKNOWLEDGE then it can start transmitting or receiving data . In our case the CPU will transmit data.When all is done the CPU will issue a STOP condition. This is a signal that the bus has been released and that the IC's may expect another transmission to start any moment.

We have had several states on the BUS right now : START, address ,ACKNOWLEDGE ,DATA, STOP. These are all unique conditions on the BUS . Before we take a closer look into these bus conditions we need to understand a bit about the physical structure and hardware of the bus


I2C transactions

Prior to any transaction on the bus a START condition needs to be issued on the bus.The start condition acts as a signal to all connected IC's that something is about to be transmitted on the BUS . As a result , all connected chips will listen to the bus.
After a message has been completed a STOP condition is sent . This is the signal for all devices on the bus that the bus is 'free again'. The chip that was accessed during the message will now process the information received (if not processed during the reception of the message).


START:
The chip issuing the Start condition first pulls the SDA (data) line low. and next pulls the SCL (clock) line low.



STOP:
The Bus MASTER first releases the SCL and then the SDA line.

A few notes about this start and stop conditions.

Further on in this Faq we will talk about data telegrams . You will see there that a single message can contain multiple Start conditions.

The use of this so called 'repeated start' is common in I2C .

A Stop condition ALWAYS denotes the END of a transmission. Even if it is issued in the middle of a transaction or in the middle of a byte . It is 'good behaviour' for a chip that ,in this case , it disregards the information sent and resumes to the 'listening state'.


I2C (Inter-Integrated Circuit)
Bus Technical Overview and Frequently Asked Questions (FAQ)

http://www.esacademy.com/faq/i2c/

ei

Verilmiş olan cevaplar ve bilgiler için teşekkürler ederim.