Tek satır kodla sinus hesaplama integer.

Tek satır diye indirdim dosyayı hiç'de tek satır değil.

Galiba pythonu kıskanıyorsunuz :D
 
@ex_machina

O kod optimize edilerek tek saykila indirgenebilir derken ne demek istedin anlamadim.
Aslında, o kod optimize edilerek tek saykıla indirgenebilir demedim. Teorik olarak bu şekilde yapmak mümkündür dedim.

Tek satır diye indirdim dosyayı hiç'de tek satır değil.

Galiba pythonu kıskanıyorsunuz :D
Tek satır değil hocam, tek saykıl dedim ya @Mikro Step onu soruyor.

Şimdi bunu da şöyle bir örnek üzerinden anlatayım:

Untitled.png


Sene 2025. @devreci tarafından yayınlanan "Fast Sine Calculation Based on Hiperoptik Vasküler dondurucu Algorithm" makalesi tüm dünyada büyük sükse yapmıştır. Bunu gören Texas Instruments müdürü Mr. Sundar(Hans, Johny, Tony yok, bunların devri bitti) ve onun yardımdıcısı Mr. Sankiyata(Hintli Sundar'ın köylüsü) @devreci ile anlaşırlar ve yeni çıkan "cCc 2000 Picolo" serisi MCU'lara "HVD sine accelator" adında bir modül ve bu modüle uygun komut seti eklerler. Böylece devrecinin sinüs hesaplama algoritması donanımsal olarak tek saykıla indirgenmiştir.

Bunun haricinde özel donanım olmasa bile, O(1) düzeyindeki bir algoritymayı birkaç yazılımsal trick ile, tek saykıl olmasa bile bayağı bir optimize etmek mümkündür.
 
Tek satır diye indirdim dosyayı hiç'de tek satır değil.

Galiba pythonu kıskanıyorsunuz :D

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

Konu başlığı bu kod üzerine açıldı , sen ne zaman c öğreniyorsun tartışalım biraz senle. c++ değil c öğren.

Şimdi bir kez daha baktığımda gerçekten pid algoritması konum = integrator (i) , hiz = türev (d), zaten cos türevi sin dir konum = cos hiz= sin
 
@ex_machina cevaplar için teşekkürler , konu aslında oturalım da sin cos hesaplayalım üzerine değil , spontane gelişti , aslında güç kaynağı yapıyordum oradan konu buraya geldi. Dediğin gibi test yapalım , zaten fpga üzerinde gerçekleştireceğim, daha bu konu çok uzar.

Ayrıca bugün tek cyclede sincos hesabı yapan kodu yazayım , kodda çok çarpma işlemi vardı, burada konu edilen daha hızlı olabilir test edebiliriz.

O hayaller çok güzel ve uzak , ülkemiz için bu hayalleri kursak, tübitak vs ilgiliyormuş türkiyede çip üretiliyormuş bunun içine bu kodlar ekleniyormuş ....:cheeky3::cheeky3: hayalini kurmak bile imkansız, ülkemizde böyle güzel şeyler olmaz , Yüksek teknoloji içeren ne varsa yurtdışından alınır türk yapımı diye millete kakalanır.
 
@devreci

senin tek cycle dediginle neden bahsettigin anlasilmiyor.

Tek cycle ile MCU'da

y=a1*b1>>c1 + a2*b2>>c2 + a3*b3>c3 .... tarzi bir islemden bahsetmiyorsundur umarim.

Sin fonksiyonunun hesaplanmasi icin teknikler belli.

Ya cordic, ya taylor ya da lookup

Sen bunlardan baska bir teknik gelistirdiysen matematik anlamda da odul alabilirsin.

Yalniz hipotenuz hesabiyla yaptigin iterasyon, cordicin yakin bir turevi bilesin. Tablodan ara degerleri okumak yerine yakinsama yaparak sonuca ulasiyorsun.
 
Hocam galiba cordici de tam anlamadın , eğer elimizde sin(1) cos (1) derecelik değerleri varsa bunula bir matrix oluştururuz hergangi (x,y) vectorünü rotate ederek istediğimiz değeri bulabiliriz. sin(0.01) , sin(0.001).... değerleri varsa .... daha ayrıntısı..

Matrix rotation yapıyor kısacası , benim kodla gerçekten hiç ilgisi yok, fakat aklıma söyle bişey geldi ekran kartlarının asm kod takımında asin acos atan pow hepsi var burada ne kullanıldığını bilmiyoruz.
 
sincos:
   Konum+=Hiz;  Hiz-=Konum/1000;

Konu başlığı bu kod üzerine açıldı , sen ne zaman c öğreniyorsun tartışalım biraz senle. c++ değil c öğren.

Şimdi bir kez daha baktığımda gerçekten pid algoritması konum = integrator (i) , hiz = türev (d), zaten cos türevi sin dir konum = cos hiz= sin
Herkes herşeyi bilemez .. C yada cpp öğrenmeyi düşünmüyorum.
%100 PYTHON
 
İnad ettin sen de , yanımda olsan o telefonunu iki parçaya bölerdim.
 
Sen ordan benim ne bilip bilmedigimi anlayamazsiniz. Takilmis plak gibi anlayamadin anlayamadin ne bu yahu.

Sana cordicin de taylorun da kitabini yazayim.

Senin algoritmanin cordic olmadigini ama cordic turevi oldugunu yazdim. Cordicten farki ara degerleri tablodan degil yaklasim yaparak hipotenus (h^2=sin^2 + cos^) den duzelte duzelte yaklastigini ustu kapali olarak soyledim. Ama ustu acik olarak yukaridaki mesajlarda defalarca yazdim ama anlamayan varsa o da sensin gibi gorunuyor.

Simdi kodu PC de kosturmayi falan bosver.

Iddiali oldugun Sin(x) fonksiyonunu 72 Mhzde kosan STM32F103C8 de Q32 formatinda 0 dan 90 dereceye kadar 0.01 derece artimlarla hesaplat. Bu islem icin gereken sureyi ver. Sana elindeki algoritmanin para edip etmeyecegini soyleyeyim.
 
Son düzenleme:
Haklısın pardon beni ikinci bir fxdev vakası olarak görebilirsin :moruk1:. Harbi nerde o ya , sen neredeysen o oradadır, ama bu sitede yok ilginç.

Para filan kazanılmaz belki 30 sene önceydi , en fazla cv konulur yada makale yazılır.
 
Son düzenleme:
cordic:
void cordic(long theta, long *s, long *c, int n) {
  long d, tx, ty, tz;
  long x = cordic_1K, y = 0, z = theta;
  n = (n > CORDIC_NTAB) ? CORDIC_NTAB : n;

  for (int k = 0; k < n; ++k) {
    d = z >= 0 ? 0 : -1;
    tx = x - (((y >> k) ^ d) - d);
    ty = y + (((x >> k) ^ d) - d);
    tz = z - ((cordic_ctab[k] ^ d) - d);
    x = tx;
    y = ty;
    z = tz;
  }

  *c = x;
  *s = y;
}


Cordic ile ilgili böyle bir kod buldum internette , çarpma hiç birşey yok , shift ve xor yapmış ?
 
Bahsettigim kodu yazman fazla zamanini almaz.

STM32F13C8 icin yaz bir gorelim 90/0.01 yani 9000 tane sinus degeri hesaplatacaksin.

Dur anmadan once degnegimi alayim.
 
Eğer yukarıdaki kod gerçekten çalışıyorsa iş sıkıntıya girdi , çünkü kod muazzam küçük, belki benim kodda da bir optimizasyon yapılabilir bakacağım . Güç kaynağı ile uğraşıyorum ev battı hemen bitirmek istiyorum , yazacam hocam söz , kısa süreli bi iş değil iş sıkıntıya girdi.

Bir de aklıma para kazandıracak hem de teknik açıdan üstün bir proje geldi, konuşmaları yazıya çaviren ve stm32 içinde çalışabilen konuşma tanımlama parogramı , ikincisi ise konuşma sentezleyen ama heceden değil , böyle bişey yapsak para kazandırır değil mi , hemde yapay zeka işine ufaktan girmiş oluruz , ayrıca tatmin edici.
 
xor mantigindaki amac, z degeri pozitif ise cikart negatif ise topla yap demenin hizli yontemi icin.
(Pozitif deger ise cikart, negatif deger ise invert et 1 ekleyerek pozitife cevir oyle cikart demenin kisa yolu

Bu isi if ile yaparsan goto isin icine girecegi icin pipeline crash olacagindan hiz kaybi yasarsin.
Topla kaydir meselesine gelince tan hesabi icin

Modifiye ettigimi soyledigim kodda sin coslu ifadeleri tanjanta cevirirsen verdigin algoritmaya ulasirsin.

Yalniz cos degerini hesaplamak icin en son hesaplanan sonucu duzeltme faktoru ile carpma yapman gerekiyor.

Cordic ile Tan hesabi yaparken topla kaydir dan baska bir sey olmaz zaten.
 
Bu kodun doğru sonuç verdiğini zannetmiyorum doğru olsa bile iterasyon sayısı çok fazladır yada hata çok fazladır.

Başıma gelen bi olayı yazayın konuyla ilgisiz , güç kaynağı yapıyordum stlink usb ye bağlı , 220v girişta lamba var.

Foruma cevap yazmak için odadan çıktım , 220v fiş takılı ama 12v power adaptörünü fişten çektim , bu yeterli olur zanettim çıkışta hiç yük yok.

Fakat bişey ilgimi çekti çıkıştaki 10v 1.2v volta düştü içimden 3.3v usb den gelen voltaj oradan 12v bölgesine sızıyor gdt bobinlerini çalıştıyor tamam nasıl olsa gate 3v gibi bir voltajla sürülecek sorun yok.

Çıkışta yük yok , sabhtan belli birsürü test yaptım devrede sorun yok.

Odaya bi geldim 220v lamba yanıyor :katil2: mosfet yanmış.

Kısacası mosfeti 10v altında sürerseniz mosfet patlıyor isterse hiç yük olmasın.

Vay be bu power supply ne kadar çok şey öğretti...
 
[math]sin(x)=x - \frac{x^3}{6} +\frac{x^5}{120}-\frac{x^7}{5040}+\frac{x^9}{362880}[/math]
x yerine 0..pi/2 degerler vermen gerekir.

Bu islemi hizlandir.
 
Evet cordic de kodu baya küçültmüşler niye başta söylemedin , ama benim kod bundan büyük değil, benim kodu da uğraşsak belki çok küçülecek, ayrıca acos asin hesabı da var unutma . Ayırca mantığı bana ait.

Neyse o zaman yayınlıyım kodu , bir de iterasyonsuz var onu da yayınlıyım.
 
Sen STM deneyini bir yap. Sonuclari bir gorelim.

Her ne kadar cok merak ediyorsam da bosu bosuna public etme hemen. Bakarsin gercekten de para eden bir calisma yapmissindir.
 
Hiz denen değişkende sinus değeri, konum değişkeni içinde cosinus oluşuyor , yazmayı unutmuşum ,

Sadece bu kodla ekrana daire çizdirmek mümkün , bunu ben icad ettim vay be

daire:
  int Hiz=0,Konum=0x8000000;

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



29442 eklentisine bak
@devreci Zip klasöründe virüs algılıyor PC. İndirmeye izin vermiyor.
 

Çevrimiçi personel

Forum istatistikleri

Konular
6,950
Mesajlar
118,721
Üyeler
2,822
Son üye
lalemasall

Son kaynaklar

Son profil mesajları

hakan8470 wrote on Dede's profile.
1717172721760.png
Dedecim bu gul mu karanfil mi? Gerci ne farkeder onu da anlamam. Gerci bunun anlamini da bilmem :gulus2:
Lyewor_ wrote on hakan8470's profile.
Takip edilmeye başlanmışım :D ❤️
Merhaba elektronik tutsakları...
Lyewor_ wrote on taydin's profile.
Merhabalar. Elektrik laboratuvarınız varsa bunun hakkında bir konunuz var mı acaba? Sizin laboratuvarınızı merak ettim de :)
Lyewor_ wrote on taydin's profile.
Merhabalar forumda yeniyim! Bir sorum olacaktı lcr meterler hakkında. Hem bobini ölçen hemde bobin direnci ölçen bir lcr meter var mı acaba?
Back
Top