Jump to content

şenol eker

Administrators
  • İçerik sayısı

    69
  • Katılım

  • Son ziyaret

  • Days Won

    25

şenol eker kullanıcısının paylaşımları

  1. şenol eker

    İki mikrodenetleyici arasında haberleşme

    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
  2. şenol eker

    Sürekli verilerde ortalama

    "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
  3. şenol eker

    MODBUS CRC Fonksiyonu

    unsigned short CRC16 ( unsigned char *puchMsg, unsigned short usDataLen ) /* The function returns the CRC as a unsigned short type */ { 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) ; } Belki dokümanı yazan bunu kastetmiştir.
  4. şenol eker

    MODBUS CRC Fonksiyonu

    Linkini verdiğiniz dokümanın "6.2 Appendix B - LRC/CRC Generation" bölümünde gayet güzel anlatılmış aslında. Baştaki "colon" ve sondaki "CR" haricinde tüm baytları 8 bitlik bir değişkende topluyoruz. Elde ettiğimiz değeri hexadecimal olarak (2 byte) CR'den hemen önce koyuyoruz.
  5. şenol eker

    MODBUS CRC Fonksiyonu

    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?
  6. şenol eker

    Programcılar için: "Bellek"

    Ş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 b
  7. şenol eker

    Programcılar için: "Bellek"

    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
  8. 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ü
  9. şenol eker

    4-20 MA Akım Üretme

    Eğer yukarıda verdiğim linkteki dokümana denk gelmediyseniz, sizin de işinize yarayacaktır.
  10. şenol eker

    4-20 MA Akım Üretme

    Bilmiyordum, biraz Google yaparak buldum. Tam da bu iş için yapılmış çipler varmış. Kullanım amacı olarak "remote sensors" ve "4-20 mA" demiş. MSP430 serisinin tümünde de varmış. 4.2 bölümüne gidebilirsin doğrudan. https://www.ti.com/lit/an/slaa833a/slaa833a.pdf
  11. şenol eker

    4-20 MA Akım Üretme

    Böyle bir ihtiyacım olsa, öncelikle "akımla haberleşmek yerine dijital olarak haberleşmek mümkün değil mi" diye sorgularım. Bu mümkün değilse, örneğin girişleri bu şekilde olan ve değiştiremeyeceğim bir sistem varsa yapacak bir şey kalmaz. Verdiğiniz linkteki yöntem, eğer gecikme sizin için sıkıntı olmayacaksa uygun. Sensörler sıcaklık ölçeceğine göre, böyle bir gecikme sizin için sorun çıkartmayacak gibi görünüyor. Ama PWM yerine Azmi Bey'in dediği gibi DAC kullanmak, çok daha hızlı ve "güzel" göründü bana. Çünkü PWM'inizin çözünürlüğü ve bunun gerilim olarak ifadesi, DAC kadar sempatik gel
  12. şenol eker

    Bedava Elektrik :P

    Murat Şen, Türkiye'de gördüğüm en donanımlı (hem bilgi hem alet edevat olarak) amatörlerden biri. Kendisinin youtube kanalını severek takip ediyorum ve amatörlere de profesyonellere de şiddetle tavsiye ediyorum. Bu arada "Amatör" ve "Profesyonel" kelimeleri çok fazla yanlış kullanıldığı için bir not koyalım: Amatör, bir işi zevk aldığı için, hobi olarak yapan, profesyonel ise, iş yapma amacı para kazanmak olan kişiye denir. Amatör ya da profesyonel olmak, kişinin bilgili olup olmadığı anlamına gelmez. Ama amatörün, profesyonele nazaran daha araşatırmacı olacağını söyleyebiliriz.
  13. Normal telefon. Caller ID cihazı diye cihazlar var. Eskiden seri porttan bağlı olurlardı, şimdi USB bağlanıp seri port emüle ediyorlar. Bir bilgisayarda çalışan, Visual Studio'da yazılmış bir program bu. Yani hem yazıcı, hem de CALLER ID cihazı, bilgisayara bağlı. Google'da Caller ID arayınca birçok satıcı çıkıyor. Olay da şudur: Birinci çalıştan sonra telefon hattı 48V DC'ye düştüğünde, ikinci ring gelmeden önce 9600 bps ile bir bilgi gönderir. Bu cihazlar, bu bilgiyi alırlar.
  14. Facebook'ta bazı arkadaşların isteği üzerine buradan paylaşıyorum. Bu programı, bundan 5-10 sene önce, marketçi bir arkadaşıma "hatır için" yazmıştım. Arayan müşterilerden sipariş almak için bir şey. Telefon çaldığında yazıcıdan bir kağıt çıkartıyor. O kağıdı alıyorsunuz, üstünde telefon numarası var, müşteri daha önceden kayıtlı ise adı ve adresi de var. Telefonu açıp siparişi bu kağıdın üstüne alıyorsunuz, sonra gönderiyorsunuz. İlkel bir "getir" gibi. Eğer arayan numara kayıtlı değilse onu isterseniz adıya adresiyle kaydediyorsunuz, ya da mevcut bir adrese ikinci / üçüncü / n
  15. şenol eker

    Sürekli verilerde ortalama

    Yazdığın kod son derece doğru. Ama float olan yerleri float olarak belirtmek daha garanti olacak: float oranh=0.9; float oranl=1.0-oranh; //.0 ekledim float sonuc=(float)ReadVeri(); //float ekledim while (1) { printf("%i\r\n";(int)sonuc); sonuc=sonuc*oranh+(float)ReadVeri()*oranl; //(float ekledim) } Bunda yaşadığınız sıkıntı nedir? Eğer yeterli yumuşatma yapmıyorsa, oranh'ı yükseltin. Örneğin: float oranh=0.95; ya da float oranh=0.98; gibi. Kimi uygulamalarda 0.998'e kadar çıkmak icap eder eğer veri çok gürültülü ise ve oluşacak lag sorun çıkartmayacaks
  16. şenol eker

    Sürekli verilerde ortalama

    Ne yapmak istediğinizi anladığıma emin olamadım. Burada bir "normal ortalama alma yöntemi" kodu var, bu kod çok uzun, çok yavaş ve çok bellek tüketiyor. Makalede asıl anlatılan ise "akan veride ortalama alma yöntemi". Bu kod çok kısa, RAM gereksinimi de çok az. Siz hangisini uygulamak istiyorsunuz?
  17. şenol eker

    Sürekli verilerde ortalama

    Neden hızlı verilerde uygun olmadığını düşündünüz? Eğer birinci gönderideki kodu kullanırsanız tabii ki uygun olmaz Ama ikinci gönderideki kod oldukça uygun kanımca, yüksek frekanslarda da. Aslında veriye göre, hangi yöntemin daha iyi olacağı değişir. Örneğin ben özel bir işte bir filtre kullanmıştım. Burada gelen veriler; periyodu tamı tamına bilinen, ama fazı bilinmeyen çok gürültülü bir sinüse ait idi. Gerekli bilgi ise, bu sinüsün fazı idi. Ne medyan ile ne ortalama ile çözüelmez. Birinde ortalama daha iyi iken diğerinde medyan iyi olabilir. Yukarıdaki kod ise, eşdeğer bir yürüyen o
  18. şenol eker

    Sürekli verilerde ortalama

    Aynı (ya da çok benzer) işi yapmanın çok kolay bir yolu var aslında. Bu yöntemle elde edilen çıkış şöyle: Diğeriyle neredeyse aynı sonucu veriyor gördüğünüz gibi. Ama yazmamız gereken kod diğeri ile mukayese bile edilemez: float oranh=0.9; float oranl=1-oranh; float sonuc=ReadVeri(); while (1) { printf("%i\r\n";(int)sonuc); sonuc=sonuc*oranh+ReadVeri()*oranl; } Burada verdiğimiz oranh, son kaç verinin ortalamasını almak istediğimiz. 0.9 verdiğimizde son 10; 0.99 verdiğimizde son 100; 0.999 verdiğimizde son 1000 verinin ortalamasını almaya benzer bir sonuç elde ederiz.
  19. Bir sensordan aldığımız verileri kullanırken, eğer sensor örneğin bir ivmeölçer ya da analog bir sensor gibi "gürültülü" veri üretiyorsa, bu verilerin ortalamasını alarak kullanmak iyi bir fikirdir. Örneğin son 10 değerin ortalamasını alabiliriz. Peki, bunu nasıl yapacağız? Son on tane değeri belleğe alıp sonra bunların ortalamasını mı almalıyız? Ya da çok hızlı veri akışı varsa, son yüz tane, son bin tane verinin ortalamasını almak için, son bin tane veriyi bellekte tutmamız mı gerekir? Ortalama alırken bu son bin tane veriyi toplayıp sonra bir kaydırıp yeni veriyi en sona koyabiliriz.
  20. şenol eker

    Ac ve DC ark nasıldır

    Bu konu bana "Verilerin Ortalaması Nasıl Alınır" başlıklı bir makale hazırlama fikri verdi. Hemen başlayayım.
  21. şenol eker

    Rf alıcı verici

    Bu arada, eğer bilmiyorsanız "Amatör radyoculuk" hakkında da bilgi edineceksiniz bu sitede. Belki siz de bu hobiye merak salabilirsiniz. 73.
  22. şenol eker

    Ac ve DC ark nasıldır

    Sadece ortalama almak bile bu sonucu verir gibi göründü bana. Ama davulun sesi uzaktan hoş gelir. İşin içine girince neler çıkar bilinmez.
  23. şenol eker

    PIC-ADC bit sayısı hakkında

    Kesinlikle katılıyorum
  24. şenol eker

    PIC-ADC bit sayısı hakkında

    DMA kullanmanız mantıklı görünüyor. Nasıl bir tasarım yapacaksınız bilmiyorum. Ama benim aklıma gelen şu: ADC'den bir süre; örneğin 1 milisaniye boyunca örnek alırsınız, Bu durumda 20 MSPS ve 16 bit hesabı ile 20k word yani 40 kb bir veri oluşacak. Eğer DMA ile alınırsa bu veri, alındıktan sonra bellekten bunu işleyebilirsiniz. Ama ben böyle bir uygulama yapmadım. Dolayısı ile bir sıkıntı çıkar mı tecrübe etmedim ama "bilgi" ile gidersek, çıkmayacak gibi görünüyor. Dolayısı ile DMA ile 80Mbit/s veri alabilen, DMA'nın kullandığı 40kB belleğe sahip bir işlemciye ihtiyacınız var gib
  25. şenol eker

    PIC-ADC bit sayısı hakkında

    Bir kere 20 msps hızda okuma yapacak bir ADC'den bilgiyi nasıl alacağınızı düşünün. Bu, çok yüksek bir hız. 16 bit veri alacaksanız, saniyede 320 megabit veri aktarmanız gerekecek. Diyelim aldık, bunu nasıl işleyeceksiniz? Bunları tasarlayın kafanızda en önce. Ama bu 20 Mhz'de bir hata olmasın? Zira 20 Mhz ciddi bir hız.
×
×
  • 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ı