avatar_ete

Zaman Ayarlı Start-Stop Rölesi

Başlatan ete, 04 Eylül 2011, 10:40:25

ete

Dersler kisminda adc konusunu okursan anlatacagim bilgilerin hepsi orada var. Benden olan şeyleri istemeyin lütfen.. Zaten zaman kısıtlı birde siz sıkıştırmayın lütfen..
Dersleri okuduktan sonra yinede anlamaz isen tekrardan genel olarak değilde neresini anlamadı isen orayı sor.

Ete

yavuz timur

sayın ete:benim bu projeye benzer bir projeya ihtiyacım var.devre kısaca şöyle.4 roleli devre var.röle  cektigi zaman 1 saniye sonra 1 saniye sürede led yakacak.diyelimki role kapandı yine 1 saniye sonra 1 saniye süre led yakacak.şimdiden tşk ederim.

ete

Özel  program isteklerini yerine getirmem mümkün değil maalesef.
Ete

muyat

FOR SN= 1 TO 117  'MS SÜRESİ  TOPLAMDA 1 ms SAYAR
            NEXT SN

Zaman ayarlı start stop rölesinde bu kısmın hesabını nasıl yapıyoruz?1ms için 117 kez sn sayılmasının hesabı nasıldır?

ete

O bölümde yer alan komut gecikmeleri , 1000 ms (1sn) lik sürenin bir kısmını gecikme olarak sağlamaktadır. Ancak gecikme miktarını 1000 ms ye ye tamamlamak için biraz daha oyalanmak gerekiyor ki bu döngüde o farkı sağlamaktadır.
Belirli bir hesabı yok deneme yanılma yöntemi ile bulunmuştur.

Ete

ete

Sistemin daha hassas bir zamanlama ile çalışabilmesi için zaman tutma işini TMR1 sayacına verdim. 500 ms lik dilimler halinde çalışan bu sayaç ile zaman tutma kısmını değiştirip yeni dosyayı ilk mesaj ekine ekledim. Oradan bakabilirsiniz.
500 ms lik zaman dilimi içinde yapmak istediğiniz diğer iişlemleri yapabilirsiniz. Bu örnekte sadece tuş kontrolü vardı onu yapıyoruz. Böylece sistem hem zaman tutacak hemde diğer işleri halletmiş olacaktır
Ete

muyat

#36
Hocam bu konuyu dünden beri inceliyorum...
Öncelikle TMR1 siz olanla yapılmış olanında sormak istediklerim şu:
Program aşagıdaki saybir etiketine atlayınca önce 117 kez sayıyor.Saymayı bitirdikten sonra tuşa basılmamışsa DAK=DAK-1 kısmına atlıyor.Daha sonra orda 998 oluyor ve  ıf komutuyla 998 sıfırdan büyük oldugundan tekrar sn bölümüne gelip 117 defa sayıyor..Sonra tekrar aşagıya atlıyor 997 oluyor ve tekrar yukarı çıkıp 117 kez sayıyor...... Ta ki 999 sayısı 1 olana kadar.
Bu durumda 117 kez sayma işlemini ben 999 defa yaptıgım için  117X999=116766 gibi bir sonuç çıkıyor...
Bu 116766 sayısının anlamı veya birimi süre bazında nedir? Nasıl oluyorda 116766 sayısından  yaklaşık olarak 1saniye=1000ms=1000.000 us çıkıyor. Çünkü deneme yanılmayla yapmış bile olsanız hemen hemen yakın degerleri çok rahat yakalayabilirsunuz.Demekki deneme yanılmayla konulan degeri de az çok hesap edebiliyorsunuz.Bu kısmı açıklar  mısınız?


SAYBIR:       
            FOR SN= 1 TO 117  'MS SÜRESİ  TOPLAMDA 1 ms SAYAR
            NEXT SN
              

                IF TUS=0 THEN
                ROLE=0:LED=0
                WHILE TUS=0:WEND
                pause 100
                GOTO BASLA
               
ENDIF            
          DAK=DAK-1
          IF DAK>0 THEN SAYBIR   'BURASI 1000 MS YANİ 1 SN SAYDIRIR.
          DAK=999
          ZAMAN=ZAMAN-1        'BUNUN HER 60 TANESİ 1 DAK SAYDIRIR.
          IF ZAMAN>0 THEN SAYBIR    
          ROLE=0:LED=0

ete

Bir önceki yanıtım biraz yanlış olmuş sanırım.
For next döngüsü 1 to 117 sayımı yaklaşık 1 ms lik bir süre alıyor. DAK=999 verdiğimiz için sıfır dahil 1000 defa dak sayacından bir eksiltilecek demektir. Bu durumda her DAK=0 olduğunda 1000 defa döngü saydırılmış olacaktır. Her biri 1ms olduğuna göre toplamda 1000 ms süre geçmiş olacaktır.

Gelelim deneme yanılma nasıl bulunuyor. Simulasyonda bu sistemi çalıştırınca pot ile bir süre veriyorum. Ekranda watch window dan ayrıca değişken değerlerini de takip ediyorum. Simulasyonda sol altta birde gerçek zaman saati var. O saat de SN değeri sıfırlandığı anda butona basıyorum. Diyelimki 2 dak lık bir süre verdim. tam 2dak sonra röleninbırakması ve ledin sönmesi gerekir. Göz ucu ile led'e bakarken bir yandan da gerçek zaman saatini takip ediyorum. Oradan zamanda şaşma var ise gözlemleyebiliyorum. Dolayısıyla döngü süresi ile oynayarak bu süreyi gerçek zaman saati ile eşitlemeye çalışıyorum.
Anlayacağın ip ucu sol alttaki gerçek zaman saatidir. O saat saat-dak-sn-ms olarak sayıyor zaten. Diyelimki 1 dak zaman tuttum gerçek zaman saati 00:02:00 dan başladı diyelim 00:03:00 olunca ledin sönmesi gerekir. Erken sönüyor ise döngü az geldi , geç sönüyor ise döngü çok geldi şeklinde değerlendirme yapıp döngü değerleri ile oynayarak gerçeğe en yakın süreyi bulmaya çalışıyorum.

Ete

muyat

#38
For next döngüsü 1 to 117 sayımının yaklaşık 1mslik süre alıyor demişsiniz.İşte püf nokta bana göre burası.
Bu döngünün 1ms yani yaklaşık 1000us nasıl ettiğini hesap ederek bulmanın bir yöntemi var.
Çünkü açıkçası böyle bir uygulama da deneme yanılmayla kolay kolay beceremem...
Byte olarak tanımlanan sn bitini yaklaşık 117 kez saydırınca 1ms nasıl elde edebiliyoruz?
4mhzde 1 komut 1us ise ,117 kez saydırmak 117us süre elde etmek değil midir?Değilse neden?

muyat

#39
Soruyu düzellttim.

ete

#40
Yalnızca 117 ye kadar saymanın 1 ms tuttuğunu belirleyecek bir yöntem yok maalesef. ncak çok miktarda zaman içinde değerlendirme yapıp uyup uymadığına bakmak gerek. Bende öyle yapıyorum.
Veya döngüden önce TMR1' sıfırlayıp bölme oranını 1/1 olarak alıp döngü bitince TMR1'i durdurursan o döngünüün ne kadar süre tuttuğunu bulabilirsin.
Şöyle;
TMR1H=0:TMRL=0:T1CON=1
FOR I=1 to 117
Next
T1CON=0
Sure.byte0=TMR1L:Sure.Byte1=TMRH
Sure değişkeni döngünün ne kadar süre aldığını sana verecektir. Bu dediklerim 4 Mhz çalışma frekansı için geçerlidir.
Zira bu frekansta 1clock palsi 1us olarak çalışır. Farklı frekanslar iiçin ayrıca hesap yapmak gerekir. Mesela 10Mhz frekansta 1 clk palsi 0,4us tutar. Bu durumda SURE=1200 ise (mesela) geçen süre 1200x0,4=480us olmuş olur.
10 mhz için 1 clk süresini şöyle buluyoruz. 10/4=2,5 Mhz pic in kullandığı frekans oluyor. 1/2,5=0,4 us ise bir clk pals süresini verir.

Ete

Edit: Şimdi denedim yaklaşık 945 us tutuyor. Altta yer alan if satırları ve sonrasında Dak=Dak-1 komutunuda dahil edersek 955us gibi bir değer tutyor. Demekki biraz daha artırmak gerekir döngüyü.123 sanırım daha iyi olur.


muyat

#41
Hocam ön deger olarak 3036 vermişsiniz.Demekki 62500den sayıyor.
Aşagıdaki son güncel yazılımda hesapları nasıl yaptıgınızı yazar mısınız?120 adet kesme nasıl 1 saniye ediyor?

sure=((raw+1)*/125)/100+1 

ve SAYBIR:
       T1CON=%00110101:PIR1.0=0:SN=0
SAYIKI:
       TMR1H=$0B:TMR1L=$DC:PIR1.0=0  
       WHILE PIR1.0=0
         

        IF TUS=0 THEN
            ROLE=0:LED=0
            WHILE TUS=0:WEND
            pause 100
            GOTO BASLA
         ENDIF                         
        WEND
       
 SN=SN+1:IF SN<120 THEN SAYIKI '120 ADET KESME 1 DAK EDİYOR


ete

TMR1 de bölme oranı 1/8 olduğu için her 8 clok palsinde TMR1 bir artar. O hlade 62500 sayınca aslında 62500x8=500.000us yani 500 ms saymış olur. 2x500 ms=1 sn edeceği için 120 adedi 1 dakika eder. Bak en alt satıra ne yazmışım;
"SN=SN+1:IF SN<120 THEN SAYIKI '120 ADET KESME 1 DAK EDİYOR"

Ete


muyat

#43
Edit.Devre güzel çalışıyor.

onurinci

Hocam saygılar bu devrenin eski versiyonunu kullanıyordum.5 dakikayı 15 dakika maximuma çıkarmaya çalıştım,ve farkettimki bton start yapıyor stop yapmıyor,birde hocam boştaki Pinlerin birine bir buton daha koysanız basıldığında sürekli çıkış versin,stop'a bastığınızda dursun pek yararlı olur mekanik anahtardan kurtuluruz..

Ete

Edit: Bu sistemin daha hassas bir zamanlama ile çalışması için TMR1 sayacını 500 ms lik dilimler halinde kullanmak mümkün. Bu şekilde çalışan program ektedir.  26-11-2015 de eklenmiştir

Powered by EzPortal