avatar_ete

Matematik Operatörlerin Kullanımı

Başlatan ete, 25 Aralık 2011, 14:12:28

ete

#30
Bende bu yazdıklarından bir şey anlamadım doğrusu. Ne gerek var bu kadar çok işleme ?
En iyisi sen hesabı direk hesap makinası ike yap ama gerçek hesabı. Buraya koy ona göre yeniden düşünelim. Baştan bir hesap sordun sonra birde ondalık çıkardın. O kadar büyük rakamlarda ondalık etkisi neredeyse sıfıra yakın iken neden gösterme ihtiyacı duyuyorsun bunuda anlamadım.
Ete

pwm3434

yardımlarınız  için  teşekkür  ederim.

Hattuşa

slm ETE hocam bi soru soracağım ama umarım yanlış anlaşılmaz;
bir alt programda peş peşe matematiksel işlemler yapıyorum, 4 işlem yani, çıkarılan değer ve çıkan değerlerde bir anormallik olmamasına rağmen çıkarma işlemini sağlıklı yapamıyorum, gecikme işlemi yapmadığımdan kaynaklı olabilir mi?
hatta hocam sonuc <1 then sonuc =0 dediğim halde word tanımlamasında 65xxx küsür çıkıyor neden bu komut işlevsiz kalıyor? acaba

ete

Alıntı Yaphatta hocam sonuc <1 then sonuc =0 dediğim halde word tanımlamasında 65xxx küsür çıkıyor
Bu cümleye dikkat etmenizi öneriyorum. Dilimde tüy bitti soruyu sorarken ilgili kodu yada kod parçasını buraya koyun diye ama ısrarla sanki devrlet sırrı imiş gibi koymamakta ısrar ediyorsunuz.
Sonucun 65535 veya biraz daha küçük bir değerde çıkması bu if satırının çalışamadığını gösteriyor.
Bir word cinsi sayının 1 den küçük olma hali nedir? elbette sayının sıfır olmasıdır. Başka alternatif yok ki. Sayı sıfır ise 1 den küçüktür. Diyelimki elinizde 7 sayısı var ve sayıdan sürekli 3 çıkartıyorsun.
7-3=4   IF SAYI<1 THEN SAYI=0 komut şartı çalışmayacaktır.
4-3=1  IF SAYI<1 THEN SAYI=0 komut şartı çalışmayacaktır.
1-3=65534  elde edilecektir yine senin satır çalışmayacaktır. Buna benzer bir durum meydana geliyor olmasın?
Peki kod parçasını vermezsen ben nereden anlayacağım ne hesap yaptığını?
Bundan sonra böyle sorulara cevap da vermeyeceğim artık.
Ete

Hattuşa

Alıntı yapılan: ete - 08 Nisan 2013, 22:43:37
Bu cümleye dikkat etmenizi öneriyorum. Dilimde tüy bitti soruyu sorarken ilgili kodu yada kod parçasını buraya koyun diye ama ısrarla sanki devrlet sırrı imiş gibi koymamakta ısrar ediyorsunuz.
Sonucun 65535 veya biraz daha küçük bir değerde çıkması bu if satırının çalışamadığını gösteriyor.
Bir word cinsi sayının 1 den küçük olma hali nedir? elbette sayının sıfır olmasıdır. Başka alternatif yok ki. Sayı sıfır ise 1 den küçüktür. Diyelimki elinizde 7 sayısı var ve sayıdan sürekli 3 çıkartıyorsun.
7-3=4   IF SAYI<1 THEN SAYI=0 komut şartı çalışmayacaktır.
4-3=1  IF SAYI<1 THEN SAYI=0 komut şartı çalışmayacaktır.
1-3=65534  elde edilecektir yine senin satır çalışmayacaktır. Buna benzer bir durum meydana geliyor olmasın?
Peki kod parçasını vermezsen ben nereden anlayacağım ne hesap yaptığını?
Bundan sonra böyle sorulara cevap da vermeyeceğim artık.
Ete


ete hocam farkında olmadan sanırım hata yaptım, pardon özür dilerim, yazdığım kodun inan devlet sırrı veya başka bir özelliği yok, ilk fırsatta kodu paylaşacağım ve bundan sonraki yardım taleplerimde kesinlikle paylaşmayı unutmamaya çalışacağım.
bu arada hatamı farkettim
sizin 1-3 =65534 örneği gibi olmuş, ekrana print ettiğim zaman farkettim, yalnız hocam, şu çıkarma işleminde veya diğer matematiksel işlemlerde
değerimin 0'ın altında veya 655xx değerleri görmemek için nasıl bir komut kullanmalıyız hocam?
yani 1-3 =0 yapmak için bir çare yokmudur.
;D   ;D    ;D

ete

IF SAYI>60000 then sayı=0 dersin olur biter.
Ete

Hattuşa

Alıntı yapılan: ete - 08 Nisan 2013, 23:12:57
IF SAYI>60000 then sayı=0 dersin olur biter.
Ete

hocam 2 gündür araştırıp duruyorum , yazınızı da yeni farkettim, sizin bu cevabınızdan şunu anladım,
yaptığım matematiksel işlemde çıkarma işlemi adc değerleri arası çıkarma işlemi olduğuna göre;

sayı =3-5
if sayı >1024 then sayı =0
dersek word tipinde 655xx rakamını görmeyiz değil mi?

hocam kusura bakmayın, bazen insan basit sorularda boğulup kalıyor, şuan için benim yaşadığımda bu sanırım

ete

Sayıların limitlerini düşünerek bir if satırı oluşturmak gerekir.
Şu anda bu soruyu bana soruyorsun ama elimde hiç bir bilgi yok. Brn neye göre evet yada hayır diyeyim? Bu nedenle kararı kendin ver. Sana genel prensibi söyledim. Küçük sayıdan büyük sayıyı çıkartınca ( birer birer çıkardığını düşünürsen) sayı sıfır oluncaya kadar çıkarma devam eder. Hala çıkaracak sayı varsa bu sefer kalan artık 65535 den çıkartılır. Gerisine sen karar ver.
Ete

Hattuşa

slm ete hocam;
yazdığım algoritmayı eklememe nedenim özel bir çalışma olduğundan değil, yaptığım çalışma şu şekilde;
RB0 dan yakaladığım harici bir pulsenin (ki bu pulsenin yükselen kenarı kare dalga 90 derece dik, düşen kenarı ise sinüs gibi eğri) ben düşen kenarı üzerinden adc okutuyorum ve okutma işleminden sonra bir önceki değerden çıkarma yapıyorum, ilk değer düşük ise sonucun 0 olmasını yüksek ise farklı işlemler yapacağımdan dolayı bunun üzerinde bu kadar duruyorum

ete

O işin kolayı şudur.
ILK = İlk okunan ADC değerin olsun.
SONRA= Okunan ikinci ADC olsun.
SONUC=ILK - SONRA yapıyorsun her zaman. O halde ,
IF SONUC.14=1 then SONUC=~SONUC dersin.
BUnların açıklaması şöyle, Şayet ILK>SONRA ise hiç bir zaman Bit.14 HIGH olmaz. Ne zaman olur ancak SONRA>ILK ise Bit.14 HIGH olur. O halde Bit.14 High ise sayı doğru tabir ile negatif çıkması gerekir. Bu durumda o sayının tersini alırsak işlem doğru çıkmış olur. Bunu bir örnekle açıklayalım istersen.
ILK=780 olsun
SONRA=860 olsun
SONUC=780-860=65455 çıkacaktır. Bunu binary olarak yazarsak %1111111110101111 , gördüğün gibi bit 14 "1" dir.
O halde SONUC=~SONUC yaparsak , SONUC=80 çıkar.
Ete


elektro77

if gelenbilgi=gidenbilgi then
gosub falan
else
gosub hata
endif

Anladiginiz uzere yukaridaki sorgulamada programa, bilgiler esit se falana degilse hata etiketine git gidiyor.

Bunu matematikte kullandigimiz esitdegilse isareti gibi bir isaret kullanarak
sadece
If gelenbilgi=/gidenbilgi then
gosub hata seklinde yapabilecegimiz bir yol varmi. Cunku ben falan etiketine gitmesini degil sadece hata ekranina gitmesini istiyorum.
"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"

MC_Skywalker

#41
Eşit değilse operatörünü denermisin  "!=" işini görecektir.

elektro77

Alıntı yapılan: MC_Skywalker - 12 Eylül 2019, 10:03:17Eşit değilse operatörünü denermisin  "!=" işini görecektir.
çalıştı.Çok teşekkür ederim.
"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"

cemilsivas

S. A. Arkadaşlar. Bayağı süredir foruma uğramıyordum. Vallah özlemişim sizleri.😀
Neyse arkadaşlar 16f628a ile mlx90614'ten ısı değeri okumaya çalışıyorum.
Mlx 16bit veri gönderiyor. Benim bu değeri  hangi işlemlerden geçirmem gerekiyor?

Datasheet'e göre 0.02 hassasiyetle ölçüm yapıyor. Bu veriyi 0.02 ile çarpıp sonucu 273.15 ile çıkarmam gerekiyor.

Ben şöyle bir çözüm buldum ama daha pratik  ve çok yer kaplamadan nasıl yapabilirim?
Önce word değişken tanımladım. Ardından lowbyte ve highbyte'ı sensörden çektim. Değişkeni 2 ile çarptım. Sonucu 27315'den çıkardım. Ardından çıkan 4 haneli sayıyı digitlerini tek tek alıp yazdırdım. Ama word değerleri çok yer kaplıyor diye biliyorum. Daha iyi öerilerinizi bekliyorum.

ete

#44
Sensörden okunan değer SICAKLIK.LowByte,SICAKLIK.HighByte şeklinde 16 bit ama 2 byte şeklinde okunuyor.Yani elimizde okunan bir SICAKLIK değeri var ve 16 bitlik bir değer diyelimki $3AD2 diye bir değer okuduk. Bu, desimal olarak 15.058 değerine eşittir.
Formülümüz KELVIN=(OKUNAN x 0,02) ve sonrasında SANTIGRAD=KELVIN-273,15 şeklinde .Bu formülleri okunan değere uygulalım,
Öncelikle 0,02 değerini basic de kullanamayacağımız için onu 100 ile çarparak 2 değerini elde ederiz. KELVIN=SICAKLIK x 2  Böylece ilk formülü uyguladık ama sonucuda 100 ile çarpış olduk.
İşlem eşitliği açısından 273,15 değerinide 100 ile çarpıyoruz ve 27315 değerini elde ediyoruz.
Sonra,
SANTIGRAD= (KELVIN-27315)/100 dediğimiz zaman net sıcaklığı santigrad değeri üzerinden hesaplamış olacağız. Ama önerim şu olur. SANTIGRAD=(KELVIN-27315)/10 şeklinde yaparsan birde ondalık hane elde edersin. Zira gerçek sıcaklık SANTIGRAD/10 dur ondalık hane ise SANTIGRAD//10 sonucunda elde edilir.
İlk okuma örneğini hesaplayacak olursak,
KELVIN=15.058 x 2 =30116
Santigrad=30116-27315=2801
Burada çıkan sonucu 100 e bölersek direk 28 dereceyi bulursun
Ama 10 a blersek 280 bulacaksın. Tam sayı kısmı için 280/10 ve ondalık kısmı için 280//10 işlemini yaparsın olur biter. Böylece sonuç 28,0 derece olarak bulunur. Burada ondalık sıfır çıkıyor ama bir başka sonuçta mutlaka ondalık değer sıfırdan farklı çıkacaktır.

Ete

Powered by EzPortal