Bu tespitlerin çok doğru ve aslında gömülü sistemler dünyasının en sinir bozucu ama bir o kadar da öğretici "fiziksel" problemlerinden biriyle karşı karşıyasın. Bahsettiğin durum, sadece bir voltaj dalgalanması değil; işlemcinin iç yapısı,
ESD (Elektrostatik Deşarj) hassasiyeti ve giriş katlarındaki
empedans farklarıyla ilgili.
Neden 8-bitlik (PIC16, 68HC) işlemciler "elleyince" reset atıyor da dsPIC gibi daha modern 16-bit işlemciler daha kararlı duruyor? Teknik olarak inceleyelim:
1. MCLR ve Giriş Pinlerindeki Empedans Sorunu
PIC16F gibi daha eski mimarili işlemcilerde MCLR pini genellikle çok yüksek giriş empedansına sahiptir. Sen o pine dokunduğunda veya yaklaştığında vücudun bir anten gibi çalışır ve çevredeki 50Hz şebeke gürültüsünü veya statik elektriği doğrudan bu pine enjekte eder.
- Hata: Sadece $0.1 \mu F$ kondansatör bazen yetmez. Eğer pull-up direnci (genelde 10k kullanılır) çok yüksekse, pin gürültüye çok açık kalır.
- dsPIC Farkı: dsPIC gibi daha gelişmiş çiplerde giriş katlarında Schmidt Trigger yapıları ve dijital filtreler çok daha gelişmiştir. Ayrıca bu çiplerin iç yapıları, elektromanyetik uyumluluk (EMC) standartlarına göre daha sıkı tasarlanmıştır.
2. Low-Power Modu ve "Hassaslık"
İşlemciyi düşük güç moduna aldığında (Sleep/Low Power), işlemci akım çekişini minimuma indirir. Bu durum, dahili regülatörlerin ve osilatör devrelerinin çok daha hassas bir dengeye oturmasına neden olur.
- Düşük güç modunda işlemcinin Gürültü Bağışıklığı (Noise Immunity) düşer. Dışarıdan gelen ufacık bir statik atlama, işlemcinin içindeki "Power-on Reset" (POR) veya "Brown-out Reset" (BOR) devrelerini tetikler.
3. Harici Kesmeler (External Interrupts) Neden Tetikler?
Kesme pinleri kenar tetiklemeli (Edge Triggered) çalıştığı için nanosaniyeler süren voltaj sıçramalarını bile "komut" olarak algılar. Eğer pinde donanımsal bir
Debounce (gürültü engelleme) filtresi yoksa, işlemci sonsuz bir kesme döngüsüne girip kilitlenebilir veya Watchdog Timer (WDT) tarafından resetlenebilir.
4. Çözüm İçin "Gerçek" Yöntemler (Bunları Dene)
Eğer profesyonel bir PCB'de bile bu sorunu yaşıyorsan, şu 3 yöntem genelde kesin çözümdür:
- Pull-up Direncini Düşür: Klasik 10k yerine 4.7k veya 2.2k kullan. Akım biraz artar ama hattın empedansı düşeceği için gürültü kapma ihtimali azalır.
- Seri Direnç (Ferrite Bead): Sadece şaseye kondansatör atmak yetmez. MCLR pini ile buton/konnektör arasına 100 Ohm - 470 Ohm arası seri bir direnç ekle. Bu, yüksek frekanslı gürültünün işlemci içine girmesini engeller.
- Yazılımsal Filtreleme: Eğer harici kesme kullanıyorsan, kesme geldiğinde ilk iş olarak pini tekrar oku. Eğer sinyal hala oradaysa işlem yap. (Gürültü saniyeler sürmez, nanosaniyeler sürer).
- Guard Ring (Koruma Halkası): PCB tasarımında MCLR ve kritik kesme yollarının etrafını "GND" hattı ile çevrele (Shielding).
dsPIC Neden Reset Atmaz?
dsPIC ve STM32'nin bazı üst serilerinde
Internal Power Supervisor çok daha gelişmiştir. Bu işlemcilerin içinde "Glitch Filter" denilen, belirli bir süreden kısa süren gürültüleri görmezden gelen donanımsal devreler vardır. Ayrıca die (yonga) tasarımlarında statik elektriği sönümleyen dahili diyot yapıları 8-bitlik abilerine göre çok daha güçlüdür.
Senin Deneyimin:
PIC16F serisini Low Power modunda ve kesmeler aktifken "taş gibi" çalıştırmanın tek yolu, işlemciyi metal bir muhafaza (Faraday Kafesi) içine alıp, tüm girişleri
Optokuplör ile izole etmektir. Aksi takdirde, elini yaklaştırdığında bile kapasitif etkiyle reset atması bu çiplerin doğasında (eski teknolojisinde) var.