For sorunum ?

Başlatan oguztkn, 14 Temmuz 2012, 23:04:05

oguztkn

Başlıkta yazmadım ama işim biraz acil en kısa zamanda yapmam lazım....
Arkadaşlar elimde bir proje var ve 3 dakika motor döndürüp 40 dakika bekleyecek sonra bu döngüyü tekrar edicek  ve sürelere de 2 dakika döndürüp 28 dakika bekleyecek 10 dakika bir yöne 10 dakika diğer yöne  dönme işlemini 1 saat devam ettirip bitince  7 saat bekleyecek bu döngüleri for döngüsüyle nasıl yapabilirim???


  for x=0 to 300
        if p1=1 then
        high m2
        low  m1                 ;Bu değerleri bulmam çok uzun sürdü ama bunlar 1 dakika için
        else
        goto baslangic
        endif
        pause 50
        next


Yardımlarınız İçin Şimdiden Teşekürler....

Mucit23

Timer kullanmalısın.
Aslında Senin yerinde olsam RTC kullanırdım. Timerle RTC kadar hassas bir zaman elde edemessin.
Ben olsaydım şöyle yapardım.
Harici bir RTC kullanıp sistem saatini elde ederdim.
Sonra yapılacak olan işlemleri aşamlandırırım. Örneğin senin dediklerine bakarak 1. aşamada 3 dakika motoru döndürüp 40 dakika bekleme işlemini yapardım. Bu işlem bitince ikinci aşamaya geçerdim. Ama ne yapmak istediğini açıkçası anlayamadım. Biraz daha ayrıntılı anlatırsan dahada kolay yardımcı oluruz.
Bir ulusu yok etmenin En iyi yolu o ulusun dilini yok etmektir.

www.arectron.com/

oguztkn

aslında 4 tane program seçmeli bir devre olacak porta ya bağlı orda yazdığım sürelerde her bir programın değerleri olacak ama rtc kullanmayı bilmiyorum for ile yapılamazmı bu iş , o kadar hassas değerlere de gerek yok....

greatgonzo

Oğuz arkadaşım zamanlaman o kadar hassas değilse mucit arkadaşımın dediği gibi en ucuz yol tımer kullanman. Mantığıda bildiğin pic ile saat mantığı. Yapman gereken tımerı kurup bir değişken ile sayman. Süreyi belirleyen ise tımer taşmasıyla oluşacak kesme. Mesela 0.25 saniyede bir kesme üretiyor ise her 4 kesme sana 1 saniye verir. Mesela 3 dakikalık motoru döndürme işlemi için;

3 dakika X 60 saniye den 180 saniye eder. Dört kesme 1 saniyelik zamanı sayıyor ise 180 X 4 = 720  adet kesme ürettiğinde yaklaşık olarak 3 dakika elde edersin. Zamanlama mantığını yaklaşık böyle kurman mümkü. ETE hocamızın derslerinde saat projesi vardır. Orada saat oluşturduğu  için temelinin tamamı mevcut. Özelikle inceleni tavsiye ederim...

İyi çalışmalar...

oguztkn

Alıntı yapılan: greatgonzo - 15 Temmuz 2012, 12:30:28
Oğuz arkadaşım zamanlaman o kadar hassas değilse mucit arkadaşımın dediği gibi en ucuz yol tımer kullanman. Mantığıda bildiğin pic ile saat mantığı. Yapman gereken tımerı kurup bir değişken ile sayman. Süreyi belirleyen ise tımer taşmasıyla oluşacak kesme. Mesela 0.25 saniyede bir kesme üretiyor ise her 4 kesme sana 1 saniye verir. Mesela 3 dakikalık motoru döndürme işlemi için;

3 dakika X 60 saniye den 180 saniye eder. Dört kesme 1 saniyelik zamanı sayıyor ise 180 X 4 = 720  adet kesme ürettiğinde yaklaşık olarak 3 dakika elde edersin. Zamanlama mantığını yaklaşık böyle kurman mümkü. ETE hocamızın derslerinde saat projesi vardır. Orada saat oluşturduğu  için temelinin tamamı mevcut. Özelikle inceleni tavsiye ederim...

İyi çalışmalar...

arkadaşım peki for döngüleriyle yapılabilirmi bu olay kesme kullanmadan ?

greatgonzo

İç içe döngülerlede olur. Biraz garip olur ama olur:-) Mesela...

for i=0 to 5000
pause 10
next i

Bu işlem 5000 adet 10 mili saniye gecikme üretir. Kesme vs kullanmayacaksan  program otomatik yürüyecekse sorun yaratacağını sanmam. Bu mantık üzerine yürüyebilirsin.

oguztkn

#6
Alıntı yapılan: greatgonzo - 15 Temmuz 2012, 12:47:45
İç içe döngülerlede olur. Biraz garip olur ama olur:-) Mesela...

for i=0 to 5000
pause 10
next i

Bu işlem 5000 adet 10 mili saniye gecikme üretir. Kesme vs kullanmayacaksan  program otomatik yürüyecekse sorun yaratacağını sanmam. Bu mantık üzerine yürüyebilirsin.



deneyeceğim

greatgonzo

Ürettiğin 15 saniyelik bir döngü. Bunu bir dene derim mantık olarak çalışması lazım. Ama saat bazında düşündürüyor beni :-) 2 Saat boyunca sayacak olması :-)

İyi çalışmalar...

oguztkn

#8
  for x=0 to ????
        if P1=1 then
        high m2
        low  m1
        pause 10                               Arkadaşım bu iki döngüyü yaptım ikisindede pause değerlerinin
        else                                        az olması gerekiyor yoksa P1=0 olduğunu geç anlıyor mesela
        goto baslangic                       bu döngüler için x li olan döngü 3 dakika y li olan döngü 40 dakika
        endif                                       olması gerekiyor bunun için değerler ne olmalı bir türlü
        next                                         beceremedim... :)
        return
    for y=0 to  ????
        if p1=1 then
        low m1
        low m2
        pause 10
        else
        goto baslangic
        endif
        next

oguztkn

bu arada yazmayı unuttum şimdilik isiste similasyonda deniyorum ama gerçekte 628 in dahili osilatörünü kullanacağım

greatgonzo

Dahili yada harici çok fazla fark ettirmez. Ama DEFINE OSC 4 tanımı yazmalısın. Basic derleme esnasında zamanlama gereken komut yapılarını bu tanımlamaya göre hesaplar. Yani pause 1000 dediğinde senin için farketmesede 1MHz de farklı asm komutu üretilir 20 MHz de farklı üretilir. Döngü zamanlarında bir ara bende takılmıştım. Yanlış hatırlamıyorsam değişken tanımından fark etmişti. Şöyle ki

for i=0 to 5000 ifadesi sonsuza kadar dönmesi lazım eğer i Var byte dersen. i değişkeni byte tanımlanıncada en fazla 255 değerini taşır ve 256 olduğunda sıfırlanır. Asla 5000 değerine ulaşamaz. Döngüde yerinde sayar sürekli. Word olarak tanımlarsan 65535 alabileceği en büyük değerdir. Buna dikkat etmeni önemle tavsiye ederim.

Diğer duyarsızlık problemin de gayet normal. Pause pauseus komutlarında pic saymak haricinde hiçbir işlem yapmaz. Pinlerdeki değişiklikler hatta kesmeler bile bu  pausetan çıktıktan sonra icra eder. Bu yüzden içiçe ama küçük döngüler oluşturmalısın ki pinlere buton bağladıysan onlarıda daha fazla kontrol etmen lazım.

for i=0 to 5000
   for x=0 to 5000
   next x
next i


gibi acayip  birşeyler yapman lazım.Bu 5000X5000 lik bir döngüdür. Ama zamanı saptaman özellikle saat bazında zorlaşacaktır. Zira bu döngü her sayma işleminde azda olsa zaman harcar. Araya pin kontrolü eklersen oda zaman harcar . Pause ile yavaşlattınmı tekrar zaman harcar. Bu atık zamanlar komut işlenmesinde kaynaklanan gecikmelerdir. Mucit23 arkadaşımızın "Timerle RTC kadar hassas bir zaman elde edemessin."  cümleside bundan kaynaklanıyor.

İstersen içiçe for döngülerini dene ama sana saatle ifade edilen kısımlarda özellikle timer kullanmanı isterim. Timer zaten bir çeşit saattir ve bu döngülerle oluşturana kadar 10 kere yazarsın diye düşünüyorum. Tımer i neden kullanmak istemedin onuda anlamıyorum:-)

İyi çalışmalar....

Powered by EzPortal