Zaman ayarlı pic

Başlatan adiga, 26 Temmuz 2015, 12:40:06

adiga

Arkadaşlar, random (rastgele) bir zamanda çalışıp random (rastgele) bir zamanda duran pic yazılımını nasıl yapabiliriz.
Örneğin ;
programa 1-5 dakika süresi içerisinden bir süre seç ve çalış dedik. Program random olarak 3 dakikayı seçti ve 3 dakika süre geçtikten sonra devre çalıştı. Daha sonra devre açık motor çalışıyor tabi, devre açılır açılmaz program motorun durması için 10 - 20 dakika süresi içerisinden bir süre seç ve dur dedik. Program 12 dakikayı seçti ve daha sonra durdu. Bu sürekli bu şekilde tekrarlanacak. Her zaman rastgele bir sayı süre seçip devreyi çalışıp durduracak. Bu nasıl yapılabilir nasıl bir pic kullanmalıyız.

ete

Bu iş ancak iyi çalışan bir RANDOM komutu ile çalışabilir.
Ne yazıkki PBP da RANDOM komutu pek iyi çalışmamaktadır.
Bir defa üretilen sayılar 1-65535 arasında olmalıdır. Zira komut kullanımı RANDOM DEGISKEN şeklindedir.
Açıklamada Değişkenin 16 bitkik bir değişken olması önerilmektedir.
İşin sevmediğim yanı sistem her zaman aynı sayıları üreterek vermesidir. Sanki değerler bir tablodan okunuyor gibi verilmektedir.
Bu nedenle bu işin sağlıklı yapılması için bazı cin fikirler üretmek gerekiyor.
Anlatılanlara bakılırsa iki RANDOM sayıya ihtiyaç duyuluyor. Birincisi Çalışma için bekleme süresi olarak 0-9 aralığında bir sayı
ve sonra çalışmaya başladıktan sonra 10-20 arasında bir sayı. Bunu sağlamak için önce,
BASLA:
RANDOM SAYI  '...........(SAYI 16 bitlik)
IF SAYI<100 then BASLA
SURE=SAYI DIG 1  'SURE ilk çalışma için gereken süreyi hesaplayacaktır.
Sonra sistem çalışmaya başladıktan sonra durma süresi olarak,
ARA:
RANDOM SAYI
IF SAYI<100 then ARA
BIR=SAYI DIG 0
ONN=SAYI DIG 1
DURSURE=ONN*10+BIR   'bize durma süresini dakika cinsinden verecektir.
Sonrası malum gerekli kodları yazıp bu işlemi yaptırmak olmalı.

Ete

adiga

Alıntı yapılan: ete - 27 Temmuz 2015, 00:00:18
Bu iş ancak iyi çalışan bir RANDOM komutu ile çalışabilir.
Ne yazıkki PBP da RANDOM komutu pek iyi çalışmamaktadır.
Bir defa üretilen sayılar 1-65535 arasında olmalıdır. Zira komut kullanımı RANDOM DEGISKEN şeklindedir.
Açıklamada Değişkenin 16 bitkik bir değişken olması önerilmektedir.
İşin sevmediğim yanı sistem her zaman aynı sayıları üreterek vermesidir. Sanki değerler bir tablodan okunuyor gibi verilmektedir.
Bu nedenle bu işin sağlıklı yapılması için bazı cin fikirler üretmek gerekiyor.
Anlatılanlara bakılırsa iki RANDOM sayıya ihtiyaç duyuluyor. Birincisi Çalışma için bekleme süresi olarak 0-9 aralığında bir sayı
ve sonra çalışmaya başladıktan sonra 10-20 arasında bir sayı. Bunu sağlamak için önce,
BASLA:
RANDOM SAYI  '...........(SAYI 16 bitlik)
IF SAYI<100 then BASLA
SURE=SAYI DIG 1  'SURE ilk çalışma için gereken süreyi hesaplayacaktır.
Sonra sistem çalışmaya başladıktan sonra durma süresi olarak,
ARA:
RANDOM SAYI
IF SAYI<100 then ARA
BIR=SAYI DIG 0
ONN=SAYI DIG 1
DURSURE=ONN*10+BIR   'bize durma süresini dakika cinsinden verecektir.
Sonrası malum gerekli kodları yazıp bu işlemi yaptırmak olmalı.

Ete
peki hocam sadece basit bir motor çalıştırabilmek için pic entegresini kullanmalıyım. Devreyi en az malzeme ile yapmak istiyorum bu işlerden pek anlamadığım için. yardımların için teşekkürler.

ete

Bilginiz az ise bu işlerle pek uğraşmayın derim tavsiye olark tabiiki. Keyif sizin uğraşıp bir şeyler öğrenmekde güzel bir şeydir. İnsan zevk aldıkça daha fazlasını öğrenmek ister. Ama bilgi eksiliği var ise ciddi projeler yapmaya kalkışmayın. Başkasına güvenlerek iş yapılmaz. Boşuna dememişler taşıma suyla değişmen dönmez diye.  Kendinden de bir şeyler katman gerekir. Buda bilgi ve çalışmakla olur.

Diğer taraftan en az malzeme ile bu işi yapacağım diyede yola çıkılmaz. Proje neyi gerektiriyor ise onu kullanmak zorundasın.
Fazladan yeri olmayan malzemeyi kullanmak zaten gereksiz.

ete

adiga

Alıntı yapılan: ete - 27 Temmuz 2015, 11:24:05
Bilginiz az ise bu işlerle pek uğraşmayın derim tavsiye olark tabiiki. Keyif sizin uğraşıp bir şeyler öğrenmekde güzel bir şeydir. İnsan zevk aldıkça daha fazlasını öğrenmek ister. Ama bilgi eksiliği var ise ciddi projeler yapmaya kalkışmayın. Başkasına güvenlerek iş yapılmaz. Boşuna dememişler taşıma suyla değişmen dönmez diye.  Kendinden de bir şeyler katman gerekir. Buda bilgi ve çalışmakla olur.

Diğer taraftan en az malzeme ile bu işi yapacağım diyede yola çıkılmaz. Proje neyi gerektiriyor ise onu kullanmak zorundasın.
Fazladan yeri olmayan malzemeyi kullanmak zaten gereksiz.

ete
Dediklerinize katılıyorum ufaktan ufaktan bir şeyler yapıp kendimi geliştireceğim. Yapacağım devre zaten çok basit, bahsettiğim şekilde motor kontrol edeceğim. Bunun için hangi pic i kullanmalıyım.

ete

16f628A kullanabilirsin.
Ete


adiga

Alıntı yapılan: ete - 27 Temmuz 2015, 14:02:50
16f628A kullanabilirsin.
Ete
teşekkürler hocam. 12f675 de kullanılabilir mi?

ete

Böyle sorular beni rahatsız ediyor. Zira ortada çok fazla detay yok ne yapılacağı aşağı yukarı belli ama ne bir şema var nede detay var. Ben olur derim sonra şema çıkar ortaya ve pin sayısı yetişmez ise hocam siz olur demiştiniz dersiniz. O nedenle kendiniz karar verin olup olmayacağına. Pin sayısı yeterli ise olur elbette.

Ete

adiga

Alıntı yapılan: ete - 27 Temmuz 2015, 17:38:21
Böyle sorular beni rahatsız ediyor. Zira ortada çok fazla detay yok ne yapılacağı aşağı yukarı belli ama ne bir şema var nede detay var. Ben olur derim sonra şema çıkar ortaya ve pin sayısı yetişmez ise hocam siz olur demiştiniz dersiniz. O nedenle kendiniz karar verin olup olmayacağına. Pin sayısı yeterli ise olur elbette.

Ete

hocam devreyi tamamlayıp, kodun da bir kısmını tamamlayıp uzmanlığınıza başvurmaya geldim. Yukarıda da bahsettiğim gibi program ilk açıldığında 30 ile 50  dakika arasından bir süre seçiyor. atıyorum 42 dakikayı seçti ve 42 dakika geçtikten sonra çalıştı. çalışır çalışmaz 5-15 dakika arasından bir değer seçiyor atıyorum 6 dakikayı seçti. 6 dakika geçtikten sonra kapatıyor kendini.  devre açık kaldığı sürece sürekli bu döngüyü tekrarlayacak farklı dakikalar seçerek.

bu konuda yardımlarınızı beklerim.

ete

Bir çok kereler dile getirdim ama her yeni gelen arkadaş nedense aynı şeyi yapıyor ve beni bütün programlama dillerini biliyor farzediyor. Sende öyle yapmışsın. C dilinden yada CCS dilinden anlamam. Ben BASIC ile program yazarım. Dolayısıyla yazdıklarına yalnzıca bakıyorum. Ancak ne bir yorum yapabiliyorum nede öneride bulunabiliyorum. Anlamadığım bir konuda bunu yapmamı bekleme lütfen.

Ete

adiga

Alıntı yapılan: ete - 15 Ağustos 2015, 10:12:41
Bir çok kereler dile getirdim ama her yeni gelen arkadaş nedense aynı şeyi yapıyor ve beni bütün programlama dillerini biliyor farzediyor. Sende öyle yapmışsın. C dilinden yada CCS dilinden anlamam. Ben BASIC ile program yazarım. Dolayısıyla yazdıklarına yalnzıca bakıyorum. Ancak ne bir yorum yapabiliyorum nede öneride bulunabiliyorum. Anlamadığım bir konuda bunu yapmamı bekleme lütfen.

Ete
anlıyorum hocam, peki siz kendi programlama diliniz ile bu işlemi nasıl yapardınız belki bana bir faydası olur. kendi programıma uyarlayabilirim.

ete

Alıntı Yaphocam devreyi tamamlayıp, kodun da bir kısmını tamamlayıp uzmanlığınıza başvurmaya geldim. Yukarıda da bahsettiğim gibi program ilk açıldığında 30 ile 50  dakika arasından bir süre seçiyor. atıyorum 42 dakikayı seçti ve 42 dakika geçtikten sonra çalıştı. çalışır çalışmaz 5-15 dakika arasından bir değer seçiyor atıyorum 6 dakikayı seçti. 6 dakika geçtikten sonra kapatıyor kendini.  devre açık kaldığı sürece sürekli bu döngüyü tekrarlayacak farklı dakikalar seçerek.
Mademk, temel zaman birimim dakika o halde basit bir hesap yaparım. 1dak=60 sn=60x1000=60.000 ms
Bu durumda 1 dan 60000 aralığında çalışacak ve her seferinde 1 ms duracak bir döngü kurarım. Ancak böyle yaparsam komut gecikmesi çok olur ve süreyi etkileyebilir. Döngüyü azaltmak için 1 ms yerine 10 ms duracak şekilde döngüyü kurarım ve döngü 1 den 6000'e kadar çalışmış olur.
FOR I=1 to 6000
   pause 10
Next

bu döngü bana 1 dak. zaman gecikmesi sağlayacaktır. Şayet bu döngüyü başka bir döngünün içine sokarsam ve o döngüde de kaç dakika çalışacağını belirlersem istediğim dakika adedinde gecikme yaratabilirim.
FOR X=1 to DAK
   FOR I=1 to 6000
      PAUSE 10
   NEXT
Next

Bu son kodu bir alt programa yerleştirirsem adınada ZAMAN dersem (sen fonksiyon olarak yaratacaksın bunu)
oraya programı yollarken DAK=5:GOSUB ZAMAN gibi bir komut kullanırsam program oraya gider 5 dak sonra geri döner.
DAK=25:GOSUB ZAMAN dersem program 25 daki sonra oradan döner.
Sende aynı alt programı  fonksiyon olarak yaratırsan
ZAMAN(25) dediğin zaman senin programda 25 dakika sonra fonksiyondan çıkar.
Bu sistem elinde olduğu zaman;
- İlk seçtiği süre ile fonksiyonu çalıştırıp o gecikmeden sonra programı çalıştırırsın.
- Çalışır çalışmaz yeni bir süre seçer ve o seçilen süre ile fonksiyonu çalıştırırsın diyelimki 6 dak seçtin. 6 dak sonra program geri döner ve sistemi kapatırsın.
- aynı döngü tekrarlanacak ise programı en başa yönlendirirsin (sen  while true ... Wend döngüsü içinde çalıştıracaksın.)
Böylece istediğin olmuş olur.

Ete


adiga

Alıntı yapılan: ete - 16 Ağustos 2015, 20:20:12
Mademk, temel zaman birimim dakika o halde basit bir hesap yaparım. 1dak=60 sn=60x1000=60.000 ms
Bu durumda 1 dan 60000 aralığında çalışacak ve her seferinde 1 ms duracak bir döngü kurarım. Ancak böyle yaparsam komut gecikmesi çok olur ve süreyi etkileyebilir. Döngüyü azaltmak için 1 ms yerine 10 ms duracak şekilde döngüyü kurarım ve döngü 1 den 6000'e kadar çalışmış olur.
FOR I=1 to 6000
   pause 10
Next

bu döngü bana 1 dak. zaman gecikmesi sağlayacaktır. Şayet bu döngüyü başka bir döngünün içine sokarsam ve o döngüde de kaç dakika çalışacağını belirlersem istediğim dakika adedinde gecikme yaratabilirim.
FOR X=1 to DAK
   FOR I=1 to 6000
      PAUSE 10
   NEXT
Next

Bu son kodu bir alt programa yerleştirirsem adınada ZAMAN dersem (sen fonksiyon olarak yaratacaksın bunu)
oraya programı yollarken DAK=5:GOSUB ZAMAN gibi bir komut kullanırsam program oraya gider 5 dak sonra geri döner.
DAK=25:GOSUB ZAMAN dersem program 25 daki sonra oradan döner.
Sende aynı alt programı  fonksiyon olarak yaratırsan
ZAMAN(25) dediğin zaman senin programda 25 dakika sonra fonksiyondan çıkar.
Bu sistem elinde olduğu zaman;
- İlk seçtiği süre ile fonksiyonu çalıştırıp o gecikmeden sonra programı çalıştırırsın.
- Çalışır çalışmaz yeni bir süre seçer ve o seçilen süre ile fonksiyonu çalıştırırsın diyelimki 6 dak seçtin. 6 dak sonra program geri döner ve sistemi kapatırsın.
- aynı döngü tekrarlanacak ise programı en başa yönlendirirsin (sen  while true ... Wend döngüsü içinde çalıştıracaksın.)
Böylece istediğin olmuş olur.

Ete
random göremedim hocam acaba atladınız mı?

ete

randomu yazmaya gerek varmı sen zaten randomun kullanılmasını bulmuşsun. Sana sadece örnek kod verdim. Sen onu CCS ye uyarla diye.

Ete

Powered by EzPortal