Cem ustun

Üye
Kayıtlı Üye
Microcontroller neden reset atar
birçok işlemciyle çaliştim işlemcinin MCLR pinine temas edildiginde islemci reset atiyor
Ayni sekilde harici kesmeler aktif edildiginde veya islemciyi lowpower modunda programlandiginda islemci çok hassas oluyor
Reset atiyor , bircok kaynakta küçük degerli kondansatör ve cok temiz bir voltaj kaynagı kullanilması önerilir , fakat bunlarda işe yaramıyor
isterseniz PIC16Fxx 68HCxx yada STM32 ile yapilmiş bir pcb kart alın deneyin bana hak vereceksiniz
Reset atmayan islemcilerin 16 bit DSPIC ler oldugunu gördüm mclr veya harici kesme pinlerine temas edildiginde reset atmıyor , bu chiplerin yapisı nasıldir
Araniźda pic16f serisinden bir entegreyi lowpower modunda programlayip ve harici kesmeleride aktif edip bu işlemciyi ilk çalıştırma anından sonra reset atmadan kullanabilen varmı
 
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:
  1. 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.
  2. 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.
  3. 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).
  4. 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.
 
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:
  1. 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.
  2. 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.
  3. 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).
  4. 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.
 
Teşekkür ederim bu sorunu aşmak için cok ugraştım
Mclr pinine metal bir cisimle degdiginizde bile reset atiyordu 33n 100n arası mercimek tipinde seramik kondansatörü external kesme girişine koyarak bu sorunu PIC24 ve PIC30 serilerinde çözdüm fakat 16F serisinde çözemedim
Birde TVS li bir devre denesek olurmu , nasil bir TVS secmeliyiz
TVS li önericeginiz devre varsa memnun olurum
 
Littlefuse SMAJ5.0A (Tek yönlü) veya P6KE6.8CA (Çift yönlü) gibi standart modeller işini görecektir. SMT kullanıyorsan PESD5V0 serisi de çok popülerdir.

Koruma Devresi

Sadece TVS'yi hatta bağlamak yetmeyebilir. En sağlam yapı "RC Filtre + TVS + Seri Direnç" kombinasyonudur. Aşağıdaki yapı PIC16F'i dış dünyadan gelen gürültülere karşı "zırhlı" hale getirir:
  1. Giriş Noktası: Dışarıdan gelen sinyal veya metal temas noktası.
  2. Seri Direnç : Girişe 100Ω ile 470Ω arası bir direnç koy. Bu, ani akım piklerini sınırlar.
  3. TVS Diyot: Dirençten hemen sonra, işlemciye giden hat ile GND arasına bağla.
  4. Kondansatör : TVS'ye paralel olarak senin kullandığın 33nF - 100nF seramiği ekle.
  5. Pull-up: Hattı 4.7kΩ ile VCC'ye çek (MCLR için).

Neden 16F'de Hala Sorun Yaşıyorsun?

PIC24/30 serisinde çözüp 16F'de takılmanın bir diğer sebebi "Internal Weak Pull-up" olabilir. 16F'lerin dahili pull-up dirençleri çok yüksektir (bazı modellerde 20k-50kΩ civarı). Bu yüksek değer, hattı gürültüye karşı çok zayıf bırakır.
  • Çözüm: Dahili pull-up'a asla güvenme, dışarıdan fiziksel olarak düşük değerli (2.2k veya 4.7k) direnç ekle.

Ferrite Bead (Ferit Boncuk)

Eğer TVS ve RC filtreye rağmen metal cisimle dokunduğunda hala reset atıyorsa, gürültü yüksek frekanslı bir "çınlama" (ringing) yapıyordur. MCLR yoluna işlemciye en yakın noktada bir Ferrite Bead (SMD 0805 paketinde 600 Ohm @ 100MHz gibi) seri olarak eklemek, bu yüksek frekanslı gürültüyü ısıya dönüştürüp yok eder.

Özet Tavsiye:

Girişe 220Ω seri direnç, hemen arkasına 5V TVS ve 100nF kondansatör koyup hattı 4.7k ile beslemeye çekersen, PIC16F bile olsa o reset sorununu %99 oranında aşarsın.
 
Geri
Yukarı