Etiket arşivi: serial port

EFM8BB1 LCK ile Geliştirme

LCK muhtmelen “low-cost kit” sözcüklerinin kısaltması.
LCK, 6 dolar gibi bir paraya satılan küçük bir geliştirme kartı. Bizimki gibi ülkelerde 6 birim gavur parası bile yeri geldiğinde üzerinde düşünülmesi gereken bir bütçe olabilir elbette. Ama normal ölçütlerde bu, bu kartın adının hakkını vermesini sağlayan bir fiyat:
En başta, bu paranın 1 dolarını EFM8BB10F8G QSOP24 mcu’ya , 5 dolarını da üstündeki debugger’a verdiğimizi düşünelim. Fena değil.
Sonra, Simplicity programını hemen kullanmaya başlamak ve lisanslı bir Keil C51 derleyicisine erişmek faydalarını da hesaba kattığımızda epey iyi oluyor.
Ben bu board’u, radyo haberleşmeleriyle uğraşırken,bir seri port dönüştürücüsü kullanmadan pc’den giden/gelen radyo paketlerini izlemek için kullandım.
Board’un üstündeki debugger’ı VCOM port olarak kullanmak için iki jumper kısa devre etmemiz gerekiyor:

Artık işlemcinin seri portu debugger’a bağlı. Fakat bilgisayar bunu bir comport olarak görmüyor. Silicon Labs’ın 8 bit işlemciler sayfasından Toolstick Terminal programını indirmeniz gerek. Bu çok basit program zaten kullanmayı planladığınız seri terminal programının yerine geçecek.
PC bağlantısı bana çoğu zaman lazım olduğu üzere, sadece bir aptal terminal olarak değil, bazı işleri otomatize etmek ve veriyle gerçek zamanlı olarak oynamak için gerekiyorsa zaten bildiğimiz yoldan devam etmemiz gerek : Seri dönüştürüc + kendi pc uygulamamız.

Ben, radyo haberleşmesinde, aslında uç nokta olacak (yani bir arayüzü olmayan) cihazların testlerini yapmak için bunu kullanıyorum. Hex veri yollamak için BB1’e bir Send_Byte( ) fonksiyonu yazmak “fazlasıyla” yeterli:

void Send_Byte (char c)
{
  SCON0_TI = 0;
  SBUF0 = c;
  csum += c;
  while(SCON0_TI == 0) ;
}

Fakat, madem terminalden verilere bakacağız desimal sayılar görelim hatta açıklayıcı string’ler yazdıralım falan diyorsak o zaman printf( ) ‘i kullanmalıyız. 8051 çeşitlilik konusunda yeryüzündeki eklembacaklılarla yarışacak kadar türe sahip olduğu için, <stdio.h> include etmenin bu işi çözmesini beklemek yaşadığımız dünyayı hafife almak olur.
printf( ) bir port yazması için putchar fonksiyonunu çağırır ve bu fonksiyon
<program kurulum yeri> \developer\toolchains\keil-8051\9.60\LIB dizininde bir C dosyası olarak yer alıyor. Oraya gidip bunu modifiye edebiliriz. Bakarsanız, orada saçma sapan bir yazdırma kodu olduğunu göreceksiniz.
Veya daha kökten bir çözüm olarak kendiniz, bu işleri yaptığınız C dosyasının içinde aynı adda bir fonksiyon yazarsınız:

char putchar (char c)

Bunu, benim yukarıdaki Send_Byte’ın aynısı yapsanız çalışacaktır. Keil’in kendi dosyalarını değiştirmek zorunda da olmazsınız. printf sizin putchar’ı çağıracaktır (object scope).

Gönderme işlemini belli bir zamanlama (scheduling) içinde firmware’in yapmasını istiyorsanız sprintf kullanıp buffer’ı haberleşme thread’inin yollamasına bırakmak da kullanılabilir.

Burada not etmek istediğim bir konu var: Sadece bir printf() çağrısı yapmak için (örneğin bir int değerini desimal olarak göstermek için) programımıza binen ek kod yaklaşık 1k civarındadır).
Bu, güzel bir örnek. Çünkü EFM8BB1 gibi bir mcu’ya 1k ‘lık bir programla hayret edilecek kadar karmaşık işler yaptırabilirsiniz aslında. Yani bu, standart kütüphane fonksiyonları kullanarak low-code programcılık yapmak istemenin neye malolduğunu göstermesi açısından güzel bir örnek.

Yazının ileride ekleyeceğim bölümlerinde bunu bir PC’ye bağlamadan beslemenin yöntemlerinden söz edeceğim.

Radyo Modülü Bağlamak

nRF24L01+ modülünü çalıştırmak için gerekli sinyalleri şu portlara atadım:
* IRQ : P00
* SCK : P06
* MISO : P07
* MOSI : P10
* CSN : P11
* CE : P12