Değeri değişen portu izlemek

Başlatan sezgin05, 31 Mayıs 2004, 09:00:41

sezgin05

Merhaba arkadaşlar ben 16f877 ve 2 digit  kullanarak 5 kanallı ADC yapmak istiyorum.Fakat beş kanaldan hangisinin değerinde bir değişiklik olduysa displeyde onu göstermeli.Böylece sadece iki tane seven segment ile 5 tane portu otomatik izlemiş olacağım...Varsa örnek devre yoksa  gidiş yolu hakkında kısa bir bilgi yeterli olur.

kesmez

önce kanal noyu yazsın sonra ısıyı yazsın böylece döngü yaparak devam etsin...
arka plandada her ölçümü 5 değişkene kaydet her yeni 5 ölçümüde farklı 5 değişkene kaydet.. farklı olanı displayde göster...daha sonra yeni ölçümleri eski ölçümlere ata.. yeni 5 ölçüm yap................. :arrow:  :arrow:
"İnned dine indallahil İslam" (2-19)

sezgin05

Fakat ben değişken olmadığında sürekli kanallardan birini görmek istiyorum.Sadece değeri değişen kısa bir süre görüntülenecek değişim bittiyse yine bekleme anındaki kanal izlenecek...Teşekkürler..

Logan

Programı hangi dilde yazıyorsun :?:
İmza.

sezgin05

Picbasic Pro da yazmaya çalışıyorum..

yas

Değişkenleri sürekli tara sadece değişiklik olan değişkeni display'e yazdır.
Kolay gelsin.

birumher

Yukarıda denildiği gibi 5 adet değişkene alıyorsun ADC sonuçlarını. Bir adet değişkende de hangi kanalı sürekli gösterdiğini yazıyorsun. Değişim olunca o kanalı gösterip tekrar sürekli olarak gösterdiğin kanala geçiyorsun.
Birkan.Herguner

sezgin05

İlginize teşekkürler...Herhangi bir kanalda değişiklik olduğunda bunu programa nasıl algılatabilirim?Kanala ait bir değişkenin değerini başka bir değişkene daha taşıyıp ikisi arasında  "eğer eşit değilse" diye bir  komut iş görürmü?

.
.
.
ADCIN.0=D1
D1=D2
.
.
IF D1<>D2 THEN KANAL_0
.
.

Veli B.

Evet kısmen doğru.
Dikkat etmen gereken nokta değişkene değer aktarımını karşılaştırmayı yaptıktan sonra aktarman.Aksini bir düşün! Sürekli iki değişken içeriği aynı çıkacaktır ve seni sonuca götürmez.
AN0=5 olsun
x=0 olsun
örnekle ve ilk başlangıç değerin için 0 verdiğin değişken içeriği ile karşılaştır.

.
.
.
.
ORNEKLE_1:
       IF ADRESL<>X THEN 
            X=ADRESL
            GOTO GÖSTER
       ELSE
            GOTO ORNEKLE_2
       ENDIF
ORNEKLE_2:
.
.
.
.
END


gibi... ;)

Veli B.

Bir de şu konu üzerinde bir düşün.Sen birinci kanaldaki değişikliği algıladın ve ekrana yansıttın ama ekran  gösterim anında diğer 2 kanalın (mesela 4. 5.kanallar) değerlerinde de değişim oldu.Ne yapacaksın? :D

birumher

Alıntı yapılan: "katana"Bir de şu konu üzerinde bir düşün.Sen birinci kanaldaki değişikliği algıladın ve ekrana yansıttın ama ekran  gösterim anında diğer 2 kanalın (mesela 4. 5.kanallar) değerlerinde de değişim oldu.Ne yapacaksın? :D

Bunu da dilediğin uzunlukta FIFO (First In First Out ilk giren ilk çıkar )benzeri bir sistem kurarak yapabilirsin.
5 bytelık örneği veriyorum...
1- 5 byte lık bir array tanımlayacaksın.
2- Bütün değerler 0 olacak
3- Bir kanal değiştiğinde 0 olmayan ilk dizi elemanına o kanalın numarasını eşitliyorsun.
4- Her 5 saniyede bir ilk elemanın kanalını gösteriyorsun ve ilk elemanı silip diğerlerini bu tarafa (sola) doğru kaydırıyorsun.
5- ilk eleman sıfırsa sabit göstereceğin kanalı gösteriyorsun...

Anlaşılması zor olabilir anlamadığın yerleri yazarsan ayrıntıya girebiliriz...
Birkan.Herguner

bmutlu

İşlemlerini şöyle yap:
Kanallara ait bir bit gözlerin olsun .Kanallardan hangi değer farklı ise ona ait biti set et eşit ise yapma .
Displey ederken de bu bitlere bak ve displey et displey etme islemi bitince de bu ADC ye ait biti sil ve bunu bir dongü seklinde yap.
Böylece sen bir kanalı displey ederken diğer ADC lerden okunan değişimleri kacırmamış olursun.Kacirmanin bir miktar onüne geçmiş olursun...

birumher

Alıntı yapılan: "bmutlu"İşlemlerini şöyle yap:
Kanallara ait bir bit gözlerin olsun .Kanallardan hangi değer farklı ise ona ait biti set et eşit ise yapma .
Displey ederken de bu bitlere bak ve displey et displey etme islemi bitince de bu ADC ye ait biti sil ve bunu bir dongü seklinde yap.
Böylece sen bir kanalı displey ederken diğer ADC lerden okunan değişimleri kacırmamış olursun.Kacirmanin bir miktar onüne geçmiş olursun...

Bu da güzel bir yöntem ama böyle yaparsan ilk değişeni ilk gösteremezsin. Ne zaman değişim olursa olsun o kanal sırası geldiğinde gözükecektir...
Birkan.Herguner

sezgin05

Arkadaşlar aynı anda iki kanalda değişim söz konusu değil.Çünkü ben pot ile bu kanalarda manuel ayarlama yapacağım. Fakat fikirleriniz çok güzel teşekkürler.

bmutlu

Bu da güzel bir yöntem ama böyle yaparsan ilk değişeni ilk gösteremezsin. Ne zaman değişim olursa olsun o kanal sırası geldiğinde gözükecektir...[/quote]

Programi biraz değiştirelim bitler e artı olarak oncelik verirsen bu problemi halletmiş olursun.  ;)