Cortex M3 çipleri STM32F103

Başlatan z, 08 Ocak 2013, 03:19:54

t2

#240
PIC32 ye geç. tepe tepe kullan. xc32 , mplabx. bu derde deva olur.

mesaj birleştirme:: 09 Kasım 2014, 15:53:06

http://www.microchip.com/pic32

CLR

Alıntı yapılan: z - 09 Kasım 2014, 15:23:10
"TI"in 3 ayri cipiyle farkli zamanlarda uzun soluklu projeler gelisitirken daha uretim asamasina gelemeden cipler obsolete durumuna dustu.

En son stellaris ailesinin de basina ayni durum gelince sizin yapacaginiz isin icine ederim diyip ST ye yoneldim. Her sey guzel gidiyordu. TI'in TMS320F ve LM3S serisi ciplerinin cevre birimlerine gore cok acemice kalan ST donanimlari dun beni bunaltti ve ST'ye gectigime gececegime bin pisman oldum.

TI da hic yazilim destegi olmadan pwm unitesinde atraksiyonlu isler yapabilirken ST de int desteginin sart olmasi canimi cok sikti. Ustelik ST ciplerde ADC nin de nerede ise eli kolu bagli durumda.

Son projeme cok emek verdim ve sonuna geldim karsilastigim sorunu artik int destegi ile asacagim ama proje biter bitmez bir baska firmanin cipine yonelmenin vakti geldi.

TI'a tekrar donmeye korkuyorum.

Daha önce yazmadıysanız sorun nedir? "ST ciplerde ADC nin de nerede ise eli kolu bagli durumda" ile ne demek istediniz?
Knowledge and Experience are Power

z

STM32F10X serisinde Timerlarin hepsini bir amacla kullandigini varsay.

ADC yi ornegin  Timer1 icerigi

0 iken, ARR degerine esit iken, 1. compare esitliginde, 2 .compare esitliginde  start edip edemedigini anlamak icin dokumana bak.

Ardindan diger Timerlar icin de ayni tetikleme kosullarina bak.

Sonucta goruyoruz ki ADC sadece ST nin sundugu durumlar icin tetiklenebiliyor.

Halbuki TI da bu tamamen secim senin elinde. Olasi  tum durumlar sunulmus.

Devre tasarlarken eger ADC nin hangi timer ile hangi durumda tetiklenecegine  karar verip dokumanlardan bunun mumkun olup olmayacagina karar vermez ve nasil olsa bir suru timerim var istedigimi kullanirim diyerek ilgili pinler icin PCB cizimi yapilir ve bastirilirsa

TI da asla hata yapmazsin cunku ADC tetikleme konusunda ADC tetikleyebilen Timerlar esdeger ozelliklere sahipler.

Fakat ST de ADC tetikleme ozelligine sahip timerlar tetikleme konusunda bir birinin ayni ozellikte degiller.

Birisi bir yada iki durumda  ADC tetikleyebilirken digerleri farkli durumlar icin tetikleme yapiyorlar. Bu da ADC yi Timer esliginde kullanirken elinin kolunun baglanmasi demek oluyor.

Bana e^st de diyebilirsiniz.   www.cncdesigner.com

t2

#243
PIC32 modellerinde adc için otomatik  tetikleme var.
PIC32 deki  sizin açınızdan eksik veya yetersiz olan kısımlar nedir? Ben de yol yakınken
PIC32den vaz geçebilirim diye soruyorum. 
PIC32 yüzüne bile bakmamanız bana garip geldi.
PIC32 serisinde önemli eksiklikler  var sanki . nedir?

z

PIC32 gibi tamamen farklı bir platforma geçmek hoş ve kolay olmaz.

ARM Cortex serisini çok sevdim. Eğer ARM yerine başka platforma geçecek olursam Piccola'ya dönerim.
Bana e^st de diyebilirsiniz.   www.cncdesigner.com

Mucit23

Alıntı yapılan: t2 - 09 Kasım 2014, 15:50:28
PIC32 ye geç. tepe tepe kullan. xc32 , mplabx. bu derde deva olur.

mesaj birleştirme:: 09 Kasım 2014, 14:53:06

http://www.microchip.com/pic32

Aslında bu platformuda bilmek lazım ama STM32'deki gibi üzerinde TFT, LED, Buton, Com vs bulunan ucuz kartlar bulamıyorum. Çinliler hiç bu çiplere merak salmamışlar.

CLR

External trigger konusundan bahsediyorsunuz, muhtemelende sinyal periyodik değil ve dışarıdan bir IO'dan tetikleme gerektiriyor durumunu söylüyorsunuzdur. 
Sinyal periyodikse, tüm timer'ları kullanabilirsiniz ama triggeri içeriden bağlamak kaydıyla.
Dışarıdan, yani sinyal periyodikse ve dışarıdan tetikleme gerekiyorsa dediğiniz gibi her timer'ın her kanalını kullanamıyorsunuz. 
Uygunsa exti interrupt'ı adc tetiklemek için kullanabilirsiniz, adc'yi dma'ya bağlarsanız sadece trigger esnasında exti interrupt çalışır.

Probleminizi tam olarak açıklarsanız, belkide çözümü vardır. Ben genelde periyodik ve trigeri içeriden bağlamalı kullandığımdan tüm timer'ları kullanabiliyorum. 
Knowledge and Experience are Power

ErsinErce

https://www.infineon.com/cms/en/product/channel.html?channel=db3a30433c1a8752013c3e221b9d004f

sizi bu tarafa alalım hocam o zaman, uzun soluklu microcontroller için automotive grade lere bakmak isteyebilirsiniz genelde 10 yıllık üretim garantisi oluyor

z

Alıntı yapılan: CLR - 09 Kasım 2014, 19:17:33
External trigger konusundan bahsediyorsunuz, muhtemelende sinyal periyodik değil ve dışarıdan bir IO'dan tetikleme gerektiriyor durumunu söylüyorsunuzdur. 
Sinyal periyodikse, tüm timer'ları kullanabilirsiniz ama triggeri içeriden bağlamak kaydıyla.
Dışarıdan, yani sinyal periyodikse ve dışarıdan tetikleme gerekiyorsa dediğiniz gibi her timer'ın her kanalını kullanamıyorsunuz. 
Uygunsa exti interrupt'ı adc tetiklemek için kullanabilirsiniz, adc'yi dma'ya bağlarsanız sadece trigger esnasında exti interrupt çalışır.

Probleminizi tam olarak açıklarsanız, belkide çözümü vardır. Ben genelde periyodik ve trigeri içeriden bağlamalı kullandığımdan tüm timer'ları kullanabiliyorum. 

Hayır ext triggerden bahsetmiyorum. Timerların kendi iç eventleri ile ADC nin harekete geçirilmesi durumundan bahsediyorum.
Bana e^st de diyebilirsiniz.   www.cncdesigner.com

CLR

Sanırım sorunuzu tam olarak anlayamadım ama benim anladığımı söylüyeyim ve ona göre cevap yazayayım, siz periyodik olarak mesela 1ms'de bir adc'den sample almak istiyorsunuz ve bunu tüm timer'lar la yapamıyorum diyorsunuz gibi algıladım.

Aşağıda listesi var, hemen hemen hepsi tetikleyebiliyor,  Hatta timer1'in 3 kanalı 3 farklı zamanda tetikleyebilir görünüyor.  İsterseniz aynı timer ile 16'ya kadar adc girişini otomatik tarattırabilirsiniz. Bence oldukça flexible buluyorum ama TI'ın adc trigger konusuna yabancıyım belki onda farklı özellikler vardır.

Yani mesela ADC1'e bağlı X kanalını T1/T2/T3/T4'den herhangi birini kullanarak periyodik okuyabilirsiniz.

#define ADC_ExternalTrigConv_T1_CC1                ((uint32_t)0x00000000) /*!< For ADC1 and ADC2 */
#define ADC_ExternalTrigConv_T1_CC2                ((uint32_t)0x00020000) /*!< For ADC1 and ADC2 */
#define ADC_ExternalTrigConv_T2_CC2                ((uint32_t)0x00060000) /*!< For ADC1 and ADC2 */
#define ADC_ExternalTrigConv_T3_TRGO               ((uint32_t)0x00080000) /*!< For ADC1 and ADC2 */
#define ADC_ExternalTrigConv_T4_CC4                ((uint32_t)0x000A0000) /*!< For ADC1 and ADC2 */
#define ADC_ExternalTrigConv_Ext_IT11_TIM8_TRGO    ((uint32_t)0x000C0000) /*!< For ADC1 and ADC2 */

#define ADC_ExternalTrigConv_T1_CC3                ((uint32_t)0x00040000) /*!< For ADC1, ADC2 and ADC3 */
#define ADC_ExternalTrigConv_None                  ((uint32_t)0x000E0000) /*!< For ADC1, ADC2 and ADC3 */

#define ADC_ExternalTrigConv_T3_CC1                ((uint32_t)0x00000000) /*!< For ADC3 only */
#define ADC_ExternalTrigConv_T2_CC3                ((uint32_t)0x00020000) /*!< For ADC3 only */
#define ADC_ExternalTrigConv_T8_CC1                ((uint32_t)0x00060000) /*!< For ADC3 only */
#define ADC_ExternalTrigConv_T8_TRGO               ((uint32_t)0x00080000) /*!< For ADC3 only */
#define ADC_ExternalTrigConv_T5_CC1                ((uint32_t)0x000A0000) /*!< For ADC3 only */
#define ADC_ExternalTrigConv_T5_CC3                ((uint32_t)0x000C0000) /*!< For ADC3 only */
Knowledge and Experience are Power

z

Sorun şundan kaynaklanıyor.

Tımerlar ADC yi  Timerların CMPR registeri ile CNTR registerinin eşleşmesi durumunda yada overflow ve  underflow durumunda tetikleyebiliyor.

Tek başına bana sadece underflow durumunda yada tek başına overflow durumunda ADC başlat diyemiyoruz.

Aşağıdaki dokumanda sayfa 224 de ADC nin timer ile tetiklenebildiği durumlar var.

http://www.st.com/st-web-ui/static/active/en/resource/technical/document/reference_manual/CD00171190.pdf

ST seçmece yapmış ve bize sunmuş.  Mesela Timer 4 kullanayım ve CC1 event ile ADC başlatayım diyemiyorsun.

STM32F103 için konuşuyorum. TI da böyle bir ayrım yoktu. Tüm timerlar bu tür temel işlevlerde eşdeğer özelliğe sahipler.
Bana e^st de diyebilirsiniz.   www.cncdesigner.com

CLR

Timer'ı yukarı saydırırsan overflow interrupt oluşturur, aşağı saydırırsan underflow olur yani stm32 bunu yapıyor. CR1 içindeki DIR biti Up/down bitidir. İlgili timer'ı yukarı saydırırsanız sadece overflow'da adc'i tetikleyecektir.

Timx'in tüm kanalları ile adc tetikleme konusunda haklısın evet öyle bir seçenek yok fakat yinede bana göre extreme bir durum gibi görünüyor. Sadece referans manual'e bakıp kullanılan kanalı yazmak yeterli.

Çünkü Tim4-CC1 veya 4'ün ikiside tim4'ü kullanıyor, seknonizasyonda sorun olmayacaktır.  Programsal olarak bağlıyacağınız için pcb derdide olmaz.  Tim4 CC4'ü başka amaç için kullanıyorsanız Tim2/tim3'ün kanalları da kullanılabilir, sonuçta hepsinin clock kaynağı aynı, senkron bozulmaması gerekir.

Baştada söylediğim gibi external trigger olursa haklısınız.
Knowledge and Experience are Power

z

#252
TI da bunların hiçbirine kafa yormanız gerekmiyor. Timerlarda ADC lerde hiç sınırlama yok. SRM 32F10x serisinde Up/Down modunda Pwm üretmek isterseniz overflow ve underflow  durumlarından ayrı ayrı haberdar omak isterseniz intları işe sokmak gerekiyor.
Bana e^st de diyebilirsiniz.   www.cncdesigner.com