Pid kullanarak Sin Cos hesaplamak integer

Başlatan devrecii, 21 Ocak 2024, 16:58:48

devrecii

Sinuse bezetme değil tam doğru değeri hesaplıyor,  burada sahip olunan hız ve gitmek istenen yer var buna pid uygulanıyor , mcu için daire çizdirmede, mator kontorlunde vs sinus lazım oludğunda kullanılbir.  int yerine short byte de kunnalılabilir bölme işlemi yerine shift işlemi de olur.

Kod bu  :D

   
Konum+=Hiz;  Hiz-=Konum/1000; 
 



indir

ex_machina

Hocam ben bunu tam anlayamadım.

Şimdi, sin() fonksiyonu çok fazla zaman ve bellek harcıyor. Bunun yerine sizin kodu kullanırsak hem çok daha hızlı hem de yeterince hassas bir şekilde herhangi açının sinüs değerini elde edebilecek miyiz?

devrecii

#2
Sıralı gitmek zorunda , direkt değer bulma konusunda daha sonra uğraşacağım çünkü fpga içine ekleyeceğim,  asal sayılarla ve pi sayısı ile ilgili ilginç şeyler çıkıyor.

Hiz denen değişkende sinus değeri, konum değişkeni içinde cosinus oluşuyor , yazmayı unutmuşum ,

Bu sin cos kullanarak ekrana çok basit şekilde daire çizdirebilirsiniz kod bu

  int Hiz=0,Konum=0x8000000;

   for(döngü)
   {
    Konum+=Hiz;  Hiz-=Konum>>12;
    PutPixel((Konum>>20)+Xyer,(Hiz>>14) + Yyer);
   }




<<İNDİR>>



JOKERAS

devrecii, eskiden Led Matris panoya dönen Hipnoz çemberi
yapmak için uğraşmıştım.

Bayağı tırmalamıştım,ama bu kadar basit değildi.
Matematik bilmediğim için bir sürü uğraşmıştım.
Hasan idi Hızır idi,Hasan idi Hızır idi derken Pi sayısı,Sin ve Cos fonksiyonlarıyla
oraya bak buraya bak araştır ite kaka yapmıştım diye hatırlıyorum.
Bayağı incik boncuğu olan bir fonksiyondu.Gerçi Hipnoz çemberini yapamamıştım.
Ortadan büyüyerek açılan bir daireydi.

Şimdi senin bu yöntemini anlamaya çalışıyorum.Aslında senin anlatman lazım.

Sen burada İşaretli bir değişken kullanarak Pozitif ve Negatif işareti Sinusun
Pik noktaları olarak kabul ettin.
Mantığın PI yapısına benziyor.PI yapısının çıktısının ilk salınımı Sinuse benzer.
Sanırım bu mantıkla bunu düşündün.
Bunu hız ve konum değişkenlerinin değerlerini birbirine yükleyerek aslında P ve I'li kendi değerleri ile kontrol sağlamışsın.
Burada ilk hareketi verdikten sonra Döngü ile artan veya azalan değerler dönme hareketini sağlıyor.Doğrumu anlıyorum?

İlk hareket 0x8000000;
Buraya 1 tane daha sıfır ekler veya eksiltirsek Sinusun Genliğinin artması veya azalması gerekir
Diye düşünüyorum.









devrecii

Bu int değer için küçük değerleri hesaplayabilmemiz için bir nevi int ile kayar nokta işlemi yapmış oluyoruz,  eğer float kullansaydık 1.0  kullanacaktık  çünkü sin cos 1.0 -1.0 aralığı veriyor.

Diğer yazdıkların evet doğru.

Mesela sayımız 1 e doğru gidiyor ve bir hızı var tam 1 de durmasını istiyoruz,tam olarak pid ile alakası yok  ama,  pid i sadeleştirirsen bu formul ortaya çıkar.

JOKERAS

Valla devrecii, ne diyeyim süpersin.Bunu düşünmek mantığı kurmak bile başlı başına iş.
Senin Matematikte bizim Dünyaca Ünsüz bir prof vardı, ondan aşağı kalır yanı yok.
Bu mantıkla, işlemleri genişleterek Bitsel işlem yaparak bu sinyali istediğin gibi
yamultabilirsin,istediğin şekle sokabilir grafik çizebilirsin sanırım.

Aklıma bir sürü Cinlik getirdin.