Haberler:

Forum kuralları güncellendi LÜTFEN  okuyunuz:  https://bit.ly/2IjR3ME

Ana Menü

STM8S Yazı Dizisi

Başlatan fgokcegoz, 12 Kasım 2012, 22:20:18

LukeSkywalker

İste begenme meselesi, birisi begenir birisi begenmez.
Ben her seyin derli toplu olmasini tercih ederim , birisi de cikar ben daginik severim der. Ben 2000 sayfa katalgu tercih ederim 10 parca olmasindansa. Bahsettigim entegredeki kisim yarim sayfa surer. Datasheette cikisini belirtmeyeceksen datasheet diye neden yazarsin uzerine? Acclerometerdaki en onemli sey nedir? Bence cikis bilgisinin nasil alinacagi ve ne sekilde alinacagidir. Nasil alinacagi var ne sekilde alinacagi yok mesela. Microchipin kataloglari o konuda cok iyi bana gore. Atmelinkiler de öyle.

bymrz

Alıntı yapılan: LukeSkywalker - 04 Şubat 2013, 20:34:24
İste begenme meselesi, birisi begenir birisi begenmez.
Ben her seyin derli toplu olmasini tercih ederim , birisi de cikar ben daginik severim der. Ben 2000 sayfa katalgu tercih ederim 10 parca olmasindansa. Bahsettigim entegredeki kisim yarim sayfa surer. Datasheette cikisini belirtmeyeceksen datasheet diye neden yazarsin uzerine? Acclerometerdaki en onemli sey nedir? Bence cikis bilgisinin nasil alinacagi ve ne sekilde alinacagidir. Nasil alinacagi var ne sekilde alinacagi yok mesela. Microchipin kataloglari o konuda cok iyi bana gore. Atmelinkiler de öyle.

Hocam aslında datasheet te ilgili bölümle alakalı "şu şu uygulama notlarına bakınız" gibi bir ifade varsa, pek sorun sayılmaz...

ilhan_mkp

hocam stvd için olan header dosyalarında registerler bayte olarak tanımlanmış c ye yeni başlıyorum.
sizin örneğinizde osc oturtma için bir wihile döngüsü var.
void InitClock(void)
  {
     CLK_ICKR_HSIEN = 1;
     while(!CLK_ICKR_HSIRDY);
     CLK_CKDIVR = 0x00;
  }


while(!CLK_ICKR_HSIRDY); bu kısımı stvd ile yazarken nasıl yazmamız gerekir.

JKramer

#48
STVD altında hangi derleyiciyi kullanıyorsunuz? Raisonance için bit tanımlaması (x05 serisi için) şöyle:
/* Internal clock control register */
at 0x50c0 hreg CLK_ICKR;

at (((0x50c0)*8UL)+0) hbit CLK_ICKR_HSIEN;
at (((0x50c0)*8UL)+1) hbit CLK_ICKR_HSIRDY;

Cosmic için de header dosyasının başında  8 ve 16 bit tanımlamaları var, derleyicinin kullanma kılavuzunda bit tanımlaması hakkında bilgi vardır sanıyorum.

Ek: fgokcegoz IAR kullandığından bu tanımlamalar önceden yapılmış herhalde, muhtemelen IAR kurulum klasöründe kendi header dosyaları vardır.

fgokcegoz

Alıntı yapılan: ilhan_mkp - 07 Şubat 2013, 00:19:49
hocam stvd için olan header dosyalarında registerler bayte olarak tanımlanmış c ye yeni başlıyorum.
sizin örneğinizde osc oturtma için bir wihile döngüsü var.
void InitClock(void)
  {
     CLK_ICKR_HSIEN = 1;
     while(!CLK_ICKR_HSIRDY);
     CLK_CKDIVR = 0x00;
  }


while(!CLK_ICKR_HSIRDY); bu kısımı stvd ile yazarken nasıl yazmamız gerekir.

IAR daki header dosyalarında register lara ait bit tanımlamaları bulunduğu için, o şekilde kullanmamız mümkün oluyor. Fakat STVD üzerinde COSMIC compiler kullanıyorsunuz, dolayısıyla header dosyaları farklı... COSMIC Compiler da şu şekilde kullanabilirsiniz.
void InitClock(void)
  {
      CLK_ICKR |= 0x01;                  // CLK_ICKR_HSIEN = 1;
      while(!(CLK_ICKR & 0x02));     // while(!CLK_ICKR_HSIRDY);
      CLK_CKDIVR = 0x00;               // CLK_CKDIVR = 0x00;
  }



"Vicdanın ziyası, ulûm-u diniyedir. Aklın nuru, fünun-u medeniyedir. İkisinin imtizacıyla hakikat tecelli eder." (Bediüzzaman Said Nursi)

ilhan_mkp

hocam cevaplarınız için teşekkür ederim zaten c bilmiyorum cosmic headerleri destangibi uzun uzun yazılmış sizin örneklerdeki tanımlamalar daha kısa ve anlaşılır.

gpio tanımları bir tuhaf geldi bana yada ben anlamadım ama tanımlamalar yapılırken datasheette geçen register isimlerine pek benzemeyen bir yapı olmuş.

c diline hakim olmayan yeni başlayanların iar kullanmasını tavsiye ederim stvd+cosmic ikilisini denedim ve hoş olmayışı hakkındaki yazılanlara katılıyorum.

fgokcegoz

COSMIC teki header lar aslında daha basit. Bit tanımlamaları yok sadece. Byte lar üzerinden erişiyorsunuz. IAR daki header lar daha kapsamlı. Bu yüzden işi kolaylaştırıyor. Neden IAR ı denemiyorsunuzda, STVD+COSMIC ile uğraşıyorsunuz. 32KB a kadar ücretsiz derlemesi mi sizi cezbetti. Ayrıca bu işlerle ilgilenecekseniz, mikroişlemci öğrenmeden önce oturun güzelce C çalışın. Yoksa hep tökezlersiniz çalışmalarınızda. KAAN ASLAN ın A dana  Z ye C Klavuzu kitabını alın, şöyle güzelce bir çalışın. Sonra işinizin ne kadar kolaylaştığını kendinizde göreceksiniz....
"Vicdanın ziyası, ulûm-u diniyedir. Aklın nuru, fünun-u medeniyedir. İkisinin imtizacıyla hakikat tecelli eder." (Bediüzzaman Said Nursi)

bymrz

Alıntı yapılan: fgokcegoz - 08 Şubat 2013, 00:03:50
COSMIC teki header lar aslında daha basit. Bit tanımlamaları yok sadece. Byte lar üzerinden erişiyorsunuz. IAR daki header lar daha kapsamlı. Bu yüzden işi kolaylaştırıyor. Neden IAR ı denemiyorsunuzda, STVD+COSMIC ile uğraşıyorsunuz. 32KB a kadar ücretsiz derlemesi mi sizi cezbetti. Ayrıca bu işlerle ilgilenecekseniz, mikroişlemci öğrenmeden önce oturun güzelce C çalışın. Yoksa hep tökezlersiniz çalışmalarınızda. KAAN ASLAN ın A dana  Z ye C Klavuzu kitabını alın, şöyle güzelce bir çalışın. Sonra işinizin ne kadar kolaylaştığını kendinizde göreceksiniz....

Hocam bu arada STM8'de bütün registerlar ve değişkenler "bit adreslenebilir(bit adressable)" mi ? Özel durumlar var mı?

fgokcegoz

STM8 in register ları bit adreslenebilirdir. Örneğin,

CLK_ICKR_HSIEN = 1;  ile CLK_ICKR |= 0x01;

kodlarının ikiside BSET(Bit Set), assembly komutu ile işletilir.


Bit olarak tanımlanmış bir değişkende ise durum aynıdır. Örneğin aşağıdaki gibi tanımlanmış bir bitimiz olsun.

struct xx
{
   char b1  :1;
   char :7;
}asd;

Yazılım içerisinde asd.b1=1 veya asd.b1=0 gibi komutlar işlettiğinizde bu komutların tamamı BSET(Bit Set) veya BRES(Bit Reset) assembly komutlarıyla koşturulur.

"Vicdanın ziyası, ulûm-u diniyedir. Aklın nuru, fünun-u medeniyedir. İkisinin imtizacıyla hakikat tecelli eder." (Bediüzzaman Said Nursi)

bymrz

anlaşıldı hocam,
8051 gibi işlemcilerde tüm registerlar , bit adreslenebilir değil. O yüzden sormuştum. Bu şekilde olması daha kullanışlı oluyor...

fgokcegoz

Alıntı yapılan: alone_lover - 09 Şubat 2013, 10:51:04
anlaşıldı hocam,
8051 gibi işlemcilerde tüm registerlar , bit adreslenebilir değil. O yüzden sormuştum. Bu şekilde olması daha kullanışlı oluyor...

Evet 8051 de tüm register lar bit erişilebilir değildir.. Ama çoğuna erişmek mümkün. Birkaç register da istisna durum var, o kadar. RAM de ise, bit adreslenebilir bölge mevcut. Orada bit tanımlayıp kullanmak mümkün..
"Vicdanın ziyası, ulûm-u diniyedir. Aklın nuru, fünun-u medeniyedir. İkisinin imtizacıyla hakikat tecelli eder." (Bediüzzaman Said Nursi)

ilhan_mkp

hocam bazı örneklerde şöyle bir header var.
#include <intrinsics.h>

bunu neden ekleme amacımız nedir ?

fgokcegoz

Alıntı yapılan: ilhan_mkp - 13 Şubat 2013, 22:59:53
hocam bazı örneklerde şöyle bir header var.
#include <intrinsics.h>

bunu neden ekleme amacımız nedir ?

Bu eklediğimiz header, mcu ya ait bazı asm komutlarının tanımlamalarını içeriyor. Örneğin;

__enable_interrupt();
__disable_interrupt();
__no_operation();


gibi sık kullandığımız kod satırlarının tanımlamalarını içeriyor. Bu header dosyasını eklemeden, C kodları içerisinde assembly kodlarını yazarak aynı işleri yapabiliriz. Buna örnek olarak şunu verebiliriz, tabi IAR için... (COSMIC için User Guide a bakmak lazım)...

  asm("NOP");    // __no_operation();  assembly karşılığı
  asm("SIM");     // __enable_interrupt();  assembly karşılığı
  asm("RIM");     // __disable_interrupt();  assembly karşılığı
"Vicdanın ziyası, ulûm-u diniyedir. Aklın nuru, fünun-u medeniyedir. İkisinin imtizacıyla hakikat tecelli eder." (Bediüzzaman Said Nursi)

ilhan_mkp

#58
yazımı kolaylaştırmak adına yazılmış bir header dosyası diyebiliriz.

hocam bu arada ben cosmic üzerinde ısrarcı değilim c bilgimin zayıf olması nedeyle iarı indirip kurdum örnekleri derledim.
kit siparişi verdim mali nedenlerden siparişi yeni verdim 5 adette işlemci sipariş ettim.
şimdi kendime merak ettiğim konuları irdelemek için bir pcb hazırlıyorum.
şimdi en önemlisi c öğrenmem.
stm32 kitimde var ama o benim yapmak istediğim işler için çok fazlası olan bir yapı.

fgokcegoz

PCB hazırlamak gerçekten faydalı olur adınıza. Benimde öyle bir düşüncem var aslında. Ama vakit sıkıntısından dolayı bir türlü fırsat bulup başlayamadım. Çalışmalarınızda başarılar dilerim. Bu arada IAR ı C bilginizin düzeyine göre tercih etmemenizi anlayamadım. IAR ın ilaçlı tam sürümünüde bulmak mümkün. Kod sınırlamasıda pek problem değil bu yüzden. Bence IAR ı tercih etmeniz yerinde olacaktır.
"Vicdanın ziyası, ulûm-u diniyedir. Aklın nuru, fünun-u medeniyedir. İkisinin imtizacıyla hakikat tecelli eder." (Bediüzzaman Said Nursi)