Haberler:

Forum kuralları güncellendi LÜTFEN  okuyunuz:  https://bit.ly/2IjR3ME

Ana Menü

stm32 i2c yardım

Başlatan Gökhan BEKEN, 05 Ağustos 2014, 15:10:41

arm-beginner

Acaba kim kimin yazdıklarını okumuyor ...
Ben senin her yazını A'dan Z'ye kadar okudum. Ama sen anladığım kadar 2 faktörü dikkate almiyorsun.
Ben yazılarımda kendi bakış açımı vurguladım ve parantez için bu senin için farklı olabilir dedim.
Senin i2c ile yoğun bir haberleşmen varsa, ne güzel; benim için bu böyle değil. Buda benim için güzel.

Asıl açıklık getirmemiz gereken konu: Eeprom veya DAC veya neyse artık cevap vermiyor. Sen burda o entegrenin i2c arayüzünü DMA ile nasıl resetliyorsun; ben bunu merak ediyorum.
Sende bana cevap olarak MCU ile ilgili bir soft-reset önerdin.
İstersen yukarda verdiğim link'e bir göz at (Analog Device AN-686). Application note'un başlığı "Implementing a I2C-Reset"
Ve göz attıkdan sonra burda tartışmaya devam edelim :)



CLR

Bahsettiğin pdf şimdi inceledim. Ben işlemci clock vs göndererek yani üzerine düşen görevi yaparak I2C slave device'ın cevap vermemesinden bahsediyorum, sen işlemcinin clock göndermemesinden dolayı I2C device'ın start stop arasında biryerde kalmasından ve bunun çözüm yollarından bahseden pdf'i gösteriyorsun. Konu o değil ama yinede cevaplayayım.

DMA hardware kontrole sahip ve zamanlamalar kesintisizdir, senin yazılımda ise 1 ve 0'ları sen yapıyorsun ama priority'n herşeye göre küçük olduğu için yani main içinde olduğundan interruptlar vs. herşey senin işini böler bu nedenle bu sorunla senin karşılaşman çok daha büyük.

DMA ile benim karşılaşmam için işlemcinin I2C modülü veya DMA modülün donanımsal hata olması lazım. Veya extreme durum olarak bu sorunla karşılaşmam için tam I2C device ile haberleşirken istemsiz reset yemem lazım. İstemsiz resetin olmasının kendisi dert zaten.

İstemsiz reset yese bile açılışta soft olarak max 9 pulse + stop pulse ile normal çalışma moduna dönerim sonra yine dma kullanırım. Aslında sadece bu durum için dma ile 2byte boş veya gereksiz data basılsa veya o boş datalarda basılmayıp o device ile ilk haberleşme sonucunu kullanmazsan bile i2c hattı açılacaktır.
Knowledge and Experience are Power

arm-beginner

He; şimdi oldu :)
Anlaşılan I2C konuya çok farklı açılardan bakıyoruz. Ama belli ki, sen mutlusun, ben mutluyum. Ne güzel.

CLR

 ;D ben zaten konudan öncede mutluydum sonrada mutluyum, senin bir sorunun vardı çözüm arıyordun, çözdük. şimdi mutlu olman hakkın.
Knowledge and Experience are Power

Erol YILMAZ

Alıntı yapılan: Karamel - 09 Ağustos 2014, 02:36:57
hocam araya girip birsey sormak ve hemen sivismak istiyorum :) belirli kodlarin islemcinin %kac islem gucunu kapsadigini nasil hesapliyoruz? bu hesabi nasil yapabilirim?

O kodun başına PIN_x = 1; yazarsın,
kodun son satırına da PIN_x = 0; eklersin...

O pini de skopla incelersen 1 sn'de ki 1 olma süresi o kodun işlemciyi ne kadar meşgul ettiğini anlarsın...

Karamel

Alıntı yapılan: CLR - 09 Ağustos 2014, 02:22:09

Senin verdiğin örnekte bile 6,5ms ile işlemcinin %13'ünü sadece 100Khz'lik IC kapatıyor, 256byte için işlemcinin minimum %50'sini kaplar.


hocam CLR dedi ki 6.5 msn %13 unu kapsiyor. (iki katini almis) hesabimizi 1000 msn uzerinden yapiyorsak 6.5msn %0.65 ini kaplamis olmuyormu? ben hic birsey anlamadim.

arm-beginner

Alıntı yapılan: CLR - 10 Ağustos 2014, 01:17:41
;D ben zaten konudan öncede mutluydum sonrada mutluyum, senin bir sorunun vardı çözüm arıyordun, çözdük. şimdi mutlu olman hakkın.

CRL, benim bir sorunum olduğunu nerden çıkartın? Benim bir sorum vardı.
Soru != Sorun
Biraz zor oldu, ama sounda bu soruma cevap aldım senden: sende i2c kilitlendiğinde DMA ile değil, soft-i2c kullanarak bu sorunu gidermeye çalışıyorun.

CLR

Bu sorunu çözen toplam 3 seçenek sundum, bunlardan 2si dma'lı ve 1'i soft olarak, sen gittin kendine yakın olanını seçtin.

Ayrıca benim karşılaşma ihtimalim seninkisinin yanında yok sayılır, sadece işlemci reset yerse olabilecek bir durum, bu oluyorsa zaten önceliğim i2c hattı olmaz.
Knowledge and Experience are Power