Yazar arşivleri: selimpehlivan

selimpehlivan hakkında

Sen anladın onu...

PIC32MM ile PWM

Aslında PIC32MM çiplerinde pin remap fonksiyonu “peripheral pin select” adıyla var. Ancak ilk üç capture/compare modülü için serbest pin ataması yapılamıyor. Bunlar aynı zamanda birden çok çıkışla kullanılabilen modüller. Bu çıkışların yerleri sabit. Örneğin, QFN28 kılıf olan versiyonda Output-Compare çıkışlarının hangi pinlerle paylaşıldığını aşağıda görüyorsunuz:

Pinler OCMxy designatoru ile isimlendirilmişler. Burada;
x modül adı oluyor. Yerleşik pin fonksiyonuna sahip modüller CCP1, CCP2 ve CCP3
y modülden çıkış alabilen kanal indeksi oluyor. A,B,C,D,E ve F olarak 6 “olası” kanal var. Bunlar tahmin edebileceğiniz gibi birbirlerinden tamamen bağımsız çıkış üretmiyorlar. Hatta; A,C,E’yi bir grup B,D,F’yi bir başka grup olarak kabul edebiliriz.

PIC32MM USB Curiosity Development Board üzerine PWM’leri denememiz için bir RGB LED koymuşlar. Bu malzemenin,
* Kırmızı LED’i OCM1B
* Yeşil LED’i OCM2B
* Mavi LED’i OCM3E
çıkışlarına bağlı. Her LED başka bir CCP modülünde olduğu için sayısız renk kombinasyonu elde edebiliriz.

LED’leri farklı PWM duty cycle’ları ile sürüp renk ve parlaklık ayarı yaptırmak, bu demonun ana fikrini oluşturuyor. Galiba, Microchip’in sitesinde de bununla ilgili bir demo görmüştüm ama indirip çalıştırmaya fırsatım olmadı. Zaten buna gerek de yok. Çok basit bir-iki ayarlamayla üç PWM kanalı emrinize amade oluyor.

Şart mı bilmiyorum ama ben bu deneme için elimdeki Initialize() kodunda bu pinleri (RD1, RC3 ve RC15) çıkış yaptım.

CCP modüllerini devreye almak için yapılacak minimum ayarlama; timebase seçmek, çalışma modunu ayarlamak, çıkış pinlerini ve polaritesini ayarlamak ve periyot register’ına pwm periyodunu girmekten ibaret.
RGB LED sürerken en basit anlamıyla birbirinden bağımsız edge aligned bir PWM yeterli olduğu için her modül 16 bit dual edge compare modunda, bağımsız çalışıyor (dead time da yok). Bu çok basit bir kullanım şekli. PIC32 MCCP Referans Manual’ini incelerseniz CCP modüllerinin uygun bir donanım tasarımıyla çok enteresan şeyler yapılabilecek özellikleri olduğunu göreceksiniz.

CCPxPR : PWM periyodunu belirler.
CCP1RA : Edge aligned PWM için bunu 0 kullanıyorum.
CCP1RB : Falling-edge match değeri. Duty Cycle’ı bu belirliyor.

Dev. Board’lar üzerindeki potansiyometreyi LED’lerin parlaklığını (PWM DC) ayarlamak için kullanıyorum. Hangi rengin seçileceğini de yandaki üç push-button belirliyor. Potansiyometre RC8 pini ile paylaşılan AN14 analog kanalına bağlı. MM’in ADC’sinden ayrıca bahsediyor olsam da burada ADC’yi 10 bit okuma için başlatan ve AN14’ü okuyan bir kod da main.c içinde var.

PIC32MM USB Curiosity Board üzerinde çalışmaya hazır kodlara bu klasörden erişebilirsiniz:

Demokrasi alışkanlık yapar.

Bence Türkiye’de “demokrasi”nin karşı karşıya olduğu en büyük tehlike halkın politikacıları yalan söylemeye zorlamasıdır.
Politikacılar yalancı ve istismarcı oldukları için halk masumca onlara kanmış değildir. Pazarda sesi en çok çıkanlar hilebaz çığırtkanlar oldukları için dürüst satıcıların sesleri duyulmuyor değildir.
Kök neden şu ki, bu halk düpedüz yalan istediği için, yalanı sevdiği için, istismar edilmekten garip bir zevk aldığı için, dünyaya dair görüşleri doğrudan yalanlar üzerine kurulu olduğu için piyasadaki politikacılar da yalancı soytarılardır.

Benim gençliğime kadar olan dönemde Türkiye’de demokrasi arada balans ayarına giren, vesayetçi güçlerin sınırlarını çizdiği güce erişimi kontrol edilmiş bir oyundu. Bu oyunu oynayanlar kişisel hayatlarında halka gözüktükleri kadar avam insanlar değillerdi. Halkın hoşuna gidecek şeyler söylemek politikanın bir gereğiydi ama sadece bunu yaparak iktidarda kalınamazdı. Politika yalnızca halkın önünde oynanan bir tiyatrodan ibaret değildi. Güç dengelerini gözetmek gerekiyordu.

Sonra bu oyun değişti. Söz millete geçti. Sözün millette olması hakimiyetin Allah’ta olması gibi bir şeydi. Sonuçta güç, millet adına onu kullanmaya hevesli acemi politikacıların eline geçti. Güç dengesi gözetme gereği kalmadı. Ve bizim gençliğimize kadarki dönemde gördüğümüz anlamıyla politika denen şey de bitti. Artık politika diye bir şey hiç yok. Bir adamın istediğini yapabildiği, dün söylediğinin tam zıddını bugün söylediğinde aynı kişiler tarafından alkışlandığı bir yerde artık demokrasi diye bir oyun sergilemeye gerek yok. Artık başka bir oyun var ve bu oyunda akıllı filan olmak da gerekmiyor. Şimdi Erdoğan çok da ötesini düşünmeden pat diye bir şey yapıveriyor. Ve onun ne anlama geldiğine, nedenine vs. o ve adamlarından çok muhalifleri kafa yoruyorlar.
Yalancı birinin hafızası iyi olmalıdır. Yalancı biri iyi gözlemci olmalıdır. İyi laf yapabilmelidir. Bunlar eskiden bir politikacıda aranan meziyetlerdi. Artık bunlara gerek yok.

Bu değişimin benim için ilginç olan kısmı halkın senelerdir kendisi için oynanan demokrasi oyununu aslında pek de hak etmediğini görmek oldu. Bir doktora ya da bir avukata gitsem, kendimi ona yakın hissetmeme neden olacak şey benim gibi konuşması olmazdı. Hatta pek çok profesyonel meslek erbabı için benim gibi konuşmaması, onu çoğu zaman anlayamıyor olmam, hatta onunla çatışma içinde olmam ona güven duymama neden olurdu. Benden daha çok şey bilmediğini düşündüğüm birine niye kendimle ilgili tasarruflar vereyim ki, değil mi? Ama ilginç bir şekilde konu halk ve onu yönetme iddiasındaki tipler olduğunda bu çok basit mantık çalışmıyor. Halk istisnasız her lafını anladığı ve duymak istediklerini ona söyleyen vasat oyuncuları tercih ediyor.

Oysa, bizi yöneten insanların en az bizim kadar akıllı, donanımlı, dünya görüşü net insanlar olmasını gerekli bir şey olarak görüyor olsaydık, onların her kararının hoşumuza gitmeyebileceğini, çünkü yukarı doğru çekilmenin aşağı itilmekten çok daha rahat bozucu bir şey olduğunu da bilirdik.

Bir işletmeyi, bir atölyeyi, bir çiftliği, bir fabrikayı, bir okulu ya da bir ülkeyi yönetirken, kapasitesi olan yöneticilerin alacağı kararlar yönetilen insanlardan alabildiğine destek ve alkış almayacaktır, bundan emin olabilirsiniz.

Bizi yönetecek kişileri seçmeyi istemek gibi aslında çok da gerekli ve akılcı olmayan bir takıntıyı kutsallaştırmışsak, en azından bu kadarlık bir yönetim deneyimine sahip olmamız gerekmez miydi?

İnsanlar palavra dinlemeyi sıkıcı gerçeklerle yüzleşip kendilerini aptal gibi hissetmeye tercih edeceklerdir. Çevrenizde olup biteni anlamazsanız, içine düştüğünüz durumun farkında olmazsanız belki neşeniz kaçmaz. Ama bu o çevrede yaşıyor olduğunuz gerçeğini de değiştirmez. Bir bakmışsınız iki sene önce satın alabildiğiniz şeylere artık paranız yetmiyor. Bir bakmışsınız çocuğunuz eğitim alamadığı için işe yaramaz bir insana dönüşüyor. Bir bakmışsınız karnınız artık doymuyor. Bir bakmışsınız yapıldığı için nedensizce çok sevindiğiniz köprüden aslında siz hiç geçmiyorsunuz. Bir bakmışsınız siz elektrikli otomobil yapmamıza seviniyorken elektrikli scooter bile alamıyorsunuz.

Bu toplumda akşam saati pazar dağılırken, çer çöpten yiyecek araştırıp hâla gözü bu yalanlardan başka yalan görmeyen insanlar var. Ortak mütteahitlerin milyarlarca euro borcu tek kalemde silinirken kendi kıytırık borcu için namerde boyun bükmek zorunda kalan ama oy vereceği adamda “lider vasfı” arama prensibinden geri adım atmayan feraset sahipleri var. Hayatta teknolojiyle belki de tek ilişkisi, dünyayla tek bağı olan cep telefonuna çakılan ÖTV’yi Osmanlı’yı kuruyoruz, Ay’a gidiyoruz diye sineye çeken budalalar var.

Uzatmayayım örnekleri.. Zaten benden çok şey görüyorsunuzdur siz de.. Şimdi biz önümüze çıkarılan tiplerden tipler beğeniyoruz, oy veriyoruz ve en çok oyu alan gücün başına geçiyor. Kabaca, buna demokrasi diyoruz.
Yukarıda durumlarını özetlediğim milyonlar bir şey mi “seçiyorlar” ki siz her şeyin farkında olan insanlar onlarla aynı sandığa zarf atıyorsunuz? Bence demokrasi hakkında düşünmeye tümevarım yaparak devam etmeliyiz ve tam da bu insanlardan başlamalıyız.

Demokrasiye olan varsayımsal güvenimiz benim “gerçek İslam bu değil” sendromu adını taktığım şeye benziyor: Özünde toplum için oldukça tehlikeli, kendi içinde temel sorunları olan, yaşadığımız çağla uyumsuz bir şey var. Akıllı insanlar tarafından sınırları çizilerek ve modernize edilerek kullanıma sunulmuş. Biz bu oynadığımız şeyi o şeyin aslı sanmışız. Sonra oyunu abartıp, kum havuzumuzdan çıkıp tüm hayatımıza aktarınca elimiz ayağımız yanıyor. Ama üstümüzdeki ateşi söndürmeye çalışırken bile “gerçek İslam bu değil” deyip, bir zamanlar oynamamız için verilmiş “evcilleştirilmiş versiyon”u yâdediyoruz. Oyuncuları suçlamayı tercih ediyoruz.

Bence demokrasi de aynı din gibi. Gerçekliğine gerçekten iman edildiğinde toplumu mahvedecek bir şey. Serbest piyasa koşullarında varlığı yokluğundan daha kârlı olduğu için bir seviyeye kadar varolmasına izin verilen tehlikeli bir şey: Sigara gibi. Ama tüm bunları yana yana isteyenler de insanlar sonuçta, öyle değil mi? İnsanların palavralara bayılmasının suçlusu yalan söyleyenler değil ki. Demokrasiyi de bu yüzden onurlu bir toplumun olmazsa olmazı olarak görüyoruz. Çünkü biz böyle seviyoruz. Bu artık alışkanlık yapmış. Ve bunun farkında olanlar için alışkanlığımızı sorgulamamızı söylemenin riskine değmez.

Medya bile lazımmış.

Ekmek almak için fırına çıkmıştım ve bir tane de Cumhuriyet gazetesi aldım. “Covid19 tespit edilen kişi sayısı 5 oldu” gibi bir manşeti vardı yanlış hatırlamıyorsam. Ondan sonra bir daha gazete falan almadım. Bazen bir şey sarmak veya ateş yakmak için gazete lazım oluyor. Balkonun altındaki depoda tomarla gazete var. Bazen hemen hemen hiç okunmamış cillop gibi Zaman gazetelerine denk geliyorum. Esrarengiz bir biçimde bu gazeteleri milletin kapılarına bırakıyorlardı. Bunlar o döneme ait nüshalar. Harekete haksızlık ediliyor tadında yazılarla dolu. Birkaç tane cemaatçi yavşak ülkenin sahibiyle açıktan pazarlık edecek diye amma da kağıt israf etmişler.
Bazen Posta ya da Sabah gazetesine denk geliyorum. Bu gazetelerde kendinden emin, hatta biraz kasılmış bir genç adamın altında ekonomiye dair kendi kendine üç-dört kez tekrarlayınca sadece gülünç gelen cümleler yazılı oluyor. O genç adam 3 aydır kayıp. Bizim standartlarımıza göre bile fazlasıyla tuhaf bir şekilde ansızın istifa edip ortadan kaybolmasının ardından bunun haberini bile yapmaktan korkan çanak yalayıcı bir it sürüsü şimdi sanki ülkenin sahibi olan adamın damadı olan ve senelerce ekonomiyi yönetmeye çalışıyor gibi gözüken bu adam sanki hiç varolmamış gibi davranıyor.
Neyse ki, gazeteleri uzun süre görmek zorunda değilim. Soba ya da mangal yanar yanmaz beni geçmişe götüren bu sahneler gözden kayboluyorlar.
Çok uzun zamandır gazete almıyorum. Yine çok uzun bir zamandır TV de izlemiyorum. Aslında bu kavramı artık ayırt etmek zamanı geldi: Biz evde TV yayını izlemiyoruz, TV denen bir yüzeyi tamamen ekran olan, duvara asılı büyük aygıttan bizde var, hatta onu her gün açıyoruz. Ama orada patronu adına iktidarı yalayan onursuz adam ve kadınları göstermek için elektrik harcamıyoruz artık.
Ben bir zamanlar bilgisayar başında çalışırken TV’de aktüaliteye dair programları açardım. Konuk(lar) davet edilen konuşmalı programlar olurdu. Çok uzun bir süredir onları da izlemeyi bıraktım.
Eskiden ne diyor acaba bu yavşaklar diye arada girip baktığım “yandaş” ve hatta resmen “trol” haber siteleri vardı. Zavallı insanların kolay kolay hayır diyemeyecekleri şeylerin arasına parti bülteninde bile yazılması kıroluk olacak kabalıkta cümleleri serpiştirip bolca da futbol geyiği ile harmanlayıp etsiz çiğ köfte yaparlardı. Epeydir onların da hâli nice bilmiyorum.
Benim gibi, sosyal bilimler alanında eğitim almamış, kültür sanat yazın faaliyeti takip etmek gibi bir lüksü olmamış, yazılı basınla ilişkisi zamanında arada gazete okumak olmuş olan sıradan bir vatandaşı bile bu medyadan bu kadar bilinçli ve kesin bir seçimle uzaklaştırmış olmalarına dikkatinizi çekerim.
Ben şu yavan hâlimle, değil yazısını okumak, karşıma canlısını çıkarsanız iki üç dakika içinde siktir çekeceğim insanların yazar ya da aydın diye gündemde tutulmalarını anlayamıyorum. Türk ana akım medyasından bu kadar iyi yalıtılmış olduğum halde bana Rasim Ozan Kütahyalı, Nagehan Alçı, Hilal Kaplan, Ahmet Hakan ve adını şimdi ezberden yazma imkanım olmayan daha militan birkaç iktidar yalakası kokuları nereden geliyor inanın bilemiyorum.
Arada twitter’da, haber kanallarında icra edilen tartışma programı tiyatrolarından klipler görüyorum. Yok falanca füze atmış (bu lafı uyduran davarolar da artık füzeyi ne zannediyorarsa) yok filanca ötekinin suratına neler demiş. Ben takip ettiğim kitlenin sonucu olarak “muhalif” geçinen güruhun bu şekilde paylaşımlarını görüyorum. Ötekilerin durumu nedir düşünmek bile istemem. İktidarı yalamak için neredeyse evrim geçirip bir taraflarından yeni bir dil bitecek insanların kanalına çıkıp muhalif konuşma yapıp ertesi gün de twitter’da klibi yayınlanan arkadaş bigbang’den öncesini anlatsa ne yazar?
Madem başladık bir daha da dönmemek üzere bu programlara dair son hatırladığım şeyleri de yazayım.
Olay şudur: İktidar bir gündem belirler ve bunun gerçekte bizim yaşadığımız hayatla alakası bile yoktur. Aynı beş tip o akşam bu gündem hakkında konuşmak için televizyona çıkarlar. Bunların arasında muhalif olanlı da vardır ha. Öğretmeninden söz isteyen ilkokul çocuğu gibi sunucudan konuşma hakkı dilenirler. Diş geçirebildikleri bir “karşıt görüşlü” varsa o esnada nedense kameraya bakmadan atıp tutarlar. Bir de neden bilmiyorum bunlar söz sırası kendilerinde değilken telefonlarıyla oynuyorlar ve en dikkatimi çeken de akıcı ve spontane konuşma yeteneğine kenarından bile sahip değiller.

Türkiye Instagram Facebook ve Twitter aboneliği sayısında nüfusuna oranla dünyanın önde gelen ülkelerinden biri olsa da bu sektörler başta iktidar olmak üzere kitlesel siyasi partilerin paralı trollerinin kirletilmiş bilgi çöplüklerine dönmüş durumdadır. Bu iktidarın yok etmek konusunda en başarılı olduğu şeylerden biri de kuşkusuz medya. Medya, “kitlelere” gündemi daha takip edilebilir kılmak için maymunluk yapmak demektir. Bizde artık bu kamu hizmetini gören maymunlar yok. O yüzden bu necip millet peynire zam geldiğini fiyatlar 2,5 katını geçtikten sonra yavaş yavaş anlar gibi olmaya başladı. Ekonomik durumu anlaması bile yıllar geçmiş olmasına rağmen henüz tam mümkün olmayan bu aziz millet haliyle sosyal hayatımızın yüzlerce sene geriye gittiğinin, eğitim kalitemizin yerlerde süründüğünün, doğamızın bilinçli bir şekilde yok edildiğinin, çalışan haklarının ve orta sınıf yaşam standardının birkaç yaratılmış oligarkın zenginliğine kurban edildiğinin elbette farkına varamıyor. Ve bunda yukarıda uzun uzun anlattığım, gündeme kolay erişimin artık mümkün olmamasının büyük etkisi var.

Son yıllarda bu ülkenin her bir ayrıntısına dair en çok yaşadığım duygu, zamanında beğenmediğimiz şeylerin kaybettikten sonra değerini anlamış olmak. Bu basit blogda bile, geçmişte neleri eleştirdiğimi görünce kendi kendime hayret ediyorum. Şimdi o eleştirdiğim şeylerin daha kötüsünü geri getirmek için büyük mücadelelere gerek var. İşte tüm yanar dönerliği, can sıkan basitliği ve gerekmese bile birilerinin borazanı olmadan duramama huyuna rağmen çok sesli medya lazımmış be birader. Bunu bile aratır oldular bize..

EFM8 DAC

EFM8 ‘in üstündeki DAC biriminden bahsetmeye başlamadan önce, digital-to-analog converter denen şeyler hakkında uzun süre devam eden bir kanaatimi not etmek isterim: DAC bana hep lüks bir şey gibi gelmiştir. ADC bir şekilde en başından beri erişilebilirliği olan bir birimdi. Ama DAC, ister bir mcu’da isterse de bir plc’de olsun, sanki hep maliyeti arttıran bir şey gibi geldi bana.

15 sene kadar önce bir iplik boyama makinesinde, boya desenleri oluşturmak için boya püskürten kafaların dönme hızlarını akan ipliğin uzunluğuna bağlı olarak değiştirilebilir yapmam istenmişti. Bulduğum çözüm küçük bir işlemciyle encoder darbeleri saymak ve 8 bitlik bir DAC’a çıkış vererek asenkron motor sürücülerinin hızlarını değiştirmekti. O zaman National’ın paralel bir DAC’ını kullanmıştım, çıkışa bir de opamp koyunca sonuç muhteşem olmuştu. DAC deyince aklıma hep bu iş gelir.

Yıllar sonra da ilginç bir proje için dalga şekli üretme işiyle uğraşmak zorunda kaldım. Artık işlemcilerin üzerinde oldukça hızlı DAC’lar var. Ayrıca çok yüksek çözünürlüklü PWM’lerin olması zaten pek çok durumda DAC ihtiyacını tamamen ortadan kaldırıyor. Ama ben yine de üzerinde DAC birimi olan mcu’lara ayrı bir gözle bakıyorum.

EFM8’de 4 kanal DAC var. Bunlar iki çift olarak kullanılıyor gibi gösterilse de tamamen bağımsız çıkışlar olarak kullanabiliyorsunuz. Bir çifti, birbirinin aynı ya da eşlenik çıkış üretmek istersek beraber kullanabiliriz. DAC çözünürlüğü 12 bit.

Anlatacağım örnek uygulamada DAC çıkışını ses üretmede kullanıyorum. Bunun için 2 DAC kanalını toplam şeklinde kullanmak için bir devre hazırladım. Bu şekilde basit dalgalardan daha çok harmonik üretmek mümkün.

DAC sinyal yolu (bazı şekiller sevgili kızım tarafından çizilmişlerdir)

Bir stereo kuvvetlendirici kullanıyor olsam da mono ses üretiyorum. Kuvvetlendiricinin yüksek giriş direncinin karşısında iki çıkışı dirençlerle birbirine bağlamak bir toplama kuvvetlendiricisi elde etmemizi sağlıyor. Benim kullandığım amplifikatörün bir bias off girişi de var. Bununla yükleme/geçiş vb. anlarda pop/click türü gürültüler olmasın diye çıkışı kapatabiliyorum.

Referans gerilimini, referans gerilim bölücüsünü (REFGN) ve çıkış sürücüsü kazancını (DRVGN) ayarlayarak çeşitli çıkış aralıkları elde edebiliriz. Ben bunlardan 4 tanesini kullanıcı konfigürasyonu ile seçilebilir yaptım:

Bir dalga üretmek iki eksende hareket etmemizi gerektirir: Y ekseni tahmin etmesi kolay olacağı üzere
V = Vref * REFGN * DRVGN * (DAC0H:DAC0L) / 4095
çarpanlarıyla belirlenir.
X ekseni ise zaman. Dalga şeklimizin çözünürlüğüne bağlı olarak, istediğimiz frekansı bir tam periyotta üretecek bir hızla DAC güncellemesi yapmamızı gerektirir.

Daha açık bir deyişle, bir dalga şeklini 12 örnekle tanımlamışsak DAC güncelleme frekansımız istenen dalga frekansının 12 katı kadar olmalı. Örneğin;

Yandaki dalga şeklini tanımlayan “normalize” sinüs dizisi;
32,48,60,64,60,48,32,16,4,0,4,16

Bu diziyi, DAC’a 208us periyotla yüklersek yaklaşık 2,5ms periyotlu bir sinüs çıkışı alırız. Bu da 400Hz kadar eder. Ses çıkışını test etmek için bunu deneyebiliriz.
Burada ilginç olan iki nokta var: Birincisi sample genlikleri unipolar. Çünkü DAC çıkışımız 0V ile seçtiğimiz pozitif Vref gerilimi arasında bir gerilim üretebilir. O yüzden, genliği simetrik bir işaret üretmek istiyorsak Vref/2 kadarlık bir offset eklememiz gerekir.
İkinci nokta, DAC sayısal değerimizle ilgili. Ben bir dalga şekli tanımlarken onu 0..64 gibi bir aralıkta normalize ederek üretiyorum. Eğer donanımsal değil, yazılımsal genlik ayarı yapmak isterseniz bu 0..64 aralığını 0dB kabul edip, sample değerlerini istediğiniz bir sabitle çarpıp, anlık bir çıkış genliği üretirsiniz.

Eğer bu bir ses işareti ise ters-logaritmik bir adım bölümlemesi volume ayarı için uygun olacaktır. 4095 verilebilecek en büyük çıkış değeridir. DAC çıkışını yüklüyorsanız ve 3V gibi bir range ayarı yaptıysanız çıkışın max. değerden önce doyuma ulaşması tehlikesi vardır.

Aşağıda, genel amaçlı kullanıma uygun bir dalga tablosu tanımı paylaşıyorum. Burada her bir dalga tanımı 24 byte’tan oluşuyor (her sample little endian yerleşmiş 12 word). Bunu denemek isterseniz dikkatinizi çekmek istediğim bir şey var: İlk 4 dalga haricindeki dalga tanımları kendisini 3 kez tekrar ediyor. Yani bunların frekansını hesaplarken x12 değil x4 hızla yükleme yapmalısınız.
code quailfier ile dizinin flash bellekte yerleşmesini sağlıyorum ancak mutlak adres veremiyorum. _at_ directive kullandığınızda değişkenleri başlatamazsınız.
Bu yüzden de, bu işleri denerken en başta yaptığım gibi, çalma kesmesi içinde doğrudan bir code pointer’ı çalıştıramıyorum. Bunun yerine waveTable dizi indeksini volatile bir değişken olarak kullanıp compiler’ın verimliliğine güveniyoruz.

unsigned char code waveTable[288] = 
{ 
	// wav-1 : sine +18dB
	0x00,0x01,0x80,0x01,0xE0,0x01,0xF8,0x01,
	0xE0,0x01,0x80,0x01,0x00,0x01,0x80,0x00,
	0x20,0x00,0x00,0x00,0x20,0x00,0x80,0x00,
       // wav-2 : sine +28dB
	0x00,0x03,0x80,0x04,0xA0,0x05,0xE8,0x05,
        0xA0,0x05,0x80,0x04,0x00,0x03,0x80,0x01,
        0x60,0x00,0x00,0x00,0x60,0x00,0x80,0x01,
	// wav-3 : sine +32dB
	0x40,0x05,0xE0,0x07,0xD8,0x09,0x56,0x0A,
        0xD8,0x09,0xE0,0x07,0x40,0x05,0xA0,0x02,
        0xA8,0x00,0x00,0x00,0xA8,0x00,0xA0,0x02,
	// wav-4: sine +36dB
	0x80,0x07,0x0B,0x40,0x10,0x0E,0xC4,0x0E,
        0x10,0x0E,0x40,0x0B,0x80,0x07,0xC0,0x03,
        0xF0,0x00,0x00,0x00,0xF0,0x00,0xC0,0x03,
	// wav-5: symm.sawtooth +12dB
	0xC0,0x00,0xFC,0x00,0x00,0x00,0x40,0x00,
        0xC0,0x00,0xFC,0x00,0x00,0x00,0x40,0x00,
	0xC0,0x00,0xFC,0x00,0x00,0x00,0x40,0x00,
	// wav-6 symm.sawtooth +24dB
	0x00,0x03,0xF0,0x03,0x00,0x00,0x00,0x01,
        0x00,0x03,0xF0,0x03,0x00,0x00,0x00,0x01,
	0x00,0x03,0xF0,0x03,0x00,0x00,0x00,0x01,
        // wav-7: symm.sawtooth +32dB
	0xE0,0x07,0x56,0x0A,0x00,0x00,0xA0,0x02,
        0xE0,0x07,0x56,0x0A,0x00,0x00,0xA0,0x02,
	0xE0,0x07,0x56,0x0A,0x00,0x00,0xA0,0x02,
	// wav-8: symm.sawtooth +36dB
	0x00,0x0C,0xC0,0x0F,0x00,0x00,0x00,0x04,
        0x00,0x0C,0xC0,0x0F,0x00,0x00,0x00,0x04,
        0x00,0x0C,0xC0,0x0F,0x00,0x00,0x00,0x04,
	// wav-9: sq.wave: +12dB
	0xFC,0x00,0xFC,0x00,0x00,0x00,0x00,0x00,
	0xFC,0x00,0xFC,0x00,0x00,0x00,0x00,0x00,
	0xFC,0x00,0xFC,0x00,0x00,0x00,0x00,0x00,
	// wav-10: sq.wave: +24dB
	0xF0,0x03,0xF0,0x03,0x00,0x00,0x00,0x00,
        0xF0,0x03,0xF0,0x03,0x00,0x00,0x00,0x00,
        0xF0,0x03,0xF0,0x03,0x00,0x00,0x00,0x00,
	// wav-11: sq.wave: +32dB
	0x56,0x0A,0x56,0x0A,0x00,0x00,0x00,0x00,
        0x56,0x0A,0x56,0x0A,0x00,0x00,0x00,0x00,
	0x56,0x0A,0x56,0x0A,0x00,0x00,0x00,0x00,
	// wav-12: sq.wave: +36dB
	0xC0,0x0F,0xC0,0x0F,0x00,0x00,0x00,0x00,
        0xC0,0x0F,0xC0,0x0F,0x00,0x00,0x00,0x00,
	0xC0,0x0F,0xC0,0x0F,0x00,0x00,0x00,0x00
};

DAC güncelleme “frekans” ayarı konusuna geri dönelim: Ben bu iş için Timer-2 kesmesini kullanıyorum. TMR2’ye vereceğimiz bir reload değeri ile DAC güncelleme hızını ayarlarız, böylece dalga üretecimizin X ekseni hassas biçimde ayarlanmış olur.

CKCON0 |= 0x30;   // TMR2 clock source -> SYSCLK
TMR2CN0 = 0;      // 
// çalıştırmak:
TMR2CN0_TR2 = 1;  // bu register bit addressable
// çalma frekansını değiştirmek:
TMR2RLL = rld_L;
TMR2RLH = rld_H; 

TDAC (DAC Erişim Periyodu) = istenen işaret periyodu / N
N : Bir periyodun örnekleme sayısı (yukarıdaki örnekte bu 12)
T2 : (TMR2 tick period) = 1/49M
Reload Değeri = 65536 – (TDAC / T2)

Bir çalma ayarında istenen frekans değerini değil, TMR2 reload değerini saklamayı tercih ediyorum.

TMR2 kesmesinde yapılacak iş “sıradaki” sample’ı DAC’a yazmak. Oynatılacak (veya çalınacak diyelim) dalga örneklerini flash bellekte saklıyorum. Bu noktada iki farklı yaklaşım geliştirdim:
Birinci yöntemde, çalma ayarları yüklenirken (mesela bir sequencer’ın belli bir adımının zamanı geldiğinde) flash’tan, sequencer’ın belirttiği dalga setini okuyorum ve yukarıda anlattığım şekilde düzey ölçeklemesi yapıp (normalize sample’ların volume ayar değeriyle çarpılması) ram’de bir çalma tablosu oluşturuyorum (hatta iki tablo oluşturup biri çalarken diğerini yükleme ve geçişleri hızlı yapma gibi bir şey denedim ama 49MHz çalışmada bu çok kritik bir hızlandırma değil).
Çalınacak sesin genliği ya da dalga şekli değişinceye dek çalma tablosu artık değişmiyor.
İkinci yaklaşım daha sade: Çalınacak sample’ları flash’ta normalize halleriyle değil, ölçeklenmiş halleriyle saklıyorum ve çalma sırasında doğrudan flash’tan okuma yapıyorum. Okunacak dalga tablosu indeksini sequencer yüklemesinde bir rom pointer’ında belirliyorum ve sonra kesme kodunda doğrudan pointer’ı çalıştırıyorum. Bu yaklaşımda TMR2 kesme kodu şöyle:

// Play Kesmesi:
void ISR_TMR2 (void) interrupt 5
{ 
   TMR2CN0_TF2H = 0;
   // playBuffer ba$a sarmasi gerekiyor mu?:
   if ( smpIndex > 11 ) 
   {
     smpIndex = 0;
     playIndex = wavIndex;	// çalma indeksini de ba$a sar.
     // durdurma istegi verilmi$ mi?
     if (STOP_REQ) 
     {
       TMR2CN0_TR2 = 0;  // artik player kesmesi tetiklenmeyecek..
       STOP_REQ = 0;
       return;
     }
  }
    
  ///// DAC Update:
  SFRPAGE = 0x30;     
  DAC0L = waveTable[playIndex];  // yukarida anlattigim mevzu!!
  ++playIndex;
  DAC0H = waveTable[playIndex];
  SFRPAGE = 0;
  ++playIndex;
  ++smpIndex;
  
}

playIndex waveTable’ın sıradaki elemanına erişmek için kullandığımız dizi indeksi. Bunu, çalma adımını yüklediğimizde (ne çalacağımızı bize söyleyen veri) öğreniyoruz ve indeksi başlatıyoruz. Bunun yerine, muhtemelen daha efektif bir kesme kodu için
unsigned char code * volatile data playPtr;
şeklinde bir işaretçi tanımı yapıp bunu çalınacak rom sample’ları boyunca da koşturabilirdik.

Burada, özellikle dikkat edilecek bir nokta var: Kesme kodu içinde SFRPAGE değiştiriliyor. Interrupt handler yedeklemeyi hallediyor mu halletmiyor mu hiç endişe etmemek için, bu kesmeyi başka bir kesmenin kesmesi ihtimalini ortadan kaldıralım. (Böyle cümleleri şık hale getirmeye çalışmak işi sulandırmak olur, sonuçta anlatım bozukluğu yok).
Daha açık konuşursam, bu işlemci bir de UART kesmesi çalıştırıyor (native priority’si daha yüksek). Çipi başlatırken UART kesmesini TMR2 kesmesinden daha düşük öncelikli olacak şekilde ayarlıyorum. Çünkü gelen bir byte biraz bekleyebilir (baudrate düşük).
DAC yazması yaparken başka bir koda atlamak SFRPAGE anahtarlaması dışında da sorunlar yaratacaktır. Çünkü DAC güncelleme hızımız SYSCLK hızında. Bu arada yeri gelmişken onu da not edeyim: DAC güncelleme hızını SYSCLK yapmamızla TMR2 kesmesi içinde DAC yazması yapmamız arasında bir bağlantı yok. DAC’ın kendi güncellemesi başka bir şey. Sanırım yazılımdan daha bağımsız DAC otomasyonları yapmak istersek kullanışlı olur. Yine de, ben merak edip DAC update source ile benim DAC yazma kesmemi aynı timer ile çalıştırdım. Sonuç değişmedi. Sonuçta SYSCLK çok hızlı olsa da biz çıkışı 200kHz hızıyla güncelleyebiliriz (bunu da denedim). Bu, tıpkı ADC’de olduğu gibi, “elektriksel” bir kısıt. Kişisel görüşüm, 200k gayet yüksek bir hız!

Son olarak, bir sequencer (kullanıcı tarafından belirlenmiş dalga şekillerini verilen ayarlara göre bir diziden okumak ve art arda üretmek) yapacaksak, çalmayı anlık olarak durdurmak ve devam ettirmek için kullanabileceğimiz makroları da vereyim:

#define Play_Sequencer()  SFRPAGE = 0x30; DAC0CF0=0x80; SFRPAGE=0; \
			  TMR2L = seqData.pt_rld_L; \
                          TMR2H = seqData.pt_rld_H; \								  
                          TMR2CN0_TR2=1; IE_ET2=1; \ 					  
                          PLAYING=1; MUTE=0; LED1=0
								  
#define Stop_Sequencer()  MUTE=1; \
	  	          TMR2CN0_TR2 = 0; IE_ET2=0; \					  
                          SFRPAGE=0x30; \
			  DAC0L=0; DAC0H=0; \
			  DAC0CF0 = 0; \
			  SFRPAGE=0; PLAYING=0; LED1=1 

Sequencer’ın verilen adımındaki ayarlara bakarak DAC’ı konfigüre etmek de şöyle olabilir:

	// cfg.<pwr> bitlerine bak:
	 switch ( seqData.cfg & 0x03 )
	 {
		case 0:		// 2V çiki$
		  REF0CN = 0x80;	
		  DACGCF2 = 0x11;		  
		  DAC0CF1 = 0x00;
		break;
			
		case 1:	  // 1,2V çiki$
		  REF0CN = 0x40;
		  DACGCF2 = 0x10;
		  DAC0CF1 = 0x00;
		break;
			
		case 2:    // 1,6V çiki$
		  REF0CN = 0x80;
		  DACGCF2 = 0x12;			  
		  DAC0CF1 = 0x00;	  
		break;

		case 3:	 // 2,4V çiki$
		  REF0CN = 0x80;
		  DACGCF2 = 0x10;		  
		  DAC0CF1 = 0x00;
		break;
		
	}

	/// wav pointer'ini ba$latalim:
	wav_address = 0x3C00 + 24 * seqData.wav;	
	playPtr = (unsigned char xdata *) wav_address;
	smpIndex = 0;

        /// çalma frekansini güncelle:
        TMR2RLL = seqData.pt_rld_L;
        TMR2RLH = seqData.pt_rld_H;

Yukarıdaki örnek kodda 12 sample’lık bir wav dizisi kullanılıyor ve flash bellekteki 0x3C00 sayfası bu işe ayrılmış. Kullanıcının seçtiği wav indeksi seqData.wav parametresinden okunuyor.
smpIndex, sınır denetimi yaparken 16 bit sayılarla kendimizi yormayalım diye kullanılan yardımcı bir değişkendir. Kesme koduna bakabilirsiniz.

Sonuçta, gördüğünüz gibi, DAC kullanarak bir dalga şekli üretmek, eğer çıkışta analog bir işaret kullanma ihtiyacınız varsa PWM ile aynı sonucu elde etmeye çalışmaktan daha basit bir iştir. Yukarıda bir audio çıkışı (benim aklıma waveform generator deyince ilk bu geliyor) üzerinden örnek verdim. Ancak daha önce, programlanabilir bir sabit akım kaynağı işi için de bu DAC çıkışını kullanmıştım. Çalıştığımız alan, LED parlaklığını PWM ile ayarlamamızın mümkün olmayacağı bir uygulamaydı. Bu durumda EFM8’in bir çipte 4 adet bağımsız kullanılabilen DAC çıkışlarını bir sabit akım kaynağına referans girişi yaparak basit ama doğruluğu yüksek bir çözüm üretebildik. (Bunu da burada paylaşırım bir ara)

Sıcak bir zemheri

Bu sabah yataktan kalkınca saate baktım: 8.20’yi gösteriyordu.
Perdeyi araladım. Sokak lambaları henüz yanıyordu.
Sonra salona geçip gece lambasını yaktım.
Normalde ilk işimin sobayı yakmak olması gerekirdi ama kısık çalışan kombi yeterli oluyor evi ısıtmaya.
Bilgisayarı açtım. Windows’un başlat menüsündeki Hava Durumu canlı kutucuğuna tıklamışım yanlışlıkla. Ben masadaki notlarıma bakarken ekranda lacivert bir fon üzerinde 10 günlük hava durumu listelenmişti.
10 gün boyunca yağmur gözükmüyor ve sıcaklık bugün 18 derece verilmiş.
Tam şu satırı yazarken yine kontrol ettim: Tarih 26 Aralık.
Benim çocukluğumda yeni yılda kar yağacak mı diye bir heyecanımız olurdu. Hiç unutmuyorum, bir sene tam yılbaşı akşamı saat 8 gibi müthiş bir kar başlamıştı ve o gece her taraf bembeyaz olmuştu. Bunun hangi sene olduğunu sorup öğrenmem lazım. İnsan yaşlandıkça geride birbirine benzeyen çok senesi birikmeye başlıyor.

Kurak bir sonbahardan sonra kurak bir kışa girdik. Zemheri dedikleri dönemdeyiz ama kışın karanlığından başka bir şeyi yok. Ne yağış var ne de soğuk. Bu yazıyı yazarken aklıma 4 sene önce yazdığım 27 isimli yazım geldi. O zaman bir Kasım akşamında havanın 27 derece olması beni şaşırtmış. Bugün öğleden sonra dışarı çıktığımda sıcaklık 20 dereceydi. Aralık 26’da. Sadece dört sene içinde buna şaşırmama şaşırır bir duruma gelmişiz.

Bizimki gibi yerlerde küresel ısınmayı dert etmek gündelik koşuşturmacalarla ilgisi olmayan birinin özenti bir hobisi gibi duruyo olsa da bizim onu dert etmememiz onun gündeminde de bizim olmayacağımız anlamına hiç gelmiyor. Yaşadığımız coğrafya bu çalkantıdan en sert şekilde etkilenecek.

Bahçede çalışırken düşündüm: Gündemde kuraklık var ve büyük şehirlerde su tasarrufu yapmak için söylenen bir iki beylik laftan öte bir şey yok gündemde. Peki, ne yapılabilirdi? Buna yanıt veremiyorum. “İnsanlar” iklim değişirken ne yapabilirler ki? Bırakın bizimkisi gibi ilkel toplulukları, uygar toplumlar bile hiçbir şey yapamazlar bu gidişatı durdurmak için. İçinde doğduğumuz koşullar bu hale sokmuş dünyayı. Bundan ne derecede vazgeçebileceğimiz üstünde bile anlaşamayız ki. İnsanlık böyle yavaş ama güçlü değişimlere tepki verebilecek bir uygarlık kurmamış. Daha kötüsü insan doğası da buna uygun değil.

İşin uygarlık ve insan doğası yanına kadar inmeye gerek yok. Biz, koskoca bir ülkenin bir köşesine devasa bir şehir kurmuşuz ve tüm ekonomimizi o şehirdeki düşük katma değerli faaliyetlere bağlamışız. O şehri beslemeye, o şehrin suyunu karşılamaya ve o şehrin pisliğini bertaraf etmek için oldukça verimsiz bir şekilde çabalıyoruz.. Zaten kırılgan olan bir dünyada, kolayca üretebileceğimiz tarım ürünlerini bile ithal ederek bu kırılganlığı akıl almaz bir budalalıkla arttırmaktan başka bir şey yapmıyoruz. Görünen o ki, biz “muasır medeniyet” seviyesine çıkıp kentlileşene kadar, bildiğimiz anlamdaki kentler sürdürülebilirliğini yitirmeye başlamış olacaklar.

Bunca insanın beni bu kadar korkutan bir şey hakkında durup bir an bile düşünme gereği duymaması beni de kendimden şüphe duymak zorunda bırakıyor.
Kuraklık sezonluk bir şey olabilir mi? Belki de iklim düşündüğümüz şekilde değişmez ya da değişse bile bu beslenmemiz, ekonomimiz ve yaşam standardımız üzerinde olumsuz etki yapmaz, değil mi? Ben hayal ettiğim araziyi alırsam, bir ev daha yaparsam ya da arabamı değiştirirsem kızım için iyi bir gelecek inşa etmiş olabilirim belki?
Tüm bu soruların birer soru olarak kalmalarını isterdim ama en korktuğum kısmı burası: Bunların yantını çok yakında öğreneceğiz gibi duruyor.

ADC Auto-Scan

Bir analog-dijital dönüştürücünün çalışma hızı ölçüm devresine ve ADC’nin yapısına bağlıdır. Öte yandan, çok sayıda analog kanalı örneklemek gibi bir ihtiyacımız varsa “hız”a dair kaygımız genellikle, ADC’nin kendi ölçüm hızı değil bizim kanallar arasındaki geçiş hızımızla ilgili olur. Çünkü biz bir işlemcinin üstündeki ADC’yi kullanıyoruz ve kanallar arasında geçmek ve ölçüm sonuçlarını bir yere yazmak gibi işler dönüştürme işleminden daha çok zaman alıyor.

Eğer çok sayıda analog girişi okumak gerekiyorsa ve dahası, bu kanalların aynı anda alınmış örnekleri (mesela bir besleme hattının akım ve gerilim ölçümü gibi) anlamlıysa veya kesin bir bir zaman aralığında alınmış belli sayıda örnek toplamak istiyorsak bu işleri donanımsal olarak halletmek işimizi çok kolaylaştıracaktır.

EFM8’de bu tür durumlarda kullanabileceğimiz bir tarama fonksiyonu var. Bu fonksiyon ADC modülünün ayarlarından bağımsız olarak istediğimiz zaman kullanabileceğimiz bir örnekleme otomasyonu sağlıyor.

  • ADC’yi istediğiniz referans ve örnekleme/dönüştürme hızı ayarlarıyla ayarlıyorsunuz.
  • Sonra tarama işleminin başlangıç kanalını seçiyorsunuz. Taramada en çok 4 kanal ardışık olarak örneklenebiliyor.
  • Sonra kaç kez örnekleme yapılacağını belirliyorsunuz. Burada, komutla başlatılan tek bir örneklemenin sayısı belirleniyor. Bir örnekleme kendi içinde istenen sayıda oversampling içerebilir.
  • Dönüştürme işlem sonucunun xram’de yazılacağı konumu belirliyorsunuz.
  • İşlemi başlatıyorsunuz.

Tarama ayarını bir kez yaptıktan sonra işlemleri otomatik başlatabilirsiniz. Tarama içindeki iki dönüştürme işlemi arasına sabit bir süre koyabilirsiniz veya tarama içindeki dönüştürmeleri birbirine olabildiğince yakın yaptırabilirsiniz.
Bir tarama işlemi yapılırken sonraki işlem için istenen ayarları hemen berlirleyip ADC’yi durmaksızın arka arkaya farklı ayarlarla çalıştırabilirsiniz. Bu, mesela double-buffering gereken okuma durumlarında işin buffer güncelleme kısmını çok basitleştirir.

Aşağıdaki kod örneği, AN6..AN9 kanallarının birer kez ölçülmesi ile elde edilen sonuçları xram’in 16..23 konumuna big endian olarak yazdırır:

SFRPAGE = 0x30;
ADC0MX = 6;		  // AN6 seç (ba$langiç kanali)
ADC0ASAH = 0x00;
ADC0ASAL = 0x10;	  // sonuçlari xram=16 adresinden itibaren yaz
ADC0ASCT = 3;		  // tarama 4 sample sürer (her kanal 1 kez)
ADC0ASCF = 0xC3;          // 4 kanal örneklenecek..	
ADC0ASCF = 0x43;          // _ASEN = 0
SFRPAGE = 0;
ADC0CN0_ADINT = 0;
ADC0CN0_ADBUSY = 1;

Yukarıdaki kodda en ilginç kısım, ADC0ASCF_ASEN bitini 1 yapıp işlemi başlattıktan sonra hemen sıfırlamamız.
ASEN=1 yapıldığında donanım tarama ile ilgili tüm ayarları dahili belleğe kopyalar. Yani, ASEN=1 yaptıktan sonra tüm ayarları bir sonraki tarama için değiştirebiliriz.

Yukarıdaki ayarlarla, ADINT=1 olduğunda işlemler bitmiş ve sonuçlar xram’e yazılmış olacak. Eğer durmaksızın sonraki 4 kanala geçmek isteseydik _ASEN=0 yapar yapmaz ADC0MX’i ve ADC0ASAL’i değiştirmemiz yeterliydi.

Ben bu örnekte öyle yapmadım ama ADC0ASCF_STEN bitini 0 yapıp ADC’yi bir timer ile tetiklenecek şekilde ayarlasaydık (ADC tetikleme kaynağı ayarının tarama özelliğiyle ilgisi yok) zaman aralıklı tarama çalışması elde etmiş olurduk. Belki ileride bununla ilgili bir örnek de paylaşırım.

ADC işleminin sonucunda üretilen veriyi eşzamanlı olmayan başka bir süreç kullanıyorsa bu işi otomatize etmek ve kullanıcı sürecin sadece ram’deki datayla uğraşmasını kodlamak performansı oldukça arttıracak bir iyileştirme. Donanımı kullanmasını bilmek ile donanımdan bağımsız kod yazmakta konfor aramak arasındaki farka oldukça dramatik bir örnek olarak göz önüne alınabilir.

Ekmek Gramajı

Enflasyonun elbette pek çok sebebi var. Ama 2020’den bakınca 1950’leri 90’larda ve 00’larda baktığımızda gördüğümüzden çok daha kolayca anlayabiliyoruz.

Merkez sağ-muhafazakar iktidarlar daima enflasyon ve hayat pahalılığı getiriyorlar. Yanında bolca iki taşı üst üste koyma, hizmet getirme, kalkınma hikayesini de bedavaya veriyorlar. Gerileyen yalnızca ekmek ağırlığı değil, sosyal haklar, sabit gelirlinin alım gücü, eğitim kalitesi vb.

Bunu karşılığında da ülkenin zenginliği belli bir kesime transfer ediliyor. Yani siz boğazınızdan kısıyor, yiyeceğinizin bir kısmını ve sahip olmanız gerekenleri iktidarın o dönemki zengin sınıfına bağışlıyorsunuz. Karşılığında da akşam haberlerinde size kalitesi günden güne düşen bir prodüksiyon sunuluyor.

İşbirlikçi, hain, ahlaksız tipler merkez sağ üzerinden politikaya girdikleri için bunlar oluyor, solcularsa süper adamlar zaten demek istemiyorum. Bunu merkez sağ, muhafazakar, dinciler yapmayı başarıyorlar çünkü bu ülkede bunu yapabilecek güce sadece onlar erişebiliyorlar. Kısaca yapıyorlar, çünkü yapabiliyorlar. Sorun, 1950’lere bakınca bile aynı şeyi gördüğümüze göre yapmaları da değil zaten.

Not: Ekmek zamanla küçülmeliydi zaten, yeme alışkanlıkları değişti diyenlere şu anda dünyanın en çok ekmek tüketen ülkesi olduğumuzu hatırlatırım. Buna karşılık, et ve balık tüketiminde kaçıncıyız bilmiyorum ama üst sıralarda değilizdir diye tahmin ediyorum.

Toprak ve Piyasa

Önce talebi yaratıyorlar sonra da onu karşılayacak şeyleri”arz ediyorlar”(*) Buna da piyasanın serbestliği diyorlar. Arzın talebi karşılamak için çıktığını söyleyecek kadar da cüretkarlar.
Yukarıdaki resimdeki mantıksızlık bunu gösteriyor. O binalar oraya barınma ihtiyacına çözüm arz etmek için dikilmemiş. O binalar dikilmiş ve bir piyasa oluşturulmaya çalışılmış.
Binaların önündeki pis, iğrenç yeşillik de muhtemelen orada yapılması en verimli ekonomik faaliyetin, yani en rasyonel olan şeyin uzatmaları oynamasının görüntüsü.
Piyasa en rasyonel olanı yapmaz. En kârlı olanı yapar. Karnınızı doyurmak; talep icat edip, icat edilmiş talebe dayanarak yüksek bir fiyat belirleyip ev dikmekten daha az kârlı olduğu için oraya bina dikiyorlar. Ve herkes sadece bunun için yarıştığı için bok gibi kalitesiz ve sağlıksız şeylerle beslenmeye mecbur kalıp beton pisliklerinin içinde dolanıyorsunuz.
Toprağın yok oluşunu izleyin, kapitalizmin verimsizliğini göreceksiniz. Çünkü metalaştırma işinin en doğal kurbanı her zaman toprak ve onun üstündeki-altındakiler oluyor.

___________________________________________
(*) Yanılıyor da olabilirim. Belki de birileri bir sabah uyanmış ve ben akıllı telefon istiyoum, hatta onun ekranına bakmak zor geldiğinde koluma takacağım plastik, çirkin bir bileklik istiyorum, eşşek olduğum için sinekler gelince başımı sağa sola sallayıp kulaklığımın kablosuna dolaşıyorum, o yüzden kablosuz kulaklık da istiyorum ama sonra o fındık kadar zımbırtılar kaybolmasınlar diye onları birbirine bağlamak için 25 dolara da ip istiyorum demiştir belki. İddia çöker.

Aşının içindeki transistör

Türk “aydın”ından nefret eden, bunlarla uygarlaşacağımıza oturup onurumuzla ortadoğulu olalım diyen bir düşünce şekli var. Bu düşünceye mensup bir-iki arkadaşım var benim de. Onları trollerken, genellikle konuya giriş şeklim şu olur: Kendini aydın ya da entelektüel olarak görmek bile bir çabadır. Evet birbirlerinin kopyası gibiler, evet genelde halktan ve hatta yaşamdan kopuklar, evet pek bir halttan anladıkları yok.. Ama sandık kurup demokrasi bayramı yapıp idareci seçen ülkede yine de onlarla uğraşmaya devam etmeliyiz. Çünkü, bizimki gibi ülkelerde, kara kalabalığın karşıtı, onunla yaratıcı bir çatışmaya girecek olanlar yine onlar.

Bazen içtenlikle böyle düşünüyor olmama rağmen, Türk “aydın” sınıfının güncel eğilimlere bakışındaki temelsizliği gördüğümde ben de o arkadaşlarıma katılmaktan kendimi alamıyorum.

Güncel konu “aşı karşıtlığı”. Sosyal medyada sesi çok çıkan pek çok ünlü kişi aşı karşıtlığıyla dalga geçiyor. Aşıların yüksek teknoloji ile üretildiğini, bu işte gerçekten akıllı insanların çalıştıklarını, bilimin iyi bir şey olduğunu falan öyle ya da böyle, bir şekilde biliyorlar. Buraya kadar eleştirecek bir şey yok. Herkes, etrafındaki her teknoloji hakkında bilgi sahibi olmak zorunda değil. Öte yandan, kendisini “bizim” tarafta görme çabasındaki bazı “aydın”ların duruşlarını belli etmek için amacını aşan şekilde çabaladıklarını görüyorum.

Çocuğun biri bir tweet atmış. covid19 aşılarında luciferase diye bir madde varmış, bu madde genlerimizi değiştirip bizim içimizde “nano” transistörler üretmemize neden oluyormuş. Bu transistörler de bizi radyo dalgalarını “toplayan” antenlere dönüştürecekmiş.

Yukarıdaki şeyler yazarken insanı gülümsetiyor. Aslında blogumun teknik kısmına, anten empedansı nasıl oluşur, onu süren devrenin rezonansı nasıl belirlenir, alttaki sürücü kat ne şekillerde olur konularını anlatan ilginç derecede basit bir makale eklemeyi düşünmüştüm birkaç gün önce. İnsana bir dna enjekte edip onu transistör üreten bir makineye dönüştürüyorsun. Bu transistörler sadece akımı ya da empedansı dönüştürebilirler. Onlarla frekans seçiciliği olan bir anteni fiziksel olarak nasıl gerçekleyeceksin. Ara-frekans katları, demodülasyon, bu dijital bir radyoysa mantıksal bloklar nasıl gerçekleniyor? Hangi modülasyonlar kullanılabiliyor (ki özellikle ilgimi çeker bunun yanıtı) ? Ben bu iddiayla ilgilendim. Her şey bir yana, bilim kurgu güzeldir. Ayıla bayıla izlediğimiz dizilerdeki saçmalıklar sanki bundan daha çok soru mu sordurabiliyordu bize?

Bu iddiaları biraz daha başka şekilde ve biraz daha ünlü birilerinden duysa hemen inanacak bir sürü kişi de bu çocukla dalga geçmeye başlamış. Buna inanmıyorum, saçmalık bu demekle kalmıyorlar. Akıllarınca espri yapıyorlar, bu konuda yarışa girmişler. Tek bir kişiden bile, genler değişince bedenimizin nasıl transistör ürettiğine dair bir espri göremedim. Ya da transistör ile alıcı anten nasıl oluyor diye sorana denk gelmedim. Oysa bir iddianın saçmalığı üzerine komiklik yapmaya yelteniyorsanız o iddianın neden saçma olduğu konusunda basit bir iki düşünceniz olabilmeli, değil mi? Biriyle dalga geçerken, dalga geçtiğiniz konuda güveninizi sağlayacak kadarcık bilgi sahibi olmanız gerekmez mi? Bu adamlar muhtemelen daha önce radyo falan görmüşlerdir. Hatta biraz daha iyimserlikle düşünürsek, cep telefonunun ya da bluetooth’un falan radyo dalgalarıyla çalıştığını duymuş olma ihtimalleri bile var. Ama bununla ilgili de pek espri yok.

Bilim, bilmekle ilgili bir şey. Bilmediğiniz bir şeyi savunuyorsanız onun doğruluğuna inanmışsınız demektir. Bilmediğiniz bir şeyi eleştirmeniz, hatta ciddi yorumunu bitirmiş kenara koymuş gibi komikliğini yapmanız da bir şeylere “inanmış” olmanızı gerektirir. Ki bu da dindarların uzmanlık alanı olur. Ama bizde Atatürkçülüğün, solculuğun ya da laikliğin kaderini paylaşan bir “akılcılık” var. Bizde dogmanın yerine bilimi koyan insanların çoğunun bir şeyler bilmek gibi bir kaygısı yok. Bizim coğrafyada cehaleti besleyen şey bilime inanan ama onun hakkında çok fikri olmayan yarı aydın güruhtur.

Yüksek frekans transistörü sentezlememize neden olan dna genlerinden bahseden çocuk naif bir örnek. Bu cephede daha vahşi, tehlikeli ve popüler oyuncular da var. Abdurrahman Dilipak gibi. O, aşıların kısırlık yaptığını iddia ediyor ve covid diye bir şey olmadığını, ahaliyi aşıya ikna etmek için gribin covid19 diye isimlendirildiğini savunuyor. Kafalarının çalışma şekline bakarak, inanç denen şeyin ne menem bir şey olduğunu da düşünerek güvenle iddia edebiliriz ki transistörcü çocukla dalga geçenlerin Dilipak karşısında pek şansı yok. Zaten Dilipak’ın 5G’den aşıya ve kafa yapan otlara kadar her konuda atıp tutmasını eleştiriyor gibi yaparken aslında bal gibi ciddiye almış olmaları da bu çaresizliğin bir göstergesidir.

Lafı getireceğim yer ise şu: Burası ortadoğu. Bilimin bilinirliğinin en az olduğu yer. Aydın kesimi bunun istisnası değil. Bu açıdan bakınca bilim inkarcıları bilim inkarcılarıyla dalga geçenlerden çok daha içten ve anlaşılır gözüküyorlar. O yüzden genellikle kazanıyorlar. Deprem “şiddeti”nden işsizlik oranına, salgın hastalıktaki günlük yeni olgu sayısından yandaşa satılmış piyangodaki kazanma oranına kadar her konuda sayılarla oynamaktan çekinmeyen ve bu cüretinde haklı çıkan iktidarın taşıyıcı ayaklarından biri işte bizdeki bu bilimden arınmış aydınlık kafalar.

Sosyal medyada ya da benzeri bir yerde, kitlesel olarak takınılan bir tavrı savunmak, savunduğunuz şeyi benimsediğiniz anlamına gelmez sayın yarı-aydınlar. Bu sizi bir tavır sahibi biri de yapmaz. Duruşunuz, iddianız, seçtiğiniz “taraf” en sonunda bir bilgiye, bir düşünceye, bir deneyime dayanmalı. Kalabalığın yönüne bakıp kendi bilinirliğinizi pekiştirmek için bu milletin cahilliğini kullanarak bu milletin cahilliğini onları yönetmek için kullananlardan farklı bir halt yemiş olmuyorsunuz.
Şahsen ben konuşmayan bir patatesi konuşanına tercih ederim.

Ülkemiz iyi eğitim almış ve katma değeri olan bir mesleğin profesyoneli olmuş orta sınıflar için çekiciliğini yitirdikçe gericilik karşısında akılcılığı savunmak bu akılsızlara kalmaya devam edecek işte.

nRF9e5 Test Programı

Kablosuz bağlantı kullanan bir şeyler üstünde çalışıyorsanız ve daha da kötüsü donanım da size aitse işe basit haberleşme denemeleri yapmakla başlamak mantıklı.
Burada, nRF9e5 sub-GHz SoC ‘u test etmek için basit bir uygulama paylaşıyorum.

Gerekenler:
* Test edeceğiniz nRF9e5’li board (device under test),
* Bunun üstündeki EEPROM’u programlamak için bir programlayıcı,
* PCT, PC’ye bağlanan bir radyo terminali
* PCT’yi izlemek için bir PC programı veya bir seri terminal programı,
* Vereceğim firmware’ler

Bu programda, radyo cihazları rol değiştirmiyor. PCT daima dinlemede, test edeceğimiz 9e5 cihazı da sadece gönderme yapıyor.
Program 8MHz kristal kullanıyor.
Program 9e5’in P02 portunu (Pin:2) her göndermede kısa bir süreliğine açıp kapatıyor. Buraya LED bağlayabilirseniz TX anlarını gözlemleyebilirsiniz.
Her 786,4ms’de bir veri gönderiliyor. Bunun zamanlamasını Timer1 yapıyor.
Veri gönderilen kanal 866MHz bandında 218. kanal.
Hedef adresi : E2.E2.E2.E2
Alıcının 8 byte payload beklemesi, bu ayarlarda olması ve 16 bit CRC mode’un açık olması yeterli. PCT bu ayarlarla yüklü biçimde dinleme modunda çalışmaya başlayacak ve bir radyo paketi aldığında bunu 62500bps hızında host PC’ye aktaracak.
Veri paketinin yapısı :

byte indexveri içeriği
00x47
1tx_counter[H]
2tx_counter[L]
30x11
40x19
50x35
60x62
70x01

Aşağıda, bootloader yaması yapılmış nRF9e5 firmware hex dosyasını bulabilirsiniz. Bu program yüklenir yüklenmez çalışmaya başlar:

PC Terminal Radyosu için de aşağıdaki firmware’i kullanabilirsiniz. Bu program başlamak için bir komut istemeden, PC’ye bağlar bağlamaz çalışmaya başlayacaktır:

Benim PCT’lerden kullanmıyorsanız, EFM8SB1 kullandığınız sürece, yukarıdaki firmware’i kendi donanımlarınızda da çalıştırabilirsiniz. LED_U (P0.3) ve LED_R (P1.5) çıkışlarının kullanımına dikkat edin!

Alınan verileri gösteren bir PCT PC arayüzünü de burada paylaşacağım.