Jump to content

Liderlik Tablosu

Popüler İçerik

Showing content with the highest reputation since 09/27/2020 tüm alanlarda

  1. "Kabaca" evet. Ama aslında bu yöntem, tam olarak "son yüz tanenin ortalaması" sayılmaz. Sondakilerin ağırlığı daha fazla, eskilerin ağırlığı daha azdır. Ancak çok zaman bu, son yüz tanenin ortalamasından daha işe yarar sonuç verir. Sonuca bakıp bu değerleri değiştirebiliriz. Şuna çok dikkat: iki katsayının toplamı 1 olmalı. Burada hataya düşmemek için ben genellikle: p1=0.99 p2=1-p1 gibi yazarım ve sadece p1'i değiştiririm. Son 10 tanesi için 0,9 bve 0,1 son 100 tanesi için 0,99 ve 0,01 son 1000 tanesi için 0,999 ve 0,001 gibi düşünebiliriz. Ancak tekrar ediyorum, 0,99/0,01 ile bu algoritmayı uygulamak ile son 100 tanesinin ortalamasını almak "benzer" sonuçlar verse de, tam olarak bu değil.
    2 points
  2. "False" olduğu belirtilmek istenen gereken yere 0 yazabiliriz. Peki "True" olduğu belirtilmek istenen yere? Çoğu zaman bunun cevabını "1" olarak aldığım için bu makaleyi yazma ihtiyacı hissettim. Bir "Integer" hangi aralıkta değerler alır? -32768 ile + 32767 arasında. Peki bir "Signed Byte" hangi aralıkta değerler alır? -128 ile + 127 arasında. Yani "0", pozitif kısımdan sayılır. Peki, "False" ve "True" değerlerini verdiğimiz değişken tipi nedir? "Bool" Peki, bool kaç bittir? Bir bit. Peki Bool bir değişken hangi aralıkta değer alır? Sorunun cevabını bulmuş olmalısınız. Evet, bir bitlik bir değişken -1 ile 0 arası bir değer alabilir. Sıfır "false" olduğundan, true da -1 oluyor. Doğrusu da bu. Eğer "unsigned bool" diye bir değişken tipi olsaydı, o zaman bu değişken 0 ile 1 arasında bir değer alacaktı. Zaten Microsoft tarafındaki VBA, Visual Basic, daha da eskileri PDS, QBX, BasicA gibi dillerde hep böyledir. Ama #include <stdbool.h> kullanarak C ile başkaca bir tanım yapmadan bunu test ettiğimizde, "bool" veri tipi, sanki "unsigned bool" gibi çalışmakta. "0" dışındaki tüm değerler "true" sayıldığına göre buna yanlış demek de doğru değil. Doğru cevap: "0=false" ve 0 dışındaki tüm değerler "True" şeklinde. Peki, siz bir dil tasarlasanız, true olarak 1 mi -1 mi alırsınız?
    1 point
  3. Bilgisayar ne olursa olsun; ister kolunuzdaki kol saati, ister önünüzdeki laptop, avucunuzdaki mouse ya da cep telefonu, veya kocaman bir süperbilgisayar... Tümünde az veya çok, hızlı veya yavaş birçok "bellek" kullanılır. Temelde bellek sadece "0" ve "1" değerini alabilen, "bit" adı verilen hücrelerden oluşur. Bilgisayarda bu bitler kullanılırken, sekizerli gruplar halinde kullanılır ve buna da byte (=bayt) denir. Eğer "ikili sayı sistemi" ve "onaltılı sayı sistemi" bilmiyorsanız, 20-25 sene önce yazdığım şu makaleye bir göz atıp geri dönün. Bellekte bu byte'ların alt alta durduğunu düşünün: 11101001 11010010 00110101 gibi. Bunlara bir de ad ya da adres vermemiz gerek ki, tanımlayabilelim. En üstten 0'dan başlayarak isim verebiliriz. Örneğin 100 tane byte'ımız varsa, bunlara 0'dan 99'a kadar isim verebiliriz. Bu "isim"lere "adres" denir. Bu kelimeye çok rastlayacağız. İngilizcesi de "Address" Her byte, 8 tane 0 veya 1 içerdiğine göre, her bir byte aslında 0 ile 255 arasında bir değer alabiliyor demektir. Neden 0 ile 255 arasında olduğunu anlamadıysanız yukarıda linkini verdiğim makaleyi tekrar gözden geçirin. Peki, bu bellek nerededir? Bilgi içeren her yer. Mesela bilgisayarınızın diski. Ya da RAM belleği, USB bellek, hard disk, bunların tümü "bellek" içerir. Daha önemlisi, haberleşmedeki sinyaller de aynı şekilde bilgi içerdiğinden bu sinyallerin de bir nevi "bellek" olduğunu düşünebiliriz. Wi-fi, fiber kablo, kablosuz mouse'un sinyalleri, Bluetooth ya da ADSL. Buradan giden bilgileri de bellek gibi düşünebiliriz. Yani "bilgi" içeren her yerde bu sıfır ve birlerden oluşan byte'lar söz konusudur. Bellekte bir resim, bir video, bir yazı, bir bilgisayar programı, android uygulaması, bir ses olabilir. Ama ne olursa olsun bu bilgiler daima sekiz tane 1 ve sıfırdan oluşan BYTE'lar ile ifade edilir. Örneğin bir byte'taki bitler 01000000 şeklinde ise, bu bitler 64 sayısını, @ işaretini, z-80 adlı mikroişlemci için "b kaydedicisini bir arttırma komutu"nu ya da sesteki minik bir ânı, görüntüdeki bir pikselin bir parçasını, yahut 17236 sayısının bir parçasını ifade edebilir.
    1 point
  4. Bilgisayarlarda tüm işlemler 1 ve 0'dan, "doğru" ve "yanlış"tan oluşur. Buna "sayısal" diyoruz. Ama dünyamızdaki olaylar ise, "Doğru" ve "Yanlış" gibi kesin değildir. Bunun arasında sonsuz değer alabilir. Dolayısı ile zevklerde, tercihlerde, görüşlerde, davranışlarda da hiç bir zaman "1" ve "0" yoktur. Daima bir ara değerdedirler. Örneğin "dindar" bir birey, sorulduğunda "dindar" olduğunu söyler, ama hiç ibadet yapmaz, inandığı dinin gereklerinden hiç birini yerine getirmezken diğer bir dindar örneğin ibadetlerini yapar ama tüm dinlerin "yapmayın" diye emrettiği hırsızlıkla geçimini sağlayabilir. Ya da x takımını tutan bir birey takımı maç kaybettiğinde krize girebilir, diğeri umursamaz, beriki oyuncuları suçlar. Ama günümüzde hem bu davranışlar, hem de algılarımız, "sayısal" olmaya doğru gidiyor. Örneğin biz açık maviyi seviyorsak, başka renkleri, hatta açık olmayan normal maviyi sevenleri bile "hasım" olarak algılıyoruz. Onlara savaş açabiliyoruz. Bunun en güzel yansıması siyaset ve din elbette. X partisini "tutan" birisi, y partisinin yaptığı en iyi davranışı dahi kötülemeye, yapamıyorsa çarpıtmaya, o da olmuyorsa görmezden gelmeye çalışıyor. Buna karşılık x partisinin eylemleri ne kadar kötü olursa olsun, gizlemeye ya da çarpıtarak iyi göstermeye çalışıyor. Halbuki ben o parti değilim. X partisi de değilim, Y partisi de değilim. A takımı da değilim, B takımı da değilim. Partilerin de takımların da birine kendimizi yakın görmemiz, bizi "sayısal" yapmamalı. Her iki tarafın da doğruları ve yanlışları olduğunu kabul edip yanlış olanı -kendi sempati duyduğumuz parti bile olsa- eleştirebilmeli, diğer parti doğru bir şey yaptığında alkışlamalıyız. Ancak bunu yaptığımızda "partiden yana" değil, "doğrudan yana" oluruz. Sayısallaştıkça tahammülsüzleşiyoruz. Ben yemeği az tuzlu seviyorsam, "çok tuzlu sevenlere ölüm" diyebilirim, çok tuzlu sevdikleri için onları aşağılayabilir, ötekileştirebilir, hedef gösterebilir, "vatan haini" ilan edebilirim. Doğrular da tek değildir. Birine göre bu sorunun X yoluyla çözülmesi daha doğru iken, diğeri için Y yoluyla çözülmesi daha doğru olabilir. Her yiğidin yoğurt yiyişi farklıdır. Bunlardan birine doğru diğerine yanlış bile diyemeyiz. Sadece birine sempati duyabiliriz. Ama bu, diğerine düşman olmayı gerektirmez. Bu konuda çok dertliyim, çok. İnsanlar sürekli saçma sapan konularda kutuplaşıyorlar, yankı fanusları içinde dezenformasyona uğrayıp kendisi gibi olmayana / düşünmeyene kinleniyor, onları öldürmek gerektiğini düşünmeye varacak hale geliyorlar, herkes birbirini "vatan haini" ilan ediyor. Bu kutuplaşmanın sonu kötü. Bir toplum insanlardan oluşur ve hiç bir insan diğerinin fotokopisi değil. İnsanları anlamaya çalışmak yerine değiştirmeye, kendimiz gibi yapmaya çalışmanın sonu hayra alamet değil.
    1 point
  5. 1 ay boyunca her gün 1 saat 4 tane ledi yakmak istiyorum. Nasıl yaparım?
    1 point
  6. Bir Arduino Uno ile bu işi çok kolay şekilde Yaparsın fakat önce konuyu biraz daha açman gerekecek Ledler ne kadar akım çekecek küçük ledler mi? Enerji Kaynağımız nedir ? Her gün 1 saat derken belli bir zaman aralığımı veya gece gündüz farkediyor mu ? 1 ay sonra otomatik olarak başka bir işlem yapılacakmi ?
    1 point
  7. Çok geçmişti ne ile uğraştığımda hatırlamıyorum da Bazen tek bitlik değer döndüğünde -1 geliyordu aklımda hep neden -1 geliyor diye düşünmüştüm Bende oysa hep 1 bekliyordum
    1 point
  8. Paraya katarsak bu para olur soya fasulyesi
    1 point
  9. Böyle bir laf var; "Fasulyeden" diye. Gün gelip de bunun gerçek olacağını hayal bile etmezdim bu lafı ilk duyduğumda yani 30-40 sene evvel... Dandik, kötü, sahte manasında kullanırdık “fasulyeden” lafını. Şimdi de sahte, dandik yiyecekler çıktı. Daha doğrusu satılan hazır ürünlerin nerdeyse tümü sahtedir. Mesela "kakaolu fındık kreması" alırsanız, içindeki kakao + fındık + şeker miktarı %50'yi bulursa bu üstün kaliteli bir maldır. Kalanı "soya lesitini", "soya proteini" gibi adlarla bize yutturulmaya çalışılan, "soya fasulyesi" dir. Yani bu ürün "fasulyeden" imal edilmiştir aslında. Ya da sucuk alırsınız: "%50 dana %50 tavuk" diye. Halbuki içindeki dana ve tavuk miktarı toplamda %50'yi bulursa öpün de başınıza koyun. Ha, bir de dana ve tavuk deyince bunların etleri gelmesin aklınıza; tavuğun ve dananın çeşitli organlarını kastediyoruz doğal olarak. Bağırsakları, beyni, tavuğun akciğeri, hatta kemiklerini (bakınız: mekanik kıyma) kastediyoruz. Yoksa siz et mi zannediyordunuz? (Bu makale kaleme alındığında ilgili kanun henüz çıkmamıştı. Bu kanunun çıkmasında belki bu makalenin de payı vardır. Kim bilir?) Soya fasulyesi bir gece suda bekletildikten sonra kaynatılır. Sonra parçalayıcıda parçalanır ve biraz daha kaynatılır. Süzüldüğünde kalan su kısmı süt ürünlerine katılabilecek “soya sütü” dür. Her türlü “fasulyeden peynir” yapımında kullanılabilir. Soya fasulyesi çok ucuzdur. Dolayısı ile peynire soya sütü katmak maliyeti düşürür. Kalan posası daha değerlidir. Neyin içine katarsanız o olur. Et içine katarsanız et, fındık püresine katarsanız fındık olur. Daha da moda olanı örneğin öğütülmüş tavuk kemiği, derisi ve kan ile karıştırılıp “kilosu 5 liraya köfte”, ya da ucuz salam, sosis olarak satmaktır. Tabii rengi et gibi olsun diye kırmızı boya katmayı da ihmal etmeden. Peki GDO’suz soya fasulyesi var mı?
    1 point
  10. Çok rastlıyorum, ledi yakmak için High, söndürmek için Low veriyor çok kişi. Bunun için LED'in mikrodenetleyiciye bağlı olmayan ucunu şaseye (ground) bağlamak gerekir. BU YÖNTEM DOĞRU DEĞİLDİR. Yine butonlarda görüyorum, butonun mikrodenetleyiciye bağlı olmayan ucunu artıya bağlıyor çok kişi. Yani butona basınca 1 (high) oluyor. BU DA DOĞRU DEĞİLDİR. Doğru olan, LED'in mikrodenetleyiciye bağlı olmayan ucunun artıya bağlanmasıdır. Böylece Low verince LED yanar, High verince söner. Yine butona basılmazsa HIGH, butona basıldığında LOW okumalıyız. Dikkat edin: Örneğin mikrodenetleyicinin reset ucuna bir reset butonu bağlamak isterseniz nasıl bağlamanız gerekir? Ya da hazır modüllerde LED'i nasıl yakarsınız? Örneğin Arduino Nano şemasına bakalım: D0 ve D1 uçlarındaki LED'leri yakmak için, ilgili çıkıştan LOW vermek gerekir. Peki neden böyle ters? Hem girişler, hem de çıkışlar neden "1 aktif" değil de "0 aktif" oluyor? Bu, sadece mikrodenetleyicilerde değil, mikroişlemcilerde, belleklerde, kapılarda, kod çözücülerde, kodlayıcılarda, shift registerlerde, kısacası tüm lojik devre elemanlarında sıkça rastlayacağımız bir durum. Çünkü push - pull (https://en.wikipedia.org/wiki/Push–pull_output) ya da yarım H köprüsü türünde olmayan çıkışlar çip içinde bir dirençle artıya, bir transistörle de şaseye bağlanır. Yani bu uç HIGH iken akım çekmek istersek, akım bir direnç üzerinden geleceği için hem bu dirençte bir gerilim düşümü olacağından direnç, dolayısı ile çip ısınır, gereksiz bir enerji harcamış oluruz, hem çekebileceğimiz akım direnç dolayısı ile azdır. Halbuki çıkış LOW iken akım çekersek hem daha yüksek akım çekebiliriz, hem içeride kayda değer gerilim düşümü olmayacağından ısınma olmaz, daha az enerji tüketmiş oluruz. Hatta kimi çıkışlarda bu direç de yoktur (open collector output) Yani LED'in diğer ucunu şase yaparsanız, LED'e hiç bir şekilde besleme veremeyeceğiniz için yakamazsınız. Yakabilmeniz için diğer ucunu artıya bağlamak zorundasınız. (https://en.wikipedia.org/wiki/Open_collector) Girişlerde de zaten besleme tarafına doğru bir bias vardır. Girişi boş bırakırsanız "high" okursunuz. Dolayısı ile girişi high yapmak kolaydır. Boşta bırakıldığında high okunmayan girişlerde bile basit (yüksek dirençli) bir pullup ile giriş HIGH yapılabilir, low yapmak için genellikle daha yüksek akım çekmek zorundayızdır. Bu yüzden butonun diğer ucunu "şaseye" bağlamak daha mantıklıdır. Sonuç olarak; Düz (LED'i HIGH ile yakmak, butonun diğer ucunu artıya bağlamak) bağladığınızda devrenizin çalışmamasına varacak büyüklükte sorunlar çıkma ihtimali varken, ters (LED'i low ile yakmak, butonun diğer ucunu şaseye bağlamak) bağladığınızda karşılacağınız hiç bir sorun yoktur. Bu yüzden ters bağlantıyı tercih etmek daha isabetli bir seçim olacaktır.
    1 point
  11. Dandik: (Sıfat) Düşük nitelikli (TDK) 1970’lerin başlarında kol saatleri çok pahalıydı. Saatin doğru gitmesini sağlayan “pandül” mekanizmasının hareket ileten kısmı (maşa) ucuz saatlerde presli parça olarak değil, telden yapılmaya başlandı maliyeti düşürmek için. Bu tür saatlere “tel maşa saat” denirdi. Sonradan “tel maşa” da bir sıfat olarak “dandik” kelimesi yerine kullanılmaya başlandı. Bundan kısa bir süre sonra yurdumuzda her şey karaborsaya düştü. Sigara da bundan nasibini aldı. Hükümet de, bir karar alarak yurt dışında (Bulgaristan’da) “fason” Samsun sigarası ürettirdi. O zamana kadar 25 paketlik kraft paketlerde olan sigarayı cillop gibi 10’lu kartonlarda görünce önce hücum etti millet, ancak sigarayı içip ne kadar kötü olduğunu görünce, tiksindi. “fason” kelimesi de bu olaydan sonra “dandik” kelimesi yerine kullanılmaya başlandı. Eskiden otomobillerin balatası bitince, yeni balata almak yerine, balata sacı üzerindeki aşınan asbest kısım perçinlerinden sökülür, yerine yeni asbest plakalar perçinle “çakılır”, böylece daha ucuza mal edilirdi. Asbest plakanın metal üzerine monte edilmesi “çakmak” olara adlandırıldığından, bu şekilde yenileme işine “balata çakmak” denirdi. Ama isteyen orijinal balata da taktırabilirdi tabii. Frenci sorardı: “Orijinal mi olsun çakma mı?” Bu yüzden, “çakma” kelimesi orijinal olmayan anlamında, hatta “dandik” anlamında kullanılageldi. Vasat aslında “orta” demektir. Vasati kelimesi “ortalama” anlamına gelir. “dandik” anlamını vermek için “vasatın altında” demek gerekirken bunun yerine “vasat” kelimesi hatalı olarak “dandik” yerine kullanılıyor son birkaç senedir. Peki, “Normal” kelimesinin Türkçesi nedir? Normal, Fransızcadır. Normal kelimesinin Türkçesi, “Adi” dir. Ama ben bildim bileli adi kelimesi “normal” anlamında değil, “dandik” anlamında kullanılır. Demek ki adi, vasat, çakma, fason, tel maşa kelimeleri “dandik” anlamına gelmiyor ama, galat-ı meşhur, lugat-ı fasihten evlâdır(*). (*) Yaygın ama hatalı kullanım, sözlükte yazan ama kullanılmayan doğrudan evladır.
    1 point
  12. "internete bağlamak" deyince, öncelikle esp'nin sizin modeminize bağlanması aşamasını geçmeniz gerek. Arduino IDE arayüzünü kullanıyorsunuz değil mi? Burada nasıl bir kod yazdınız? Bu kodu derleyebiliyor musunuz? Derlediğiniz kodu ESP'ye yükleyebiliyor musunuz?
    1 point
  13. Merhaba, arduino nano every klone ile si7021 sensörünün bağlantılarını ekteki gbi yaptım ama serial port ekranında hiçbir şekilde okuyamıyorum. A4-a5 scl sda portlarını da takıp denedim yine olmadı. Kodum ise ektedir. Umarım yardımcı olursunuz... https://web.archive.org/web/20160820203635/http://www.dfrobot.com/wiki/index.php/SI7021_Temperature_and_humidity_sensor_SKU:TOY0054
    1 point
  14. Modülün SDA/SCL uçları neden Arduino'nun SDA/SCL uçlarına değil de normal portlara bağlı? Öncelikle modülü okumaksızın, Arduino'dan gönderdiklerinizi seri port ekranında görebiliyor musunuz?
    1 point
  15. Timeout => Zaman aşımı? Eğer bir paket gönderilirken bir şekilde tamamlanmadı ise, bir sonraki paket bunun devamı gibi alınacağından o da bozuk alınmış olur. Örneğin (örnek 3 byte paketimizi kullanıyorum) 0x55 0x15 0x24 olan paketimiz, bir iletişim sorunundan dolayı 0x55 0x15 şeklinde gitmiş olsun. Bu durumda, bir sonra gelecek paketin ilk karakteri, bozuk paketin son karakteri imiş gibi algılanacak ve ardından gelen 2 byte değerlendirme dışı kalacaktır. Dolayısı ile bozulmuş bir paket yüzünden, ardından gelen sapasağlam paket de ziyan olacaktır. Bunu engellemek için eğer paketler arasında bir zaman boşluğu varsa, timeout kullanabiliriz. Örneğin biz 100 milisaniyede bir paket gönderiyorsak ve iki byte arasındaki süre 0,1 milisaniye ise, örneğin 1 milisaniyelik bir timeout kullanabiliriz. Yani, veri gelirken 1 milisaniyeden uzun bir kesilme olursa, almakta olduğumuz paketi iptal edip yeni bir paket paket beklemeye başlarız. Böylece bozuk paketten sonra gelen sağlam paketi sorunsuz olarak alabiliriz. Bunu yapabilmek için, bir timeout sayıcımız olması ve bunun bir timer kesmesi içinde artırılması gerekir. örneğin: int TimeoutCounter; diye bir değişken tanımlayıp program init aşamasında buna sıfır değeri verelim: TimeoutCounter=0; Sonra bir timer kesmesinde (Örneğin 100 mikrosaniyelik bir kesmede) bu değişkeni bir arttıralım. Bu değişken 10 veya daha yüksek bir değer aldığında, 1 milisaniye aşılmış olacaktır. if (TimeoutCounter<11)TimeoutCounter++; Burda bir şart koyuyoruz ki, sayı devredip çok uzun süre sonra tekrar sıfır olmasın. Sonlu durum makinemizde de bu durumu değerlendirelim: "void Serial_ISR(void)" içinde, "tmp=GetChar;" ile "switch (state)" arasında bu değerlendirmeyi yapabiliriz: if (TimeoutCounter>=10)state=0; TimeoutCounter=0; Böylece 1 milisaniyelik veya daha fazla bir kesinti olursa, state sıfırlanacağı için, sonlu durum makinemiz ardından gelecek bilginin yeni bir paket olacağını öngörerek, veri kaybını engellemiş olur. Anlaşılmayan yer varsa lütfen yazın.
    1 point
  16. Burada ki ''oran'' değişkenlerinden bağımsız bir şekilde son 100 veri için benzer ortalama bir filtre yapmak istiyorsak; filtreliveri=hamveri*0.99+hamveri*0.01 diyebilir miyiz hocam?
    1 point
  17. Normal şartlar altında soru sormayı pek sevmem. Günlerden beri MODBUS'ın kendi sitesinde yayınladığı bir fonksiyon ile uğraşıyorum. Anladığım kadarı ile fonksiyon dışarıdan bir dizi ve dizinin boyutunu alarak çalışıyor. Birazcık modifiye ederek, fonksiyona tamsayı bir değer göndererek çalıştırmayı başardım.Fakat benim dizinin CRC'sini hesaplamam gerekiyor. Fonksiyonu kullanırken nerede hata yaptığımı anlamış değilim. MODBUS protokolü ile uğraştığımdan,sürekli CRC hesaplamam gerekiyor. Fonksiyonu ve fonksiyonun geçtiği dökümanı aşağı bırakıyorum.Programı bir gömülü sistemde çalıştırmam gerekiyor.Kodumun en başına fonksiyonu kullanacağımı aşağıdaki komut ile bildiriyorum. unsigned short CRC16( unsigned short puchMsg[], unsigned short usDataLen); Ardından CRC_16 fonksiyonu için dizi ve değişkenleri tanımlıyorum. uint8_t Adress=0x11; uint8_t Function_Code=0x03; uint8_t Start_Address_High_Byte= 0x00; uint8_t Start_Address_Low_Byte=0x00; uint8_t Number_Register_High_Byte= 0x00; uint8_t Number_Register_Low_Byte= 0x03; uint8_t Crc_High=0x5B; uint8_t Crc_Low=0x07; uint8_t CRC_dizi[6]={Adress,Function_Code,Start_Address_High_Byte,Start_Address_Low_Byte,Number_Register_High_Byte,Number_Register_Low_Byte}; Fonksiyonuda şu şekilde kullanıyorum. Crc_Recieve= CRC16(CRC_dizi,sizeof(CRC_dizi)); Hata ayıklama modunda baktığımda hesaplamak istediğim değerlerin fonksiyona iletilmediğini gözlemliyorum. Not:Kod bilgisayar ortamında hafıza hatası verdirtiyor.Denemeleri STM32 kartımda yapıyorum. İlgili dökümanın son sayfasından fonksiyona ulaşabilirsiniz. unsigned short CRC16 ( puchMsg, usDataLen ) /* The function returns the CRC as a unsigned short type */ unsigned char *puchMsg ; /* message to calculate CRC upon */ unsigned short usDataLen ; /* quantity of bytes in message */ { unsigned char uchCRCHi = 0xFF ; /* high byte of CRC initialized */ unsigned char uchCRCLo = 0xFF ; /* low byte of CRC initialized */ unsigned uIndex ; /* will index into CRC lookup table */ while (usDataLen--) /* pass through message buffer */ { uIndex = uchCRCLo ^ *puchMsg++ ; /* calculate the CRC */ uchCRCLo = uchCRCHi ^ auchCRCHi[uIndex] ; uchCRCHi = auchCRCLo[uIndex] ; } return (uchCRCHi << 8 | uchCRCLo) ; } static unsigned char auchCRCHi[] = { 0x00, 0xC1, 0x81, 0x40, 0x01, 0xC0, 0x80, 0x41, 0x01, 0xC0, 0x80, 0x41, 0x00, 0xC1, 0x81, 0x40, 0x01, 0xC0, 0x80, 0x41, 0x00, 0xC1, 0x81, 0x40, 0x00, 0xC1, 0x81, 0x40, 0x01, 0xC0, 0x80, 0x41, 0x01, 0xC0, 0x80, 0x41, 0x00, 0xC1, 0x81, 0x40, 0x00, 0xC1, 0x81, 0x40, 0x01, 0xC0, 0x80, 0x41, 0x00, 0xC1, 0x81, 0x40, 0x01, 0xC0, 0x80, 0x41, 0x01, 0xC0, 0x80, 0x41, 0x00, 0xC1, 0x81, 0x40, 0x01, 0xC0, 0x80, 0x41, 0x00, 0xC1, 0x81, 0x40, 0x00, 0xC1, 0x81, 0x40, 0x01, 0xC0, 0x80, 0x41, 0x00, 0xC1, 0x81, 0x40, 0x01, 0xC0, 0x80, 0x41, 0x01, 0xC0, 0x80, 0x41, 0x00, 0xC1, 0x81, 0x40, 0x00, 0xC1, 0x81, 0x40, 0x01, 0xC0, 0x80, 0x41, 0x01, 0xC0, 0x80, 0x41, 0x00, 0xC1, 0x81, 0x40, 0x01, 0xC0, 0x80, 0x41, 0x00, 0xC1, 0x81, 0x40, 0x00, 0xC1, 0x81, 0x40, 0x01, 0xC0, 0x80, 0x41, 0x01, 0xC0, 0x80, 0x41, 0x00, 0xC1, 0x81, 0x40, 0x00, 0xC1, 0x81, 0x40, 0x01, 0xC0, 0x80, 0x41, 0x00, 0xC1, 0x81, 0x40, 0x01, 0xC0, 0x80, 0x41, 0x01, 0xC0, 0x80, 0x41, 0x00, 0xC1, 0x81, 0x40, 0x00, 0xC1, 0x81, 0x40, 0x01, 0xC0, 0x80, 0x41, 0x01, 0xC0, 0x80, 0x41, 0x00, 0xC1, 0x81, 0x40, 0x01, 0xC0, 0x80, 0x41, 0x00, 0xC1, 0x81, 0x40, 0x00, 0xC1, 0x81, 0x40, 0x01, 0xC0, 0x80, 0x41, 0x00, 0xC1, 0x81, 0x40, 0x01, 0xC0, 0x80, 0x41, 0x01, 0xC0, 0x80, 0x41, 0x00, 0xC1, 0x81, 0x40, 0x01, 0xC0, 0x80, 0x41, 0x00, 0xC1, 0x81, 0x40, 0x00, 0xC1, 0x81, 0x40, 0x01, 0xC0, 0x80, 0x41, 0x01, 0xC0, 0x80, 0x41, 0x00, 0xC1, 0x81, 0x40, 0x00, 0xC1, 0x81, 0x40, 0x01, 0xC0, 0x80, 0x41, 0x00, 0xC1, 0x81, 0x40, 0x01, 0xC0, 0x80, 0x41, 0x01, 0xC0, 0x80, 0x41, 0x00, 0xC1, 0x81, 0x40 } ; Low-Order Byte Table /* Table of CRC values for low–order byte */ static char auchCRCLo[] = { 0x00, 0xC0, 0xC1, 0x01, 0xC3, 0x03, 0x02, 0xC2, 0xC6, 0x06, 0x07, 0xC7, 0x05, 0xC5, 0xC4, 0x04, 0xCC, 0x0C, 0x0D, 0xCD, 0x0F, 0xCF, 0xCE, 0x0E, 0x0A, 0xCA, 0xCB, 0x0B, 0xC9, 0x09, 0x08, 0xC8, 0xD8, 0x18, 0x19, 0xD9, 0x1B, 0xDB, 0xDA, 0x1A, 0x1E, 0xDE, 0xDF, 0x1F, 0xDD, 0x1D, 0x1C, 0xDC, 0x14, 0xD4, 0xD5, 0x15, 0xD7, 0x17, 0x16, 0xD6, 0xD2, 0x12, 0x13, 0xD3, 0x11, 0xD1, 0xD0, 0x10, 0xF0, 0x30, 0x31, 0xF1, 0x33, 0xF3, 0xF2, 0x32, 0x36, 0xF6, 0xF7, 0x37, 0xF5, 0x35, 0x34, 0xF4, 0x3C, 0xFC, 0xFD, 0x3D, 0xFF, 0x3F, 0x3E, 0xFE, 0xFA, 0x3A, 0x3B, 0xFB, 0x39, 0xF9, 0xF8, 0x38, 0x28, 0xE8, 0xE9, 0x29, 0xEB, 0x2B, 0x2A, 0xEA, 0xEE, 0x2E, 0x2F, 0xEF, 0x2D, 0xED, 0xEC, 0x2C, 0xE4, 0x24, 0x25, 0xE5, 0x27, 0xE7, 0xE6, 0x26, 0x22, 0xE2, 0xE3, 0x23, 0xE1, 0x21, 0x20, 0xE0, 0xA0, 0x60, 0x61, 0xA1, 0x63, 0xA3, 0xA2, 0x62, 0x66, 0xA6, 0xA7, 0x67, 0xA5, 0x65, 0x64, 0xA4, 0x6C, 0xAC, 0xAD, 0x6D, 0xAF, 0x6F, 0x6E, 0xAE, 0xAA, 0x6A, 0x6B, 0xAB, 0x69, 0xA9, 0xA8, 0x68, 0x78, 0xB8, 0xB9, 0x79, 0xBB, 0x7B, 0x7A, 0xBA, 0xBE, 0x7E, 0x7F, 0xBF, 0x7D, 0xBD, 0xBC, 0x7C, 0xB4, 0x74, 0x75, 0xB5, 0x77, 0xB7, 0xB6, 0x76, 0x72, 0xB2, 0xB3, 0x73, 0xB1, 0x71, 0x70, 0xB0, 0x50, 0x90, 0x91, 0x51, 0x93, 0x53, 0x52, 0x92, 0x96, 0x56, 0x57, 0x97, 0x55, 0x95, 0x94, 0x54, 0x9C, 0x5C, 0x5D, 0x9D, 0x5F, 0x9F, 0x9E, 0x5E, 0x5A, 0x9A, 0x9B, 0x5B, 0x99, 0x59, 0x58, 0x98, 0x88, 0x48, 0x49, 0x89, 0x4B, 0x8B, 0x8A, 0x4A, 0x4E, 0x8E, 0x8F, 0x4F, 0x8D, 0x4D, 0x4C, 0x8C, 0x44, 0x84, 0x85, 0x45, 0x87, 0x47, 0x46, 0x86, 0x82, 0x42, 0x43, 0x83, 0x41, 0x81, 0x80, 0x40 };
    1 point
  18. Bu kod bu şekilde derlendiğinde hata veriyordu. Kodu MODBUS'ın kendi sitesindeki dökümandan kopyalamıştım. Haklısınız, atlamışım,bu fonksiyon bu şekilde çalışmıyor. Derleyici hata veriyor. Bazı düzenlemelerin ardında çalıştırabilmiştim. Fakat doğru sonucu hesaplamıyordu. Bende daha fazla uğraşmayıp, şu linkteki MODBUS CRC kodunu kullanmıştım.Bah settiğiniz kısma gelecek olursa, ben burya düzenlenmemiş halini yüklemişim. Orjinal kodun linkini veriyorum. Bağlantısını verdiğim dökümanın sonundan kodu inceleyebilirsiniz. Kodu düzenleyip istediğim gibi çalıştıramayınca ilk bağlantıdaki açık kaynaklı CRC programını kullandım. Sorunu çözememiş olsam da etrafından dolaştım.
    1 point
  19. Benim gözüm burada bir yere takıldı: Örneğin: unsigned short CRC16 ( puchMsg, usDataLen ) burada ne { ile bir fonksiyon başlatılmış, ne de sonuna ; konarak bir deklarasyon yapılmış. Yani ; ve { karakterinde eksikler mi var ya da yanlışlıklar? Yahut, bu benim bildiğim C'den farklı bir dil mi?
    1 point
  20. Tecrübem olmadı maalesef.
    1 point
  21. Şimdi sayılara gelelim: Bir hücreye sadece 0 ile 255 arasında sayılar yazabiliriz. Peki büyük sayılar nasıl yazılır? Onlar için de kimi kurallar konmuş. Mesela bu hücrelerden iki tanesini kullanırsak, 0 ile 65535 arası sayılar yazabiliriz. Her bir hücre 0-255 arasında değer alabileceği için, iki byte'a "256'lı sayı sisteminde 2 rakamlı sayılar" yazabiliriz. Bu da 0 ile 65536 sayılar anlamına gelir. "256'lı sayı sistemi" nedir anlamış olduğunuzu umuyorum. Örneğin ard arda 35 ve 43 sayılarını koyarsak 9003 olur. ASCII karakter olarak 35 '#' karakteri, 43 ise '+' karakteridir. Ama asıl bomba şurada: Mesela ard arda 46 ve 56 gelirse, bu yukarıdaki "iki hücreye 0-65535 arası sayı yazma" yöntemine göre 11832 olur. ASCII karakter olarak ise 46 '1' karakterini, 56 ise '8' karakterini ifade eder. Sonuçta rakamlar da karakterdir. Yani ardışık iki bellek hücresinde "18" yazdığında, bu; 11832 anlamına gelebilir. "Ben 18 yazdım ama 11832 geldi, sorun nedir ki" demeyelim. Lütfen sorularınız varsa sorun.
    1 point
  22. 0 ile 255 arasında değer alabilen bir byte'ın farklı anlamlara gelebileceğini yukarıda söylerken 64 sayısının @ işaretine karşılık gelebileceğini ya da b kaydedicisini arttırma komutu veya 64 sayısı yahut 17236 sayısının bir parçası olabileceğini yazdım. 64 sayısı neden X harfine değil de @ işaretine karşılık geldi? Ya da biriktiriciye sayı yükleme komutu olduğunu nereden biliyoruz? "Bu böyle olsun" diye bir kabul yapmışız. Demişiz ki: "64 sayısı, @ karakteri olsun". Tamamen keyfi. Birisi "ASCII tablosu" diye bir tablo yazmış ve 0'dan 255'e kadar sayıların her birinin karşısına bir karakter yazmış. İşte, bu tabloda 64'ün karşısında @ karakteri var. Ama bu ASCII tablosunu yazan "birisi", Amerika'nın bu konudaki otoritesi olduğundan tüm dünya bu tabloyu kullanıyor. Ama bu, söz konusu tablonun "tamamen keyfi" seçildiği gerçeğini değişmiyor. Fakat artık bunlar bir "kanun" gibi artık. Altmış küsür senedir kemikleşmiş. Peki, z-80 adlı mikroişlemci için "b kaydedicisini bir arttırm komutu" olduğunu nereden bileceğiz? Bilmemiz gerekmiyor. Bu, çok özel bir bilgi. Eğer z-80 mikroişlemcisine makine dilinde bir program yazmayacaksak ihtiyacımız yok. Zaten artık makine dilinde pek program yazılmıyor. Ama şunu biliriz ki, bir bir program yazıp onu derlediğimizde, derleyicinin ürettiği koddaki her byte, bunun gibi, işlemci tarafından bir komut olarak anlaşılacaktır. Derleyicinin ürettiği bu kod, işlemci tarafından okunup çalıştırılacak bir şeydir. Bunun içeriğini özel durumlar dışında bizim anlamamız gerekmiyor. Peki bu kod sanki bir metinmiş gibi, ASCII karşılıklarına bakarsak ne görürüz? Karman çorman harfler. Örneğin bir yerde işlemcinin b kaydedicisi 1 arttırma komutu varsa, orada @ işareti göreceğiz. Örneğin, mikroişlemcinin işleyeceği gerçek bir koda bir metinmiş gibi baktığımızda şöyle bir şeyler görebiliriz: Aaynen bu makaleyi işlemciye bir programmış gibi işletmeye kalktığımızda işlemcinin anlamlı bir şey yapamayacağı gibi. Bu kodu bir ses, müzik gibi dinlemek istersek bir gürültü duyacağız muhtemelen. Ya da bir resimmiş gibi bakarsak şöyle bir şey görebiliriz:
    1 point
  23. ''Bunun neden böyle olduğunu anlıyorsunuz değil mi? Anlamıyorsanız yukarıdakileri ve başka kaynakları okuyup üzerinde düşünün. Bu, bir bobinin nasıl çalıştığını içselleştirirseniz, formüllerden arınmış bir şekile düşünebilirseniz, hepsine "daha yukarıdan" bakabilir ve "formül"leri ezberlemek yerine anlayabilirsiniz.'' Bende Direnç Gibi Kondansatör gibi içselleştirmek istiyorum anladığım kadarıyla bol bol bobinleri mıncırmak gerekir.içselleştirmek örneği çok güzeldi melasa direncin üzerinden geçen akımı neden zorladığını hayal edebiliyorum mantık kurabiliyorum ama iş bobine girince kafam karışıyor. ve bobin elektronikte çok önemli bir yere sahip. adımızı soyadımız gibi bilmemiz gereken bir konu olduğunu düşünüyorum.
    1 point
  24. Bu iki kelimenin birbiri ile karıştırıldığına çok rastlıyorum. Aslında birbiri ile ilgili ama çok farklı şeyler. Bir odada bir termometre ve bir soba varsa, termometre odanın SICAKLIĞINI gösterir. Soba ise odayı ISITIR = odaya ISI VERİR. Termometre ISI göstermez. SICAKLIK gösterir. ISI, sobanın ortama VERDiĞİ şeydir. SICAKLIK ise, ORTAMIN durumunu belirten, termometre ile ölçülen bir şeydir. Sıcaklığın birimi DERECEdir. Biz Türkiye'de "Celcius" denen birimi kullanıyoruz. Başka birimler de var. Kelvin örneğin bilimsel bir birim, Fahrenhayt ve Bromür ise bizim kullanmadığımız başka birimler. Santim ve inç gibi. Biri diğerine lineer bir denklemle (bir sayıyla çarpıp bir sayı ekleyerek) çevrilebilir. Isının birimi, KALORİ olarak kullanılır çoğu zaman. Bir ENERJİ birimidir. kW/h gibi. V.A/h, V.mA/h gibi. Yani "20 derece ısı" olmaz. 20 kilokalori ısı, olur. Zaten bütün ENRJİ birimleri birbirine çevrilebilir. Eğer buna göz atmak isterseniz bir sonraki gönderiye bakın. Sıcaklığı ölçmek kolay. Termometreyi koyup ölçeriz. Ama ısıyı ölçmek zor. Kapalı bir ortam yapacağız, buranın ısıl kütlesini bileceğiz, sıcaklığı ölçerken içeriye ısı vereceğiz, sıcaklığın ne kadar arttığına bakarak oradan hesaplayacağız falan. Bu iş "kalorimetre" denen düzenekle yapılır.
    1 point
  25. 1 Joule, 1 Watt gücün, 1 saniyede ürettiği enerjidir. 1 Joule, 1 Volt gerilime sahip iletkenden 1 saniye boyunca 1 Amperlik akım geçtiğinde oluşan enerjidir. 1 kilovat saat, bir kilovat gücün bir saat sürede ürettiği enerjidir. (E = P t). 1 kilovat saat (kWh) = 3,6 x 10 ^ 6 J = 3,6 milyon Joule'dir 1 kalori, 1 gram suyun sıcaklığını 1 derece yükselten enerjidir. 1 kalori (cal) = 4.184 Jouledir. Bir BTU (İngiliz Termal Birimi) bir pound suyu 1 derece Farenheit (F) kadar yükseltmek için gerekli ısı miktarıdır. 1 BTU = 252 cal = 1055 kJ
    1 point
×
×
  • Yeni Oluştur...

Önemli Bilgilendirme

Facebook / Twitter / Google hesabınızla kolayca kaydolup cevap verebilir, soru sorabilir, istekte bulunabilirsiniz.
Devam etmeniz, forum kurallarını kabul ettiğiniz anlamına gelir.            Forum Kuralları