Renesas için Derleyici

Başlatan YARGICH, 15 Ocak 2006, 18:27:23

YARGICH

Hocam tamam sayende bu engelide aştık :) ama hala bir sorun var. yani MCU yu kurduktan sonra da çalışmasında bir değişiklik olmadı. Gerçi ona çalışmak denmez. Çünkü Programladıktan sonra çalışma moduna alıyorum çıkış ledlerinde sabit göstermesi gereken 0x55 değeri yerine sürekli kararsız bir şekilde yanıp sönen 0xF0 değeri var. bir müddet sonra oda sönüyor ve bir daha da yanmıyor. Şunuda belirteyim çıkışlarda da +5V yok. Sanki yüksek frekensla yanıp sönüyo gibi geldi bana. Scope da şirkette kaldı yanımda olsaydı bakacaktım. Ben bunun MCU nun kurulumuyla alakalı olduğunu düşünmüştüm. Çünkü sizin söylediklerinize göre de, datasheet'ine göre de donanım da bir eksiklik yok. Aslında Yapması gereken sadece P0 çıkışında 0x55 değerini gösterecek o kadar.

Hocam P0 Portunun giriş/çıkışı bu şekilde ayarlanıyor değil mi ?
void Main()
{
     MCU_init();   

     PD0=0x00;
    
     P0=0x55;
}


Yani görüldüğü gibi yaptığı bi şey de yok. Hatta sürekli çıkışa 0x55 değerini vermesin diye sonsuz döngüyüde kaldırdım. Bildiğim kadarıyla P0 portunun harici hafıza için data portu olarak kullanılmasının dışında başka bir özel durumu yok herhalde. Yoksa onun etkisi olabilir mi :)

Bilemiyorum aklıma gelenleri deniyorum ama şu anda yeni bir proje aldım yaklaşık 15 günlük. Bu süre zarfında eskisine göre biraz daha az uğraşabilirim bu Renesas'la ama genede günlük vakit ayıracağım.

Hocam senin aklına gelen bir şey var mı? Bu karasız çalışma konusunda yada eksik bir yazılım veya donanım konusunda. Devrenin parazit alabilecek durumu da yok aslında ama ben gene ufak tefek önlemler aldım ki Renesas gibi MCU nun bunlardan etkileneceğini düşünmek bile istemiyorum :D

Yardımların için Teşekkürler.........
Uçurtmalar, rüzgarın kuvvetiyle değil, rüzgara karşı koydukları direnç ile yükselirler.

YARGICH

Hocam kusura bakma ben bu problemden bir şey anlamadım.
- Programı 0x0E0000 (128K için) adresinden başlayarak yüklediğim zaman hiç bir işlev yapmıyo. ama 0x0FF000 adresinden başlayarak yüklediğim zaman Ledler karasız bir şekilde değil, rutin bir şekilde yanıp sönüyor ama yazılımda öyle bir şey yok :(
- Birkaç tane  örnek yazılıma baktım öyle fazla da bir kurulum ayarı yapılmamış. Yani port ayarlamanın dışında Pull-Up ayarı var, bide Processor mode ayarları var. yani sizin yaptığınız ayarlamalardan eksiği var fazlası yok.
- Donanımda da minumum bağlantı tamam.
- Yazılımda bütün portları çıkış yaptım.
- Flasher'da programlamanın yapıldığına dair doğrulama da var, onda da sorun yok diye düşünüyorum.
- IAR da programı derliyorum oda OK veriyor.

Bi yerlerde bir eksiklik yada yanlışlık var ama bulamadım.
Hocam bu PIC deki gibi bazı fuses ayarlarına benzer ayarlardan kaynaklanıyor olabilir mi? hani koruma veya reset amaçlı gibi.

Tabiri caizse "bir ledi bile yakamadık" ya ona canım sıkılıyo :(
Uçurtmalar, rüzgarın kuvvetiyle değil, rüzgara karşı koydukları direnç ile yükselirler.

aYe

Selam YARGICH,

Son iki mesajını da malesef şimdi gördüm.
Geç gelen cevap için kusura bakma.

Bu gibi süreçlerin sonunda genelde ahh denilip kafaya bir tane vurulur :D

Şu halde sizin için iki hızlı çözüm önerim var;

1) Bugün yoğun kış şartları yüzünden evdeyim, iş yerine gittiğimde şu bir ledi yakıp söndüren kodu yazip çalıştırıcam ve hex c vs. burda paylaşıcaz.

2) Yine olmazsa ve istanbul'daysan yaptıklarını da çantana alarak çay içmeye geleceksin.

İyi çalışmalar...
Dünyada iki şey sonsuzdur. İnsanın aptallığı ve evren. Ancak ikincisinden o kadar emin değilim... (Einstein)

YARGICH

Öncelikle cevabın gecikmesi için kusura bakmak da nedemek hocam. Belki başka işiniz olur. Her zaman anlayışla karşılayacağım o yönden şüpheniz olmasın. Ayrıca çay içinde şimdiden teşekkür ederim içimiş kadar oldum ama sizinle bir çay içermektende mutluluk duyarım :D  

Bende Kış nedeniyle evdeyim. İnanın hazırlamam gereken 2 farklı projede 8 adet ürün var, sinirlendim, elimdeki projeyi bıraktım bu led yakma işiyle uğraşıyorum :(

Hocam, öğrendiğim kadarıyla bir portun 4 adet özel registerleri var. bunlardan örneğin P0 için;
P0 = P0 portuna verilecek bilgi;
PD0 = I/O ayarlaması. Örn. 0xFF deyince hepsi çıkış oluyormuş, PIC'e göre ters bunuda yeni öğrendim :) Artık Bu chipe bambaşka birşey olarak bakmayı anladım....
Mask = bunuda tam olarak anlamadım ama herhalde çıkış olarak tanımlanan pinlerin ters mi düz mü çalışacağını ayarlayabiliyorsunuz. Yani NOT kapısı koymuş gibi oluyor bi anlamda.
Pull-up = Bunulada istediğiniz Porta Pull-Up direnç ekleyebiliyorsunuz. Örneğin P0 portunun üst/alt dört bitine veya tamamına ekleyebiliyorsunuz ama sadece tek bir pine ekleyemiyorsunuz!

Hocam bunlarda bir yanlışlık veya eksiklik varsa, düzeltirseniz sevinirim.

Hocam bide bu IAR Make APP programını kullanarak standart registerleri ve bütün ayarlamaları yaptım. Registerleri tanımak açısından gayet hoş bi program olmuş. Hatta onun oluşturduğu dosya üzerinde de yazılımı yazabiliyormuşuz. Burdan ayarları yaptım ve yazılımı yazdım ama sonuç aynı :(

Programlayıcınızı biraz modifiye ettiğiniz için tam olarak hatırlamadığınızı söylediniz ama, Bu chipin programlarken bir konumda, çalıştırırken diğer bir konumda olması gereken, CNVss pinin'den başka bir pin var mı acaba ?

Hocam yardımlarınız için teşekkürler... Dosyaları sabırsızlıkla bekliyorum. Sizde olmasanız bu bölüm kısa sürede Form çöplüğüne taşınacak çünkü başka kimse yok :( Gerçi izlenim var ama ilgi yok  :!:
Uçurtmalar, rüzgarın kuvvetiyle değil, rüzgara karşı koydukları direnç ile yükselirler.

aYe

Selam,

Evde mevcut pek bişey yok, yarın iş yerine geçtiğimde tüm teknik sorularına cevap vericem.
Şu an son mesajına dair eklemek istediğim şey; buranın forum çöplüğüne gideceğini zannetmiyorum, renesas hakkındaki sorularına cevap alma ihtiyacı olanlar, bu cevaplari bir forumda bulabilceklerini akillarinin ucundan dahi geçirmedikleri için ilgi yok.

İyi çalışmalar...
Dünyada iki şey sonsuzdur. İnsanın aptallığı ve evren. Ancak ikincisinden o kadar emin değilim... (Einstein)

CaFFeiNe

hocam siz bilgi alışverişine devam edin merak etmeyin burayı okuyanlar var :) yalnız şimdilik RENESAS ile uğraşıları yok ama ilerde olursa ilk bakacağımız yer bu topic :)

YARGICH

Tamam hocam mesaj alınmıştır. Tatlısukunazi hocam Renesas konusunda beni çırak olarak yetiştiriyo :)  şuna adam akıllı bi başlayayım yaşadığım sorunlarla ilgilide burda her zaman yardımcı olmaya çalışırım. Tabi gene büyük sorunlar hocamın başına kalır :D
Uçurtmalar, rüzgarın kuvvetiyle değil, rüzgara karşı koydukları direnç ile yükselirler.

ahmetu

Alıntı yapılan: "YARGICH"
void Main()
{
     MCU_init();   
     PD0=0x00;
     P0=0x55;
}


kodu daha yeni gördüm onun için soruyla cevap veriyorum, hani nerde bu while(1); yada while(true) yada
for(;;)
artık derleyici hangisini kabul ederse.

aYe

Selam,

İlk soru şu; yazilan kod'dan ne yapmasi isteniyor?
Cevap: Bir port'u output seçip 0x55 hex değerini atmak.
Sebep: Bir mcu'u kullana bildiginize dair ilk işareti görebilecek en kısa yazilim olması. Bunun ilerlemiş seviyesinde bir pin'e bağlı led yakılıp söndürülebilir.

Alıntı yapılan: "ahmetu"kodu daha yeni gördüm onun için soruyla cevap veriyorum, hani nerde bu while(1); yada while(true) yada
for(;;)
artık derleyici hangisini kabul ederse.

Eksik olduğunu düşündüğünüz kodumuz bu;

void main(void) 
{ 
     MCU_init();    
     PD0=0x00; 
     P0=0x55; 
}


Olması gerektiğini düşündüğünüz ise bu;

void main(void) 
{ 
     MCU_init(); 
     while(1){
     PD0=0x00; 
     P0=0x55; 
     }
}


veya bu;

void main(void) 
{ 
     MCU_init();    
     PD0=0x00; 
     P0=0x55; 
     while(1);
}


Mümkünse bu üçünün arasındaki farklari yazmanizi rica ediyorum.

İyi çalışmalar...
Dünyada iki şey sonsuzdur. İnsanın aptallığı ve evren. Ancak ikincisinden o kadar emin değilim... (Einstein)

ahmetu

ilkinde mcu porta değer atadıktan sonra sleep moduna geçer, ikincide sürekli ve boş yere D portunu çıkış yapıp 0x55 değerini verir (bir kez yapılması yeterli değilmiş gibi), üçüncü ise olması gereken kod portu çıkış yap değer ata sleep olmadan sonsuz döngüye gir öyle sap sap bekle. :lol:

aYe

Selam,

Alıntı yapılan: "ahmetu"ilkinde mcu porta değer atadıktan sonra sleep moduna geçer, ikincide sürekli ve boş yere D portunu çıkış yapıp 0x55 değerini verir (bir kez yapılması yeterli değilmiş gibi), üçüncü ise olması gereken kod portu çıkış yap değer ata sleep olmadan sonsuz döngüye gir öyle sap sap bekle. :lol:

İzah şeklinizle sabah sabah siz beni güldürdünüz ALLAH'ta sizin yüzünüzü güldürsün. Yani sizin de belirttiğiniz üzere her halükarda ALU adina sap sap bekleme söz konusu :D Dolayısıyla YARGICH arkadaşımızın bir türlü sonuç alamamış olmasının nedeni bu olamaz.

Ben şu sorunu çözmek adina bir iki dosya hazirlayim.

İyi çalışmalar...
Dünyada iki şey sonsuzdur. İnsanın aptallığı ve evren. Ancak ikincisinden o kadar emin değilim... (Einstein)

aYe

Bu arada eklemek istedim;

Sleep Mod bazi donanimlarin hatta osc'nin kapatılması ve herhangi bir interrupt ile mcu'nun yeniden aktif hale gelmesi demektir. Güç tasarrufu amaçlı kullanılır ve şu ana kadar benim kullandığım tüm mcu'larda bu moda geçiş için en az 1 flag'in komut yada başka bir şekilde seçilmesi gerekir.

Yani;
void main (void){
}

veya
void main (void){
while(1);
}

arasinda mcu çalışması açısından hiç bir fark yoktur. Herhangi bir Sleep Mod durumu söz konusu değildir OSC vs. donanimlar aktif haldedir. Zaten main fonksiyonunun en alttindaki tirnak derleyici için while(1); for( ; ; ); gibi bir anlam ifade etmektedir. Eğer derleyici iyi optimizasyon yapamiyorsa 2. örnekteki durumu 2 tane while(1); gibi yorumlayarak program hafizayi şişirir, başkada bir şey olmaz.
Dünyada iki şey sonsuzdur. İnsanın aptallığı ve evren. Ancak ikincisinden o kadar emin değilim... (Einstein)

YARGICH

Alıntı yapılan: "YARGICH"
void Main()
{
     MCU_init();   

     PD0=0x00;
   
     P0=0x55;
}

Yani görüldüğü gibi yaptığı bi şey de yok. Hatta sürekli çıkışa 0x55 değerini vermesin diye sonsuz döngüyüde kaldırdım.
Bende sonsuz döngüyü kaldırdığımı yani kullanmaya gerek duymadığımı daha öncede belirtmiştim. Sorun başka birşey olmalı  :roll:


Ayrıca portları
PD0=0x00;

bu komutla değil
PD0=0xFF;

bu komutla çıkış yapıyormuşuz. Bunuda yeni farkettiğimi önceden belirtmiştim. Eski yazdığım koddan alıntı yaptığım için yanlış görünüyo...
Uçurtmalar, rüzgarın kuvvetiyle değil, rüzgara karşı koydukları direnç ile yükselirler.

aYe

Selam YARGICH,

Ben elimde M16C için olan iki adet IAR derleyicisi buldum.
Bunlar;
IAR Embedded Workbench For Renesas M16C and R8C 3.10A
IAR Embedded Workbench For Renesas M16C Ewpm16C v2.12A

Ben alttakini kullaniyordum. Sanirim sen üstekini kullanmaktasın. İkisi arasında dünya kadar fark var diyebilirim.

Dün üsttekiyle bende 1 Led'i yakıp söndüremedim iyi mi. Oluşturulan mot dosyasını flasher da açınca 0xFFFFFFF den 0xFFFFF e kadar olan bloka yazilmak üzere olduguna dair bir mesaj aliyorum, e tabi bu da mevcut donanım için imkansız :D

Şimdi sen hangi derleyicinin hangi sürümünü kullanıyorsun?
3.10'ise bir süre bekleyeceksin ben biraz zaman ayirip şu hatanın kaynağını bulmalıyım.

İyi çalışmalar...
Dünyada iki şey sonsuzdur. İnsanın aptallığı ve evren. Ancak ikincisinden o kadar emin değilim... (Einstein)

YARGICH

Hocam bende bu üstteki olandan "IAR Embedded Workbench For Renesas M16C and R8C 3.10A" var. Help dosyasında da
  - IAR C/C++ Compiler for M16C 3.10A/W32 [Evaluation] (3.10.1.1)
yazıyo. Hocam inşalllah hata budur  :roll:

Alttaki farklı bir derleyiciye benziyor. Üsttekinin eski bir versiyon mu? yoksa farklı bir derleyicinin yeni versiyonu mu? Hani diyorum çok da eski değilse onu kullansak olmaz mı?


Teşekkürler.......
Uçurtmalar, rüzgarın kuvvetiyle değil, rüzgara karşı koydukları direnç ile yükselirler.