Picproje Elektronik Sitesi

MİKRODENETLEYİCİLER => Atmel => Konuyu başlatan: fatihvelid - 01 Ağustos 2008, 10:29:00

Başlık: AVR Studio ve enteresan bir hata
Gönderen: fatihvelid - 01 Ağustos 2008, 10:29:00
AVR Studio(versiyon 4.14) ile ilk defa çalışıyorum. Yaşadığım enteresan problemi sizlerle paylaşmak istedim. Aşağıda verdiğim C kodunda bir problem göremiyorum. Kodun sonuna gelene kadar programın durmasına yada uart portuna yazma işlemini aniden kesmeine sebep hiç bir şey göremiyorum.

Derleyiciden kaynaklanan problem midir acaba? Fuse ayarlarından kaynaklanabilir mi(sanmıyorum ama)?


#include "global.h"

#define UART_BAUD_RATE      19200
int main(void)
{  
   unsigned long a;
uart_init(UART_BAUD_SELECT_DOUBLE_SPEED(UART_BAUD_RATE,F_CPU));
sei();
for(a=0;a<1000000;a++){
asm("nop");
};
#ifdef _DEBUG_MAIN_
uart_putc(07);
rprintfInit(uart_putc);
uart_puts("  DEBUG STARTING 0 \r\n");
rprintf("UART INSTALLED\r\n");
uart_putc(07);
#endif
init_Tmr1ISR();
#ifdef TEST_PERFORMANCE_TOOL
{
unsigned int count;
//start_counter();
uart_putc(07);
uart_puts("TEST PERFORMANCE 1 \r\n");
//count = stop_counter(); // Running Duration sount*100us
rprintf("TEST PERFORMANCE  2  x100 us\r\n");//,count);
uart_puts("TEST PERFORMANCE  3 \r\n");
uart_putc(07);
}
#endif//TEST_PERFORMANCE_TOOL
rprintf("DEBUG FINISHED 4 \a\r\n");
uart_putc(07);
uart_puts("FINISHED  5 \a\r\n");
uart_putc(07);
return(0);
}




String Çıktısı


(http://img509.imageshack.us/img509/6207/32243536cq4.jpg)


Hex Çıktısı

(http://img509.imageshack.us/img509/9238/42850796nf7.jpg)
Başlık: AVR Studio ve enteresan bir hata
Gönderen: picusta - 01 Ağustos 2008, 11:19:22
init_Tmr1ISR();
'den süpheleniyorum.
satiri kaldir, veya düzgün bir ISR yaz.
Başlık: AVR Studio ve enteresan bir hata
Gönderen: fatihvelid - 01 Ağustos 2008, 11:34:03
Alıntı yapılan: "picusta"init_Tmr1ISR();
'den süpheleniyorum.
satiri kaldir, veya düzgün bir ISR yaz.

Daha önce satırı kaldırıp denemiştim. Değişen birşey olmadı maalesef.
Başlık: AVR Studio ve enteresan bir hata
Gönderen: picusta - 01 Ağustos 2008, 11:55:50
Emin olmak için sei() yerine cli() yaz. Baska bir interrupt giriyordur belki.
Her zaman ayni yerde mi takiliyor?
Bastaki döngüyü :
a=0;a<1000000;a++
yerine a<2000000 yap ne oluyor ?
peki ya 500000 ?
yine ayni yerde mi takiliyor ?
Watchdog ne durumda?
Başlık: AVR Studio ve enteresan bir hata
Gönderen: iyonosfer - 01 Ağustos 2008, 13:35:11
rpirntf() fonksiyonunda "\a" kullanımı problem yapıyor olabilir mi?
Başlık: AVR Studio ve enteresan bir hata
Gönderen: fatihvelid - 01 Ağustos 2008, 15:58:37
Alıntı yapılan: "picusta"Emin olmak için sei() yerine cli() yaz. Baska bir interrupt giriyordur belki.
Her zaman ayni yerde mi takiliyor?
Bastaki döngüyü :
a=0;a<1000000;a++
yerine a<2000000 yap ne oluyor ?
peki ya 500000 ?
yine ayni yerde mi takiliyor ?
Watchdog ne durumda?

Yukarıda anlattıklarınızın hepsini teker teker denedim. Başlangıçtaki bekleme süresini değiştirdiğim halde yine aynı yerde takılıyor. (5.000.000 bile yaptım)

Uart'in çalışması için interruptin açık olması gerekiyor. Interruptları kapattıktan sonrakileri yazdırmadı, zaten yazdırmaması gerekiyordu.

Proje dosyalarını picroje paylaşım alanımıza, "Picproje Kodlar" klasörü altında "Atmega128 Uart Debug example.rar " adlı bir dosya olarak upload ettim.
http://www.4shared.com/account/file/57358993/1067b6d2/Atmega128_Uart_Debug_example.html
adresinden indirebilirsiniz.

Aşağıdaki programla Fuse ayarlarını yapıp, programlıyorum. Watchdog kapalı.



Alıntı yapılan: "iyonosfer"rpirntf() fonksiyonunda "\a" kullanımı problem yapıyor olabilir mi?

Denedim.Değişen birşey olmadı.
Başlık: AVR Studio ve enteresan bir hata
Gönderen: leblebitozu - 02 Ağustos 2008, 13:20:29
return yerine sonsuz bir döngü koy ya da uart buffer'i flush et.
Başlık: AVR Studio ve enteresan bir hata
Gönderen: fatihvelid - 03 Ağustos 2008, 12:37:12
Alıntı yapılan: "leblebitozu"return yerine sonsuz bir döngü koy ya da uart buffer'i flush et.

Teşekkürler. Enteresan ama "return 0" dan önce sonsuz döngu koyunca herşey normale döndü. sonsuz döngü olmayınca program sapıtıyor. İlk defa böyle birşeyle karşılaşıyorum.

PIC'de programın sonuna sonsuz döngü koymadığımda, program çalışmasını bitirdiğinde reset atıyordu. AVR ise sapıtıyor.

İlginiz için teşekkürler
Başlık: AVR Studio ve enteresan bir hata
Gönderen: leblebitozu - 03 Ağustos 2008, 19:31:17
Aslında normal hardware uart kullanıyorsun ve uart buffer daki verilerini gönderemeden program sonlanıyor.
Başlık: AVR Studio ve enteresan bir hata
Gönderen: fatihvelid - 03 Ağustos 2008, 19:47:33
Alıntı yapılan: "leblebitozu"Aslında normal hardware uart kullanıyorsun ve uart buffer daki verilerini gönderemeden program sonlanıyor.

Normalde mikrokontroller için yazdığım her programın sonunda sonsuz döngü koymayı alışkanlık haline getirmiştim. Burda gözümden kaçtığı gibi sebebinide anlayamadım. Bu durum PIC'te olsaydı program bitince sürekli reset atardı.
Başlık: AVR Studio ve enteresan bir hata
Gönderen: fatihvelid - 06 Ağustos 2008, 13:21:59
Yukarıdaki aynı programa DDRD |= _BV(3); komutunu ekledikten sonra seri porttan herhangi bir data alamıyorum.

PORTD'nin 3.pinini çıkış yaptığımda, programın durmasına yada seri porttan data göndermesine engel ne olabilir ki? Bu pinin özelliği
INT3 ve Usart1 için TX olması.

INT3 kapalı, seri port için Usart0'i kullanıyorum.

Sebebini anlamadım.

AVR konusunda acemiyim :).

Bir fikriniz var mı?