eeprom yazma-okuma interruptı??

Başlatan Maxim, 09 Aralık 2015, 08:13:52

Maxim

eepromu eread ve ewrite komutları haricinde kullanmak istiyorum
yani 10ms bekleme yapmadan yazmak istiyorum
bu da ancak interrupt ile mümkün
böyle bir deneme yapan varmı hiç?

mehmet

EECON1.WR ve EECON1.RD registerlerinin LOW
olmasını kontrol etmek yetmeyecek mi?
Olan olmuştur,
olacak olan da olmuştur.
Olacak bir şey yoktur.
---------------------------------------------
http://www.mehmetbilgi.net.tr
https://creativecommons.org/licenses/by/4.0/deed.tr "CC BY"

Maxim

mehmet hocam bilmiyorum
sıkıntı şu, yazma sırasında geçen zaman arka planda çalışan interrupt rutininde bekleme yaşatıyor
zaten, eeproma yazma sırasında int leri kapatmak lazımmış

ete

Yazma sırasında eproma yazma tamamlandı kesmesi dışındakiler kapatılmalıdır. Eprom kesmesi yazmanın tamamlandığını haber vereceği için hem açık olması gerekir hemde açık olursa sorun çıkarmaz. Ama diğer kesmeler yazma esnasında devreye girerse yazma işlemi kesintiye uğrar ve, ya yazılmaz yada yanlış yazmalar söz konusu olur.
Bu işlemi en güzel şekilde yapmanın tek yolu yazma için yazma enable (YAZ=0) şartı aranmalıdır. Yazma emri verildikten sonra YAZ=1 yapılır ve yeniden yazma emri gelirse YAZ=1 olacağı için işlem pas geçilmelidir. Kesme oluştuğunda yalnızca YAZ=0 yapılmalı böylece bir sonraki yazma işleminin önü açılmalıdır.

Elbette EECON1.WR biti sıfır oluncaya kadar beklemek de bir çözümdür. Yada bu bit hala 1 ise yazma işlemi pas geçilmelidir. Ancak programın ikinci defa yazma alt programına gitmesi yada ikinci defa yazma isteğinde bulunması için ya while - wend döngüsü içine alınması yada bir bayrak kullanılması gerekir. Bu durumda kesme ile yapmak daha doğru gibi geliyor bana.

Ete
Bilgi hazinedir paylaştıkça büyür.            http://etepic.com

Tagli

EEPROM yazması sırasında değil, yazmanın başlatılması sırasında kesmelerin kapalı olması gerekiyor. WR'yi 1 yapabilmek için EECON2 üzerine özel bir işlem uygulanması gerekiyor. Arada boşluk olmadan arka arkaya 2 değer yüklenmeli ve hemen ardından WR 1 yapılmalı. Assembly ile yazarken ilgili komutların arka arkaya işlemesi ve araya kesme gibi başka bir işlemin girmemesi gerekiyor. Bu özel kilit açma mekanizması EEPROM'a olası hatalı yazmaların önüne geçmek için. Derleyiciler elbette bu işlemi (unlock sequence deniyor sanırım) otomatik yapıyorlar. Ancak başlangıç işlemi için kesmeyi kapatıp açmak programcının sorumluluğunda olabilir. Sanırım bunun için derleyici dokümanlarına bakmak gerek.

EEPROM kesmesi yazma işlemini hızlandırmaz ancan WR'nin 0 olup olmadığını yoklamaktan kurtarır ve bu sırada program başka bir işle uğraşabilir. Yazma bittiğinde kesme oluşur ve böylece ana program yeni bir byte'ın yazımını başlatabilir.
Gökçe Tağlıoğlu

Maxim

henüz çalışmamda sonuçlanmış birşey olmasada, proton+ ile ilgili öğrendiğim birkaç şeyi paylaşmak istedim

eskiden ewrite eproma yazma komutundan sonra 10ms bekleme yapardım
hatta bekleme süresi şöyle imiş, ben bunun için 10ms yeterli sanırdım.

byte cinsinden yazma yaparsak bekleme 10ms
float ise 40ms zaman alıyor
proton artık bu beklemeyi otomatik yapıyor, onuda proteusta fark ettim
yani bekleme satırı yazmamıza gerek yok artık.

diğer yeni özellik ise
interrupt sırasında eeproma yazma yaparken interruptlar otomatik olarak kapatılıyor
default olarak kapatılıyor ama onun içinde bir kontrol mekanizması var genede
Declare MemWrite_Int_Control = 1 komutu bu işe yarıyor.
eğer kapatılmasın istiyorsak Declare MemWrite_Int_Control = 0