STM32F10X Çalışmalarım

Başlatan Mucit23, 12 Mart 2012, 11:17:48

camby

2. kesme 7198 değil de 7197'de geliyor diyorsunuz o zaman .

peki bu nereye kadar devam ediyor ? 3. kesme de 7196'da mı geliyor ?

mistek

#211
Hocam kritik zaman tutmuyorum ama ledin durumuna göre sönmeye yakın veya yanmadan hemen önce displaydeki değer değişiyor. Referans alacağım bi yöntem söylerseniz hemen deneyip sonucu yazabilirim.

Edit:
Evet yukarı sayıyormuş kesmenin süresini uzattım ARR değerinden 1 çıkarıp yazmayı atlamışım buyüzden kayıyor gibi gözüküyor(?). Peki APB1 frekansına göre değilde AHB frekansına göre sayıyor bunun nedeni nedir?
boş işlerin adamı ---- OHM Kanunu: I = V/R ---- Güç Formülü: P = V*I = I^2*R = V^2/R

camby

Bu kadar detaya göre kritik zaman yapıyorsunuz diye düşündüm , zaman çok kritik olmasa bile kesmeli çalışmaların tam kesinlikte olmasını isteriz ama zaten.

Gözle kesinlikle anlayamazsınız 1/7198 sn farkları. 50 herz çalıştırınca bile göz algılamıyor.

Timer'dan emin olmanızın tek yolu skop kullanmak , kesmeyi 1ms yada daha az 10us ayarlayın ve çıkışa verin ( boş projede yada handler ın bölünmediğinden emin olun).

skopla hesabınızın tutması lazım. Tutarsa işlem tamam.

Timer'larda istisna var , eğer peripheral bus bölücüsü 1'den farklı ise clock hızı bus x2 olur.

referans manuel'den bak bu ayrıntıya. Clock şemasında gösterir , başka bir yerlerde de yazıyordu.

mistek

#213
Zamanlama çok kritik değilde donanım nasıl işliyor diye bakıyorum. stm32f105-107 ye ait 103 sayfalık dökümanda 2.3overview kısmında block diyagramını inceledim orada APB1 max 36MHz gösteriyor sizin dediğiniz datasheet te nerede yazıyor hocam RCC altında mı yoksa TIM mi? Baştan aşağı okuyorum datasheeti ama kaçırdım sanırım orayı.



Şu şekilde kesme süresi 1 saniye oldu. Displayde her 9999 da led durum değiştiriyor yukarı sayıyor.
AHB ve APB1 durumunuda öğrenirsem bu gece rahat uyuyabilirim. :)
-----------
Benim kafam hep LPC1769 donanım yapısına gidiyor o yüzden çelişkide kalıyorum. Hepsi Timer da olsa birebir benzerlik olmuyor değil mi donanımlarda? 

        
TIM_TimeBaseStructure.TIM_Period = 9999; //ARR degeri. Buraya yazilan degere gelince timer kesme olusturur.
        TIM_TimeBaseStructure.TIM_Prescaler=7200; //On bölücü degeri
        TIM_TimeBaseStructure.TIM_ClockDivision=0; //Saat bölücü
        TIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Up;  //Timer modu. Yukari sayici.
        TIM_TimeBaseInit(TIM2,&TIM_TimeBaseStructure);	//Timer yapisi init.



Edit:
Dediğiniz yeri buldum hocam RM008 dökümanda Sayfa 90. Clock tree şeklinde gösteriyormuş ben hiç oraya dikkat etmemiştim çok teşekkürler.
boş işlerin adamı ---- OHM Kanunu: I = V/R ---- Güç Formülü: P = V*I = I^2*R = V^2/R

camby

Evet cevresel bloklari istedikleri gibi yapabiliyorlar , cekirdek ve bus yapisi ayni ama

mistek

#215
Osiloskopta pine baktım.
Period = 9999 ve prescaler=72 iken kesme içerisinde bir pini toggle ediyorum. Pin frekansı=49.32Hz. 
Period = 999 ve prescaler = 72 iken Pin frekansı= 493.2Hz
Normal mi hocam?
boş işlerin adamı ---- OHM Kanunu: I = V/R ---- Güç Formülü: P = V*I = I^2*R = V^2/R

camby

Normal degil tam olmazi lazim, tesleri yuksek frekansta yaparsaniz hem olcum acisindan hem frekans kaymasi bakimindan daha saglikli yapin.

Ama oncelikle 72000-1 yapip deneyin

mistek

#217
Alıntı yapılan: camby - 25 Ağustos 2013, 23:42:10
Normal değil tam olmazi lazim, tesleri yuksek frekansta yaparsaniz hem olcum acisindan hem frekans kaymasi bakimindan daha saglikli yapin.

Ama oncelikle 72000-1 yapip deneyin

Period=7199
Prescaler=0;

Pin Frekansı=5.000kHz

Hatamıda yazayım:
Düşük frekanstaki değerler içinde doğru çalışıyormuş ancak ben kod içerisinde systick timer kullanmıştım kapatmayı unuttum kesme bölünüyormuş.
boş işlerin adamı ---- OHM Kanunu: I = V/R ---- Güç Formülü: P = V*I = I^2*R = V^2/R

camby

tebrikler,

internal osilator %4 'e kadar kayması vardır , ama büyük ihtimal oda sıcaklığına kalibre edilmiştir ,  bu da aklınızda olsun.

mistek

Alıntı yapılan: camby - 25 Ağustos 2013, 23:55:57
tebrikler,

internal osilator %4 'e kadar kayması vardır , ama büyük ihtimal oda sıcaklığına kalibre edilmiştir ,  bu da aklınızda olsun.

Hocam genelde kristal kullanıyorum. Ama bunuda öğrendiğim iyi oldu çok teşekkürler.
boş işlerin adamı ---- OHM Kanunu: I = V/R ---- Güç Formülü: P = V*I = I^2*R = V^2/R

mistek

#220
Kesme oluşma süresi = (PSC*(ARR+1)) / APB

Bu şekilde değil.

Kesme oluşma süresi = (PSC+1)*(ARR+1) / APB olacak.
boş işlerin adamı ---- OHM Kanunu: I = V/R ---- Güç Formülü: P = V*I = I^2*R = V^2/R

Mucit23

Bir Sorum olacak. STM32f103 ün RTC sini çalıştırdım. RTC Counteri Çalışıyor. Saat Dakika ve Saniye bilgisini alıyorum. Sormak istediğim şudur. Bana Aynı zamanda Gün(1-30) Hafta Günü (pztesi salı vs) Ay ve yıl bilgiside lazım. Bunu programda saat ve dakikaye göre kendim yürütebilirim ancak elektrik gittimi bilgilerde gider. Bu duruma nasıl çözüm getirebilirim?

Klein

Saat dakika saniye bilgilerini zaten Counter'den almıyor musunuz?
Counter saniyede 1 artıyorsa 136 yıllık counter demek.

Mucit23

Hocam Evet RTC counterinden alıyorum bilgileri fakat rtc saniye kesmesinde saat 23:59:59'u geçtiği anda counter sıfırlanıyor. Bende bir örnekten almıştım kodu.

    if (RTC_GetCounter() == 0x00015180)
    {
      RTC_SetCounter(0x00000000);
      /* Wait until last write operation on RTC registers has finished */
      RTC_WaitForLastTask();
    }


Eğer saat bilgisini sıfırlamazsam diğer gün ay ve yıl parametreleri bu counter içerisinde otomatik artacakmı? Counter'dan bunları nasıl ayırt edeceğim? Çok Kafam karıştı açıkçası?

Klein

#224
Saniye = Counter % 60;
Dakika = (Counter / 60) % 60;
Saat = (Counter / 3600) % 24;

Gün = (Counter  / 86400);

Günden de ayı , yılı , haftanın gününü hesaplarsın.

mesaj birleştirme:: 31 Ağustos 2013, 20:13:09

Haftanın günü = Gün % 7;

Ayların sabit  olmaması ve Yıllık 6 ssatlik fazlalık nedeniyle nedeniyle Yıl ve ay ve ayın günü  hesabı biraz daha teferruatlı.
biraz sonra onu da anlatacağım.