Jump to content

şenol eker

Administrators
  • İçerik sayısı

    80
  • Katılım

  • Son ziyaret

  • Days Won

    28

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

  1. şenol eker

    Sayısal Vatan Haini

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

    Zaman Ayarlı Devre

    Soruyu açar mısınız? Kafamda birçok senaryo canlandı birbirinden çok çok farklı. Daha ayrıntılı yazarsanız size uygun cevap gelecektir.
  3. şenol eker

    False = 0; True = Kaç?

    "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?
  4. 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ı?
  5. 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.
  6. Ç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.
  7. şenol eker

    ESP8266 ile buluta veri gönderme

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

    ESP8266 ile buluta veri gönderme

    Donanım tam olarak nasıl? Kafamda canlanan şu: bir mikrodenetleyici (msp430g2553 ) ve bir ESP8266 ile sensörler kullanacaksınız. Sensorler msp430g2553'e bağlı. msp430g2553 ve ESP8266 birbirine uart portlarından bağlı. msp430g2553 sesörlerden verileri okuyup UART üzerinden ESP8266'ya gönderecek, ESP8266 da bunu buluta gönderecek. "Bulut" olarak kastettiğiniz şey, kendinizin yazacağı bir servis mi yoksa hazır bir şey mi kullanacaksınız? Burada 3 yere kod yazacaksınız. Birincisi msp430g2553 içim sensorleri okuyup ESP8266'ya göndermek için, bunu yaptınız sanırım. En azından okuma kısmını. İkincisi ESP8266 için kod yazacaksınız, üçüncüsü eğer siz yapacaksanız, bulut sunucu tarafına kod yazacaksınız. Bu anlattıklarım gibi mi durum? Değilse problemi açık ve net olarak anlatır mısınız?
  9. şenol eker

    Si7021 ve arduino nano every clone

    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?
  10. Önce elimizdekileri ortaya koyalım: Çıkışlar 7 tane (7 segment gösterge için) ve gitişler 1,2,3 ve 4 numaralı 4 adet giriş. Devremizin 4 girişi 7 çıkışı olacak. Ama 7447 zaten BCD girişi 7 segment göstergeye çevireceğine göre, 4 çıkışımız olacak demektir. Yani 4 giriş 4 çıkış. İstenenleri okursak görüyoruz ki: Herkes düğmeye basarsa, o zaman dört çıkışın dördü de 1 olmalı. Soruda öyle söylenmiş çünkü. Denmiş ki: "(Display ekranının kararması için 7447 entegresinin dört girişine de lojik “1” uygulanması gerekiyor.)" Diğer durumlarda ise: 1. düğmeye basılırsa BCD olarak 1, 2. düğmeye basılırsa BCD olarak 2, ... verilecek. Buna göre düğmelerin durumları ve istenen çıkışı yazarsak: tablosunu elde ederiz. Şimdi yapmamız gereken, veri seçiciler ile bu tabloyu elde etmek.
  11. şenol eker

    ttl gate proteus ödevi acil!!

    Ödevlerinizi yaparken anlamadığınız konuları sorarsanız memnuniyetle yaprdımcı olmaya çalışacaktır herkes. Ama "ödevimi yapın" şeklinde anlaşılacak, gönderenin bir sorusunu içermeyen, sadece ödevin kopyasının gönderildiği bir gönderiye cevap beklemeyin. Çünkü biz sizin mesleğinizi öğrenmenizi ve iyi bir mühendis / teknisyen olmanızı istiyoruz. Eğer anlamadığınız yeri sorarsanız yardımcı olmaya çalışalım.
  12. ş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 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.
  13. ş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, 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.
  14. ş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. Bir dener misin?
  15. ş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.
  16. ş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?
  17. ş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 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.
  18. ş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 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:
  19. 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.
  20. ş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.
  21. ş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
  22. ş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 gelmiyor bana. Mikrodenetleyici olarak ne düşündünüz?
  23. ş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.
  24. 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.
  25. 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. numara olarak ekliyorsunuz. Böyle bir program. İşini görüyor olmalı ki, arkadaş bunu marketlerinde halen kullanıyor. Buradan herkese çok destek veremem ama, birden çok kişi alırsa birbiri ile fikir alışverişi yapabilir, uygun oldukça ben de destek veririm. Paket içinde ayrı bir klasörde Caller ID cihazının sürücüsü de var. Kolay gelsin. CID.rar
×
×
  • 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ı