Dahili Eeprom

Başlatan Serk@n, 24 Haziran 2013, 18:29:29

BİDİL

İlginiz için teşekkür ederim.
Kayıt etmemizin tek nedeni enerji gelgitlerinde değişkenin en son değerini bilmemiz ve sistemin kaldığı yerden devam etmesini sağlamak. Bu durumda bu kadar çok kayıt etmek ve okumak yerine sadece enerji kesintilerinde kayıt etmemiz yeterli görünüyor. Enerji kesintilerini programın algılaması da mümkün değil diye düşünüyoruz. Peki bunu nasıl yapabiliriz?

ete

Enerji kesintilerini algılamak sorun değildir. Trafodan bir ucu pic in analog girişine girin ve sürekli gelen voltajı ölçün. Sistemi ayrıca yüksek kapasiteli bir kondansatörle beslerseniz pic enerjini kesildiğini anlar ve kondansatör ile çalışmasını sürdürür ve değerleri kayıt edip sistemi kapatır. Bir diğer çözüm de sisteme ayrıca bir pil gurubu bağlamak olur. Enerji kesilince bir ara diyot üzerinden sistem pilden beslenir ve verileri kayıt edip sistemi kapatır.

Ben genelde program içinde bir mantık kurarım. Veriler belirli bir süre değişmemiş ise anlaşılan sistem duruyor demek olur derim ve gider o zaman kayıt ederim. Aksi halde veri değiştikçe kayıt yapmam. Buda kısmen bir çözüm mantığı olabilir.
Ete

BİDİL

Hepsi birbirinden güzel fikirler tek tek deneyeceğim. Teşekkür ederim.

elektro77

Alıntı yapılan: ete - 17 Ağustos 2013, 12:09:25
Enerji kesintilerini algılamak sorun değildir. Trafodan bir ucu pic in analog girişine girin ve sürekli gelen voltajı ölçün. Sistemi ayrıca yüksek kapasiteli bir kondansatörle beslerseniz pic enerjini kesildiğini anlar ve kondansatör ile çalışmasını sürdürür ve değerleri kayıt edip sistemi kapatır. Bir diğer çözüm de sisteme ayrıca bir pil gurubu bağlamak olur. Enerji kesilince bir ara diyot üzerinden sistem pilden beslenir ve verileri kayıt edip sistemi kapatır.

Ben genelde program içinde bir mantık kurarım. Veriler belirli bir süre değişmemiş ise anlaşılan sistem duruyor demek olur derim ve gider o zaman kayıt ederim. Aksi halde veri değiştikçe kayıt yapmam. Buda kısmen bir çözüm mantığı olabilir.
Ete

Bu mantığı biraz açarmısınız hocam.
"Eğer bir konuyu öğrenmek istiyorsan o konunun öğretmeni ol; daha iyi öğrenmek istiyorsan o konuda bir kitap yaz; daha da iyi öğrenmek istiyorsan yazdığın kitabi oku"

ete

Olayı daha iyi anlamak için bir senoryo geliştirelim.
Diyelimki değeri 0-1000 arasında değişen bir ölçüm sayacımız var. Bu ölçüm değeri bir SET değeri olarak kullanılıyor ve sensörden haricen gelen bir sayac bilgisi ile karşılaştırılıp bir pinden çıkış verilecek.
Öncelikle yapılması gereken bizim set sayac değerimizin ayarlanması işlemidir. Diyelimki ben sayac değerimi 450 olarak ayarlayacağım.
Başlangıçta Sayac=0 dan başlarsam her sayac değeri bir arttığında gidip eproma yazarsam 450 defa eproma kayıt (yazma) yapmış olacağım. Birden 450 rakamına atlamam mümkün olmayacağına göre o halde boşuna 449 adet kayıt yapmamak için ne yapmalıyım diye bir düşünmek gerek.
Çözüm şöyle olabilir. Sayac değerini artırmak üzere artır tuşuna bastım ve sayac artıyor. Şayet artırma döngüsünden çıkmaz isem sorun yok zira öyle ayarlarımki döngüden çıktığımda eproma kayıt yapılır. Buna rağmen arada bir tuş titremesinden dolayı artırma döngüsünden çıkılabilir. Bu nedenle artırma işleminde ayrıca bir zaman sayacı çalıştırmak akıllı olur. Zira o sayac istediğim değere gelmiş ise ve bende artırma döngüsünden çıkmış isem ancak o zaman gidip eproma bilgi yazılabilir.
Zaman sayacımıza ZAMAN diyelim. Diğeri de artırılan SAYAC değişkeni olsun.

BASLA:
IF TUS=0 THEN
ZAMAN=0  'tusa basınca zaman sayacını sıfırlıyorum çünki tuşa basmadığım zaman zaman sayacı belirli değere ulaşacak. 
WHILE TUS=0
  SAYAC=SAYAC+1
   PAUSE 50
WEND
  GOTO BASLA  'bunu koydum çünki alt tarafa ZAMAN=ZAMAN+1 komutu koyacağım boşuna oraya gidip ZAMAN değerini bir artırmasın istedim.

ENDIF

ZAMAN=ZAMAN+1
Pause 10
IF ZAMAN=1000 THEN
   ZAMAN=0
   GOSUB EPROMA_YAZ
ENDIF
GOTO BASLA

Bu örnekte görüleceği üzere tuşa basmadan 1000 defa program BASLA-GOTO BASLA arasında döndüğü zaman zaman dolmuş olacak ve eproma gidip bilgi yazılacak. Bir şey daha eklemek gerek. Birde YAZDI isimli bit değişkeni kullanarak yazılmış bilgiyi tekrar yazmaya engel olabiliriz. Oda şöyle olacak;

BASLA:
IF TUS=0 THEN
ZAMAN=0  'tusa basınca zaman sayacını sıfırlıyorum çünki tuşa basmadığım zaman zaman sayacı belirli değere ulaşacak. 
YAZDI=0   'bilgi bir tanede olsa değişti o halde yazdırma süre sonunda yapılmalı
WHILE TUS=0
  SAYAC=SAYAC+1
   PAUSE 50
WEND
  GOTO BASLA  'bunu koydum çünki alt tarafa ZAMAN=ZAMAN+1 komutu koyacağım boşuna oraya gidip ZAMAN değerini bir artırmasın istedim.

ENDIF

ZAMAN=ZAMAN+1
Pause 10
IF ZAMAN=1000 and YAZDI=0 THEN
   ZAMAN=0
   GOSUB EPROMA_YAZ
   YAZDI=1
ENDIF
GOTO BASLA

Ete


ersangundogdu

Eeprom hafızası dolduğunda pic çöp mü oluyor? Yoksa yeniden programlayıp devam edebiliyor muyuz?

ete

Dahili ve harici epromlar yeniden yazılabilir şekildedir. Çöp olmaz silip yada silmeden üzerine yazabilirsin.
Yalnızca yaklaşık 1.000.000 adet yazmadan sonra çöp olur bu onun yazma ömrüdür. Okumada ömür yoktur sadece yazmada var.
Rakam büyük gelmesin bir döngü içinde sürekli eproma kayıt alan programların bir kaç dakika sonra çöp olabildiğini gördüm ben.
O nedenle eprom kullanırken dikkat etmek sadece gerektiği zaman eproma kayıt almak gerekir.

Ete

ersangundogdu

1.000.000 adet yazmadan sonra pic in çöp olup olmayacağı merakım idi. Aydınlattığınız için teşekkür ederim hocam.

ersangundogdu

#23
ETE hocam eeprom un durumunu, yani kalan hafızayı lcd ekranın 2. satırında gösterme imkanımız var mı? Saçma oldu belki ama aklıma geldi.
Ya da her kayıtta bir sayaç saydırmak istesem nasıl yaparım?

ete

ADR isminde bir değişken alırsın. İlk başlangıçta değeri sıfırdır.
Her kayıt yaptıktan sonra değerini ADR=ADR+1 şeklinde artırırsın. Kayıt adresi olarak ADR yi kullanırsın.
Kalan=Toplam_Hafıza-ADR dir ve bunu ekrana yazdırırsın olur biter.

Ete

ersangundogdu

Hocam özür dilerim hiç bir şey anlamadım. Aslına bakarsanız hedeflediğim  sistemi çalıştırdım. Sizi fazla yormak istemem. en iyisi böyle kalsın. Teşekkür ederim.

ersangundogdu

#26
ETE hocam; pic kayıt ömrü dolduğunda nasıl tepki verir? Yani kayıt ömrünün dolduğunu nasıl anlarız?

ete

Kayıt ettiklerini geri okuduğunda aynı bilgiyi alamıyorsan kayıt sorunun var demektir buda muhtemelen ömrün bitmesi şeklinde açıklanır elbette önceden sorunun yoksa bu açıklama geçerlidir.
Ete

ersangundogdu

Şimdi kaydettiklerimi aynen okuyorum. Enerji kesilse dahi okuyorum. Kaydettiklerimi okuyamıyorsam pic çöp oldu yani.

ete

Aynen öyle olacak. Yaklaşık olarak hesaplayabilirsin ne zaman çöp olacağını.
Ne sıklıkla kayıt yapıyorsan bu bellidir. 1.000.000 adet yazma işi bitiriyor maalesef. Bu bazen 900.000 de de olabiliyor bunu da unutma.
Ete

Powered by EzPortal