pic basic döngü sorunu

trilian

Üye
Katılım
19 Haz 2008
Mesajlar
19
Puanları
1
Yaş
40
arkadaşlar projemde farklı iki döngüde çalışan bir uygulama var ayrı piclerde olmuyor.Birbiri ile ilişkili

yani çık hızlı milisaniye cinsinden 2-3 mili saniye

projemde

dongu1:
adc okunuyor
a=adc '100 e eşitliyorum

high portb.0
pause a
low portb.0
pause a
goto dongu1

dongu2
adc okunuyor
a=adc '100 e eşitliyorum
b=100-a
high portc.0
pause b
low portb.0
goto dongu2

burda ikisi aynı döngüde olmuyor ayrı dongude gosubla bekleme yapıyor 2 sininde durmaması lazım
ayrı pic ile ortak adc kullandıgımda tek pot kullanmam gerekiyor pot degerleri bozuluyor bir anda birden yükseliyor degerler
2nci sorun adc okurken
pause 2 milisaniye oldugu zaman adc okumak için vakit geçiyor bir pici aynı anda nasıl birden fazla işi aynı anda yaptırabilirim 2-3-4 işlem ve zamanlamayı bozmayacak birbirini etkilemeyecek adc sürekli kontrol altında olacak

yardımlarınızı bekliyorum
pause b
goto dongu2
 
ayrı pic ile ortak adc kullandıgımda tek pot kullanmam gerekiyor pot degerleri bozuluyor bir anda birden yükseliyor degerler

Aynı potu iki farklı pic ile mi ölçmeye çalışıyorsun?

Baştan tam olarak ne yapmak istediğini açıklarsan, yardım edebilirim.
 
hayır pot önemli değil farklı zamanlama döngülerinde çalışan değişken bir kaç çıkış var
bunları ayrı ayrı zamanlarda bir pic te nasıl çalıştırabilirm
yani örnekteki 2 döngüyü önce biri sonra biri değilde aynı anda nasıl dönderebilirim çalışma süreleri döngü süreleri zıt
 
adc okuma işini bir alt program içinde yap. Dongu1 ve Dongu2 de ise bu alt programı gosub et. Sadece dikkatimi çekti. Yukarıdaki yazdığın kodda program dongu2 ye hiç geçmiyor. Belki öylesine yazıp gönderdin ama ben sadece hatırlatayım istedim.
 
dostum döngü devam etmiyor o bir örnek zaten nasıl yapacam ona bakıyorum sorun biri bitmeden digerinide çalıştırmak aynı anda 2 döngüyü döndürmek
olcum
gosub dongu1
gosub dongu2
goto olcum

zaten bunu yapıyorum ama dongu1 işlemi tamamlamadan dongu2 ye gitmiyopr bunlar saniye cinsinden işlemler değil 2 milisaniye içerisinde gerçekleşiyor
bir Lcd ye yazı yazdırsam 6 milisaniye geçiyor
biri okurken digeri ledleri yakıp söndürüyor boyle düşünelim
serin serouttada okurken bekleme yapıyor o arada dongu şaşıyor

dongu1:
adc okunuyor
a=adc '100 e eşitliyorum

high portb.0
pause a
low portb.0
pause a
goto dongu1

dongu2
adc okunuyor
a=adc '100 e eşitliyorum
b=100-a
high portc.0
pause b
low portb.0
goto dongu2

dongu1 de geri donerken

pause a süresi ek adc okuma süresi ekleniyor o zaman sürekli döngü oluşmuyor

o zaman

dongu1:
adc okunuyor
a=adc '100 e eşitliyorum
' burada artı adc okuma süresi geçiyor buda örnegin 2 ms o zaman pause a birinde 2+2 ms ise digerinde 2 ms oluyor. sıkıntı burda aynı anda dongu 2 ninde işlem yapması gerek milisaniye olarak
high portb.0
pause a
low portb.0
pause a
goto dongu1


yardımlarınıza şimdiden teşekkürler
adc yerine serin2 dersek ondada serin2 gelene kadar boşluk oluşuyor bunları farklı döngülere döküp aynı anda işlem yaptırtmam gerek
 
Probleme bu şekilde yaklaştığında çözümü çok zor, yaklaşımını değiştirmelisin. Tüm işlemler tek bir döngü içerisinde olmalı. A değişkenini arttırırken b değişkenini azaltabilmek için 2 farklı loop gerekmez. Bir de bu şekilde düşün.

İkinci olarak, Adc için harcanan süreyi çok kısaltma şansın yok. Ben olsam, 2. bir pic kullanırdım, bu 2.pic çevrimi yapar, picler "paralel" haberleşir, böylelikle 1. pic en kısa sürede analog değeri saptayabilir.
 
dogru söylüyorsun denedim serout2 ve serin2 ile ama her okuma esnasında bekleme yaptı minimum süre 2ms ye düşüyor
sorun sürenin çok düşük olması
pulse sinyal üretiyor portlar ama 2ms de bir dögü serout2 de veriyi okuyor
portları açıp kapıyor tekrar okuyor tekrar açıp kapıyor serin2 ye her baktıgında belli bir süre geçiyor sıkıntım bu geçen sürelerde 1 ms yeden fazla zaman kaybı affetmiyor sistem
 
Önceki mesajımda zaten bu zaman kaybı yaşanmasın diye özellikle "paralel" haberleşme önermiştim zaten.Yani 8 bitlik iki portu birbirine bağlayacaksınız. Bu türden haberleşmeyle seri haberleşmeye göre çok daha az gecikme olur.
 
yaptım döngü şu şekilde

dongu:
serin2 portb.0,396,[wait("A"),b]
pause b
high portc.0
pause b
low portc.0
goto dongu

burada high ve low seviyeleri eşit olmadı yani osilatörde kare dalga elde edemedim
çünkü serin2 ye her baktıgında bekleme yapıp ilk pause b degeri 2nci pause b degerinden farklı oldu yani
ilki serin2 okurken geçen milisaniye + b degeri
bu durumda eşitlik hep bozuldu

kesme yapmak istiyorum ama nasıl yapacam

portb.0 da bir öncekine göre değişiklik oldugu zaman serin2 yi farklı bir döngüye koyacam oraya bakıp değişiklik yapacak
kesme örneklerinde hep lojik1 veya 0 gördüm
serin2 ye gelen değer değiştikçe yani voltajda olabilir
kesmeye gitsin döngü bozulmasın



dongu:
pause b
high portc.0
pause b
low portc.0
goto dongu

kesme:
serin2 portb.0,396,[wait("A"),b]
resume
end

ama ayrıntılı bilgi gerek

teşekkürler
 

Forum istatistikleri

Konular
129,835
Mesajlar
930,600
Kullanıcılar
452,663
Son üye
Yılmaz Çetiner

Yeni konular

Çevrimiçi üyeler

Geri
Üst