Lütfen giriş yapın veya üye olun. Temmuz 25, 2014, 09:47:24 ÖÖ

Gönderen Konu: IAR Embedded Workbench ile ATMEL C programlama  (Okunma sayısı 8708 defa)

0 Üye ve 1 Ziyaretçi konuyu incelemekte.

Çevrimdışı Uykusuz

  • Administrator
  • Yarbay
  • *
  • İleti: 2370
  • Teşekkür: 153
  • elbombaci
IAR Embedded Workbench ile ATMEL C programlama
« : Haziran 14, 2011, 06:07:52 ÖS »
Merhaba arkadaşlar. Sizlere bildiğim kadarınca IAR Embedded Workbench derleyicisi ile C dilini kullanarak Atmel AVR mikrodenetleicilerini programlamaktan bahsedeceğim.

İlk etapta programı buradan indirebilirsiniz:
Linklerin Görülmesine İzin Verilmiyor. Üye Ol ya da Giriş Yap


Programımızı kurduktan sonra programımızı çalıştırıyoruz ve Project menüsünden Create New Project'i tıklıyoruz.


Karşımıza gelen pencereden C dili altındaki "AVR Studio compatible output" seçeneğini seçiyoruz ve OK butonuna basıyoruz. Projemize istediğimiz bir ismi verip kaydediyoruz.


Artık karşımızda main.c isimli bir dosyamız var. Programımızı buraya yazacağız arkadaşlar. Fakat program yazmadan önce yapmamız gereken bir şey var. Kullanacağımız mikrodenetleyici modelini seçmek. Zira derleyicimiz yazdığımız programı hedef denetleyiciye göre derleyecektir. Bunun için alttaki resimde görüldüğü gibi ekranın solundaki projemizin üzerine sağ tıklayıp Options... seçeneğini tıklıyoruz.


Buradan da General Options kısmından kullanmak istediğiniz mikrodenetleyi (Attiny13 gibi) modelini seçiyoruz. Ben elimde Atmega8 olduğundan bu denetleyici modelini seçtim.


Daha sonra mikrodenetleyicimize yükleyecek olduğumuz hex dosyasının ayarlamalarını yapmalıyız. Aynı pencereden Linker sekmesine tıkladığımızda oluşturulacak olan dosyanın uzantısının d90 olduğunu görürüz. Biz bu uzantıyı silip yerine hex yazıyoruz ve Output Format kısmında da intel-standart seçeneği seçiyoruz.


Eğer bit tanımlamalarının bulunduğu dosyaların projenize dahil olmasını istiyosanız General Options bölümündeki Sistem sekmesindeki  “Enable bit definitions in I/O-include files” tikini işaretleyin. Böylece kodunuz içinde TIMSK0 |= (1<<TOIE0); gibi satırlar kullanabileceksiniz.



Artık programımızı yazmaya başlayabiliriz arkadaşlar. Devam edecek  ;)

« Son Düzenleme: Haziran 15, 2011, 12:21:29 ÖS Gönderen: Lugatek »
Projelerimiz için tıklayın Linklerin Görülmesine İzin Verilmiyor. Üye Ol ya da Giriş Yap
Sipariş ve Bilgi için Linklerin Görülmesine İzin Verilmiyor. Üye Ol ya da Giriş Yap ile irtibata geçiniz. Lütfen teknik sorularınızı forumda sorunuz.
Satışta olan Ürünler: PIM-2 Full, PIM-2 Kit, PIM-2 Demonte, PIM-2 PCB  PIM-2 Atmega8, DM-1 Kit, DM-1 Demonte

Çevrimdışı Uykusuz

  • Administrator
  • Yarbay
  • *
  • İleti: 2370
  • Teşekkür: 153
  • elbombaci
Ynt: IAR Embedded Workbench ile ATMEL C programlama
« Yanıtla #1 : Haziran 16, 2011, 11:31:23 ÖÖ »
Artık ilk yazılan programlarda bir gelenek haline gelen led yakıp söndürme işini yapabiliriz arkadaşlar.

main dosyamıza alttaki programımızı yazıp F7 tuşumuza basarak programımızı derliyoruz arkadaşlar. Projemizin kayıtlı olduğu klasördeki Debug adlı klasörün içindeki Exe klasörünün içinde hex dosyamız denetleyicimize yüklenmesi için artık bizi bekliyor. İlk etapta watchdog timer kapalı ve internal RC 8 mhz kristalimizi kullanıyoruz arkadaşlar. Proje dosyamız ve Proteus ISIS simülasyon dosyamız ektedir.

Kod: Linklerin Görülmesine İzin Verilmiyor. Üye Ol ya da Giriş Yap
#include <iom8.h> //I/O TANIMLAMALARININ BULUNDUĞU DOSYAMIZ

void io_init(void){
  PORTB= 0x00;  // PORTB'Yİ SIFIRLIYORUZ.
  DDRB = 0XFF;  // PORTB ÇIKIŞ OLARAK AYARLIYORUZ.
}

void gecikme(void){ // GECİKME OLUŞTURACAK ALT PROGRAMIMIZ
  long j = 0xFFFF;  //GEÇİCİ DEĞİŞKEN J
  while(--j>0);     //J SIFIRDAN BÜYÜK OLDUĞU SÜRECE BİR EKSİLTİLİYOR
}

void main(void){
  io_init();    //PORTB'Yİ ÇIKIŞ OLARAK TANIMLADIK
  for(;;){      //SONSUZ DÖNGÜ
    PORTB^=1;   //PORTB BİR SAYISI İLE XOR İŞLEMİ YAPILIR.
    gecikme();  //GECİKME PROGRAMIMIZ ÇAĞRILIYOR.
  }
}

Bir sonraki programımız yine led yakıp söndürmek olacak fakat bu kez timer interrupt kullanacağız arkadaşlar  ;)
Projelerimiz için tıklayın Linklerin Görülmesine İzin Verilmiyor. Üye Ol ya da Giriş Yap
Sipariş ve Bilgi için Linklerin Görülmesine İzin Verilmiyor. Üye Ol ya da Giriş Yap ile irtibata geçiniz. Lütfen teknik sorularınızı forumda sorunuz.
Satışta olan Ürünler: PIM-2 Full, PIM-2 Kit, PIM-2 Demonte, PIM-2 PCB  PIM-2 Atmega8, DM-1 Kit, DM-1 Demonte

Çevrimdışı Uykusuz

  • Administrator
  • Yarbay
  • *
  • İleti: 2370
  • Teşekkür: 153
  • elbombaci
Ynt: IAR Embedded Workbench ile ATMEL C programlama
« Yanıtla #2 : Haziran 23, 2011, 11:47:40 ÖS »
Şimdiki programımız ATMEGA8 denetleyicisi içerisinde bulundan TIMER0 adlı sayıcıyı kullanarak led yakıp söndürme işlemi olacak arkadaşlar. Bu işlem için TIMER0'ın taşma esnasında oluşturduğu kesme durumunu kullanacağız.

İlk etapta TIMER0'ı ilgilendiren kontrol kaydedicilerini (control registers) inceleyelim.

Timer/Counter Control
Register – TCCR0




CS02 CS01 CS00 bitleri bizi ilgilendirir arkadaşlar. Bu bitler osilatör frekansımızı belli bir sayıya bölüp timere verebilmemize veya Timer0'ın hangi kaynaktan tetikleneceğini seçebilmemize yarar.

CS02 CS01 CS00
0        0        0          Timer 0 durur
0        0        1          Clk sinyali hiç bir sayıya bölünmeden Timer0'a uygulanır. En hızlı saydırma durumu.
0        1        0          /8
0        1        1          /64
1        0        0          /256
1        0        1          /1024
1        1        0          T0 pininden düşen kenarlarda saydırma
1        1        1          T0 pininden yükselen kenarlarda saydırma

Timer/Counter
Register – TCNT0




Timer0 sayıcımızın içeriğini gösterir. Saymakta olan Timer0'ın o an hangi sayıda olduğunu bu kaydediciyi okuyarak öğrenebiliriz. Ya da bu kaydediciye herhangi bir değer yazarak Timer0'ın bu sayıdan devam etmesini sağlayabiliriz. Eğer interrupt kullanıyorsak interrupt içersinde bu kaydediciye istediğimiz bir değeri yükleyerek interrupt periyotlarını dilediğimiz gibi ayarlayabiliriz.

Timer/Counter
Interrupt Mask
Register – TIMSK




Bu kaydedicide de bizi ilgilendiren yine 0. bit olan TOIE0 bitidir. Eğer taşma esnasında (255'den 0 a geçiş) interrupt oluşmasını istiyorsak bu bite 1 yazmalıyız arkadaşlar.

Timer/Counter
Interrupt Flag Register
– TIFR




Bu kaydedicinin yine 0. biti olan TOV0 biti Tımer0'da bir taşma olduğunda 1 olur arkadaşlar. Bu biti her kesme oluştuğunda bir daha kesme oluşmasını istiyorsak kendimiz temizlemeliyiz.

Timer0 ile ilgili tüm kaydedicilerimiz bu kadar arkadaşlar. Şimdi programımızı yazmaya başlamadan önce kısaca kesme vektörlerinden de bahsedelim. Her kesme kaynağının oluşturduğu kesme anında denetleyicimiz farklı bir vektöre dallanır arkadaşlar. Program içerisinde Timer0'da taşma olduğunda dallanılacak vektöre kesme programımız yazmalıdır. Bunu da aşağıdaki belirtildiği gibi yaparız:

#pragma vector = TIMER0_OVF_vect   //Timer0'da bir taşma olduğunda buraya dallanır.
__interrupt void kesme_alt_program(){ //kesme oluştuğunda bu blok çalışır daha sonra kesme anında program hangi adreste kalmışsa o noktaya geri döner.
}

Örnek programımız aşağıdadır arkadaşlar. Yine proje ve Proteus simülasyon dosyalarını ekte bulabilirsiniz.

Kod: Linklerin Görülmesine İzin Verilmiyor. Üye Ol ya da Giriş Yap
#include <iom8.h> //I/O TANIMLAMALARININ BULUNDUĞU DOSYAMIZ
#include <intrinsics.h> // __enable_interrupt(); gibi macroların bulunduğu header dosyamız.

void io_init(void){
  PORTB= 0x00;  // PORTB'Yİ SIFIRLIYORUZ.
  DDRB = 0XFF;  // PORTB ÇIKIŞ OLARAK AYARLIYORUZ.
}

void timer0_init(void){
  TCCR0=5; //Osilatör frekansımız 1024'e bölündü
  TCNT0=0; //Timer0 içeriği sıfırlandı
  TIMSK|=1; //Timer0 kesmesi aktif
  TIFR&=254; //Timer0 taşma biti sıfırlandı
}

#pragma vector = TIMER0_OVF_vect   //Timer0'da bir taşma olduğunda buraya dallanır.
__interrupt void kesme_alt_program(){
  TIFR&=254;
  PORTB^=1;
}

void main(void){
  io_init();    //PORTB'Yİ ÇIKIŞ OLARAK TANIMLADIK
  timer0_init();//Timer 0 kuruldu.
  __enable_interrupt(); //Kurulmuş olan tüm kesmelere izin verir. biz sadece Timer0 kesmesini kurduk.
  for(;;){      //SONSUZ DÖNGÜ
  }
}



Denetleyicimizin osilatör ayarları fabrikasyon ayarı olan dahili 1Mhz RC osilatör durumundadır. 1Mhz i 1uS yapar. Biz bu frekansımızı 1024'e böldüğümüzden Timer0 sayıcımız her 1024uS'de bir 1 arttırılır. bizim Timer0 sayıcımız sürekli sıfırdan 255'e saydığından 1024 ile 256 yı çarparsak 262144 uS de bir taşma olacaktır arkadaşlar. Bu da ledimizin yaklaşık saniyede 3.8 defa konum değiştirmesi anamına gelir. Bu da yaklaşık 262mS yanık kalması ve yine 262mS sönük kalması şeklinde de açıklanabilir.
« Son Düzenleme: Haziran 24, 2011, 12:38:14 ÖÖ Gönderen: Uykusuz »
Projelerimiz için tıklayın Linklerin Görülmesine İzin Verilmiyor. Üye Ol ya da Giriş Yap
Sipariş ve Bilgi için Linklerin Görülmesine İzin Verilmiyor. Üye Ol ya da Giriş Yap ile irtibata geçiniz. Lütfen teknik sorularınızı forumda sorunuz.
Satışta olan Ürünler: PIM-2 Full, PIM-2 Kit, PIM-2 Demonte, PIM-2 PCB  PIM-2 Atmega8, DM-1 Kit, DM-1 Demonte

Çevrimdışı Uykusuz

  • Administrator
  • Yarbay
  • *
  • İleti: 2370
  • Teşekkür: 153
  • elbombaci
Ynt: IAR Embedded Workbench ile ATMEL C programlama
« Yanıtla #3 : Temmuz 30, 2011, 04:06:25 ÖS »
Bu mesajımızda  extarnal interrupt konusunu işleyeceğiz arkadaşlar.

External interruptlar mikrodenetleyicinin dışından herhangi bir anda programımızı kesip o anda belirlediğimiz programı işlemesini istediğimiz durumlarda kullanılırlar. Örneğin bir butona basıldığında yapılması gereken acil bir iş varsa bu kesmeler kullanılabilir. Ya da bu pine bir sinyal uygulayıp bu sinyalin frekansını ölçmemiz gerektiğinde mutlaka bu kesmeleri kullanmalıyız arkadaşlar. Örnekler daha da çoğaltılabilir. Biz bu konuyu bir frekansmetre yaparak ile örneklendireceğiz.

Atmega8'de INT0 (PORTD2) ve INT1 (PORTD3) olmak üzere iki harici kesme pini vardır.

INT0 ve INT1 external interrupt pinlerine ait registerleri aşağıda açıklamaya çalıştım.

İlk değişkenizimiz MCUCR'dir.



0. ve 1. bitler INT0 kesme pini için, 2. ve 3. pinler de INT1 pini için gerekli ayarlamaları yapmamızı sağlarlar.



Bu bitleri değiştirerek interrupt pinlerimizdeki lojik değişikliğin hangi aşamasında kesme oluşacağını ayarlayabiliriz. Örneğin yukarıdaki tablodan da görüldüğü gibi bu iki bit 1 yapıldığında pinimiz 0 seviyesinden 1 seviyesine geçtiği anda interrupt oluşturur.

Sonraki değişkenimiz de GICR'dir.



Bu değişkenimizin 7. ve 6. bitleri INT0 ve INT1 pinlerinden gelen lojik seviye değişimlerinin bir kesmeye izin verip vermemesi ayarlarını yapabilmemizi sağlar. Yani dilediğimiz zaman external interrupt ları bu bitler sayesinde kapatıp açabiliriz.

En son değişkenimiz ise GIFR'dir.



Bu pinlerden bir interrupt geldiğinde bu registerin hangi pinden interrupt gelmiş ise 7. ve 6. bitlerinden ilgili olanı 1 olur. İnterrupt alt programımızda bu bitleri mutlaka sıfırlamalıyız arkadarşlar.


Örneğin INT0'dan yükselen kenarda interrupt oluşturacak bir ayarlama aşağıdaki gibiridir arkadaşlar: (INT0 pinini giriş olarak tanımlamalısınız)

void interrut_int0_init(){
  MCUCR|=b00000011; //yükselen kenar
  GICR |=b01000000; //interrupt aktif
  GIFR &=b10111111; //bayrak sıfırlandı
}

Biz bu external interruptlar ile bir frekans metre yapacağız arkadaşlar. Daha önceden timer interruptları işlemiştik. Frekansın tanımını hatırlayacak olursak bir saniyedeki tekrarlanma durumuydu.

İlk etapta 1 saniyelik bir timer kuracağız arkadaşlar. Bu bir saniyelik süre içersinde INT0'dan gelen interrupt sayısını sayacağız ve 1 saniye sonra bu sayıyı lcd'de göstereceğiz. Timer1 16bitlik bir sayıcı olduğundan 1 saniyelik interruptları bu timer ile rahatça ayarlayabiliriz. Denetleyicimizin dahili 8mhz osilatörünü kullacağız arkadaşlar.

void timer1_init(){
  TCCR1A=b00000000;
  TCCR1B=b00000101;
  TCNT1H=225;
  TCNT1L=125;
  TIMSK|=b00000100;
  TIFR &=b11111011;
}

Henüz LCD sürmek konusunda bir çalışma yapmadık fakat bir sonraki konumuz da LCD sürmek oluverir. Frekans metre projemizin bitmiş halinin Proteus İSİS simülasyon dosyaları ve IAR Embadded projesi ile birlikte ektedir. Aşağıdaki resimde 10Khz lik bir sinyali nasıl ölçtüğü görülmektedir.



« Son Düzenleme: Temmuz 31, 2011, 01:33:37 ÖÖ Gönderen: Uykusuz »
Projelerimiz için tıklayın Linklerin Görülmesine İzin Verilmiyor. Üye Ol ya da Giriş Yap
Sipariş ve Bilgi için Linklerin Görülmesine İzin Verilmiyor. Üye Ol ya da Giriş Yap ile irtibata geçiniz. Lütfen teknik sorularınızı forumda sorunuz.
Satışta olan Ürünler: PIM-2 Full, PIM-2 Kit, PIM-2 Demonte, PIM-2 PCB  PIM-2 Atmega8, DM-1 Kit, DM-1 Demonte

Çevrimdışı Uykusuz

  • Administrator
  • Yarbay
  • *
  • İleti: 2370
  • Teşekkür: 153
  • elbombaci
Ynt: IAR Embedded Workbench ile ATMEL C programlama
« Yanıtla #4 : Eylül 22, 2011, 12:05:16 ÖS »
Merhaba arkadaşlar
Bu yazımızda Atmega8’in dahili eepromunu kullanmayı öğreneceğiz.

Mikrodenetleyicimizin dahili eepromunda bir değişken tanımlayabilmek için değişkenimizin başına __eeprom direktifini eklememiz gerekiyor arkadaşlar.
Örnek bir eeprom değişkeni tanımlaması:

Kod: Linklerin Görülmesine İzin Verilmiyor. Üye Ol ya da Giriş Yap
__eeprom volatile unsigned char ee_degisken=5;Artık bundan sonra eepromdan veri okumak veya eeproma veri yazmak için yapmamız gereken bu değişkenimizi okumak veya bu değişkenimize yazmak olacaktır.
   
Örnek bir eeprom okuma:

Kod: Linklerin Görülmesine İzin Verilmiyor. Üye Ol ya da Giriş Yap
void very_al(){
   vhar temp;
   temp= ee_degisken; //Eepromdan veri okundu
}

Örnek bir eeprom yazma:

Kod: Linklerin Görülmesine İzin Verilmiyor. Üye Ol ya da Giriş Yap
void very_al(){
      ee_degisken = 25 ; //Eeproma veri yazıldı
}
Fakat bu programımızı derlediğimizde derleyicimiz hata verecektir. Programı derlemeden önce derleyicimizin linker ayarlarında ufak bir değişiklik yapmamız gerekecekir.
Proje ayarlarından Linker’a tıklayarak extra options sekmesindeki Use command line options çentiğini aktif ederek aşağıdaki resimde görülen satırları ekliyoruz. Tamama tıklayarak çıkıyoruz.



Artık programımımızı derleyebiliriz arkadaşlar. Yukarıda yazdığımız satırlarda görüldüğü üzere derleyicimiz bize yazdığımız kodlar için ayrı bir hex, eepromda oluşturduğumuz değişkenler için de ayrı bir isimde hex oluşturacaktır. Bu iki hex dosyası sırası ile mikrodenetleyicimize yüklenmelidir.

Örnek Proje: Kaç defa kapatılıp açıldığını sayan proje
Bu örneğimizde mikrodenetleyicimiz kendisine kaç defa enerji verilip kesildiğini saymaktadır. Yazılımımızda her enerji verildiğinde eeprom değişkenimiz bir arttırılmaktadır.

Simülasyondan görünüm:



Ekte IAR proje ve ISIS simulasyon dosyaları mevcuttur.
Projelerimiz için tıklayın Linklerin Görülmesine İzin Verilmiyor. Üye Ol ya da Giriş Yap
Sipariş ve Bilgi için Linklerin Görülmesine İzin Verilmiyor. Üye Ol ya da Giriş Yap ile irtibata geçiniz. Lütfen teknik sorularınızı forumda sorunuz.
Satışta olan Ürünler: PIM-2 Full, PIM-2 Kit, PIM-2 Demonte, PIM-2 PCB  PIM-2 Atmega8, DM-1 Kit, DM-1 Demonte

Çevrimdışı Uykusuz

  • Administrator
  • Yarbay
  • *
  • İleti: 2370
  • Teşekkür: 153
  • elbombaci
Ynt: IAR Embedded Workbench ile ATMEL C programlama
« Yanıtla #5 : Eylül 30, 2011, 06:54:49 ÖS »
Merhabalar

Arkadaşlar bu yazımızda da mikrodenetleyicimizin flash belleğinde string oluşturma ve lcd'ye bu stringleri yazdırma konusunu işleyeceğiz.

Flash bellekte bir sabit oluşturmak için değişkenimizin başına
Kod: Linklerin Görülmesine İzin Verilmiyor. Üye Ol ya da Giriş Yap
__flash yazmalıyız.

Örnek Kod:

Kod: Linklerin Görülmesine İzin Verilmiyor. Üye Ol ya da Giriş Yap
__flash unsigned char degisken=5;
Flash bellekte bir string oluşturmak için de bir dizi tanımlamalıyız.

Kod: Linklerin Görülmesine İzin Verilmiyor. Üye Ol ya da Giriş Yap
__flash unsigned char dizi[] = "www.lugatek.com";

LCD'ye bunu yazdırmadan önce "lcd_yaz" fonksiyonumuzda aşağıdaki gibi atlanmaması gereken bir ayar yapmalıyız arkadaşlar. Daha önceki kullanılan "lcd_yaz" fonksiyonunu bu amaçla kullanamayız.

Kod: Linklerin Görülmesine İzin Verilmiyor. Üye Ol ya da Giriş Yap
void lcd_yaz(const char __flash *s){  
lcd_busy();
while(*s)
veri_yolla(*s++);
}

Artık flash belleğimizde bulunan bu stringi lcd'ye gönderebiliriz. Bunun için yazmamı gereken kod aşağıdadır.

Kod: Linklerin Görülmesine İzin Verilmiyor. Üye Ol ya da Giriş Yap
lcd_yaz(dizi);
Birden fazla string yazdırmak için IAR derleyicimiz bize şöyle bir kolaylık da sağlamıştır.

Örneğin aşağıdaki gibi dört stringimiz olsun:

Kod: Linklerin Görülmesine İzin Verilmiyor. Üye Ol ya da Giriş Yap
__flash char dizi1[] = "www.lugatek.com";
__flash char dizi2[] = "Uykusuz";
__flash char dizi3[] = "ayarlar";
__flash char dizi4[] = "atmega";

Daha sonra bunları aşağıdaki gibi tanımlıyoruz:

Kod: Linklerin Görülmesine İzin Verilmiyor. Üye Ol ya da Giriş Yap
char __flash * stringlerim[] = { dizi1, dizi2, dizi3, dizi4};
Artık lcd'mize istediğimiz numaralı stringimizi aşağıdaki gibi yazdırabiliriz.

Kod: Linklerin Görülmesine İzin Verilmiyor. Üye Ol ya da Giriş Yap
lcd_gotoxy(0,0);  //Üst satır ve en baş
lcd_yaz(stringlerim[0]);  //www.lugatek.com yazdırılıyor
lcd_gotoxy(4,1);  //Alt satıra geç ve yazıyı ortala
lcd_yaz(stringlerim[1]); //Uykusuz yazdırılıyor

Simülasyondan görünüm:



Ekte IAR ve ISIS simulasyon dosyaları yer almaktadır.

« Son Düzenleme: Eylül 30, 2011, 07:54:29 ÖS Gönderen: Uykusuz »
Projelerimiz için tıklayın Linklerin Görülmesine İzin Verilmiyor. Üye Ol ya da Giriş Yap
Sipariş ve Bilgi için Linklerin Görülmesine İzin Verilmiyor. Üye Ol ya da Giriş Yap ile irtibata geçiniz. Lütfen teknik sorularınızı forumda sorunuz.
Satışta olan Ürünler: PIM-2 Full, PIM-2 Kit, PIM-2 Demonte, PIM-2 PCB  PIM-2 Atmega8, DM-1 Kit, DM-1 Demonte

Çevrimdışı Uykusuz

  • Administrator
  • Yarbay
  • *
  • İleti: 2370
  • Teşekkür: 153
  • elbombaci
Ynt: IAR Embedded Workbench ile ATMEL C programlama
« Yanıtla #6 : Ekim 07, 2011, 02:41:45 ÖS »
Merhaba Arkadaşlar.

Eeprom kullanırken yaşadığım bir IAR derleme problemini sizlerle paylaşacağım. Belki bezer bir problem sizlerin de başına gelirse faydalı olur.

Örneğin

Kod: Linklerin Görülmesine İzin Verilmiyor. Üye Ol ya da Giriş Yap
__eeprom unsigned char degisken=10;
Gibi bir kod yazdığınızda ve siz bu degisken isimli değişkeni kod içinde hiç bir şekilde kullanmaz ise derleyiciniz bu datayı derleme sırasında eeprom bellekte kesinlikle oluşturmuyor. Yada oluşturduğunuz bu değişkeni kod içersinde sadece ve sadece okuma işlemi yapıyorsanız yani hiç bir şekilde bu değişkene bir veri yazmıyorsanız bu kez bu değişkeni eepromda değil flash da oluşturuyor. Buraya kadar normal ve mantıklı.

Fakat yaşadığım probleme gelince... Eğer ben bu değişkeni örneğin aşağıdaki gibi bir şarta bağlı şekilde kullanır isem:

Kod: Linklerin Görülmesine İzin Verilmiyor. Üye Ol ya da Giriş Yap
if(degisken<10){
 degisken=20;
}

Derleyici değişkene bir şarta bağlı olarak veri yazdığım halde bu değişkeni eepromda oluşturmuyor. Bu işlemden sonra programın başka yerlerinde eepromu şartsız kullandığım değişkenlerimi değişiyordu. Bu problemin neden kaynaklandığını ve bununla birlikte bu roblemin çözümünü bulmak bir günümden fazla zamanımı aldı.

Eğer siz eepromda bir değişken oluşturacaksanız ve kesinlikle derleyicinizin mantık yürütmesini istemiyorsanız değişkenlerinizi aşağıdaki şekilde gösterdiğim gibi tanımlayın:

Kod: Linklerin Görülmesine İzin Verilmiyor. Üye Ol ya da Giriş Yap
__eeprom unsigned char degisken @0 =10;
Bu şekilde eeprom belleğin sıfırncı adresinde bir byte lık veri oluşturmuş olacaksınız ve siz bu değişkeni ne şekilde kullanırsanız kullanın derleyiciniz yukarıda anlattığım gibi mantıksız mantık yürütmeye kalkamayacaktır  :)

Birden fazla değişkeniniz varsa da

Kod: Linklerin Görülmesine İzin Verilmiyor. Üye Ol ya da Giriş Yap
__eeprom unsigned char degisken @0 =10;
__eeprom unsigned char degisken @1 =10;
__eeprom unsigned char degisken @2 =10;

Değişkenleriniz farklı uzunluklarda iseler:

Kod: Linklerin Görülmesine İzin Verilmiyor. Üye Ol ya da Giriş Yap
__eeprom unsigned char degisken @0 =10; //0. adresten itibaren 1 byte yer kaplar
__eeprom unsigned int   degisken @1 =10; //1. adresten itibaren 2 byte yer kaplar
__eeprom unsigned char degisken @3 =10; //3. adresten itibaren 1 byte yer kaplar
__eeprom unsigned long degisken @4 =10; //4. adresten itibaren 4 byte yer kaplar
__eeprom unsigned char degisken @8 =10; //8. adresten itibaren 1 byte yer kaplar

Projelerimiz için tıklayın Linklerin Görülmesine İzin Verilmiyor. Üye Ol ya da Giriş Yap
Sipariş ve Bilgi için Linklerin Görülmesine İzin Verilmiyor. Üye Ol ya da Giriş Yap ile irtibata geçiniz. Lütfen teknik sorularınızı forumda sorunuz.
Satışta olan Ürünler: PIM-2 Full, PIM-2 Kit, PIM-2 Demonte, PIM-2 PCB  PIM-2 Atmega8, DM-1 Kit, DM-1 Demonte

Çevrimdışı Uykusuz

  • Administrator
  • Yarbay
  • *
  • İleti: 2370
  • Teşekkür: 153
  • elbombaci
Ynt: IAR Embedded Workbench ile ATMEL C programlama
« Yanıtla #7 : Ağustos 29, 2012, 03:06:42 ÖÖ »
ATTINY ile 500KHz frekanslı PWM uygulaması

Bazı durumlarda yüksek frekanslı PWM sinyallerine ihtiyaç duyarız. Fakat maalesef PWM frekansımız, kullandığımız mikrodenetleyicinin bus frekansı ile sınırlanır.

Attiny25 mikrodenetleyicisi içerisindeki PLL modülü sayesinde içindeki dahili 8MHz RC osilatörden sadece counter1 için 64MHz, bus için 16MHz clk sinyalini üretebiliyor. Gördüğünüz gibi counter1 bus dan 4 kat daha hızlı. Bu da bize yüksek frekanslı PWM sinyalleri üretebilme imkanını sunuyor. Atmega8 gibi mikrodenetleyicilerde counter clk frekansı en fazla bus frekansına eşit olabiliyor.

8 Bit dutycycle kontrolü ile 250Khz, 7 Bit dutycycle kontrolü ile de 500Khz PWM frekansı elde edebiliyoruz.

Ekte IAR ile yazdığım 500KHz PWM üreten proje ve ISIS simülasyon dosyası yer almaktadır. Bu da simülasyondan bir görüntü.

Projelerimiz için tıklayın Linklerin Görülmesine İzin Verilmiyor. Üye Ol ya da Giriş Yap
Sipariş ve Bilgi için Linklerin Görülmesine İzin Verilmiyor. Üye Ol ya da Giriş Yap ile irtibata geçiniz. Lütfen teknik sorularınızı forumda sorunuz.
Satışta olan Ürünler: PIM-2 Full, PIM-2 Kit, PIM-2 Demonte, PIM-2 PCB  PIM-2 Atmega8, DM-1 Kit, DM-1 Demonte

Çevrimdışı huseyin05

  • Çavuş
  • *
  • İleti: 55
  • Teşekkür: 2
Ynt: IAR Embedded Workbench ile ATMEL C programlama
« Yanıtla #8 : Eylül 11, 2012, 06:24:51 ÖS »
Uykusuz hocam IAR programının rar şifresini biliyor'musun.

Çevrimdışı Uykusuz

  • Administrator
  • Yarbay
  • *
  • İleti: 2370
  • Teşekkür: 153
  • elbombaci
Ynt: IAR Embedded Workbench ile ATMEL C programlama
« Yanıtla #9 : Eylül 11, 2012, 06:41:51 ÖS »
Şifre aldente olarak belirtilmiş hocam.
Projelerimiz için tıklayın Linklerin Görülmesine İzin Verilmiyor. Üye Ol ya da Giriş Yap
Sipariş ve Bilgi için Linklerin Görülmesine İzin Verilmiyor. Üye Ol ya da Giriş Yap ile irtibata geçiniz. Lütfen teknik sorularınızı forumda sorunuz.
Satışta olan Ürünler: PIM-2 Full, PIM-2 Kit, PIM-2 Demonte, PIM-2 PCB  PIM-2 Atmega8, DM-1 Kit, DM-1 Demonte

Çevrimdışı huseyin05

  • Çavuş
  • *
  • İleti: 55
  • Teşekkür: 2
Ynt: IAR Embedded Workbench ile ATMEL C programlama
« Yanıtla #10 : Eylül 12, 2012, 03:10:43 ÖÖ »
Uykusuz hocam o şifre ile açama'dım!..Saygılar..

Çevrimdışı huseyin05

  • Çavuş
  • *
  • İleti: 55
  • Teşekkür: 2
Ynt: IAR Embedded Workbench ile ATMEL C programlama
« Yanıtla #11 : Eylül 12, 2012, 04:41:20 ÖÖ »
Uykusuz hocam aldente doğru şifre dosyaları açtım. Kurulumu yapamıyorum. Licence ve keygen nasıl ayar'larım, sadece bu işlem nasıl yapılacak!...Hocam zahmet olmaz ise resimli bir şekil'de göstermeniz mümkünmü? Daha önce msp430 için kurmaya çalış'tım. Hata yaptığım için bilgisayar'a format atmak zorunda kaldım. Saygılar...

Çevrimdışı Uykusuz

  • Administrator
  • Yarbay
  • *
  • İleti: 2370
  • Teşekkür: 153
  • elbombaci
Ynt: IAR Embedded Workbench ile ATMEL C programlama
« Yanıtla #12 : Eylül 12, 2012, 09:52:21 ÖÖ »
Merhaba

İndirdiğiniz dosyada readme diye bir metin belgesi var mı? Readme metin belgesi varsa buraya eklerseniz nasıl yapacağınızı anlatmaya çalışırız.

Şu an bende bu program kurulu olduğundan tekrar bir fotoğraflı kurulum için programı kaldırıp tekrar kurmam gerekyiyor.

Saygılar.
Projelerimiz için tıklayın Linklerin Görülmesine İzin Verilmiyor. Üye Ol ya da Giriş Yap
Sipariş ve Bilgi için Linklerin Görülmesine İzin Verilmiyor. Üye Ol ya da Giriş Yap ile irtibata geçiniz. Lütfen teknik sorularınızı forumda sorunuz.
Satışta olan Ürünler: PIM-2 Full, PIM-2 Kit, PIM-2 Demonte, PIM-2 PCB  PIM-2 Atmega8, DM-1 Kit, DM-1 Demonte

Çevrimdışı huseyin05

  • Çavuş
  • *
  • İleti: 55
  • Teşekkür: 2
Ynt: IAR Embedded Workbench ile ATMEL C programlama
« Yanıtla #13 : Eylül 12, 2012, 10:28:12 ÖÖ »
Uykusuz hocam indir'diğim dosya'yı rar uzantısın'dan çıkarttığım zaman, keygen dosyası çıkıyor ve keygen üreten programı çalıştırdığım zaman eklediğim dosya oluşuyor. Bu serial ve keygen ile programın kurulması gerekmiyormu? CD-EWAVR-5501 içerisinde "sentinel.system-setup.exe-lsinit-8.0.6.0.exe" birde bu şekilde rar uzantılı açılabilen dosya var kurulum için setup v.s? Bu dosya direk açılıyor. Hocam birde ilk kurulum ekran görüntüsünü eklemek istiyorum. Saygılar..

Çevrimdışı huseyin05

  • Çavuş
  • *
  • İleti: 55
  • Teşekkür: 2
Ynt: IAR Embedded Workbench ile ATMEL C programlama
« Yanıtla #14 : Eylül 12, 2012, 10:39:10 ÖÖ »
Linklerin Görülmesine İzin Verilmiyor. Üye Ol ya da Giriş Yap Hocam burda pdf dosyası var bir gözatın ister'seniz!....