16F876 2 sensör yardım.

Başlatan ersangundogdu, 24 Ağustos 2019, 16:48:25

ersangundogdu

Değerli üstadlar; basit bir devre kurmak istedim ama 2. sensörü ölçmeyi başaramadım. Çizim ve yazılım ektedir. 1. sorunum 2.sensörü ölçemiyorum. 2. sorunum similasyonda işlemci %88 kapasite ile çalışıyor.
Bu nasıl olur? Similasyonu çalıştırdığımda bilgisayar fanı tam güce çıkıyor ve similasyon yavaşlıyor.
Bu kadar basit bir similasyonda bu normal midir? 2.Sensörü nasıl ölçebilirim? Yardım ederseniz sevinirim. Kolay gelsin...

Hattuşa

hocam kullandığınız sensör tek yollu haberleşme yapan bir sensör, tek yönlü haberleşmelerde genellikle o pin hem giriş hem çıkış olarak kullanır mcu, siz sesnöroku etiketini 2 tane yapıpta ayrı ayrı okuma yaptırsanız daha sağlıklı olur kanaatindeyim

ete

Program da hatalı zaten. Bu program anında stack taşması yaratır. Sebebi basit.
Basla satırından sonra GOSUB SENSOROKU komutu ile SENSOROKU etketiine gidiliyor. Oradan RETURN ile dönülüyor. Ama ardından hemen tekrar SENSOROKU etiketi geliyor ve program otomatikman bu etiketi tekrardan işliyor. Etiketin sonunda ise RETURN var ama program oraya GOSUB ile (ikinci defada) gelmediği için stack dan bir dönüş etiketi almaya çalışıyor ve o anda orada ne varsa alıyor ama alakasız bir şey alması mümkün ve program kilitleniyor.

Genel kural şu GOSUB ile gidilen yerden RETURN ile dönülür. RETURN ile dönülecek bir etikete doğrudan yada GOTO ile gidilmez çünki orada RETURN vardır ve program return komutunu görünce hemen stackdan dönüş adresini almaya çalışır.

Sonuç olarak bu program çalışmaz.
Diyelimki bu hataları düzelttin. İki sensörün var ama 1 tane okuma programın var ve ancak 1 sensör okuyabilirsin. İkinci sensör içinde benzer kodları yazman gerekir.

Ersan, biraz kestirmeden ve kopyala yapıştır yöntemi ile program yazmaya kalkışıyorsun. Dersler var orada biraz çalışırsan öğrenirsin. Adımları atlamadan öğrenmeye çalış bence.

Ete

ersangundogdu

#3
Hocam yazılım bilgim kısıtlı olduğu için kopy paste yoluna baş vuruyorum. Tüm derslerinizi defalarca
inceledim. Son çare olarak yardım talep ettim. Yardıma lhtiyacım var. Sizin sayenizde bu duruma gelebildim.
Size olan minnetimin haddi hesabı yok. Bu da benim kapasitem malesef. Yardım edeseniz minnettar kalrım.

MB_77

#4
bu mesaj tarafımdan silinmiştir.

ersangundogdu

MB_77 günlerdir uğraşıyorum ama başaramadım. Kapasitem yeterli olmuyor. Yapamadım.
O yüzden yardım istiyorum.

MB_77

#6
bu mesaj tarafımdan silinmiştir.

ersangundogdu

ETE hocam yazdıklarınızı tekrar tekrar okudum ama anlayamadım. Yazılımda goto yok. Linkteki yazılımı inceleyebilir misiniz? Aynısı çünkü.
https://etepic.com/index.php/topic,3902.msg40053.html#msg40053

ete

Aynısı diyorsun ama değil maalesef.Buradaki programa bir bakalım istersen;
Basla:
    gosub sensoroku
SENSOROKU:
---
---
RETURN
Basic programları otomatik satır takip eder.
Program önce BASLA etiketinden başlar. O etiketde işlenecek bir komut olmadığı için otomatikman altındaki satıra gelir.
GOSUB SENSOROKU komutunu görür ve SENSOROKU etiketine atlar. BU atlamada önce ayrıldığı satır yada yerin adresini (program hafıza adresi) STACK içine yerleştirir ve etikete gider. Ancak Gosub komutunun gereği şartlı atlar. O gittiği yerde RETURN komutunu görünceye kadar komut satırlarını işler ve RETURN komutunu görürgörmez STACK dan o yazdığı adresi geri alır ve o adresin bir sonrasına döner yani geldiği yere ve bir sonraki komuta yada satıra döner.
Senin programda bir sonraki satırda SENSOROKU etiketi yer alıyor ve program otomatikman bu etiket altındaki satırları işlemeye başlar (ikinci defa) sonunda RETURN komutuna gelir ve dönüş adresi arar. Çünki oraya Gosub ile gelmemiştir ve Stack'a bir adres kaydı yapılmamıştır.
Peki doğrusu nasıl olmalı. Mademki iki adet sensör okunacak sistem şöyle olmalı;

BASLA:
GOSUB SENSOROKU_1
GOSUB SENSOROKU_2
GOSUB EKRAN
GOTO BASLA
SENSOROKU_1:
....
...
RETURN

SENSOROKU_2
...
...
RETURN

EKRAN:
LCDOUT $FE,$80,"Sensor-1: ",DEC2 ISI1
LCDOUT $FE,$C0,"SENSOR-2: ",DEC2 ISI2
Görüldüğü üzere GOSUB kullanarak programı önce 1. sensör okumaya gönderiyoruz. Oradan Return görüp dönüyor ve hemen İkinci sensör okumaya yine Gosub ile gönderiyoruz.
Oradan da RETURN ile dönüyor ve altta GOSUB EKRAN satırını görüp okuduklarını ekrana yazıyor ve oradanda RETURN ile geri dönüyor ve altında yer alan GOTO BASLA komutunu gördüğü için en başa dönüp yaptığı işleri tekrarlıyor ve programda böylece hatasız çalışmış oluyor.
İşte böyle umarım işin püf noktasını kavrayabilmişsindir.
Şimdi tekrar o verdiğin linkteki programa bak bakalım aynısımı? değilmi?

Ete


elektro77

#9
Alıntı yapılan: ersangundogdu - 24 Ağustos 2019, 19:33:21Hocam yazılım bilgim kısıtlı olduğu için kopy paste yoluna baş vuruyorum. Tüm derslerinizi defalarca
inceledim. Son çare olarak yardım talep ettim. Yardıma lhtiyacım var. Sizin sayenizde bu duruma gelebildim.
Size olan minnetimin haddi hesabı yok. Bu da benim kapasitem malesef. Yardım edeseniz minnettar kalrım.

sayın ersan yazılarınızda resmen bir zamanlar daki kendimi gördüm. Ben de yazılım konusunda zekamın yetersiz olduğunu düşünüyor yardım isterken buna benzer yazılar yazıyordum . Ne garip rastlantı ki aynen kendimi gördüm.
Fakat zamanla insan uğraşa uğraşa çözüyor meseleyi. Gün geçtikçe yaptıklarınızda yardım isteme oranınız azalıyor ve yardım istediğiniz konularda da birazdaha zorluk derecesi artıyor.
Ancak ben şunuda öğrendim ki:litaretürde ve insan zekasında Matemetik zekası ve duygusal zeka diye iki bölüm var. Aynı zamanda beyinde sağ lob ve sol lob diye 2 kısım var. sol lobu az gelişmiş olanlarda matematik ve mantık zekası az gelişmiş oluyor. Daha az geşlişmiş olmasının sebebi ise bu beyini geliştirecek matematik egzersizlerinin daha az yapılıyor olmasından kaynaklanıyor.Kendinizde sorun arayacaksanız eğer matematiksel işlerlerle çok uğraşmamaktan kaynaklandığını bilin. siz bu işle uğraştıkça egzersiz yapıyor ve gelişiyorsunuz.
Ete hocamı överken kullandığınız üslup ise duygusal zekanızın çok iyi olduğu anlamına geliyor. Bu da başka bir açıdan zekanızın durumunu ıspatlıyor.
Fakat yardım isteme konusunda Mb_77 hocamın dediği gibi daha işin başında olduğunuz için iş bitirmek adına yardım istemeniz biraz kurnazlık ve tembellik.Fakat inanın bu iş bu şekilde çözülüyor. Bundan daha doğru olamaz.
Sadece kitap okumakla doktor olunabilseydi herkes olurdu.

Aşağıdaki linkte bulunan 8 soruluk testi yaparak beyninizin durumunu görebilirsiniz.
https://www.mentalup.net/blog/sag-beyin-sol-beyin-testi
"Eğer bir konuyu öğrenmek istiyorsan o konunun öğretmeni ol; daha iyi öğrenmek istiyorsan o konuda bir kitap yaz; daha da iyi öğrenmek istiyorsan yazdığın kitabi oku"

ete

Ersan,

İlişikte programı ve simulasyonu da veriyorum. Sensör okumada farklı bir yöntem kullandım.
Bu sıcaklık sensörü bir okuma peryodunu 750 ms de tamamlıyor. Süreç okuma emrini verdikten sonra başlıyor ve sonunda 750 ms geçtikten sonra tamamlanıyor.
Bu nedenle bende her iki sensöre ard arda okuma emrini verip tek bir 750 ms lik gecikme koydum.
Ardından tamamlanan sıcaklıkları okuma işlemini yaptırıp Ekrana verdim.

Ete

ersangundogdu

Hocam yine imdadıma yetiştiniz. Allah razı olsun.

ersangundogdu

Hocam sensörleri okumuyor. İsis çizimini de ekledim.

ersangundogdu

Hocam bu gidiş ile siz beni siteden atacaksınız ama hayırlısı...

onurinci

@ ersangundogdu

ete hocam'ın yolladığı dosyanın ekran görüntüsü ek'tedir..

https://s2.dosya.tc/server10/zgd7zh/Ekran_Alintisi.PNG.html

Powered by EzPortal