MCLR ile reset atınca USART ile bilgi yollamıyor

Başlatan CeMiL_mktrnk, 17 Aralık 2013, 09:44:56

CeMiL_mktrnk

Arkadaşlar merhaba,
Yaptığım projede haberleşme ile ilgili bir sorunum var. PIC16F886 ve CCS C kullanıyorum. Devreye enerji verdiğimde gerekli kod çalıştığında karşıya usart ile bilgi gönderiliyor fakat enerjiyi kapatıp tekrar açmak yerine MCLR ile reset atınca yollamıyor. Pic MCLR ile reset yiyince herşeyi sıfırlamıyor mu? Neden enerjisini kesip açmak yerine MCLR ile reset attığımda tekrar veri gönderemiyor? Bunun çözümü hakkında tahminlerinizi bekliyorum
Mekatronik Mühendisi/Mechatronic Engineer

camby

Cemil kardeş merhaba,

16f886'da internal osc var. Tahminen devreye kristal de bağlamışsındır daha yüksek frekansı olan.

İlk enerjilenmede kristal stabil hale gelemeden onu pas geçiyor ve HSI ile çalışıyor olabilir. HSI ile çalışmada ayarlar düzgün çalışıyordur. MCLR reset yaptığında da kristal'i görüp HSE ile yüksek hızda çalışmaya geçiyor olabilir. Bu durumda farklı frekanslarda usart farklı baud'da çalışacaktır. Farklı baud'da çalıştığı için data gönderse bile alıcı taraf göremeyebilir.

Data gönderip göndermediğinden emin olun ( hızı farklı bile olsa )

System clock rutinlerini kontrol edin , mümkünse kendiniz yazın. Sistemin sürekli olarak istediğiniz frekansta çalıştığınızdan emin olun. Bunun için ben her zaman bir tane blink led kullanırım. Blink saçmalamaya başlarsa birşeyler yolunda gitmiyor demektir.

CCS yerine XC8 yada ASM kullanmak da bu ve benzeri konularda avantaj sağlayabilir.

CeMiL_mktrnk

Daha çok kodda sıkıntı var gibi görünüyor tek başına data gönderen bi program yaptım, onda MCLR yapsam da yine gönderiyor ama asıl programda MCLR yapınca tekrar göndermiyor, MCLR yapınca bütün herşey, bufferlar, registerlar sıfırlanmıyor mu?
Mekatronik Mühendisi/Mechatronic Engineer

camby

Alıntı yapılan: CeMiL_mktrnk - 17 Aralık 2013, 14:30:21
Daha çok kodda sıkıntı var gibi görünüyor tek başına data gönderen bi program yaptım, onda MCLR yapsam da yine gönderiyor ama asıl programda MCLR yapınca tekrar göndermiyor, MCLR yapınca bütün herşey, bufferlar, registerlar sıfırlanmıyor mu?

Sıfırlanıyor orada bir problem yok.

hardware debug işe yarayabilir

Maxim

yukarıda arkadaş yazmış ama anlamadınız heralde
mclr reset sonrası bazı şeyler değişiyor
config ayarlarınıza ve özellikle two speed osc startup ayarlarınıza falan bakın.

mesela config ayarlarında datashette ne yazılmış:
4:    When MCLR is asserted in INTOSC or RC mode, the internal clock oscillator is disabled.

JKramer

Register, vs. değerleri, normal başlangıç durumunda farklı, MCLR reset durumunda farklı olabilir; hangi durumda ne olduğu katalogda yazıyor.

CeMiL_mktrnk

#6
Arkadaşlar aynı devrede aynı sigorta ayarlarıyla farklı kısa bir program yazdım, o program çalışıyor ama bana lazımolan programda çalıştıramıyorum, yani bütün konfigürasyon ayarları, sigortalar ve devresi aynı olan iki programdan birinde sıkıntı yok, diğerinde var. Dolayısıyla sıkıntının konfigürasyon ya da sigorta olduğunu pek düşünmüyorum, haksız mıyım?

Bu arada config ayarlarım şu şekilde:

#fuses HS,NOWDT,PROTECT,NOBROWNOUT,NOLVP,NOPUT,NOWRT,NODEBUG,NOCPD
Mekatronik Mühendisi/Mechatronic Engineer

sadogan

İnterruptları enable ettiğin yer doğru olmaya bilir.
Pic ilk çalışmaya başladığında ilk işi global ve kulandığınız int disasble edip
sistem için gerekli init işleri bttikten sonra while(1) döngüsüne girmeden hemen kullandığınız interrutları enable
edip deneyin.

CeMiL_mktrnk

Mekatronik Mühendisi/Mechatronic Engineer

camby