Picproje Elektronik Sitesi

DERLEYİCİLER => PIC C => Konuyu başlatan: ehliseyf - 21 Nisan 2015, 00:49:40

Başlık: Sayac, elektrik kesintisi ve eeprom
Gönderen: ehliseyf - 21 Nisan 2015, 00:49:40
4 digit 7 segment ve rtcc ile bir sayaç tasarladım. 99 saat sayıp sıfırlayacak. Sayıcı kısmında sıkıntı yok çok az bir oynama ile  çalışıyor gibi görünüyor. Elektrik kesintisi halinde sayacın kaldığı yeri eeproma kayıt edip elektrik geldiğinde kaldığı yerden devam edebilmesi için çözüm arıyorum. Şuan sürekli eeprom'a yazıp okuyorum. Bunun yanlış olduğunu fark ettim. 10^6 kez yazım hakkı olduğunu öğrendiğimde elimdeki chip çoktan bitmişti. Sadece elektrik kesintisinde yapılabilecek bir önerisi olan varsa bekliyorum.
iyi çalışmalar.
Başlık: Ynt: Sayac, elektrik kesintisi ve eeprom
Gönderen: Karamel - 21 Nisan 2015, 00:53:48
hocam microcontroller i ayrica bir pil ile besleyip. sadece elektrik kesintisini algilayinca eeproma yazdirip ardindan pil i de devre disi birabilirseniz sorun ortadan kalkar sanki?

bunu elektronik olarak nasil yaparim derseniz. o konuda fikir verebilecek kadar bilgi sahibi değilim. hocalarimiz sizi daha iyi yonlendirirler.
Başlık: Ynt: Sayac, elektrik kesintisi ve eeprom
Gönderen: ehliseyf - 21 Nisan 2015, 00:56:25
Hocam pil değil ama belki kod ile çözüm olabilir. Atladığım mantık hatasını hep aynı noktadan baktığım için göremiyorum sanırım. Yarın yazılımı da yükleyeceğim.
Başlık: Ynt: Sayac, elektrik kesintisi ve eeprom
Gönderen: RaMu - 21 Nisan 2015, 00:59:19
Pil değilde kondansatörle çözülüyor,
örneği forumda veya nette olması lazım,
yaygın kullanılan bir yöntemdir
ve sıklıkla sorulan sorulardan biridir.
Başlık: Ynt: Sayac, elektrik kesintisi ve eeprom
Gönderen: ehliseyf - 21 Nisan 2015, 01:08:22
Alıntı yapılan: RaMu - 21 Nisan 2015, 00:59:19
Pil değilde kondansatörle çözülüyor,
örneği forumda veya nette olması lazım,
yaygın kullanılan bir yöntemdir
ve sıklıkla sorulan sorulardan biridir.
Forumda aramıştım hocam ama net bir sonuç bulamadım gözümden kaçmış olmalı.
Başlık: Ynt: Sayac, elektrik kesintisi ve eeprom
Gönderen: Karamel - 21 Nisan 2015, 01:13:55
Alıntı yapılan: RaMu - 21 Nisan 2015, 00:59:19
Pil değilde kondansatörle çözülüyor,
örneği forumda veya nette olması lazım,
yaygın kullanılan bir yöntemdir
ve sıklıkla sorulan sorulardan biridir.

hocam bende bilmiyorum ama azacik bir beyin firtinasi yaptim kendi kendime.

microcontroller i diyot uzerinden beslerim. diyot un katot kismina buyukce bir kondansator baglarim. diyotun anot kismini normal bir io yada adc ile okurum. adc ile okursam voltage azacik dusmeye baslayinca(mesela 1-2 v gibi) bunu algilarim. io ile okursam sanirim 0.7v un altina dusmesi gerekir. eger voltage dusuyorsa elektrik kesilmis demektir derim. eeproma gerekli kayirlarimi yaparim. zaten birkac sn sonrada capacitor uzerinde microcontroller a yeterli energy kalmaz. sistem kendini kaydettikten sonra kapanmis olur?


boyle yapilabilirmi hocam?
Başlık: Ynt: Sayac, elektrik kesintisi ve eeprom
Gönderen: ehliseyf - 21 Nisan 2015, 01:22:11
ADC yok pic16F628'de ama güzel fikirmiş. Hem basit hem maliyetsiz bir fikir arıyorum. Bir ürün için olsa belki adcli bir model ile değişebilirdim ama pic16f88 bile olmuş 7-9 TL.
Başlık: Ynt: Sayac, elektrik kesintisi ve eeprom
Gönderen: RaMu - 21 Nisan 2015, 02:21:46
Komparatör var mı?
Harici şeylerlede yapılabilir.
Bu konuda denediğim bildiğim araştırdığım bir yöntem yok, ama
mcu kullanıldığından beri bu problem olduğundan ve
bu zamana kadar buna benzer konularda
epey zekice çözümler üretilmiş olduğundan eminim ki
çok basit ve çok güzel yöntemler vardır,
bulursam paylaşırım.
Benden önce bilen kişiler zaten cevap vereceklerdir.
Başlık: Ynt: Sayac, elektrik kesintisi ve eeprom
Gönderen: MrDarK - 21 Nisan 2015, 08:05:27
Bence kartın üzerine optokuplor takıp şebeke voltajı varsa logic 1 alıp, yoksa 0 alabilirsin. Tabiki MCU'nu besleyen kondanstör veya pil olması gerekir ekstra bu kaydı yapabilmek için. Osilaskop ile kayıt süreni ölçmeni tavsiye ederim.
Başlık: Ynt: Sayac, elektrik kesintisi ve eeprom
Gönderen: ayhani - 21 Nisan 2015, 08:38:00
Farad kondansatörü pil gibi kullanabilirsin. 1 Farad kondansatör boşalana kadar bayağı bir zamanın olur. Şebekeyi kontrol etmek için basit bir opto yeter.
(http://www.robitshop.com/modules/catalog/products/pr_01_2431_min.jpg?rev=1359719316)
http://www.robitshop.com/modules/catalog/products/pr_01_2431_min.jpg?rev=1359719316 (http://www.robitshop.com/modules/catalog/products/pr_01_2431_min.jpg?rev=1359719316)


mesaj birleştirme:: 22 Nisan 2015, 00:38:40

Farad kondansatörü pil gibi kullanabilirsin. 1 Farad kondansatör boşalana kadar bayağı bir zamanın olur.

http://www.robitshop.com/modules/catalog/products/pr_01_2431_min.jpg?rev=1359719316 (http://www.robitshop.com/modules/catalog/products/pr_01_2431_min.jpg?rev=1359719316)
Başlık: Ynt: Sayac, elektrik kesintisi ve eeprom
Gönderen: MrDarK - 21 Nisan 2015, 09:54:16
Çinden 10 adet sipariş verdim bu üründen, hoşuma gitti. Tanesi 1 $ fakat bence eeprom gibi uygulamalar için ideal görünüyor.

ayhani bilgi için teşekkürler.
Başlık: Ynt: Sayac, elektrik kesintisi ve eeprom
Gönderen: Karamel - 21 Nisan 2015, 10:11:35
Hocam bu kondansatoru rtc lerde kullansak nasil olur? mesela stm32 mircocontrollerlarda vbat ucu var. buraya baglasak ortalama ne kadar rtc nin bilgilerini koruyabiliriz?
Başlık: Ynt: Sayac, elektrik kesintisi ve eeprom
Gönderen: ayhani - 21 Nisan 2015, 10:23:16
Alıntı yapılan: Karamel - 21 Nisan 2015, 10:11:35
Hocam bu kondansatoru rtc lerde kullansak nasil olur? mesela stm32 mircocontrollerlarda vbat ucu var. buraya baglasak ortalama ne kadar rtc nin bilgilerini koruyabiliriz?

Bence kullanılabilir. Test etmek lazım. Özellikle elektrik kesintisi gibi durumlarda pilden çok daha pratik olacağı kesin.
Başlık: Ynt: Sayac, elektrik kesintisi ve eeprom
Gönderen: MrDarK - 21 Nisan 2015, 10:53:32
5.5V fazla gelir. Bunun 2.5V'lukları ideal olacaktır. Zaten stm32L'lerde MCU low power durumunda 2.8uA çekiyor (RTC ve tamper girişleri aktifken) :) Akım hesabına göre ne kadar gideceğini tespit edebilirsin.
Başlık: Ynt: Sayac, elektrik kesintisi ve eeprom
Gönderen: Karamel - 21 Nisan 2015, 11:15:54
Hocam capacitor capacitance hesabi c = q / v den c miz 1 farat. vokdatge imiz olabildigince buyuk olsun ki(max 3.3v olabilir) q yani charge maximum olsun. burada v yi 3.3 alirsak q = 3.3 olur. Physics kitabimdan anladigim kadariyla dq / dt = I olur. bunun sonucundada 3.3A cikiyor. Capacitor maximum charge a ulasinca yaklasik olarak 3.3a verebilecek.

simdi bunun ne kadar sure dayanacagini nasil bulacagiz? e^-t/rc seklinde bir discharge equation ini vardi. buradan gidebilirmiyiz ki?



mesaj birleştirme:: 21 Nisan 2015, 11:25:39

Tamam :) simdi dusundumde buluruz.

Microcontroller 2.8uA cekiyorsa i = e/r den 1.178.571 ohm yani yaklasik 1 mohm.

Simdi equation da sadece t yi bilmiyoruz ki bizde bunu ariyoruz. equationdan t yi cekersek. ne kadar surede bosalacagini bulabiliriz.

Tamamen bosalmasi isimize yaramaz. bu yuzden rtc nin min. calisma voltage ini bulup. voltage i yerine koyup. t yi cekmemiz gerekir. bu equationdada o voltage a dusene kadar gececek olan sureyi bulmusnoluruz ki buda dayanma suresi olur?
Başlık: Ynt: Sayac, elektrik kesintisi ve eeprom
Gönderen: mehmet - 21 Nisan 2015, 11:50:13
Kesilmeyi algılayacak bir pini programda takip edin. Devrenize
böyle bir eklenti yapın. Algılama pininde değişim olunca
hemen ilgili değişkenleri e2proma yazdırın...
(http://s15.postimg.cc/wk57vcsd3/mcu_001.jpg) (http://postimg.cc/image/wk57vcsd3/)
Başlık: Ynt: Sayac, elektrik kesintisi ve eeprom
Gönderen: ehliseyf - 21 Nisan 2015, 11:55:31
Alıntı yapılan: mehmet - 21 Nisan 2015, 11:50:13
Kesilmeyi algılayacak bir pini programda takip edin. Devrenize
böyle bir eklenti yapın. Algılama pininde değişim olunca
hemen ilgili değişkenleri e2proma yazdırın...
(http://s15.postimg.cc/wk57vcsd3/mcu_001.jpg) (http://postimg.cc/image/wk57vcsd3/)

Hocam çözüm hoşuma gitti bu bana ortalama ne kadar zaman kazandırır ? 4 değişkenim var kayıt etmem gereken.Saat1, Saat2, dakika1, dakika2 şeklinde. Birde bu kesilmeyi algılamak için interrupt kullanmak mı gerekir,yoksa sabit bir pini sürekli mi kontrol etmeliyiz.
Başlık: Ynt: Sayac, elektrik kesintisi ve eeprom
Gönderen: MrDarK - 21 Nisan 2015, 12:03:24
ehliseyf, süre kısmını 5V regülatör çıkışına koyduğun kondanstor ile ayarlayabilirsin. Tabi regulator girişindeki kondanstor de etkiler.

Burada mehmet hocam güzel bi taktik paylaşmış fakat olurda bi şekilde o zener bozulursa mcunun pinini yüksek voltajdan kaybedersin. Çok sağlıklı durmuyor gibi geldi :)

mesaj birleştirme:: 21 Nisan 2015, 12:06:33

Alıntı yapılan: Karamel - 21 Nisan 2015, 11:15:54

mesaj birleştirme:: 21 Nisan, 2015, 11:25:39

Tamam :) simdi dusundumde buluruz.

Microcontroller 2.8uA cekiyorsa i = e/r den 1.178.571 ohm yani yaklasik 1 mohm.

Simdi equation da sadece t yi bilmiyoruz ki bizde bunu ariyoruz. equationdan t yi cekersek. ne kadar surede bosalacagini bulabiliriz.

Tamamen bosalmasi isimize yaramaz. bu yuzden rtc nin min. calisma voltage ini bulup. voltage i yerine koyup. t yi cekmemiz gerekir. bu equationdada o voltage a dusene kadar gececek olan sureyi bulmusnoluruz ki buda dayanma suresi olur?

Karamel sen bu işi çözdün :) Bu arada rtc'yi ayıramazsın mcu'dan :) Yani mcu'nun datasheet değerlerine göre değişebilir. Örnek verdiğim chip için min çalışma 1.65V. Fakat şöyle bir uyarı yapayım sana. Voltaj düştükçe RTC'nin kalibrasyonunu değiştirmemiz gerekecek ki saniye gereksiz yere kaymasın :) Kristalin çalışmasını etkiliyor voltaj vb bilimum şeyler
Başlık: Ynt: Sayac, elektrik kesintisi ve eeprom
Gönderen: mehmet - 21 Nisan 2015, 12:08:09
Mcu çok fazla akım çektirmiyorsa (bağlı displaylar, vb.) kesilir kesilmez
verileriniz yazılmış olur. Zamanlama kısmını hesaplamak lazım.
877 için yazma/silme tamamlanması süresi 8ms görünüyor.
4 değişken için 32ms. Büyük tolerans ile 100ms. Mcu dan çekilen
akıma göre bu süre değişecektir. Bir kaç deneme ile uygun kapasite
bulunabilir...

İnt. veya pin değişimi kullanmak programınızın durumuna göre
değişebilir. Buna siz karar verebilirsiniz...

Patates zenerlerden de uzak durmak gerekli...

Ek:
Her ne kadar hassas rtc yapmaya çalışsanız da bu pek mümkün
olamıyor. Mesla +/-20ppm hata yapan bir rtc(32768Hz) kristal ile
6 ayda 10 dakika oynama oluyor. Bu nedenle; ya hassasiyetten
ödün vereceğiz ya da internet bağlantısıyla saati güncelleyeceğiz.
Ortam sıcaklığının değişmesi de cabası...
Başlık: Ynt: Sayac, elektrik kesintisi ve eeprom
Gönderen: ehliseyf - 21 Nisan 2015, 14:12:02
//#include <18f4550.h> // Kullanılacak denetleyicinin başlık dosyası tanıtılıyor.

// Denetleyici konfigürasyon ayarları
//#fuses XT,NOWDT,NOPROTECT,NOBROWNOUT,NOLVP,NOPUT,NOWRT,NODEBUG,NOCPD
#include <18F4550.h>

#device adc=16

#FUSES NOWDT                    //No Watch Dog Timer
#FUSES WDT128                   //Watch Dog Timer uses 1:128 Postscale
#FUSES HS                       //High speed Osc (> 4mhz FOR PCM/PCH) (>10mhz for PCD)
#FUSES NOBROWNOUT               //No brownout reset
#FUSES NOPBADEN                 //PORTB pins are configured as digital I/O on RESET
#FUSES NOLVP                    //No low voltage prgming, B3(PIC16) or B5(PIC18) used FOR I/O
#FUSES NOXINST                  //Extended set extension and Indexed Addressing mode disabled (Legacy mode)
#use delay (clock=20000000) // Gecikme fonksiyonu için kullanılacak osilatör frekansı belirtiliyor.

#use fast_io(b) //Port yönlendirme komutları B portu için geçerli
#use fast_io(d)
#use fast_io(a)
#include <math.h>

#define   display_1   pin_A2
#define   display_2   pin_A3
#define   display_3   pin_A4
#define   display_4   pin_A5
#define   buton       pin_A1

int  onlar = 0, yuzler = 0, binler = 0, birler=0, sayac=0;

const int digit[10] = {0x3F, 0x06, 0x5B, 0x4F, 0x66, 0x6D, 0x7C, 0x07, 0x7F, 0x6F};
int i=0; // Tamsayı tipinde değişken tanımlanıyor

//****************** Timer0 Kesmesi *****************************
#int_timer0 // Timer0 kesmesi
void timer0_kesme () // Kesme fonksiyonu ismi
{
set_timer0(60); // TMR0 değeri belirleniyor
i++; // i değeri 1 arttırılıyor
if (i==10) // i değeri 10'a eşitse RB0 çıkışı lojik-1 olsun
output_high(pin_b0);
if (i==20) // i değeri 20'ye eşitse RB0 çıkışı lojik-1 olsun ve i değeri sıfırlansın
{
output_low(pin_b0);
sayac++;
i=0;
}
}

void basla()
{
if(input(buton))
{
delay_ms(10);
while(input(buton))
{
onlar = 0;
yuzler = 0;
binler = 0;
birler=0;
i=0;
sayac=0;
}}


if(sayac==108)
{
sayac=0;
birler++;
if(birler==10)
      {
         onlar++;
         birler=0;
            if(onlar==6)
            {
            yuzler++;
            onlar=0;
               if(yuzler==10)
                  {
                     binler++;
                     yuzler=0;
                  }
              }
      }
     
}     

output_high(display_1);
output_d(digit[birler]);
delay_ms(1);

output_low(display_1);
output_high(display_2);
output_d(digit[onlar]);
delay_ms(1);

output_low(display_2);
output_high(display_3);
output_d(digit[yuzler]);
delay_ms(1);

output_low(display_3);
output_high(display_4);
output_d(digit[binler]);
delay_ms(1);
output_low(display_4);

}



/********* ANA PROGRAM FONKSİYONU********/

void main ( )
{
setup_psp(PSP_DISABLED); // PSP birimi devre dışı
setup_timer_1(T1_DISABLED); // T1 zamanlayıcısı devre dışı
setup_timer_2(T2_DISABLED,0,1); // T2 zamanlayıcısı devre dışı
setup_adc_ports(NO_ANALOGS); // ANALOG giriş yok
setup_adc(ADC_OFF); // ADC birimi devre dışı
setup_CCP1(CCP_OFF); // CCP1 birimi devre dışı
setup_CCP2(CCP_OFF); // CCP2 birimi devre dışı



set_tris_a(0x02);
set_tris_b(0x00); // B portu komple çıkış
set_tris_d(0x00);
output_a(0x00);
output_d(0x00);
output_b(0x00); // B portu çıkışı ilk anda sıfırlanıyor

setup_timer_0(RTCC_INTERNAL |RTCC_8_BIT | RTCC_DIV_256); // Timer0 ayarları yapılıyor
set_timer0(60); // TMR0 değeri belirleniyor


enable_interrupts(INT_timer0); // int_timer0 kesmesini aktif yapar
enable_interrupts(GLOBAL); // Aktif edilen kesmelere izin ver

while(true) // Sonsuz döngü
{

birler=read_eeprom(0);
onlar =read_eeprom(1);
yuzler=read_eeprom(2);
binler=read_eeprom(3);

basla();

  write_eeprom(0,birler);
 
 
 
 
  write_eeprom(1,onlar);
  write_eeprom(2,yuzler);
  write_eeprom(3,binler);
 
}
}


Deneme için 4550 kullandım.Normalde 16f628a ile yapılacak. Exm1 ile deneme yapıyorum.16f628a ya 7segment displayler bağlı değil.
Hatalarımı gördüm fakat düzeltmedim.İlk hali ile yükledim. 1 hata sürekli yazma işlemi yüzünden eeprom bitiyor. 2.hata yazma işleminin bitmesini beklemiyoruz.(8ms)
Başlık: Ynt: Sayac, elektrik kesintisi ve eeprom
Gönderen: mehmet - 21 Nisan 2015, 15:12:49
Ana döngü içerisinden e2prom yazma işlemini
çıkarınız. Belirli bir şart oluşunca yazma işlemi yaptırınız.
Yoksa bir kaç dakika içerisinde Çöpe giden bir işlemciniz
daha olacaktır.

Ana döngü içerisinde RAM değişkenleri kullanınız. Benim önerdiğim
gibi bir şart sağlayıcı yapnız. Bu pini takip ediniz. Bundan sonra
e2proma yazma işlemini yapnız. Okuma işlemini de
ana döngüden hemen önce RAM değişkenlerine alıp öyle başlatınız...
Başlık: Ynt: Sayac, elektrik kesintisi ve eeprom
Gönderen: Okan AKÇA - 21 Nisan 2015, 15:37:53
Düşük voltaj kesmesi  derdinize çare olur
Başlık: Ynt: Sayac, elektrik kesintisi ve eeprom
Gönderen: Karamel - 21 Nisan 2015, 15:47:54
Alıntı yapılan: MrDarK - 21 Nisan 2015, 12:03:24
ehliseyf, süre kısmını 5V regülatör çıkışına koyduğun kondanstor ile ayarlayabilirsin. Tabi regulator girişindeki kondanstor de etkiler.

Burada mehmet hocam güzel bi taktik paylaşmış fakat olurda bi şekilde o zener bozulursa mcunun pinini yüksek voltajdan kaybedersin. Çok sağlıklı durmuyor gibi geldi :)

mesaj birleştirme:: 21 Nisan 2015, 12:06:33

Karamel sen bu işi çözdün :) Bu arada rtc'yi ayıramazsın mcu'dan :) Yani mcu'nun datasheet değerlerine göre değişebilir. Örnek verdiğim chip için min çalışma 1.65V. Fakat şöyle bir uyarı yapayım sana. Voltaj düştükçe RTC'nin kalibrasyonunu değiştirmemiz gerekecek ki saniye gereksiz yere kaymasın :) Kristalin çalışmasını etkiliyor voltaj vb bilimum şeyler

hocam aksam bilgisayarimin basina geceyim. 3.3v ile 1.65v arasinda 1.1mohm direnc uzerinden(2.8uA) discharge suresini hesaplayacagim ::)
Başlık: Ynt: Sayac, elektrik kesintisi ve eeprom
Gönderen: ehliseyf - 21 Nisan 2015, 15:54:56
Alıntı yapılan: Okan AKÇA - 21 Nisan 2015, 15:37:53
Düşük voltaj kesmesi  derdinize çare olur
Hocam BOR'u mu kasdetmiştiniz ? Daha önce hiç kullanmadım biraz anlatabilir misiniz ? birde mümkünse kod parçası olarak örnek alsam çok iyi olur.

Alıntı yapılan: mehmet - 21 Nisan 2015, 15:12:49
Ana döngü içerisinden e2prom yazma işlemini
çıkarınız. Belirli bir şart oluşunca yazma işlemi yaptırınız.
Yoksa bir kaç dakika içerisinde Çöpe giden bir işlemciniz
daha olacaktır.

Ana döngü içerisinde RAM değişkenleri kullanınız. Benim önerdiğim
gibi bir şart sağlayıcı yapnız. Bu pini takip ediniz. Bundan sonra
e2proma yazma işlemini yapnız. Okuma işlemini de
ana döngüden hemen önce RAM değişkenlerine alıp öyle başlatınız...
Hocam dediklerinizi gözden geçiyorum. Bazı hataların bende farkındayım. Bu eeprom konusunda tecrübesizim.Yardımlar için teşekkürler.
Başlık: Ynt: Sayac, elektrik kesintisi ve eeprom
Gönderen: Okan AKÇA - 21 Nisan 2015, 16:04:31
Kesme ayarladiginiz voltaja besleme düştüğü zaman kesme olusur.  Kesmenin icinde kayıt yaparsınız birde Beslemeye  1000uf gibi kondansatör takmaniz yeterli olur
Başlık: Ynt: Sayac, elektrik kesintisi ve eeprom
Gönderen: MrDarK - 21 Nisan 2015, 16:22:18
* PVD (Power Voltage Down) = Belli range değerleri seçilebiliyor diye biliyorum. Örneğin besleme 3.3V 3V'a ayarlanmış PVD sayesinde 1.6 ya düşene kadar süremiz olur.

* BOR (Brown Out Reset) diye geçer. MCU gibi dijital yapılar belli bir voltajın altına düşerse hafızalarında tuttuğu 1 ve 0'lara güven olmayacağından sistemi resetlemek gerekir.
Başlık: Ynt: Sayac, elektrik kesintisi ve eeprom
Gönderen: mehmet - 21 Nisan 2015, 16:50:42
18?FX550 için BOR en az 2.V., RAM Data Retention en az 1.5V.
görülmekte. En alt BOR seviyesinden önce işlemlerimizin bitmesi
gerekli.
Bu arada 2V. besmele için en fazla 4MHz. çalışma hızımız
bulunmaktadır.

Kaynak: 18F4550 (39632c.pdf) kataloğu 28.0 bölüm...
Başlık: Ynt: Sayac, elektrik kesintisi ve eeprom
Gönderen: MrDarK - 21 Nisan 2015, 16:55:38
Alıntı yapılan: MrDarK - 21 Nisan 2015, 16:22:18
* PVD (Power Voltage Down) = Belli range değerleri seçilebiliyor diye biliyorum. Örneğin besleme 3.3V 3V'a ayarlanmış PVD sayesinde 1.6 ya düşene kadar süremiz olur.

* BOR (Brown Out Reset) diye geçer. MCU gibi dijital yapılar belli bir voltajın altına düşerse hafızalarında tuttuğu 1 ve 0'lara güven olmayacağından sistemi resetlemek gerekir.

Benim verdiğim değerler STM32L 'den hocam.
Başlık: Ynt: Sayac, elektrik kesintisi ve eeprom
Gönderen: Karamel - 21 Nisan 2015, 21:58:50
Alıntı yapılan: Karamel - 21 Nisan 2015, 15:47:54
hocam aksam bilgisayarimin basina geceyim. 3.3v ile 1.65v arasinda 1.1mohm direnc uzerinden(2.8uA) discharge suresini hesaplayacagim ::)


simdi pc basina gecebildim.

general formulumuz

V(t) = V(e^-t/RC) seklinde. bkz http://en.wikipedia.org/wiki/RC_time_constant (http://en.wikipedia.org/wiki/RC_time_constant)

V = 3.3v

V(t) = 1.65v

R = 1.1mohm

C = 1 farad

t yi bilmiyoruz.


yerine koydugumuzda equation suna donusuyor.


1.65 = 3.3(e^-t/(1.1 x 10^6 x 1))

buradan t yi cekmeye calculus bilgim yetmedi........  :-\


mesaj birleştirme:: 21 Nisan 2015, 22:07:58

tamam buldum!!!



3.3 u 1.65 in altina bolu olarak attim. sol taraf 0.5 oldu.  ( 0.5 = e^-t/(1.1 x 10^6 x 1) )

sonra exponential dan kurtulmak icin her iki tafain ln ini aldim. ( -0.673 = -t/(1.1 x 10^6 x 1) ) oldu

eksiler birbirlerini goturdu. 0.673 x 1.1 x 10^6 x 1 den 740300 sn

buda 12338 dk

205.63 saat

8.56 gun e tekabul eder. islemlerde sorun yoksa dogru olmasi gerekir ::)
Başlık: Ynt: Sayac, elektrik kesintisi ve eeprom
Gönderen: ehliseyf - 21 Nisan 2015, 22:13:00
Hocam bundan sonrasında 1.65/3.3 yapsak 0.5 gelir. Sonrasında her iki tarafın ln'ni alsak devam etsek olmaz mı ? ben yaptım ama büyük sayı çıkınca devam etmek istemedim :) Aynı anda yapmış ve bulmuşuz işlemler doğru sanırım. Ama bu yüksüz olduğu zaman sanırım :S

mesaj birleştirme:: 21 Nisan 2015, 22:20:21

Alıntı yapılan: MrDarK - 21 Nisan 2015, 16:22:18
* PVD (Power Voltage Down) = Belli range değerleri seçilebiliyor diye biliyorum. Örneğin besleme 3.3V 3V'a ayarlanmış PVD sayesinde 1.6 ya düşene kadar süremiz olur.
Hocam pic16f628a için PVD değerine nereden bakacağız. Datasheet içinde PVD ve power voltage down kelimelerini aradım ama bulamadım.
Başlık: Ynt: Sayac, elektrik kesintisi ve eeprom
Gönderen: Karamel - 21 Nisan 2015, 22:22:28
hocam yanlisim yoksa 3.3v tan 1.65v a yukluyken discharge olan halini hesapladik.

simdi  aklimda soyle sorular olustu.

1. soru 8.5 gun iyi bir rakammi?
2. soru 3v luk su http://www.newark.com/productimages/standard/en_US/4933818.jpg (http://www.newark.com/productimages/standard/en_US/4933818.jpg) piller ile ne kadar sure rtc mizi calistirabiliriz?
Başlık: Ynt: Sayac, elektrik kesintisi ve eeprom
Gönderen: ehliseyf - 21 Nisan 2015, 23:05:57
Alıntı yapılan: Karamel - 21 Nisan 2015, 22:22:28
hocam yanlisim yoksa 3.3v tan 1.65v a yukluyken discharge olan halini hesapladik.
simdi  aklimda soyle sorular olustu.
1. soru 8.5 gun iyi bir rakammi?
2. soru 3v luk su http://www.newark.com/productimages/standard/en_US/4933818.jpg (http://www.newark.com/productimages/standard/en_US/4933818.jpg) piller ile ne kadar sure rtc mizi calistirabiliriz?
Hocam extra pil kullanmak istemiyoruz. Şu devre işimizi görecek sanırım. Biz deşarj olduğu süreyi bulduk fakat sadece 2.8ua çektiğini düşünerek bulduk.
PVD ile araştırma yapıyorum ama henüz bir şey bulamadım.
Başlık: Ynt: Sayac, elektrik kesintisi ve eeprom
Gönderen: MrDarK - 21 Nisan 2015, 23:19:52
Ehliseyf;

Pic16f serilerinde yoktu sanırım PVD.Hatta hangi serisinde var bilmiyorum fakat bi serisinde illa ki vardır. Dediğiniz gibi Bu değerler stm'ye göre hesaplandı. Böyle uzun süre bekleme yapılacaksa F'larla olacak iş değil bu :) F'ın amacı eeprom kaydı vb için olmalı bence
Başlık: Ynt: Sayac, elektrik kesintisi ve eeprom
Gönderen: ehliseyf - 21 Nisan 2015, 23:42:53
Alıntı yapılan: MrDarK - 21 Nisan 2015, 23:19:52
Ehliseyf;

Pic16f serilerinde yoktu sanırım PVD.Hatta hangi serisinde var bilmiyorum fakat bi serisinde illa ki vardır. Dediğiniz gibi Bu değerler stm'ye göre hesaplandı. Böyle uzun süre bekleme yapılacaksa F'larla olacak iş değil bu :) F'ın amacı eeprom kaydı vb için olmalı bence
Hocam benim böyle uzun sürelere ihtiyacım yok ki. Ben sadece 4 değişken kayıt edeceğim. En kötü durumda 100ms yetiyor bana. Kesinti algılandıktan sonra 100 ms dayansa benim için yeterli.
Başlık: Ynt: Sayac, elektrik kesintisi ve eeprom
Gönderen: Karamel - 22 Nisan 2015, 00:12:12
hocam. microcontrollerinizi size uyan en dusuk hizda calistirin.

bunlari soylemistim ama yine yazayim. microcontroller in vdd ucuna seri diyot baglayin. diyotun microcontroller ile arasina yani eksi ucuna buyukce bir kondansator baglayacagiz.

diyotun anot ucunu bir gpio ya goturun. hatta externat interrup bacagini kullansaniz daha iyi olur. dusen kenarda tetiklenip. interrupt icersinde eeprom kayitlarini yapin. zaten kisa cok kisa bir sure sonra capacitor uzerindeki voltage microcontroller a yetmeyecek vede sistem kendi kendini kapatmis olacaktir.


microcontrollerinizin cektigi akimi olcun. kac sn ye kac voltage gerekiyorsa bu bilgiler isiginda kullanmaniz gereken capacitorunuzun hesabini yapalim ::)
Başlık: Ynt: Sayac, elektrik kesintisi ve eeprom
Gönderen: ehliseyf - 22 Nisan 2015, 15:56:07
İnternal osc kullansam yeterli hassasiyette çalışır mı ? 4mhz low power voltage 2 volt gözüküyor
Başlık: Ynt: Sayac, elektrik kesintisi ve eeprom
Gönderen: ehliseyf - 24 Nisan 2015, 17:18:03
Zener diyot ve kondanatör ikilisi ile önerilen devreyi kullandım. Fakat kesmeler ve eeprom'a ilk açılıştaki yazma kısmında bir sorunum olduğunu düşünmekteyim. Kod ektedir.#include <16F628a.h>     // Kullanılacak denetleyicinin başlık dosyası tanıtılıyor.
//#device high_ints=true
#FUSES NOWDT                    //No Watch Dog Timer
#FUSES INTRC_IO                 //Internal RC Osc, no CLKOUT
#FUSES NOPUT                    //No Power Up Timer
#FUSES NOPROTECT                //Code not protected from reading
#FUSES BROWNOUT                 //Reset when brownout detected
#FUSES NOMCLR                   //Master Clear pin used for I/O               
#FUSES NOCPD                    //No EE protection
#use delay(clock=4000000)
#use fast_io(a)
#use fast_io(b)

#priority ext, timer0

#define   display_1   pin_A3
#define   display_2   pin_A2
#define   display_3   pin_A1
#define   display_4   pin_A0
#define   buton       pin_A4

int  onlar = 0, yuzler = 0, binler = 0, birler=0, sayac=0;

const int digit[10] = {0x7F, 0x0C, 0xB6, 0x9F, 0xCC, 0xDA, 0xFA, 0x0F, 0xFF, 0xDF};

int i=0; // Tamsayı tipinde değişken tanımlanıyor

   void eeprom_yaz()

{

write_eeprom(0,birler);
delay_ms(10);
write_eeprom(1,onlar);
delay_ms(10);
write_eeprom(2,yuzler);
delay_ms(10);
write_eeprom(3,binler);
delay_ms(10);

}

//****************** INT Kesmesi *****************************
#int_ext
void ext_kesmesi()
{
#use delay(clock=4000000)
   eeprom_yaz();
}


//****************** Timer0 Kesmesi *****************************
#int_timer0 // Timer0 kesmesi
void timer0_kesme () // Kesme fonksiyonu ismi
{
set_timer0(60); // TMR0 değeri belirleniyor
i++; // i değeri 1 arttırılıyor
if (i==10) // i değeri 10'a eşitse RB0 çıkışı lojik-1 olsun
output_high(pin_a6);
if (i==20) // i değeri 20'ye eşitse RB0 çıkışı lojik-1 olsun ve i değeri sıfırlansın
{
output_low(pin_a6);
sayac++;
i=0;

}
}


void basla()
{
if(input(buton))
{
delay_ms(10);
while(input(buton))
{
onlar = 0;
yuzler = 0;
binler = 0;
birler=0;
i=0;
sayac=0;
}}



if(sayac==61)
{
sayac=0;
birler++;
if(birler==10)
      {
         onlar++;
         birler=0;
            if(onlar==6)
            {
            yuzler++;
            onlar=0;
               if(yuzler==10)
                  {
                     binler++;
                     yuzler=0;
                  }
              }
      }
     
}     

output_low(display_4);
output_low(display_3);
output_low(display_2);
output_high(display_1);
output_b(digit[birler]);
delay_ms(1);

output_low(display_4);
output_low(display_3);
output_low(display_1);
output_high(display_2);
output_b(digit[onlar]);
delay_ms(1);

output_low(display_4);
output_low(display_2);
output_low(display_1);
output_high(display_3);
output_b(digit[yuzler]);
delay_ms(1);

output_low(display_3);
output_low(display_2);
output_low(display_1);
output_high(display_4);
output_b(digit[binler]);
delay_ms(1);

}



/********* ANA PROGRAM FONKSİYONU********/ 
void main ( )
{
   
   
   setup_timer_0(RTCC_INTERNAL |RTCC_8_BIT | RTCC_DIV_256); // Timer0 ayarları yapılıyor
   set_timer0(60); // TMR0 değeri belirleniyor
   setup_timer_1(T1_DISABLED);
   setup_timer_2(T2_DISABLED,0,1);
   setup_comparator(NC_NC_NC_NC);
   setup_vref(FALSE);
   ext_int_edge(H_TO_L);
   
  set_tris_a(0b00100000);
  set_tris_b(0b00000001);
  output_a(0x00);
  output_b(0x00); // B portu çıkışı ilk anda sıfırlanıyor


  birler=read_eeprom(0);
  delay_ms(10);
  onlar=read_eeprom(1);
  delay_ms(10);
  yuzler=read_eeprom(2);
  delay_ms(10);
  binler=read_eeprom(3);
  delay_ms(10);

  enable_interrupts(INT_EXT);
  enable_interrupts(INT_timer0); // int_timer0 kesmesini aktif yapar
  enable_interrupts(GLOBAL); // Aktif edilen kesmelere izin ver

 


while(true) // Sonsuz döngü
{
basla();
}
}
Başlık: Ynt: Sayac, elektrik kesintisi ve eeprom
Gönderen: haydarpasamikro - 24 Nisan 2015, 17:53:25
Ben böyle bir proje yapmıştım. PIC in comparator girişi ve bunun interrupt(kesmesi) ile. ADC dönüştüme zaman kaybı olur. Besleme gerilimi referans değerin altına düşünce comparatör kesmesi ile sayaçları eeproma yüklüyoruz. PIC beslemesini bu durumda supercap (5.5V 2.2F) den alıyor. 5.5 V olması ile seri schottky diyotta 0.5V gerilim düşümü sonrası geri beslemeye 5V kalıyor. Enerji varken supercap seri diyot ile şarjda.
Başlık: Ynt: Sayac, elektrik kesintisi ve eeprom
Gönderen: hgs - 24 Nisan 2015, 19:24:41
Mcuyu değiştirin gitsin. F0 kullanırsınız tonla donanımı 1$ civarında alırsınız.

ADC kanalından "giriş beslemesi" izlenir. Gerektiğinde eeproma yazarsınız..
Başlık: Ynt: Sayac, elektrik kesintisi ve eeprom
Gönderen: ehliseyf - 24 Nisan 2015, 23:14:42
Alıntı yapılan: haydarpasamikro - 24 Nisan 2015, 17:53:25
Ben böyle bir proje yapmıştım. PIC in comparator girişi ve bunun interrupt(kesmesi) ile. ADC dönüştüme zaman kaybı olur. Besleme gerilimi referans değerin altına düşünce comparatör kesmesi ile sayaçları eeproma yüklüyoruz. PIC beslemesini bu durumda supercap (5.5V 2.2F) den alıyor. 5.5 V olması ile seri schottky diyotta 0.5V gerilim düşümü sonrası geri beslemeye 5V kalıyor. Enerji varken supercap seri diyot ile şarjda.
Hocam karşılaştırma için yeteri kadar boşta bacağım yok inceledim 4 pin kullanmayı gerektiriyor. B0'ı zor boşa çıkarttım. B0 kesmesi ile yapabilsem süper olacak. Girişteki Eeprom'dan okuma işlemini kaldırınca sistem ilk hali ile çalışıyor ( kayıt yapmayan halde). Eepromdan okuma işlemini koyunca sanki çakılı kalıyor sürekli eeprom okuma kesmesine gidiyor gibi davranıyor. Ana programdaki sonsuz döngüye hiç girmiyor gibi davranıyor.

Alıntı yapılan: hgs - 24 Nisan 2015, 19:24:41
Mcuyu değiştirin gitsin. F0 kullanırsınız tonla donanımı 1$ civarında alırsınız.

ADC kanalından "giriş beslemesi" izlenir. Gerektiğinde eeproma yazarsınız..

Hocam çok mantıklı söylüyorsunuz. Şu işi bitireyim ARM mimarisine merhaba diyeceğim. Bıktık usandım PIC'ten. Alışkanlıklar tek tutan şey. Yeni bir yapı öğrenmek zor geldiğinden. ilk boş vaktimde ARM ile haşır neşir olacağım. Şuan için şu problemi çözmem gerekiyor.
Başlık: Ynt: Sayac, elektrik kesintisi ve eeprom
Gönderen: ehliseyf - 26 Nisan 2015, 16:19:06
https://www.picproje.org/index.php/topic,58941.0.html (https://www.picproje.org/index.php/topic,58941.0.html)
Ayrıca şöyle bir konumuzda var :)
Başlık: Ynt: Sayac, elektrik kesintisi ve eeprom
Gönderen: Karamel - 26 Nisan 2015, 18:52:28
Hocam problem solving strategy diye bir yazi okumustum. bilgisayar basina gecince unutmasam bulup buraya eklemeye calisirim. simdi sorunlari bir ordu oladak dusunursek. bunlari ayni anda cozmeye calismamaliyiz. eger boyle yaparsak sorunlar bizi acik ara farkla yenerler. ama kucuk kucuk gruplar halinde sorunlari halt edebiliriz. oncelikle eeproma normal kayit yapmayi deneyin. bunu astiktan sonra. external interrupt ile bi led yakip sondurun. yani external int icersinde boyle bir function yazin ve hatta elektrik gidince led in yanik kalma suresinden eeproma yapacaginiz kaydin suresini asagi yukari belirleyin. daha sonra acilista eepromu okumayi deneyin. bunuda astiktan sonra en son external interrupt icersine eeprom kayit function larini yazin ve butun sorunlari cozun ::)
Başlık: Ynt: Sayac, elektrik kesintisi ve eeprom
Gönderen: ehliseyf - 27 Nisan 2015, 00:23:31
Alıntı yapılan: Karamel - 26 Nisan 2015, 18:52:28
Hocam problem solving strategy diye bir yazi okumustum. bilgisayar basina gecince unutmasam bulup buraya eklemeye calisirim. simdi sorunlari bir ordu oladak dusunursek. bunlari ayni anda cozmeye calismamaliyiz. eger boyle yaparsak sorunlar bizi acik ara farkla yenerler. ama kucuk kucuk gruplar halinde sorunlari halt edebiliriz. oncelikle eeproma normal kayit yapmayi deneyin. bunu astiktan sonra. external interrupt ile bi led yakip sondurun. yani external int icersinde boyle bir function yazin ve hatta elektrik gidince led in yanik kalma suresinden eeproma yapacaginiz kaydin suresini asagi yukari belirleyin. daha sonra acilista eepromu okumayi deneyin. bunuda astiktan sonra en son external interrupt icersine eeprom kayit function larini yazin ve butun sorunlari cozun ::)

Hocam şuan eeprom başlangıç yazma işini çözdüğümü düşünüyorum. int_ext ile kayıt yapabiliyorum lakin bazı şartlarda. Kondansatörler girişte ve çıkışta sırasıyla 100u ve 1000u olmak üzere konumlandırıldı. Konuda bahsi geçen elektrik kesintisi için gerekli zener donanımı kuruldu. Eğer ki elektriği adaptörü prizden çıkartarak yaparsam kayıt yapmıyor( Sanırım içindeki kondansatörlerden ötürü zaman kaybediyoruz elektrik kesintisini geç algılıyoruz). ikinci olarak aynı adaptöre yük bağlarsam (ki bağlamak zorundayım) prizden de çıakrsam adaptörün ucundan de kessem kayıt alamıyorum. Tek kayıt aldığım nokta adaptörü yüksüz iken jacktan sökerek yapabiliyorum. Biraz kafa patlattıracak ama sonuçta öğrenmek emek ister. Yardımlarınız için minnettarım.
Başlık: Ynt: Sayac, elektrik kesintisi ve eeprom
Gönderen: mehmet - 27 Nisan 2015, 09:10:09
Besleme tarafındaki kondansatörün küçük (hatta olmamalı),
diyottan sonraki kondansatörün büyük olması düşünülebilir.
İki kondansatör aynı anda boşaldığı için kesme oluşturamadan
mcu gerilimi bitmiş oluyor.
Başlık: Ynt: Sayac, elektrik kesintisi ve eeprom
Gönderen: ehliseyf - 27 Nisan 2015, 11:30:14
Alıntı yapılan: mehmet - 27 Nisan 2015, 09:10:09
Besleme tarafındaki kondansatörün küçük (hatta olmamalı),
diyottan sonraki kondansatörün büyük olması düşünülebilir.
İki kondansatör aynı anda boşaldığı için kesme oluşturamadan
mcu gerilimi bitmiş oluyor.

Hocam önündekini de değiştirdim sonrakini de değiştirdim tüm kombinasyonları denedim. Fakat bu adaptörün içindeki kondansatör hepsinden büyük sanırım. Başka bir önerisi olan var mı ?
Başlık: Ynt: Sayac, elektrik kesintisi ve eeprom
Gönderen: alexsi - 27 Mayıs 2015, 12:13:29
Merhaba arkadaslar,
benim önerim var. Şöyle ki;
beslemeni dc üzerinden yapıyorsun sanırım algılama hızında yazmak icin yavas kalıyor. Vin girişi senin kopruden sonraki girişin olmalı. Eger DC gerilim Vin girişine uyguluyorsan (bu yöntemle) algılayamazsın. Koprude yarım dalga dogrultma yaptıktan sonra mcu girişi dediğin yerede opto kuplor koyup lojik var yok sinyaline cevirmen gerek. Bunuda işlemci pinine girip interruptta o pinde lojik seviyeyeye bakcaksın. Pin 1den sıfıra ya da 0dan 1 e 3-5 kez okuyup gectimi diye. Sonra gectiyse kesinti de kaydeteceğin yere gidip degerleri kaydetceksin. bir daha girmeyeceksin oraya.(Kesintiyi algıladıgın anca yükleriden kurtulman lazım. Kondansatoru onlar bosaltıyor. LCD yada Roleler off a cek. varsa buzer kapat ki Kondansator kayıt için yeterli zamanı sağlarsın.) Regule girişindeki kondansatorüde 470uF-1000uF gibi bi deger secmen gerek.(Brown out degerinide on yap ancak en alt seviyeye ayarla 1.9V ya da 2.1V gibi bir deger olmalı.) Opto kuplorun cıkısındaki kesinti durumundaki RC'deki sinyale osilaskoptan bakarsın. (1 - 0 algılama için)