EXTI Problemi Stm32

Başlatan mistek, 04 Temmuz 2015, 13:20:37

mistek

2 pine exti kuruyorum pinlerden birinde buton var diğeri sadece pull up yapılmış durumda.

Devrede besleme gerilimlerini ölçerken pull up yapılmış pinden kesme alıyor. Voltmetrenin probunu dokundurduğum anda kesme oluşuyor ama herzaman değil.  Osiloskopla pini izliyorum dışarıdan herhangi bir değişim yokken işlemci düşen kenar kesme algılıyor.

Debug yaptım. Buton bağlı pinde hiç sorun yok normal çalışıyor. Ama diğer pull up yapılmış pin sürekli kesme alıyor. (İşlemci resetlenmiyor.)

Acaba kaçırdığım bir nokta mı var diye fikir yürütmek istiyorum.

Ayar kodlarım.
/* GENEL GİRİŞLER EXTERNAL INTERRUPT AYAR */
  GPIO_InitStructure.GPIO_Pin = GPIO_Pin_10 | GPIO_Pin_12;
  GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN;
	GPIO_InitStructure.GPIO_OType = GPIO_OType_PP;
  GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_NOPULL;
	GPIO_InitStructure.GPIO_Speed = GPIO_Speed_Level_1;
  GPIO_Init(GPIOA, &GPIO_InitStructure);


  SYSCFG_EXTILineConfig(EXTI_PortSourceGPIOA, EXTI_PinSource10); //BUTON
	
	SYSCFG_EXTILineConfig(EXTI_PortSourceGPIOA, EXTI_PinSource12); //i5


  EXTI_InitStructure.EXTI_Line = EXTI_Line10;
  EXTI_InitStructure.EXTI_Mode = EXTI_Mode_Interrupt;
  EXTI_InitStructure.EXTI_Trigger = EXTI_Trigger_Falling;
  EXTI_InitStructure.EXTI_LineCmd = ENABLE;
  EXTI_Init(&EXTI_InitStructure);
	
	EXTI_InitStructure.EXTI_Line = EXTI_Line12;
	EXTI_Init(&EXTI_InitStructure);


  NVIC_InitStructure.NVIC_IRQChannel = EXTI4_15_IRQn;
  NVIC_InitStructure.NVIC_IRQChannelPriority = 0x00;
  NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;
  NVIC_Init(&NVIC_InitStructure);
boş işlerin adamı ---- OHM Kanunu: I = V/R ---- Güç Formülü: P = V*I = I^2*R = V^2/R

Klein

STM32'nin hangi serisi?
Butonda pullup var mı?
NVIC'de EXTI_14_15  açmışsın. Pinlerin 10 ve 12.  Sanki senin pinlerine karşılık gelen kesme 14_15 değildi. Yanlış hatırlıyor olabilirim.

mistek

Çip Stm32f030k6 yazmayi unutmuşum.

Butonda da pull up var. Kılavuzda EXTI4_15 olduğu yazıyor kesme doğru adrese geliyor ama yanlış tetikleniyor. (EXTI_14_15 Değil hocam)
boş işlerin adamı ---- OHM Kanunu: I = V/R ---- Güç Formülü: P = V*I = I^2*R = V^2/R

mistek

#3
Çözemedim sorunu. Çok kolay kesme tetikleniyor.
Osiloskopta bişey göremedim demiştim. Örnekleme sayısını yükseltince durum biraz netleşti.

İlk resimde elimi pull up direnci ile pinin birleştiği noktaya dokunuyorum.



İkinci Resimde yine elimle aynı noktaya dokunuyorum ve diğer elimi devrenin GND noktasına dokunduruyorum.




Multimetre probuyla gerilim ölçerkende anlık iğne palsler oluşuyor yine yanlış tetiklenme oluyor.

İlgili Pine Paralel  RC bağlayınca ciddi derecede parazit azalıyor yanlış tetiklenme azalıyor.

Başka işlemci ile aynı devreyi çalıştırdığımda hiç yanlış kesme sorunu yaşamadım.(Devre kartı birden fazla işlemciyi destekliyor)

Elimi sürmem sorun değilde ölçüm yaparken yanlış tetiklenmesi can sıkıcı kendimi topraklasam nasıl olur?

Nasıl bi yol izlemeliyim?

Edit: Devre Beslemesi ST Discovery kit üzerinden onun beslemeside PC USB üzerinden gerçekleşiyor.
boş işlerin adamı ---- OHM Kanunu: I = V/R ---- Güç Formülü: P = V*I = I^2*R = V^2/R

mistek

Stm32f0 Discovery kit üzerindeki çiptede aynı sorun oluyor. F0 serisi mi bu kadar hassas yoksa farklı bi sorun mu var çözemedim. F1 ile de aynı şeyleri yaptım böyle bi sorun yaşadığımı hatırlamıyorum.
boş işlerin adamı ---- OHM Kanunu: I = V/R ---- Güç Formülü: P = V*I = I^2*R = V^2/R

Yuunus

mistek; discovery nin kendi ornek kodlarini kullanmistim EXTI_0 icin herhangi bir sorunda yasamadim hem falling de hemde rising de

void EXTILine0_Config(void)
{
 
  GPIO_InitTypeDef   GPIO_InitStructure;
  NVIC_InitTypeDef   NVIC_InitStructure;

  /* Enable GPIOA clock */
  RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOA, ENABLE);
  /* Enable SYSCFG clock */
  RCC_APB2PeriphClockCmd(RCC_APB2Periph_SYSCFG, ENABLE);
 
  /* Configure PA0 pin as input floating */
  GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN;
  GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_UP;
  GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0;
  GPIO_Init(GPIOA, &GPIO_InitStructure);

  /* Connect EXTI Line0 to PA0 pin */
  SYSCFG_EXTILineConfig(EXTI_PortSourceGPIOA, EXTI_PinSource0);


  /* Configure EXTI Line0 */
  EXTI_InitStructure.EXTI_Line = EXTI_Line0;
  EXTI_InitStructure.EXTI_Mode = EXTI_Mode_Interrupt;
  EXTI_InitStructure.EXTI_Trigger = EXTI_Trigger_Rising_Falling; 
  EXTI_InitStructure.EXTI_LineCmd = ENABLE;
  EXTI_Init(&EXTI_InitStructure);

  /* Enable and set EXTI Line0 Interrupt to the lowest priority */
  NVIC_InitStructure.NVIC_IRQChannel = EXTI0_IRQn;
  NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0x01;
  NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0x01;
  NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;
  NVIC_Init(&NVIC_InitStructure);
}

unutmadan tek sorunum ilk tetikleme de ki kenari yakalayamamasi idi.

CLR

pull-up direncini küçült mesela 2k2,4k7 gibi bişey olsun 
Knowledge and Experience are Power

mistek

#7
@digiman kodları bende örnekden düzenledim PA10 bacağıda aynı şekilde ayarlı ancak yanlış tetik almıyor en azından şimdilik denk gelmedi.

@CLR  hocam 51k-10k-4k7 taktım pek değişen bişey olmadı. Paralel RC snubber 100R-100nF bağladım şimdi elimi sürünce yanlış tetiklenmiyor gibi görünüyor ancak multimetre ile dokununca 10-15 ölçümden birinde yanlış tetikleniyor. İşlemciyi mi değiştirsem diye düşünüyorum. PA12 pininin UART I2C birimleri içinde alternatif fonksiyonu var. Bunları hiç açmıyorum. Yinede kapatmak adına bişey yapmak gerekir mi?

boş işlerin adamı ---- OHM Kanunu: I = V/R ---- Güç Formülü: P = V*I = I^2*R = V^2/R

CLR

Açıkçası ben hiç karşılaşmadım, malum exti çok kullanılan bir özellik. 32F100, 32F103 ve 32F107 seri çok kullandım hiç birinde bahsettiğin durum olmadı. Ve bunların hepsi yaklaşık aynı exti donanımına sahip, 32f030'da aynıdır.

Açıkçası senin verdiğin resimlere göre senin pull-up işe yaramıyor, nerdeyse boştaki pin gibi davranıyor. Sanki pullup yanlış pinde gibi. Yerinde olsam ilgili pini donanımsal olarakta pull-up yapardım.

Böyle etkilenmeler olması için,
1) besleme kaynaklı olabilir, beslemeyi değiştirip deneyebilirsin
2) Pull-up direnci çok büyüktür.
3) O hattın yakınında yüksek güçlü veya yüksek frekanslı bir bus varsa orayı etkileyebilir.


Knowledge and Experience are Power

mistek

@CLR  Hocam bende Exti çok kullandım herzaman aynı şekilde ayarlayıp kullanıyordum bu sorunla ilk kez karşılaşıyorum düzeltemedim. Dahili Pull up yapıncada aynı parazitler görünüyor. Pinde 0.3voltluk bir gerilim düşümü var. İşlemciyi söküp başka çip takacağım çok ısıtıp yaktım diye düşünüyorum artık başka bişey gelmiyor aklıma.

Beslemeyi lineer regülatörden, discovery kitten ve usb den verdim sonuç aynı.

Muhtemelen çok basit bi hatam var ama göremiyorum. 
boş işlerin adamı ---- OHM Kanunu: I = V/R ---- Güç Formülü: P = V*I = I^2*R = V^2/R

mistek

Yok düzelmiyor. Aynı işlemcinin kullanıldığı farklı devrelerde aynı sorun var. PA10 pini taş gibi durumunu korurken PA12 pini yanlış tetikleniyor.

PA12 pini önündeki devre.


Transistörü söktüm değiştirdim dirençleri değiştirdim sadece pull up yapıp bıraktım her türlü yanlış kesme geldi. RC bağlayınca elimden pek etkilenmiyor onun haricinde multimetre problarını dokundurursam film kopuyor. Multimetrem mi bozuldu acaba? (Fluke 177) Ama boş yere tetiklenmesinide anlamıyorum. PA10 pininde böyle bi sorun yok. Yanlış kesmede almıyor elimden de etkilenmiyor probtanda. 

Osiloskop görüntüleri








boş işlerin adamı ---- OHM Kanunu: I = V/R ---- Güç Formülü: P = V*I = I^2*R = V^2/R

CLR

#11
Anlattıklarına göre senin self direncin çok düşük görünüyor ve multimetre direnç / buzzer / diyot kademesinde olursa voltaj uygular, dolayısıyla tetikleyebilir. Veya başka bir hata vardır. Aşağıdaki durumu dener misin?.

sadece pull-up direncini tak, başka hiç birşey olmasın ama pull-up direnci 220ohm olsun ve yine tetikleniyorsa scop görüntülerini foruma ekle bir bakalım. Resimlerin üzerlerine multimetre, dokunarak vs yazarsan daha açıklayıcı olur.
Knowledge and Experience are Power

HexfeT

#12


Transistörün base ucunun pull-down edilmesi gerekmez mi? boşta kalırsa, ya da prob vs. dokunursa zaten iletime geçip kesme oluşturabilir ki?

Osiloskop görüntülerindeki 2.6v nedir? Pindeki voltaj ise neden 2.6v? Besleme kaç v? Pull-up vaziyette pindeki voltaj ne?

mistek

#13
@HexfeT transistör BE arasına direnç koydum sonuç aynı. Pull up yapılmış durumda pin gerilimi VDD ~= 2.97v Discovery kiti üzerinden geliyor.

@CLR 270R ile pull up yaptım transistörü ve diğer dirençleri söktüm.
Osiloskop probu Pull Up direnci-Pin bağlantı noktasına bağlı.

Birleşme noktasına multimetre probunu dokundurup çekerken oluşan görüntüler





Elimi birleşme noktasına dokundurup tuttuğumda oluşan görüntü



Sol Elimle GND'yi tutarken Sağ elimi birleşme noktasını tuttuğumda oluşan görüntü



Multimetre probunu pine vururken oluşan görüntü



Multimetre probunu PA12 pinine ilk dokundurma anında oluşan sinyal.





boş işlerin adamı ---- OHM Kanunu: I = V/R ---- Güç Formülü: P = V*I = I^2*R = V^2/R

CLR

Görünüşe göre donanımsal bir hata var gibi, Verdiğin resimlerde her biri farklı zaten, hiç biri birbirine uymuyor. Pull-up voltajı bazısında 3V3 bazısında 2-2,5V gibi, bazılarında nerdeyse sinüs, hele en sonuncusu ilginç üzerinde sönümlü sinyal var. Muhtemelen bir kaynaktan enerji bindirilmiş gibi.

270 ohm pull-up kolay kolay aşağı çekilemez. Senin empedansın veya karşının giriş empedansı ohm seviyesine düşmeli veya vücut üzerinde pozitif/negatif potansiyel olmalı.

Knowledge and Experience are Power