ST de belki yanlış aradım ve göremedim tek tek çiplere bakmaya da üşendim.
Cortex M3
Min 32K Flash
Min 16K Ram
USB
ADC En az 10 Bit, 8 kanal, En az 1 Mega sample
PWM En az 8 Kanal
En az 60 Mhz
ST ve NXP den çip isimleri verecek varmı?
http://www.st.com/stonline/stappl/productcatalog/app?page=productSelector (http://www.st.com/stonline/stappl/productcatalog/app?page=productSelector)
STM32F103RC istediklerinizi karşılayabilir hocam.
ARM Cortex M3
72 MHz
256KB Flash
48KB Ram
USB
16*12bit ADC ; 1us
8*16bit timer
32K flash stm32 li bir proje için düşük min 128k kullanmalısınız.
NXP'nin LPC1768 MCu tam istediğiniz özelliklere uymakta;
Cortex-M3 with 512 kB flash, 64 kB SRAM, Ethernet, USB 2.0 Device/Host/OTG, 12-bit ADC, DAC, I2S
STM32F103T8 işinizi görebilir,
•72 MHz maximum frequency,1.25 DMIPS/MHz (Dhrystone 2.1) performance at 0 wait state memory access
•Single-cycle multiplication and hardware division
•Memories•64 or 128 Kbytes of Flash memory
•20 Kbytes of SRAM
Birde benzer serilerin value line işlemcileri var stm32vl kit bordlardaki gibi, bunlarda clock frekansı birzdaha düşük ve usb portu yok ancak fiyat olarak uygundur...
CM4 ler güzel fakat CM3 ler işimi görüyor hocam.
STM32 çiplerde PWM kanal sayısı ile Timer sayısı arasında bir bağıntı varmı?
Örneğin timer sayısı 4 olupta 8 pwm olabiliyormu? Yoksa illaki bu iki değer eşit mi?
hocam timer3 ü kullanarak 4 kanal pwm yapıyorum. emin olmamakla beraber timer sayısı ile pwm kanal sayısı birebir eşitleme yok.
http://muhittinkaplan.com/2012/11/coocox-ile-adc-ve-pwm/ (http://muhittinkaplan.com/2012/11/coocox-ile-adc-ve-pwm/)
Evet birebir eşit değil her işlemci için sayılar değişiyor diyelim ki 10 tane timer var her timer için 4 adet pwm kanalı bulunuyor ancak hesapdaki gibi 40 ch pwm yapamıyorsunuz donanımlar için ayrılmış timerlar oluyor bunun dışında aynı pinde 2 timerın pwm çıkışıda olabiliyor pin yapısı karmaşık timerda pwm özelliği olsa bile pini bulunmayabiliyor. (144 pin bulabilirseniz hepsi kullanılır).
Ancak bunlar kafanızı bulandırmasın MicroXplorer indirin işlemciyi seçip timerlardan pwm pinlerini göster diyebilirsiniz. Pcb tasarımı öncesi çok işinize yarayacaktır.
En az pine sahip çipi arıyorum. 64 yerine 48 hatta 32 Pin.
F4 serisinde 2 adet 32 bit genel amaçlı timer, 24 bit system timer, 12 adet 16bit timer mevcut. Bunların içinde tim1 ve tim8 gelişmiş timer olarak özellikle 3 faz motor kontrolünde pwm çıkışı olarak kullanılır.
(http://imageshack.us/a/img593/4337/stm32f4timers.jpg)
STM32F103C8T6
STM32F103C8T6 bu çipin en detaylı dokümanının linki nedir acaba?
ST nin sitesine alışamadım. Çip seçme sayfasında, CM3 ler içinde 48 bacaklı ve 8 pwm çıkışı olan çipleri sırala diyemiyorum.
http://www.st.com/internet/mcu/product/164476.jsp (http://www.st.com/internet/mcu/product/164476.jsp)
1.5mb lık döküman var. Ama design support sekmesinde bir cok ayrı dökümanlar bulunmakta.
Bildiğim kadarıyla USB li daha kücük F1 yok.
Yok yahu, ben bu çipin en detaylı register bazında anlatımının olduğu dokümanı bulamadım.
STM32F103C8 kullanan hazırda bir kit biliyormusunuz?
STM32F102CB
STM32F103C8
STM32F103CB
bu üçü hocam
Alıntı yapılan: z - 08 Ocak 2013, 17:28:02
Yok yahu, ben bu çipin en detaylı register bazında anlatımının olduğu dokümanı bulamadım.
STM32F103C8 kullanan hazırda bir kit biliyormusunuz?
http://www.st.com/internet/mcu/subclass/1169.jsp (http://www.st.com/internet/mcu/subclass/1169.jsp)
Resources altında Reference Manuals.
http://www.st.com/internet/com/TECHNICAL_RESOURCES/TECHNICAL_LITERATURE/REFERENCE_MANUAL/CD00171190.pdf (http://www.st.com/internet/com/TECHNICAL_RESOURCES/TECHNICAL_LITERATURE/REFERENCE_MANUAL/CD00171190.pdf)
Alıntı yapılan: z - 08 Ocak 2013, 17:28:02
Yok yahu, ben bu çipin en detaylı register bazında anlatımının olduğu dokümanı bulamadım.
STM32F103C8 kullanan hazırda bir kit biliyormusunuz?
Hocam aşağıdaki linkte bu chip ailesini üzerinde barındıran kitler bulunuyor . Linke tıklayınca "Design Support" bölümünde "BOARDS AND TOOLS" bölümünde bulunuyor ...
http://www.st.com/internet/mcu/product/164476.jsp (http://www.st.com/internet/mcu/product/164476.jsp)
http://www.st.com/internet/evalboard/product/204176.jsp (http://www.st.com/internet/evalboard/product/204176.jsp)
http://www.st.com/internet/evalboard/product/251795.jsp (http://www.st.com/internet/evalboard/product/251795.jsp)
İyi çalışmalar dilerim .
Z, herhangi bir stm32 kiti al sanki bahsettiğin 103C8miş gibi program yaz, hiç değişiklik yapmadan çalışır. Çünkü register yapısı birebir aynı ve pin yapıları.
ben 32f100rb ye yazdım (stm32vl discovery) stm32f103 de clock ayarı dışında değişiklik yapmadım.
(http://i.ebayimg.com/00/s/NzAwWDcwMA==/$(KGrHqRHJCYFCkDC0E1yBQsLTkH,dg~~60_12.JPG)
Bu kiti de sipariş verdim.
http://www.ebay.ie/itm/ARM-STM32-M3-Cortex-m3-STM32F103C8T6-Development-Kits-J-LINK-JTAG-USB-TTL-UART-/330834266418?pt=LH_DefaultDomain_0&hash=item4d07424932 (http://www.ebay.ie/itm/ARM-STM32-M3-Cortex-m3-STM32F103C8T6-Development-Kits-J-LINK-JTAG-USB-TTL-UART-/330834266418?pt=LH_DefaultDomain_0&hash=item4d07424932)
JTAG içinde;
STM32F103 ile kullanmak üzere http://www.ebay.ie/sch/i.html?_from=R40&_trksid=m570&_nkw=ulink2 (http://www.ebay.ie/sch/i.html?_from=R40&_trksid=m570&_nkw=ulink2) de EUR 19.13 olanı sipariş edeceğim.
u-link yerine j-link sipariş edin hocam
hemen hemen her derleyici desteklyor ayrıca kendi programı ile direk program yükleme imkanı mevcut
son versiyonla güvenliği arttırdılar ama çözümü de mevcut ;)
http://www.ebay.com/itm/JLINK-V8-ARM-JTAG-USB-Emulator-TVS-FUSE-Full-Protection-J-LINK-V8-Programmer-/140903779246?pt=LH_DefaultDomain_0&hash=item20ce850bae (http://www.ebay.com/itm/JLINK-V8-ARM-JTAG-USB-Emulator-TVS-FUSE-Full-Protection-J-LINK-V8-Programmer-/140903779246?pt=LH_DefaultDomain_0&hash=item20ce850bae)
(http://i.ebayimg.com/t/JLINK-V8-ARM-JTAG-USB-Emulator-TVS-FUSE-Full-Protection-J-LINK-V8-Programmer-/00/s/NTkzWDc1MA==/$T2eC16Z,!)8E9s4l8!0IBQ6ihouiM!~~60_3.JPG)
Bunu sipariş ediyorum o zaman.
Hocam aynı ürünün daha ucuzları var. Ben 18 dolara aldım.
http://www.aliexpress.com/snapshot/210860907.html (http://www.aliexpress.com/snapshot/210860907.html)
Daha gelmedi. Bende bekliyorum
Niye fiyatlar bukadar farklı?
Kör tuttuğunu öpüyor. Aliexpress'den daha önce hiç alışveriş yapmadım. Onda da Ebay'daki gibi paypal ile ödememi yapılıyor?
Malesef hayır. Kredi kartı ile almanız gerekiyor. Ancak sanal kart ile sorun yok ben sanal karta alacağım ürün kadar limit aktarıp alışverişimi yapıyorum sorun olmıyor. Ayrıca aliexpress'te ürünleri hep kayıtlı postaile gönderiyorlar ve daha kısa sürede ulaşıyor. Artık ben ebayden çok aliexpress'ten alışveriş yapmaya başaldım. Ebay ikinci sırada artık benim için.
Bende alacağım Böyle bir Ürün.
CooCox, Keil gibi idelerle çalışıyorum. Ne almalıyım ?
Ben klon U-link 2 aldım Keil tanıdı ve içindeki yazılımı hemen update etti
ulink benim işime gelmez
Keil ve J-link çok uyumlu çalışıyor. Hiç sıkıntı yaşamadım. Üstelik J-flash programı ile flash hafızanın bütününü görüntülemek kolaylaşıyor böylece keilin watch memory pencereleriyle boğuşmak zorunda kalmıyorsunuz.
F4 kitinde stlink yokmu ? Bu stlinki extra bir devreyi programlamak için kullanamıyormusunuz ?
Alıntı yapılan: hgs - 10 Ocak 2013, 08:55:10
F4 kitinde stlink yokmu ? Bu stlinki extra bir devreyi programlamak için kullanamıyormusunuz ?
Pek pratik olmuyor o şekilde. ARM ile uğraşacakların elinde bir Jtag programlayıcı olması gerek..
CooCox'un kendi JTAG kartı var tüm dosyalarını paylaşıyor bastırılıp kullanıla bilir.
stm32 nin içinde uart dan programlama yapan kısmı(bootloader) silmek mümkün mü? Yoksa fabrika çıkışı, sabit - donanımsal gibi bişey mi?
STM32F103 ile ilgili dokumanları toparlamaya başladım. Örnek bir tasarım şemasını arıyorum.
Herhangi bir link varmı?
mesaj birleştirme:: 28 Ocak 2013, 17:24:17
Alıntı yapılan: mcan - 10 Ocak 2013, 19:37:55
stm32 nin içinde uart dan programlama yapan kısmı(bootloader) silmek mümkün mü? Yoksa fabrika çıkışı, sabit - donanımsal gibi bişey mi?
Muhtemelen ST de TI gibi bunu ROM içine gömmüştür. TI da böyle bir şansınız yok.
Nasıl bir şema ?
stm32f103rb kullanıyorum şu an itibariyle
STM32F103C8T6 çipini kullanmak üzere bir kart çizimine başlayacağım.
Dokumana bakarım da TI'da yaşadığım sorunları bu çiptede yaşamak istemiyorum.
Vdd, Vss, Analog Güç pinleri, Jtag, reset, usb vs.
TI da bazı doküman hataları ve çipin donanımsal tasarım hatalarından dolayı bir aya yakın zamanım sorunu bulmaya gitmişti.
Hocam şurada STM3210 - EVAL board 'un seması vs mevcut ... Yalnız sayfa sayfa birimler gösteriyor bu biraz karmaşık olabiliyor .
http://www.st.com/internet/evalboard/product/204176.jsp (http://www.st.com/internet/evalboard/product/204176.jsp)
Design Support --> SCHEMATIC PACKS Kısmında shematic dosyaları mevcut . İyi çalışmalar dilerim .
Saygılarımla .
(http://www.hqew.net/files/Images/Article/images/1_1(26).jpg)
http://www.hqew.net/circuit-diagram/A-STM32F103C8T6-minimum-system_13138.html# (http://www.hqew.net/circuit-diagram/A-STM32F103C8T6-minimum-system_13138.html#)
Konuyla alakalı değil ama aşağıda ilginç şeyler var.
http://www.wayengineer.com/index.php?main_page=index&cPath=49&zenid=7b1646d56e1b657716740c9f9f2db63b (http://www.wayengineer.com/index.php?main_page=index&cPath=49&zenid=7b1646d56e1b657716740c9f9f2db63b)
SWDIO ve SWCLK kullanarak programlıyorum. Jtag bağlantılarını bilmiyoum.
Analog besleme aynı zamanda PLL devresinin de beslemesi. Datasheet VDD-300mV olabilir diyor. deneme amaçlı 2.5V'a kadar indim çalışmada sıkıntı çıkmadı. Ama çıkmayacağı anlamına gelmez.
4u7 kapasitenin VDD_3'e bağlanması önerilmiş.
Analog girişler ve besleme için 100n değil, 10n öneriyor.
şimdilik aklıma gelenler bunlar.
(http://c1301.hizliresim.com/15/w/jgrt2.png) (http://bit.ly/c25MCx)
Yeri gelmişken burda sorayım.
Bugüne kadar smd malzeme kullandığım tüm kartlarda besleme hattına bağlanan tüm kapasitörleri PCB de çipin yerleştiği yerin hemen arkasına arka yüze koyuyordum.
Böylece göya kapasitörleri çipe yakın yerleştirmiş oluyordum. Fakat bu durumda bacaklardan kapasitörlere giden yollarda vialar olmuş oluyordu.
Şimdiki tasarımda tüm malzemeleri üst kata yerleştireceğim alt kat tamamen düzlemsel olacak. Böylece aşağıda resmi görülen PowerSo20 paketi soğutmak amacıyla kartımın hemen altına aluminyum bir taban vidalayabileceğim. Böylesine geniş bez izolatör kullanmak yerine kartın altına yerleşim maskesi ve yazıların yazıldığı beyaz boya ile komple boyatıp izolasyon yapmayı düşünüyorum. Zira kartın altı aluminyumla sıfıra sıfır öpüşecek.
SMD malzemeleri özellikle de besleme kapasitörlerini üst yüze aldığımda diğer yolların çipten alınması sıkıntı olacak dolayısı işe kapasitörler biraz uzakta duracak.
Neyse bu konuda konuşmak isteyenler varsa dinlemek isterim.
(http://media.digikey.com/Renders/STMicro%20Renders/PowerSO-20.jpg)
Beyler mesela stm32f4vtg6 çipini kullanarak bir devre yapacağız. Devre dışarıdan programlanabilir olacak. Bunun için minimum gereksinimleri içeren bağlantı şemasını nereden bulabiliriz?
Alıntı yapılan: LukeSkywalker - 28 Ocak 2013, 18:27:44
Beyler mesela stm32f4vtg6 çipini kullanarak bir devre yapacağız. Devre dışarıdan programlanabilir olacak. Bunun için minimum gereksinimleri içeren bağlantı şemasını nereden bulabiliriz?
SWDIO,SWCLK,NRST,VDD,GND minimum gereksinim bunlar hocam. Bir şema çizmeye gerek yoktur heralde.
Kapasiteleri çok uzağa almana gerek yok hocam.
(http://a1301.hizliresim.com/15/w/jgtk7.png) (http://bit.ly/c25MCx)
Gördüğün gibi apasiteleri koyduktan sonra , yollar için oldukça yer kalıyor. Kapasiteler 805 klıf. Bir de bunları 603 yapsan hiç derdin kalmaz.
swd programlama pinleri değil mi bunlar?
Peki jtag ve swd 'nin farkı nedir?
Herhangi bir programlayıcı (u-link, s-link) her iki programlamayı da yapabilir mi?
@Gerbay
http://www.st.com/internet/com/TECHNICAL_RESOURCES/TECHNICAL_LITERATURE/APPLICATION_NOTE/CD00003801.pdf (http://www.st.com/internet/com/TECHNICAL_RESOURCES/TECHNICAL_LITERATURE/APPLICATION_NOTE/CD00003801.pdf)
Benim kartta PowerSo20 kilifli çiplerden üç tane olacak ikisi nerede ise güç harcama açısından limitte çalışacak.
Bakır yüzeyi artırıp kartı büyütmek yerine kartın diğer yüzeyini aluminyum blok soğutucu ile temas ettirmeyi tercih ettim.
Bu haliyle sıra dışı bir çalışma olacak gibi görünüyor. (Figure 19)
Linkini verdiğim dokümanda çipin altındaki bakır soğutucunun PCB deki izdüşümüne kanal açtırıp soğutucuyu, doğrudan çipin bakır aksamına temas ettitmekten de bahsediliyor. Ancak bu PCB maliyetini artırıyor daha da önemlisi aluminyumun frezede işlenmesini gerektiriyor. (Fıgure 21b)
Figure 21a da bahsi geçen çalışmayı yapmak için çipin bacaklarını biz mi tersine çevireceğiz anlamadım. Satıcılarda benim çipin slug-up tipini bulamadım.
z@ Hocam,
Bacakları ters çevirmek değil de, PCB 'yi uygun ebatlarda açıp, soğtucuyu da PCB kalınlığında o açılan bölmeye girecek şekilde dizayn etmekten söz etmişler sanırım ki bu cidden maliyet artırıcı bir durum.
Galiba bu tarz bir kullanım daha yerinde olur gibi..
http://manton.wdfiles.com/local--files/open%3Abldc-motor-driver/BLDC%20V1.00%20Blank%20PCB.jpg (http://manton.wdfiles.com/local--files/open%3Abldc-motor-driver/BLDC%20V1.00%20Blank%20PCB.jpg)
mesaj birleştirme:: 28 Ocak 2013, 21:12:21
z@ Hocam,
Bacakları ters çevirmek değil de, PCB 'yi uygun ebatlarda açıp, soğtucuyu da PCB kalınlığında o açılan bölmeye girecek şekilde dizayn etmekten söz etmişler sanırım ki bu cidden maliyet artırıcı bir durum.
Galiba bu tarz bir kullanım daha yerinde olur gibi..
http://manton.wdfiles.com/local--files/open%3Abldc-motor-driver/BLDC%20V1.00%20Blank%20PCB.jpg (http://manton.wdfiles.com/local--files/open%3Abldc-motor-driver/BLDC%20V1.00%20Blank%20PCB.jpg)
@Gerbay hocam evet Figure 19 u uygulayacağım.
@Peko
Bacakları kıvrık çipler sanırım satılıyor. Figure 22 deki uygulama böyle. Bu durumda soğutucuyu yukarıdan bağlamak mümkün oluyor. Fakat satıcılarda bu tipini bulamadım.
PCB resmini verdiğin gibi yapacağım. Fazladan çipin altına konmuş çok sayıda via ile kartın arkasına aktarılmış ısıyı soğutucu ile uzaklaştıracağım.
Metal soğutucu kullanmazsam çipin etrafında çok geniş bakır yüzey bırakmam gerekecek. Bunu kaprisim yüzünden istemiyorum.
Acaba hiç soğutucu kullanmadan çipleri, hemen üstüne konumlanmış minik fanlarla soğutsam mı diye de bir seçenek daha var.
Eger cipin altina cok sayida karsilikli via acilir ve bu vialar arasina yol cekilirse , yollarin uzeri boyanmamak kaydi ile iyi bir isi aktarimi olur dusuncesindeyim. Sogutucu boyanmamis yollarin uzerine yapistiriabilir.
Peko vermis zaten demek istedigim seyin hayata gecirilmisini.
Cip-yuzey, yizey-sogutucu arasina gumus alasimli termal macun surerseniz de tadindan yenmez.
MicroXplorer programında STM32F103C8 seçer ve mesela TIM2 de PWM Generation ı tıklarsam 4 pin birden kullanıma alınıyor.
Bu 4 pin 4 adet bir birinden bağımsız PWM anlamına mı geliyor?
Bana center align modunda 4 bağımsız pwm lazım.
hocam ben 32f103rbt de timer3 ile 4 kanal pwm kullanıyorum. ama microXpleler le Tim3_Ch1, Tim3_Ch2, Tim3_Ch3, Tim3_Ch4, olarak görünüyor. PWM Genarator olarak değil.
//------PWM PIN Ayarlamaları--------------------------------------------------------------------------------//
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_6;//| GPIO_Pin_7 | GPIO_Pin_8 | GPIO_Pin_9;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_Init(GPIOC, &GPIO_InitStructure);
GPIO_PinRemapConfig(GPIO_FullRemap_TIM3, ENABLE);
}
Alıntı yapılan: z - 02 Şubat 2013, 20:41:22
MicroXplorer programında STM32F103C8 seçer ve mesela TIM2 de PWM Generation ı tıklarsam 4 pin birden kullanıma alınıyor.
Bu 4 pin 4 adet bir birinden bağımsız PWM anlamına mı geliyor?
Bana center align modunda 4 bağımsız pwm lazım.
Hocam bu dört pin 4 ayrı pwm anlamına geliyor da gelmiyor da ;D Bu tamamı ile ilgili timer sürerken handi modda bulunduğunuza bağlı. Örneğin output
compare toggle mode da
TIM2 counter clock = TIMxCLK / (Prescaler 1) = 12 MHz
TIM2_CCR1 e 0x8000 yüklersek,
CC1 update rate = TIM2 counter clock / CCR1_Val = 366.2 Hz,
TIM2_CH1 de 183.1 hz lik bir karedalga mız olacak. ccr2, ccr3,ccr4 e yüklediğimiz değere bağlı olarak 3 farklı frekans ta karedalga daha elde edebiliriz. Kullanılcak moda göre 4 farklı gecikme, yada 4 farklı duty aynı timer üzerindeki 4 kanalda elde etme imkanı mevcut.
Alıntı Yap
MicroXplorer programında STM32F103C8 seçer ve mesela TIM2 de PWM Generation ı tıklarsam 4 pin birden kullanıma alınıyor.
Bu 4 pin 4 adet bir birinden bağımsız PWM anlamına mı geliyor?
Bana center align modunda 4 bağımsız pwm lazım.
1 timer ile frekans ve çözünürlükleri aynı olmak suretiyle , duty oranlarını birbirinden bağımsız ayarlayabileceğiniz 4 pwm kanalınız olur.
STM32F103 USB konnektor balantısında çip pinleri ile USB konnektoru arasındaki bağlantıyı gösteren şema arıyorum.
Direnç vs bağlamak gerekiyormu vs vs...
Alıntı yapılan: z - 06 Şubat 2013, 23:26:29
STM32F103 USB konnektor balantısında çip pinleri ile USB konnektoru arasındaki bağlantıyı gösteren şema arıyorum.
Direnç vs bağlamak gerekiyormu vs vs...
Yok hiçbirşey bağlamaya gerek yok . Ben stm32l151 serisi ile usb kartı çizdim , sorunsuz çalışıyor şu an.
Bağlantı şekli
USBDM -> D-
USBDP -> D+
Birde GND tabiki...
Daha önceki sorulalarımdan da hatırlayacağınız gibi STM32F103C8 çipiyle yapılmış referans tasarımı incelemek için şema arayıp duruyordum.
Bugün gözlerime inanamadım.
Bir Allah'ın kulu da STM32F4 kitin şemasına bak orada SWD için STM32F103C8 şeması var demedi. (Aşağıdaki dokümanın 32/38 sayfası)
http://www.st.com/internet/com/TECHNICAL_RESOURCES/TECHNICAL_LITERATURE/USER_MANUAL/DM00039084.pdf (http://www.st.com/internet/com/TECHNICAL_RESOURCES/TECHNICAL_LITERATURE/USER_MANUAL/DM00039084.pdf)
Bu şemayı görmemiş olmanıza ihtimal vermediğimiz için.
Ancak dikkat edilirse swd firmware yazılımını barındıran STM32F103C8 işlemcisinin usb bağlantısında sıfır ohm dirençler DP ve DM pinlerinde kullanılmışken, stm32f4 işlemcinin usb otg portunda 22 ohmluk dirençlerle usb portuna çıkış yapılmış...
Alıntı yapılan: Klein - 07 Şubat 2013, 19:14:33
Bu şemayı görmemiş olmanıza ihtimal vermediğimiz için.
Hocam Bazen Oluyor, Cevap yazarken -kendi namıma- hiçbirşey bilmiyor bu adam diye cevap verin.
Yeni konu açmak istemedim,
İşlemci, adc, dac, 2 dma, 3 gpio açıkken 50mA civarı akım çekiyor, dac buffer kapalı.
Diğer modüllerin gücü açık olarak mı geliyor?
Güç tüketimini düşürmek için yaptığınız konfigürasyonlarla ilgili ipucu verebilir misiniz?
Kolay gelsin
Cortex M3 ler üzerine önemsiz ayrıntı ;
TI in sitsinde nedense normal m3lre bakma istedim kolayca bulamadım(datasheetleri vs var), şu şekilde bir not düşülmüş
Zaten mcu kısmındada ,özel hercules m3 ler hariç, LM3Sler yok sadece LM4F görünüyor.
Satmaya devam ederler ama demekki yeni yeni model cortexm3 ler TI tarafından çıkarılmayacak.
The Stellaris LM3S series has recently been designated as "Not Recommended for New Designs" (NRND). TI has made no changes to the availability of these devices. However, the devices are no longer available to be sampled and the evaluation and development kits are almost sold out.
As the new Stellaris® ARM® Cortex™-M4 products (LM4F series) become available and provide developers with a number of distinct advantages compared to Cortex-M3 devices (LM3S series), TI is recommending that customers migrate to the LM4F family. These new devices provide floating point for performance headroom and best-in-class low-power consumption to address portability and power budgets. These Stellaris LM4F MCUs are built using 65-nm technology and provide a roadmap to higher speeds, larger memory and even lower power for our customers.
We encourage customers to work directly with their TI sales and FAEs to find the best fit for their next designs. If you have any additional questions about our new Stellaris LM4F MCUs, please let us know on these TI E2E forums and we will work to respond as soon as possible.
Regards, ~Miguel
Vay be ne kadarda geri kalmışım daha ben adam akıllı kullanamadan discontinued oldu hobim olduğundan problem yok ama psikolojik olarak rahatsız ediyor :)
Alıntı yapılan: SpeedyX - 08 Şubat 2013, 20:42:20
Yeni konu açmak istemedim,
İşlemci, adc, dac, 2 dma, 3 gpio açıkken 50mA civarı akım çekiyor, dac buffer kapalı.
Diğer modüllerin gücü açık olarak mı geliyor?
Güç tüketimini düşürmek için yaptığınız konfigürasyonlarla ilgili ipucu verebilir misiniz?
Kolay gelsin
modullerde Clk enable yapmayacaksın
Neden, varsayılan olarak enable mı geliyor. bus ı açınca hepsini açmışmı oluyorum.
NXP de modül güç bayrakları kapalı olarak geliyor, daha sonra kullanılan modüller aktif ediliyor, böylece işlemciye blinky programı yüklediğinizde minimum akım çekiyor. STM32 lerde ise sanırım tam tersi. Çalışma frekansıyla da alakalı tabii ama sadece 3 modül açık iken 72MHz de 50mA akım çekiyor olması tüm modüller açık geliyor diye düşündürdü.
PA13 - PA14 pinleri swd detect yapıyor bu pinleri analog input yapınız. Ayrıca Uart 1 ve Usart 2 (MD ve HD cipler için farklı olabilir) pinleri reset sonrası Alternate function kurulu oluyor bunları temizlemek lazım ben şöyle yapıyorum
/* Portlar LP moda uygun konuma aliniyor */
RCC_AHBPeriphClockCmd(RCC_AHBPeriph_GPIOA | RCC_AHBPeriph_GPIOB | RCC_AHBPeriph_GPIOC |
RCC_AHBPeriph_GPIOD | RCC_AHBPeriph_GPIOE | RCC_AHBPeriph_GPIOH |
RCC_AHBPeriph_GPIOF | RCC_AHBPeriph_GPIOG, ENABLE);
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AN;
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_400KHz;
GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_NOPULL;
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_All;
GPIO_Init(GPIOC, &GPIO_InitStructure);
GPIO_Init(GPIOD, &GPIO_InitStructure);
GPIO_Init(GPIOE, &GPIO_InitStructure);
GPIO_Init(GPIOH, &GPIO_InitStructure);
GPIO_Init(GPIOF, &GPIO_InitStructure);
GPIO_Init(GPIOG, &GPIO_InitStructure);
if(!swd)GPIO_Init(GPIOA, &GPIO_InitStructure);
GPIO_Init(GPIOB, &GPIO_InitStructure);
/* Disable GPIOs clock */
RCC_AHBPeriphClockCmd( RCC_AHBPeriph_GPIOA | RCC_AHBPeriph_GPIOB | RCC_AHBPeriph_GPIOC |
RCC_AHBPeriph_GPIOD | RCC_AHBPeriph_GPIOE | RCC_AHBPeriph_GPIOH |
RCC_AHBPeriph_GPIOF | RCC_AHBPeriph_GPIOG, DISABLE);
Sonrasında sadece kullanmak istediklerimi kuruyorum.
SWD detect pinlerini disable edersek SWD çalışmıyor mu? Kartta sadece SWD ile programlama yapılıyorsa ve SWD detect kapatılmak isteniyorsa, start verildiğinde sabit bir delay yaptıktan sonra bu işlemleri gerçekleştirmesini sağlayın, böylece reset sonrası hemen programlama moduna sokmak mümkün olur.
EDIT:
Alıntı YapAfter setting the clocks for the core system, AHB, APB1 and APB2, individual peripherals that are used must have their clocks enabled. By default, they are not enabled in order to save power.
Delay falan gerekmiyor hocam resetle beraber programlıyoruz alıyor J-link ile sorun yok. Ancak debug yapmak gerekirse program içerisinde bir debug menüsü oluşturup swd pinleri tekrar aktif etmelisiniz. Yoksa haberleşemediği için debugdan çıkıyor.
SWD olayını da öğrendiğimiz iyi oldu.
Şimdi asıl konuya gelirsek, başlangıçta modüller kapalı geliyormuş. Bu durumda 72Mhz de 40mA civarı akım normal olmasa gerek, NXP işlemcim blinky de 4mA çekiyor, STM32 işlemcim 40mA :) (Devrede başka malzeme yok, MCU+regulator+cap+res)
deneyelim. stm32f100rb kiti yanımda ammetre ile bakalım ne olacek
Üzerinde çalştığım kart 24V beslemeden 37mA akım çekiyor. STM32F103C8T6
Besleme : MC34063 ->5V LM1117->3V3
Karttaki donanımlar.
2 Adet 75176 (RX modda)
4AD LM358 (8 opamp) + DAC devresi.
8AD PWM sürücü (8Ad PNP, 8AD NPN transistör, Half bridge) yaklaşık %50 duty ile tamamı çalışıyor.
1 adet led.
8 Adet gerilim bölücü (ADC girişi için) Akıma pek etkisi yoktır. Dirençler büyük. (15K-5K)
1 Adet eeprom 24C32
Aktif iç donanımlar.
2 ad. USART
3 AD timer. ( ikisi 8 Kanal PWM (yaklaşık 25-30MHZ civarında çalışıyorlar), birisi zamanlamalar için).
1 SysTick
8 kanal ADC Sürekli çevirim modunda.
8 kanal GPIO PWM modunda yalaşık %50 dty ile, 100MHZ output hızında.
1 Led için GPIO düşük hızda
1 DMA, 3-4 adet DMA kanalı ( tümü aktif)
1 CRC donanımı.
Yani neredeyse çipin içindeki tüm donanımların saat kaynakları açık.
24mhz de 100ma çekiyor. ve sadece while döngüsü var.
hatta
int main(void)
{
SetSysClockTo24();
while(1)
{
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA |RCC_APB2Periph_GPIOB | RCC_APB2Periph_GPIOC | RCC_APB2Periph_GPIOD | RCC_APB2Periph_AFIO, DISABLE);
}
}
ile başladım. yine 100ma civarlarında.
Alıntı yapılan: Klein - 09 Şubat 2013, 22:33:35
Üzerinde çalştığım kart 24V beslemeden 37mA akım çekiyor. STM32F103C8T6
5v regulator girişinden de 100 küsür mA çekiyordur.
İki firmanın çiplerini mukayese ederken çipleri aynı clock frekansında ve aynı voltajda beslemek lazım.
Sonra da adım adım çevre birimleri devreye alınabilir.
Alıntı yapılan: z - 09 Şubat 2013, 23:02:51
5v regulator girişinden de 100 küsür mA çekiyordur.
177,6mA civarı çekiyordur.
Bu durum oldukça ilginç, msp430 ile de çalışıyorum, alet hiç akım çekmiyor desem yeridir, tabii ARM değil.
NXP ARM da bu konuda fena değil, ST de neden böyle acaba...
Bi yerde arm çipleri düşük güç tüketimine sahiptir diye bi yazı okudum ama yanlış mı hatırlıyorum acaba... 100mA da çokmuş.
Alıntı yapılan: muhamm@ - 09 Şubat 2013, 23:39:16
Bi yerde arm çipleri düşük güç tüketimine sahiptir diye bi yazı okudum ama yanlış mı hatırlıyorum acaba... 100mA da çokmuş.
Aslında ARM çipleri diye bir kavram yok, ARM çekirdeği düşük güç tüketimine sahiptir diye okumuşsundur. Bu çekirdeği kullanıp chip üreten firmaların eklediği birimler ile birlikte toplam güç tüketimi çok farkedebilir.
Alıntı yapılan: SpeedyX - 09 Şubat 2013, 23:42:58
Aslında ARM çipleri diye bir kavram yok, ARM çekirdeği düşük güç tüketimine sahiptir diye okumuşsundur. Bu çekirdeği kullanıp chip üreten firmaların eklediği birimler ile birlikte toplam güç tüketimi çok farkedebilir.
Evet ARM çekirdeği olacaktı sanırım başlığın etkisinde kaldım. :)
yukarda kodları verdim. 100ma çekiyor. led bilinky yaptım yine 104ma çekti.
ARM çekirdeği tek başına akımı belirlemez. Çekirdek bir lojik tasarım. Bunun uygulamaya geçirilmesinde kullanılan MOS teknolojisi önemli.
http://www.st.com/internet/com/TECHNICAL_RESOURCES/TECHNICAL_LITERATURE/DATASHEET/CD00191185.pdf (http://www.st.com/internet/com/TECHNICAL_RESOURCES/TECHNICAL_LITERATURE/DATASHEET/CD00191185.pdf)
Sayfa 45 den itibaren detaylı açıklamış. Herşey kapalı 72Mhz de 38mA diyor :)
Kitin çektiği akım yanıltmasın bizi. İşlemcinin çektiği akımı ayrı ölçmek lazım.
(http://rntmns.com/wp-content/uploads/2011/06/STM32VLDISCOVERY_Pinout_usage.png)
PA3 ün yanında bir jumper var. orayı açarak araya giriyorum Ametre ile. başka birşey yok. yani Kitin Toplam Akımını Ölçmüyorum.
stm32f100 modelleri içinde şu dökümanda belirtilmiş http://www.st.com/internet/com/TECHNICAL_RESOURCES/TECHNICAL_LITERATURE/DATASHEET/CD00251732.pdf (http://www.st.com/internet/com/TECHNICAL_RESOURCES/TECHNICAL_LITERATURE/DATASHEET/CD00251732.pdf)
Herşey kapalı iken 24mhz de yaklaşık 10mA çekiyor diyor. St ultra low power serisi daha iyimser
Gerçekten ilginç. JP1 işlemcinin beslemesini bağlayan jumper. Ölçüm yapılan yer doğru olduğuna göre bu kadar akımı çektiren başka bir şey var demekki. Neyle ölçüyorsunuz?
STM32F4 Dicovery kitinde, içerisinde default program (sanırım mouse) çalışırken 40mA civarı akım çekiyor.
Ben de şimdi DAC1 ve Timer7 kullanan bir uygulamayı çalıştırdım 35-40ma arasında değişti akım..
Pilli uygulamalarda ST F serisi dışarda kaldı...
------------------------------------------------------------
LPC17xx serisi için dökümanında şöyle bir bilgi var
IDD(REG)(3V3)
regulator supply current (3.3 V)
active mode; code
while(1){}
executed from flash; all peripherals disabled; PCLK = CCLK⁄8
CCLK = 12 MHz; PLL disabled 7mA
CCLK = 100 MHz; PLL enabled 42mA
CCLK = 120 MHz; PLL enabled 67mA
sleep mode 2mA
deep sleep mode 240μA
power-down mode 31μA
deep power-down mode; RTC not running 517nA
Ben 168Mhz de çalıştırdım yukarıda bahsettiğim uygulamada bunu da belirteyim.
wavetek2015 ile ölçüyorum.
ST de low power istiyorsanız STM32Lxx kullanın max clock hızı 32Mhz 33.3 DMIPS pilli uygulamalar için ideal.
örnek; STM32L152
LP Run-> 11uA
Sleep LP Run -> 4.4uA
Stop+RTC -> 1.6uA
Stop -> 650nA
StandBy -> 300nA (Ram Silinir)
STM32F103C8 kartım için pcb çizimini bitirip bir an öne çine yollamaya çalışıyorum henüz dokümanlarını karıştırmaya fırsatım olmadı.
Mevcut şemalarda 8Mhz xtal kullanılmış. Ancak aradığım kılıftaki 8Mhz xtal satıcının elinde yok Amerika stoklarında var ve malzeme bedeli hariç 20 Euro da kargo parası istiyor.
Eğer 16Mhz kullanırsam stoklarında var. 16Mhz xtal kullandığımda sorun varmı? USB donanımını kullanacağım.
Örnek tasarımlarda neden 8Mhz seçilmiş?
KAtaloglarda kristal frekansı olarak 4-16 Mhz aralığı belirtilmiş, ancak örnek devrelerde ben 8 Mhz haricinde çalışan hiç uygulama görmedim. Şimdi kristal 16 Mhz olsa PLL ile ilgili çarpanları değiştirmek lazım, yazılımda gerekli düzenlemeler yapılırsa sorun çıkmaz gibi görünüyor . Yinede önerim 8 Mhz ...
http://www.st.com/internet/com/TECHNICAL_RESOURCES/TECHNICAL_LITERATURE/APPLICATION_NOTE/CD00164185.pdf (http://www.st.com/internet/com/TECHNICAL_RESOURCES/TECHNICAL_LITERATURE/APPLICATION_NOTE/CD00164185.pdf)
HSE osilatör akımındaki artışı saymazsak 8 yerine 16Mhz Xtal kullanmak sorun oluşturmayacak gibi duruyor.
Dokümanlarda bu çipi 72 Mhz de koştururken 2 wait state atılması gerektiğini okudum.
Eee ne anladım ben bu işten. 72Mhz de çalışmak peripheralleri yüksek clockla beslemekten başka işe yaramıyor.
32F4 deki ART donanımı da olmadığına göre işlemcinin kendisi 24Mhz oluyor bu durumda. Aldatıldım galiba.
Bu ST yi sen başımıza musallat ettin, gör bak nelerle uğraşıyoruz.
Evet 2wait state okumuş ve not almışım
0-24 0
14-48 1
48> 2
wait state
60Mhz Stellaris'den 72Mhz ST32F103'e geçiş yapmakla iyi ettim sanıyordum. ST nin yaptığı da olmaz ki. 72Mhz diye reklam yaparak milleti aldatıyor.
Hoş bu saatten sonra Stellaris'e de geri dönülmez bu çiplerden vazgeçince TI da üretmekten vazgeçmiş.
2 wait state ne için , flash okuması için mi ?
Evet.
Hızda nekadar fark ederki adam 1.25 DMIPS/MHz (0 waitstate miş) demiş
Edit Ekleme
mesaj birleştirme:: 12 Şubat 2013, 12:07:02
TI neden vazgeçmiş, senin kullanmayacağını duyunca mı ?
stm32f1 lerde Value line serisinde core 24 Mhz diğer üst serilerde,36 ,48 ve 72 Mhz de çalışan modeller var, flash hafızadan 2 wait state ile okuma yapmak performansı etkiler ancak core frekansı stm21f103 serilerinde 72 Mhz dir. Fiyatlar da işlemci hızına göre artış göstermekte, kataloglarda yeralan bilgileri iyice okumak gerekir...
mesaj birleştirme:: 12 Şubat 2013, 12:49:57
Şimdi fiyatlara bir baktım benzer donanım ve pin sayısına sahip 72 Mhz lik işlemci ile 24 Mhz olan arasında 1usd gibi fiyat farkları var çok ciddi farklar yok...
Core frekansı 72Mhz ama flashdan bu hızda kod koşturamıyor.
Mecburen 2 wait state atacağız yada kodları rama kopyalayıp ordan koşturacağız.
Bu üstü kapalı bir kandırmaca.
Açıkcası dokümanlara gözatmadan önce 72Mhz işlemci ile flashdaki kodumu 0 wait state ile koşturacağımı varsayıyordum.
mesaj birleştirme:: 12 Şubat 2013, 13:04:29
Alıntı yapılan: muhittin_kaplan - 12 Şubat 2013, 12:02:10
Hızda nekadar fark ederki adam 1.25 DMIPS/MHz (0 waitstate miş) demiş
Edit Ekleme
mesaj birleştirme:: 12 Şubat 2013, 12:07:02
TI neden vazgeçmiş, senin kullanmayacağını duyunca mı ?
1.25 DMIPS/MHz ifadesinde Mhz kısmına 72Mhz yazarsak bu ifade Flashda mı yoksa Ramda mı geçerli? (Elbette Ramdan)
Flash için Mhz kısmına 24 yazmamız gerekir. Yanlışmıyım?
Evet TI, benim gibi safkan fanatiğini kaybedince üretimden vazgeçmiş.
bu kod Pll ayarları 72MHz ayarlanmış STM32F103 çipinde koşuyor.
while (1)
{
GPIOA->ODR ^= 0x100;
}
Disassmbly burada.
08000a72: mov.w r3, #2048 ; 0x800
08000a76: movt r3, #16385 ; 0x4001
08000a7a: mov.w r2, #2048 ; 0x800
08000a7e: movt r2, #16385 ; 0x4001
08000a82: ldr r2, [r2, #12]
08000a84: eor.w r2, r2, #256 ; 0x100
08000a88: str r2, [r3, #12]
08000a8a: b.n 0x8000a72 <main+206>
Buna göre PORTA'dan çıkan kare dalganın frekansı Wait 0 için ve Wait 2 için ne olmalıdır?
Sanırım yukarıdaki omutların hepsi tek saykıllık.
Alıntı yapılan: gerbay - 12 Şubat 2013, 13:26:52
eğer daha ufak ve ucuz bir MCU işimizi görür diyorsanız 72MHz de çalışan LPC13xx serisinde de "enhanced flash memory accelerator" var ve zero-wait state demiş adamlar.. mesela LPC1343 ya da daha da iyisi LPC1347 çok cazip bir MCU ve içerisinde eprom da var.. fiyat olarak da çok uygun..
NXP için görsel seçim yapabileceğim sayfa yada program varmı?
Hız konusunda sorun yoksa, 8 ADC girişi, 8 Pwm çıkışı, 4-5 tane de I/O ve USB yeterli benim için.
NXP'nin sitesinde paremetrik arama kısmı var.
örnek: Cortex M3 için http://www.nxp.com/parametrics/56890/ (http://www.nxp.com/parametrics/56890/)
NXP LPC1347FBD48, STM32F103C8'e denk bir işlemci galiba.
Dediğiniz gibi 72Mhz de 0 wait Sate ile flashdan kod koşturabiliyorsa çok çok iyi.
Fiyatı sadece 10 Cent daha pahalı. (€5.38)
Fakat gözucuyla baktığım dokümanını sevemedim.
LPC1347 kullanan varmı aramızda?
Gerbat kötü ettin kafam karıştı.
STM32F103 kullanan kartın çizimi yeni bitti. Gerçi yeni bir işlemci için kartın sadece MCU kısmında yeni baştan oynayabilirim.
Jlink almıştım pinler yetmediği için atıl kaldı. Daha postada ve hala elime geçmemiş STM32F103 minik kiti beklemedeyim.
Henüz STM32F103 dokümanlarını da okumaya başlamadım fakat 32F407 den ST dokümanlarına aşina oldum. Bu aşamada NXP ye dönersem sıfırdan başlamam gerekecek.
Gene kodlarımı ASM ile yazacağım ve registerleri anlatan NXP dokümanı biraz itici geldi.
Sen ne önerirsin? Bu arada NXP nin ADC si STM ye kıyasla biraz geride galiba. (Çok emin değilim)
STM kullanın fiyatı adetli alımda cok değişiyor. 2.5$ civarı
Flashtan kod koşturmak nedir? Zaten programlar doğrudan flasha yüklenmiyor mu?
Normalde kodlar flashdan koşturulur. Fakat flashda 0 wait state kullanamama durumu varsa o zaman kodları flashdan rama kopyalarsın ve ramdan koşturursun.
Rama kopyalamanın hızlanma yanında başka avantajı da var. Kodlarını kriptolayıp usb den (illa flashdan değil) vs den de çipe yollayıp içeride kriptoyu açıp rama aktarabilirsin vs vs.
Alıntı YapRama kopyalamanın hızlanma yanında başka avantajı da var.
How ?
Program bellegi flash olduguna gore, yazdigimiz programlarin tamami bu wait state ile mi calisiyor yani? Programin tamami ram'e nasil tasinacak?
mesaj birleştirme:: 12 Şubat 2013, 16:43:05
Flashtan kodlar calisirken wait state 2 ise her satir asm kodu icin toplam 3 saykil mi geciyor demek oluyor o halde?
(Her kodu1 saykil kabul edersek)
Ramın kapasitesi yetiyorsa ister kodun tamamını rama at ister çok kullanılan kısımlarını.
Evet 2 wait state deyince 1 clock dan sonra 2 clock boş geçer. Her 3 clock da flashdan 32 bit okunur.
Hızlandırıcı modül varsa flash 32 bit değil 96 bit olur. Bu durumda gene 1 clock dan sonra 2 boş clock olur fakat
96 bit okunduğu için 3 e parçalayınca 3 tane 32 bit hazır olduğundan 0 wait state olmuşçasına kodlar koşar.
Aslında neden tüm çiplere bu özelliği koymazlar bilmiyorum. Öyle ahım şahım bir donanım değil. Yaptığı iş basit.
STM32F4'te de flash'ın 128 bit olduğu yazılmış. Diyelim ki 6 wait state var. Bu durumda 6x32>128
Bu durumda nasıl 0 ws olacak?
Alıntı yapılan: z - 12 Şubat 2013, 16:06:34
Normalde kodlar flashdan koşturulur. Fakat flashda 0 wait state kullanamama durumu varsa o zaman kodları flashdan rama kopyalarsın ve ramdan koşturursun.
Rama kopyalamanın hızlanma yanında başka avantajı da var. Kodlarını kriptolayıp usb den (illa flashdan değil) vs den de çipe yollayıp içeride kriptoyu açıp rama aktarabilirsin vs vs.
Rama kopyaladigim kod flasha gore daha yavas calisiyor.Sebebini arastirirken bus yapisina gozum carpti hatta forumun bir yerine de yazmistim, bus daraliyor kod ve data ayni bus i kullanmis oluyor.Normalde flashdan kosarken kod flashdan data rama bagli bus i kullaniyor ama kodu rama koyunca ikiside ayni busi kullaniyor kod yavasliyor. Denemeyi bizim cm4 kartinda yapmistim.
Dokumanda CM4 icin bus yapisi su sekilde verilmis
[IMG]http://i49.tinypic.com/2cr9cty.jpg[/img]
Kodu rama kopyalayinca I ,S ve D bus ayni alana ortak erisiyorlar.Sanirim ram a atilan kod bu sebeple daha yavas isliyor.
CM3 icin denemedim ancak sanirim daha da yavas olur.Cunki araya FLITF girmis.ICODE FLITF uzerinden sram a bagalaniyor sanirim.
[IMG]http://i46.tinypic.com/9pygm0.jpg[/img]
STM32 cm4 icin yazdigi kodu sadece ram uzerinde daha hizli kosturabilen varmi ,varsa ornek verebilirmi? Belkide benim yaptigim bir hata vardir.
Alıntı yapılan: gerbay - 12 Şubat 2013, 20:52:10
@mcan,
hocam belki başka bir sorun olabilir. mesela eski ARM7TDMI-S mimarisinde 55 MHz de çalışan AT91SAM7S256 MCU su ile yapılmış bir MP3/AAC Player projesi;
http://embdev.net/articles/ARM_MP3/AAC_Player (http://embdev.net/articles/ARM_MP3/AAC_Player)
adamlar demişki;
Because code execution from Flash is rather slow on the AT91SAM7, I had to move some of the MP3 and AAC decoder functions to RAM to get sufficient performance. This is was done by adding the prefix
__attribute__ ((section (".data")))
to the function definition. With these optimizations decoding one frame takes between 16 ms (MP3, low bitrate) and 21 ms (AAC, high bitrate).
The AAC decoder can handle AAC files in ADTS stream format (.aac) and MP4 container format (.mp4, .m4a).
__attribute__ ((section (".data"))) kısmı GCC ye özel birşey farklı derleyicilerin farklı yöntemleri var RAM function konusunda..
eğer kıyaslayacak olursak her ikiside mimari olarak Harvard mimarisi kullanıyor.. bus yapısı aynı yani..
@gerbay yaniliyorsam duzelt,
Dedigin mcu nun data sheetinde su yaziyorhttp://www.atmel.com/images/doc6175.pdf (http://www.atmel.com/images/doc6175.pdf)
ARM7TDMI Processor
z RISC processor based on ARMv4T Von Neumann architecture
z Runs at up to 55 MHz, providing 0.9 MIPS/MHz
z Two instruction sets
z ARM
®
high-performance 32-bit instruction set
z Thumb
®
high code density 16-bit instruction set
z Three-stage pipeline architecture
z Instruction Fetch (F)
z Instruction Decode (D)
z Execute (E)
Yani cortexm4 harvard ama arm7tdms von neuman. Ayrica bus yapisinda bahsettigin mcu da harici memory controller var. Bu fark bunlardan olamaz mi?
Ram-Flash denemeleri yaptığım Keil projesini arıyorum...
Gerbay hocam bilgileriniz icn tesekkur ederim.
Flash hafizanin hiz bilgisini dokumanlarda goremedim, nereden ulasiriz bu bilgiye, bir de hocam bu hiz ayarlanabiliyor mu kullanici tarafindan?
Alıntı yapılan: gerbay - 12 Şubat 2013, 21:34:32
haklısın hocam ben ARM7TDMI-S i de Harvard mimarisi olarak hatırladım, yanılmışım, özür dilerim..
Evet bu durumda Cortex-M3 lerde RAM function yapmak sistemi yavaşlatır..
Özür diye bişey olmaz ben zaten sizlerden öğreniyorum,belki ben yanılıyorumdur bi türlü yazdığım kodu bulamadım... zaten çok basit bir kod toplama işlemi ile oluşturulmuş 2 saniye süren bir delay fonksiyonu ve led yak södür. Bunu keil deki Target options daki IRAM ve IROM alanlarının ikisinide ram adres aralığında ayrı ayrı tanımlayarak derleyip işlemciye atmıştım.Kod ram üzerinde baya yavaş çalışmıştı...
@Gerbay benim anlamadığım nokta özellikle cm4 ile ilgili, orada dbus a bağlı 64kb ram var şimdi keilde öyle bir ayarlama yapsakki literaller vss d bus a ilişik ccm 64kb ram i kullansın,ınstruction lar SRAM in 112kb lik kısmından kullanılsın,sbus ise 16 kblik kendi alanını kullansın.Özellikle dbus ve ıbus bu şekilde ayırabilirsek sanırım kod istediğimiz hızda koşabilir.
Bunu keilde nasıl yapabiliriz?
2.1.1 S0: I-bus
This bus connects the Instruction bus of the Cortex™-M4F core to the BusMatrix. This bus
is used by the core to fetch instructions. The target of this bus is a memory containing code
(internal Flash memory/SRAM or external memories through the FSMC).
2.1.2 S1: D-bus
This bus connects the databus of the Cortex™-M4F and the 64-Kbyte CCM data RAM to the
BusMatrix. This bus is used by the core for literal load and debug access. The target of this
bus is a memory containing code or data (internal Flash memory or external memories
through the FSMC).
2.1.3 S2: S-bus
This bus connects the system bus of the Cortex™-M4F core to a BusMatrix. This bus is
used to access data located in a peripheral or in SRAM. Instructions may also be fetch on
this bus (less efficient than ICode). The targets of this bus are the 112 KB and 16 KB
internal SRAMs, the AHB1 peripherals including the APB peripherals, the AHB2 peripherals
and the external memories through the FSMC.
Birde dökümanda şu şekilde bir yazmaç var,
Bit 20CCMDATARAMEN: CCM data RAM clock enable
Set and cleared by software.
0: CCM data RAM clock disabled
1: CCM data RAM clock enabled
Bunu kursak istediğimiz olmuş olurmu? Keil de hangi dosyada ccm alanı tanımlanmıştır? bu alanın clock unu kapayabildiğimize göre default olarakprogramları keil buraya göre derlemiyordur heralde.(Konu keil e döndü gibi ama benim şu an deneme yapabileceğim başka derleyici yok , o sebeple olayı keil e indirgedim)
http://www.keil.com/appnotes/files/apnt_230.pdf (http://www.keil.com/appnotes/files/apnt_230.pdf)
Sayfa 5
"Running programs in the internal STM32 RAM:
It is possible to run your program in the processor RAM rather than Flash. In this case, the Flash programming tool is not....."
Aşağıdaki tartışmada da
Flash, internal ram ve external ramda koşan deneme kodlarının işlenme süresinden bahsedilmiş.
Code running into SRAM : 82 msec
Code running into FLASH (internal): 100 msec
Code running into External SRAM : 636 msec :-o :-o :-o !!!!!!!
https://my.st.com/public/STe2ecommunities/mcu/Lists/cortex_mx_stm32/Flat.aspx?RootFolder=https%3a%2f%2fmy%2est%2ecom%2fpublic%2fSTe2ecommunities%2fmcu%2fLists%2fcortex%5fmx%5fstm32%2fCode%20execution%20from%20external%20RAM&FolderCTID=0x01200200770978C69A1141439FE559EB459D7580009C4E14902C3CDE46A77F0FFD06506F5B¤tviews=1173 (https://my.st.com/public/STe2ecommunities/mcu/Lists/cortex_mx_stm32/Flat.aspx?RootFolder=https%3a%2f%2fmy%2est%2ecom%2fpublic%2fSTe2ecommunities%2fmcu%2fLists%2fcortex%5fmx%5fstm32%2fCode%20execution%20from%20external%20RAM&FolderCTID=0x01200200770978C69A1141439FE559EB459D7580009C4E14902C3CDE46A77F0FFD06506F5B¤tviews=1173)
Aşağıdaki açıklama kritik.
http://infocenter.arm.com/help/index.jsp?topic=/com.arm.doc.ddi0337g/BABGAJAB.html (http://infocenter.arm.com/help/index.jsp?topic=/com.arm.doc.ddi0337g/BABGAJAB.html)
12.5.6. Pipelined instruction fetches
To provide a clean timing interface on the System bus, instruction and vector fetch requests to this bus are registered. This results in an additional cycle of latency because instructions fetched from the System bus take two cycles. This also means that back-to-back instruction fetches from the System bus are not possible.
Note
Instruction fetch requests to the ICode bus are not registered. Performance critical code must run from the ICode interface.
http://www.st.com/internet/com/TECHNICAL_RESOURCES/TECHNICAL_LITERATURE/DATASHEET/CD00161566.pdf (http://www.st.com/internet/com/TECHNICAL_RESOURCES/TECHNICAL_LITERATURE/DATASHEET/CD00161566.pdf)
•72 MHz maximum frequency,1.25 DMIPS/MHz (Dhrystone 2.1) performance at 0 wait state memory access
Namussuzların yaptığı reklama bakın. Yalan mı yazmışlar hayır. Ama benim gibi dikkatsizler bunu okuyunca 72Mhz de 0 wait state de kod koşacak anlıyor.
Halbuki dikkatli okunursa adamlar 72Mhz de 0 wait state ile RAM'a erişebilir demek istiyorlar.
İşlemcinin Flashdan kod koşturma hızı 24Mhz. Bunu tanıtımda yazmamışlar. Pdf dokumanın derinliklerinde bahsetmişler.
Fakat İşlemcinin hızı ise 72Mhz.
The Flash memory access time is adjusted to the fHCLK frequency (0 wait state from 0
to 24 MHz, 1 wait state from 24 to 48 MHz and 2 wait states above)
Bundan sonra TVlerdeki aldatıcı reklamlara kızmayacağım.
Demekki işlemci seçerken bu wait state olayına bakmak lazım. 8bit PIClerde rastlamamıştık böyle birşeye...
STM32F103 de flashın 64 bit olduğunu bilmiyordum. ART gibi bir donanım olmayınca flashın 32 bit olduğunu düşünüyordum.
Bir problem yok yani. İşlemci 72Mhz'de çalışıyor.
üf, bir an Z nin Oyununa gelip güzelim PIClerden Vazgeçip herşeyi STM armlarla yaptığımızı ve yanıltıldığımızı düşünmüştüm.
mesaj birleştirme:: 13 Şubat 2013, 11:50:17
peki stm32f103xxx lerde blok diagramda görünen 20KB SRAM ile APB1 Hattında olan SRAM 512B nedir ?
Alıntı yapılan: muhittin_kaplan - 13 Şubat 2013, 11:22:54
....peki stm32f103xxx lerde blok diagramda görünen 20KB SRAM ile APB1 Hattında olan SRAM 512B nedir ?
CAN ve USB in kullandığı bir RAM galiba.
Note: In low, medium-, high- and XL-density devices the USB and CAN share a dedicated 512-byte SRAM memory for data transmission and reception, and so they cannot be used
concurrently (the shared SRAM is accessed through CAN and USB exclusively). The USB
and CAN can be used in the same application but not at the same time.
Bu yüksek akım çekme meselesiyle ilgili ne diyorsunuz?
NXP lerde hiç böyle birşey görmedim. Çok önceleri atmel arm9 işlemcide recursive kod koşturup regülatörü yakmıştık. STM yi görünce dejavu yaşadım :)
Flash memoryden veri okurken hiz otomatik mi degisiyor secilen islemci frekansina göre?
Anladım hocam. Wait stateler flash hızını ayarlıyor.
Verdiğiniz bilgiler gerçekten çok önemli, sizden çok şey öğrendim, teşekkür ediyorum.
Alıntı yapılan: muhittin_kaplan - 13 Şubat 2013, 11:22:54
üf, bir an Z nin Oyununa gelip güzelim PIClerden Vazgeçip herşeyi STM armlarla yaptığımızı ve yanıltıldığımızı düşünmüştüm.
Eminim bir çok kişi burada yazılanları okuyup, aynen böyle düşünmüştür. Kartlar da basılmıştı, artık geri dönemeyiz, işlemci 72MHz'de çalışmıyormuş, ne yapacağız?
Forumda sorulan bir çok soruya , verilen örnek kodların bir çoğuna baktığımda bu sorunu çok anlamsız görüyorum.
Örneğin:
ADC okutulurken, ADC'nin çevirimi tamamlaması while döngüsünde bekleniyor.
Seri haberleşmede veri while döngüsü içerisinde gönderiliyor.
I2C, SPI, USART gibi donanımların "Busy" bayrakları set veya reset olana kadar while döngüsünde bekleniyor.
LCD gibi donanımları sürerken CLK aralarında delay fonksiyonu kullanılıyor.
Buton beklenirken, debounce yapılırken delay veya döngü kullanılıyor.
Led yak söndür arasında delay kullanılıyor.
Bu şartlar altında 72MHz'de kod koşsa ne ? koşmasa ne?
(Bu sözler yukarıda yazdığım şekilde program yazanlar için. Lütfen herkes üzerine alınmasın)
Ozaman Rtos Kullanalım Yada
Çevrime Başla, Bitince İnt Oluştur gelip bakayım, Usart TX tampon Boşaldığında da beni haberdar et oradan gelip atlayıp sıçrayıp yanına geleyim. RX kesmesi olmazsa olmaz zaten.
Delay Candır.
Programın bir yerinde delay kullanılıp başka bir bölümünde yüksek hıza ihtiyaç duyulabilir.
Uzun süre önce deneyip bıraktığım kodu tekrar denemeye karar verdim romdan koşan programın her döngüsü 1-2 saniye sürüyor,ancak ram den koşarken 16 saniye sürüyor.Bu kadar fark olması normal değil.
Şu kodları deneyebileck olan var mı? Aynı kodu içeren projelerin birini ram dan diğerini romdan koşacak şekilde ayarladım, cm4 discovery kartı ile deniyorum.Ram den koşan yavaş koşuyor ancak benim yaptığım bir hatadan kaynaklı olabilir.
RAM
http://www46.zippyshare.com/v/90361459/file.html (http://www46.zippyshare.com/v/90361459/file.html)
Rom
http://www32.zippyshare.com/v/75958648/file.html (http://www32.zippyshare.com/v/75958648/file.html)
Keil üzerinden programı ram den başlatamadım.Bu sebeple ramdan koşturmak için STM32 ST-LINK UTILTY lazım.
File open deyip oluşturulan hex fileyi seçiyoruz.daha sonra Target->program&verfiy yaptıkdan sonra mcu kismindan run diyoruz.
Gerbay hocam siz keil üzerinden programı ramden koşturabildiniz mi?
StLink Utility ile F4 kitine bağlanmaya çalıştım bağlanamadım. Keil ile bağlanabiliyorum. CooCox Flash ile deneyeyim dedim, .hex formatını desteklemiyor. .elf ya da .bin bekliyor.
Alıntı yapılan: Klein - 13 Şubat 2013, 22:58:39
StLink Utility ile F4 kitine bağlanmaya çalıştım bağlanamadım. Keil ile bağlanabiliyorum. CooCox Flash ile deneyeyim dedim, .hex formatını desteklemiyor. .elf ya da .bin bekliyor.
Eğer denemediyseniz şu linkde firmware update ve stlink utility nin son sürümleri var,bir de usb driver.
http://www.st.com/internet/evalboard/product/251168.jsp#SOFTWARE_AND_DEVELOPMENT_TOOLS (http://www.st.com/internet/evalboard/product/251168.jsp#SOFTWARE_AND_DEVELOPMENT_TOOLS)
Bide keil açıkken bazen stlink görmeyebiliyor.
mesaj birleştirme:: 14 Şubat 2013, 00:02:56
Ramden koşturmayı buldum,benim yöntemimde tesbit edemediğim bir hata var ancak Keilin orjinal kodu ve projesi ile de ramdan flasha göre daha yavaş çalışıyor Ramdan koşarken 50 saniyede 33 kere yanıyor Flashdan koşarken 34 saniyede 33 kere , yani ramden koşan kod flasha göre yaklaşık 50% daha yavaş.Belki ccm ram ile alakalı düzenlemeler yapılıp daha hızlı çalışması sağlanabilir ancak şu haliyle daha yavaş .
Hiç fark etmedim ram ve rom olarak yolladığım iki projede aslında target kısmında hem flash hemde ram adında iki target varmış .Ram olanı seçip debug tuşuna basıpda run dediğimizde kod direk ramdan çalışıyor mis gibi. Bir .ini dosyası ile halletmişler. Denemek isteyen olursa anlatım linki burada.
http://www.keil.com/appnotes/files/apnt_230.pdf (http://www.keil.com/appnotes/files/apnt_230.pdf)
STM32F103 DOCID 13902 Rev 14 de RCC_AHBENR registerini incelerken FLITFEN adında bir bitle karşılaştım.
Ancak ne bu dokümanda ne de çipin hardware dokümanında FLITF le ilgili açıklamaya rastlamadım.
Nedir bu FLITF ?
mesaj birleştirme:: 17 Şubat 2013, 19:25:20
Pardon ben kacırmısım. Dokumanda varmıs. Bir şekilde find da sıkıntı yaşamışım.
Flash yazma vs için ilgili donanımın clk kaynağını açıp kapamaya yarıyormuş.
Hocam ClockTree de (STM32F100xx clock tree (high-density devices)
Flash memory programming interface clock (FLITFCLK) is always the HSI clock.
Açıklaması Yapılmış. Flash a clock sağlıyor. O bit ise Clock u açıp kapıyor zannımca. (Sleep Mode İçin)
http://www.promelec.ru/UPLOAD/fck/file/stm_files/stm32/STM32F10xx4_6_errata_sheet.pdf (http://www.promelec.ru/UPLOAD/fck/file/stm_files/stm32/STM32F10xx4_6_errata_sheet.pdf)
STM32F103C8 kitime nihayet bugün kavuştum.
(http://i.ebayimg.com/00/s/NzAwWDcwMA==/$(KGrHqRHJCYFCkDC0E1yBQsLTkH,dg~~60_12.JPG)
(http://i.ebayimg.com/t/JLINK-V8-ARM-JTAG-USB-Emulator-TVS-FUSE-Full-Protection-J-LINK-V8-Programmer-/00/s/NTkzWDc1MA==/$T2eC16Z,!)8E9s4l8!0IBQ6ihouiM!~~60_3.JPG)
Jtag olarak da bunu almıştım.
Keilde basit bir deneme yapmak istediğimde JTAG firmware in update etmek istedi ve buna izin verdim. Sorunsuz update oldu. En azından hata mesajı almadım.
Keilde debug menüden JTAG cihazı olarak J-Link/J-Trace Cortex seçtim.
Aynı şekilde utilities'de de J-Link/J-Trace Cortex seçtim.
Debug yapmaya kalktığımda aşağıdaki mesajlar sıralanıyor.
Set JLink Project File to "C:\Documents and Settings\Administrator\Desktop\STM32F103\ASM_PRG\JLinkSettings.ini"
* JLink Info: Device "STM32F103C8" selected (64 KB flash, 20 KB RAM).
JLink info:
------------
DLL: V4.54a, compiled Sep 17 2012 15:58:45
Firmware: J-Link ARM V8 compiled Aug 1 2012 13:40:47
Hardware: V8.00
S/N : 17892859
Feature(s) : RDI,FlashDL,FlashBP,JFlash
* JLink Info: TotalIRLen = 9, IRPrint = 0x0011
* JLink Info: TotalIRLen = 9, IRPrint = 0x0011
* JLink Info: Found Cortex-M3 r1p1, Little endian.
* JLink Info: TPIU fitted.
* JLink Info: FPUnit: 6 code (BP) slots and 2 literal slots
ROMTableAddr = 0xE00FF003
* JLink Info: Found Cortex-M3 r1p1, Little endian.
* JLink Info: TPIU fitted.
* JLink Info: FPUnit: 6 code (BP) slots and 2 literal slots
Target info:
------------
Device: STM32F103C8
VTarget = 3.338V
State of Pins:
TCK: 1, TDI: 0, TDO: 1, TMS: 0, TRES: 1, TRST: 1
Hardware-Breakpoints: 6
Software-Breakpoints: 8192
Watchpoints: 4
JTAG speed: 2000 kHz
No Algorithm found for: 08000000H - 0800025BH
Erase skipped!
Nihayetinde
Error: Flash Download Failed - "Cortex M3" hata mesajını alıyorum.
Eksik bir şey mi yükledim? Flash algoritmalarını bulamıyor.
Sorunu çözdüm.
Target Utilities ayarlarına gelip
J-link/J-Trace Cortex seçiyoruz. (Bunu zaten seçmiştim)
Hemen sağında Settingse geliyoruz.
Programming Algorithm yazan çerçeve bende boştu.
Add butonuna basıp listeden STM32F10x Med Density Flash seçtim.
Böylece önceki mesajımda bahsettiğim
No Algorithm found for: 08000000H - 0800025BH
uyarısının nedeni belli oldu.
Bu değişiklikten sonra artık Keilde J-Link ile yeni kartımı debug edebiliyorum.
Alıntı yapılan: z - 25 Şubat 2013, 17:51:40
Nihayetinde
Error: Flash Download Failed - "Cortex M3" hata mesajını alıyorum.
Eksik bir şey mi yükledim? Flash algoritmalarını bulamıyor.
hocam targt options loader kismindan cipi secin kendisi otomatik algorithm olusturacak.
Aynı sorun birazdan evde de çıkacak.
Senin dediğin şekilde nasıl yapacağım anlamadım.
Option for Target'e girdim.
Sonra ne yapacağım?
[IMG]http://img839.imageshack.us/img839/4738/capture1xcz.jpg[/img] (http://imageshack.us/photo/my-images/839/capture1xcz.jpg/)
STM32F103 Flash_ACR registerinde
Flash Half Cycle Access bit, enable olsa ne oluyor disable olsa ne oluyor?
mesaj birleştirme:: 27 Şubat 2013, 01:23:11
STM32F103C8 çipinde Boot0 pini var.
Dokümanlarda Boot1 pininden de bahsediliyor. Boot1 pini C8 de yok sanıyorum.
Ancak aldığım 32F103C8 kitinde B0 ve B1 jumperları var. Şema henüz gelmediği için bunların ne olduğundan emin değilim.
Ancak Boot pinleri olma ihtimali yüksek. Boot1 pini bu durumda C8 de varmı yokmu kafam karıştı.
Microxplorer yok diyor.
http://www.st.com/st-web-ui/static/active/en/resource/technical/document/programming_manual/CD00264852.pdf (http://www.st.com/st-web-ui/static/active/en/resource/technical/document/programming_manual/CD00264852.pdf)
Alıntı YapNote: The prefetch buffer must be kept on (FLASH_ACR[4]='1') when using a prescaler different from 1 on the AHB clock.
In case of non-availability of a high frequency clock in the system, Flash memory accesses can be made on a half cycle of HCLK (AHB clock),
the frequency of HCLK permitting (halfcycle access can only be used with a low-frequency clock of less than 8 MHz that can be obtained with
the use of HSI or HSE but not of PLL). This mode can be chosen by setting a control bit in the Flash access control register.
Note: Half-cycle access cannot be used when there is a prescaler different from 1 on the AHB clock.
diyor hocam :)
http://www.st.com/st-web-ui/static/active/en/resource/technical/document/datasheet/CD00161566.pdf (http://www.st.com/st-web-ui/static/active/en/resource/technical/document/datasheet/CD00161566.pdf)
sf.29 Main function(3) (after reset) kolonunda pb2 boot1 olarak gözüküyor hocam
AHB prescaler bende 1, işlemciyi de pll üzerinden 72Mhz de çalıştırıyorum. Bu durumda bu biti 1 yapmamda sakınca varmı?
Aşağıdaki kitim geldi ancak kutudan şema çıkmadı. Adam da ilanda şema verecem dememiş. Mail attım cevap yok.
Bu kitin şemasına ulaşabilen varmı?
(http://i.ebayimg.com/t/ARM-STM32-M3-Cortex-m3-STM32F103C8T6-Development-Kits-J-LINK-JTAG-USB-TTL-UART-/00/s/NzAwWDcwMA==/$(KGrHqRHJCYFCkDC0E1yBQsLTkH,dg~~60_35.JPG)
http://www.ebay.com/itm/ARM-STM32-M3-Cortex-m3-STM32F103C8T6-Development-Kits-J-LINK-JTAG-USB-TTL-UART-/330834266418?ssPageName=ADME:X:AAQ:US:1123 (http://www.ebay.com/itm/ARM-STM32-M3-Cortex-m3-STM32F103C8T6-Development-Kits-J-LINK-JTAG-USB-TTL-UART-/330834266418?ssPageName=ADME:X:AAQ:US:1123)
mesaj birleştirme:: 27 Şubat 2013, 01:43:04
Alıntı yapılan: ErsinErce - 27 Şubat 2013, 01:27:53
sf.29 Main function(3) (after reset) kolonunda pb2 boot1 olarak gözüküyor hocam
İyiki sormuşum. Boot1 pini yoktur diye PCB yi çizdim ve bugünlerde basıma yollayacaktım.
Neyseki Boot0 pini 0 iken Boot1 pininin 1 yada 0 olmasının önemi yokmuş.
İyi yırttım. Az kalsın paçayı kaptırıyordum.
prescaler 1 ise disable olması gerekiyormuş ama tersleme durumu var galiba bir kontrol edersiniz hocam
prefetch için hafıza erişim hızını ayarlıyor galiba bu bit, ahb sysclk a eşitse 2 kat hızda erişmeye çalışmak sorun çıkarabilir gibi geliyor
kartın geliştiricisinin adresi;
http://www.canton-electronics.com/arm-stm32-m3-cortexm3-stm32f103c8t6-development-kits-jlink-jlink-ulink-ulink-jtag-usb-ttl-uart-p-410.html (http://www.canton-electronics.com/arm-stm32-m3-cortexm3-stm32f103c8t6-development-kits-jlink-jlink-ulink-ulink-jtag-usb-ttl-uart-p-410.html)
buraya da bir mail atın isterseniz
Ebay satıcım da bunlardı. Dediğin gibi şimdi bir de bu maile attım.
Edit: Şemayı yolladılar.
Alıntı yapılan: z - 13 Şubat 2013, 10:23:51
STM32F103 de flashın 64 bit olduğunu bilmiyordum. ART gibi bir donanım olmayınca flashın 32 bit olduğunu düşünüyordum.
Dün dokumanları karıştırırken STM32F103de de ART donanımı olduğunu gördüm. Üstelik 64x2 de Flash prefetch buffer varmış.
Bu durumda 24 Mhz ile Flash'a erişilirken zaten 72Mhz için koşturulacak 4 adet 32 bit kod okunmuş oluyor.
Dolayısıyla komutların 16 yada 32 bit oluşundan bağımsız olarak 72Mhz de 1 komutun işleyeceği kesin olarak garanti edilmiş oluyor.
STM32F103C8 için çizdiğim kartta işlemciyi programlamak için SWDIO, SWClk ve Gnd pinlerini herhangi bir pull-up yada pull-down direnci kullanmadan 3 pinlik bir connektore bağladım. Bu yaptığım bağlantı yeterlimi?
J-Link kullanarak SWD programlama da yapabiliyormuyuz?
Eğer yapılamıyorsa SWD yöntemiyle programlama yapmak için minik bir kart almak istiyorum. Kart öneriniz varmı?
SWD ile mi daha hızlı programlama yapılabiliyor yoksa UART üzerinden mi?
Alıntı YapSTM32F103C8 için çizdiğim kartta işlemciyi programlamak için SWDIO, SWClk ve Gnd pinlerini herhangi bir pull-up yada pull-down direnci kullanmadan 3 pinlik bir connektore bağladım. Bu yaptığım bağlantı yeterlimi?
evet yeterli. Ben Diğerlerini Denemedim Discovery kart üzerindeki Stlink i kullanıyorum.
Alıntı yapılan: z - 01 Mart 2013, 10:09:10
STM32F103C8 için çizdiğim kartta işlemciyi programlamak için SWDIO, SWClk ve Gnd pinlerini herhangi bir pull-up yada pull-down direnci kullanmadan 3 pinlik bir connektore bağladım. Bu yaptığım bağlantı yeterlimi?
J-Link kullanarak SWD programlama da yapabiliyormuyuz?
Eğer yapılamıyorsa SWD yöntemiyle programlama yapmak için minik bir kart almak istiyorum. Kart öneriniz varmı?
SWD ile mi daha hızlı programlama yapılabiliyor yoksa UART üzerinden mi?
Hocam denemedim ama bendeki J link le birlikte yanında şöyle bir aparat gelmişti
(http://s4.postimg.cc/u0q3le1j1/T2e_C16_RHJI_E9q_SO8mfq_BQm_QHIWr_Bw_60_35.jpg) (http://postimg.cc/)
image upload (http://postimg.cc/)
Bunun üzerinde 6 pin ve 4 pin SWD programlama soketleri var.
Ama dediğim gibi şimdiye kadar SWD yi hiç denemedim
Jlink ile SWD programlama yapabilirsiniz.
Alıntı yapılan: z - 01 Mart 2013, 10:09:10
STM32F103C8 için çizdiğim kartta işlemciyi programlamak için SWDIO, SWClk ve Gnd pinlerini herhangi bir pull-up yada pull-down direnci kullanmadan 3 pinlik bir connektore bağladım. Bu yaptığım bağlantı yeterlimi?
J-Link kullanarak SWD programlama da yapabiliyormuyuz?
Eğer yapılamıyorsa SWD yöntemiyle programlama yapmak için minik bir kart almak istiyorum. Kart öneriniz varmı?
SWD ile mi daha hızlı programlama yapılabiliyor yoksa UART üzerinden mi?
Hocam çizdiğiniz karta jtag portu da eklediniz mi?
Kullandığım çevre birimleri JTAG pinlerini çaldığı için Jtag portunu malesef ekleyemedim.
merhaba,
jtag pinlerinin REMAP AFIO_MAPR registeri ile değiştirme imkanı var sanırım.(denemedim)
RM0008 Reference manual'in sayfa 153..
JTAG pinlerini JTAG amaçlı değil de başka amaçlarla kullanmak içindir.
STM32F103 referans tasarım
http://www.st.com/st-web-ui/static/active/en/resource/technical/document/user_manual/DM00047548.pdf?s_searchtype=keyword (http://www.st.com/st-web-ui/static/active/en/resource/technical/document/user_manual/DM00047548.pdf?s_searchtype=keyword)
STM32F103C8 de MCO pininden (PA8) clk çıkmak istiyorum.
GPIOA CRH dan PA8 i alternate function olarak belirledim.
RCC CFGR den de MCO dan hangi clock çıkacağını belirledim.
Fakat MCO ile PA8 in nasıl ilişkilendirileceğine dair bir register göremedim.
Zira, PA8 MCO haricinde en azından TIM1 tarafından da kullanılabiliyor.
Sanki bir register daha var da ben bulamadım diye düşünüyorum. Bu seçim işlemi nereden yapılacak?
GPIOA->AFR registerından hangi af e bağlanacağını söylemeniz lazım hocam
AFR adında bir register yok hocam.
RCC_CFGR clock conf register daki MCO[2:0] 24,25,26 nolu bitleri hangi clock u çıkışta görmek istiyorsanız set etmeden önce, PA8 clock enable ve pushpull output olarak HSE hız ayarını yaptığımızda başka sorun kalmaması lazım. Bu durumda MCO ya 0x06 yazmamız lazım. Başka bir register olduğunu sanmıyorum en azından MCO olarak aratınca kesin ilişkili register lar dökülmesi gerekir...
Pardon şimdi datasheet'e bakarak konuşuyorum,
datasheette iç bağlantılar belli değil fakat aynı pine bağlı AF ler aktifleştirilmediğinde birbirini etkilemiyor gibi gözüküyor, OR benzeri bir yapı kullanmışlar galiba
AFIO_MAPR adresinden remap edilebiliyor fakat PA8 için bu durum söz konusu değil, bu durumda MCO yu aktifleştirmeniz yeterli gözüküyor hocam
işi garanti altına almak için tim1 i uygun bir şekilde remap ederseniz sorun çıkacağını düşünmüyorum tabi usart1 i senkron kullanmayı düşünmediğiniz sürece
Evet bahsettiğin gibi OR işlemi var galiba. Kodlarım çalıştı.
Muhtemelen MCO çıkışına clock yönlendirilmişken PA8'i kullanacak diğer fonksiyonlar devreye alınırsa sorun çıkacak gibi görünüyor.
Belki de dokumanın bir köşesinde küçük bir açıklama geçiyordur.
Alıntı yapılan: z - 06 Şubat 2013, 23:26:29
STM32F103 USB konnektor balantısında çip pinleri ile USB konnektoru arasındaki bağlantıyı gösteren şema arıyorum.
Direnç vs bağlamak gerekiyormu vs vs...
En azından direnç bağlamaya karar verdim.
http://www.st.com/web/en/resource/technical/document/datasheet/CD00002046.pdf (http://www.st.com/web/en/resource/technical/document/datasheet/CD00002046.pdf)
22 ohm luk direnç standart herkes bağlıyor D+ ve D- pinlerine...
D+ hattından 3v3'e hatta daha da iyisi D+ hattından bir I/O port pinine 1K5 i de unutmuyoruz.
Şimdi farkettim STM32F103 usb 2.0 Full speedmiş.
Bu durumda 512Byte transfer yapabileceğiz. Peki USB 2.0 HID sınıfında da 512 Byte transfer yapılabiliyormu?
Edit: Pardon pardon, 512B high Speed'de oluyordu.
system_32f10x.c dosyasını kullanarak program çalışırken örneğin şarta göre HSE, 48Mhz, ve 72Mhz clock set edilebiliyor mu?
Jlink kullanıyorum.
İki ayrı klasorde iki ayrı projem var. Birici projeyi Keil'de derleyip Debug butonuna bastığımda bir kutucuk çıkıyor ve kodları çipin içine yazarken % olarak atılan kodları mavi renkte barlarda gösteriyor. Bu iş bir iki saniye sürüyor.
İkinci projede aynı işlemi yapmaya kalktığımda gene çip programlanıyor fakat mavi renki barlar çıkmıyor.
Bu bana garip geldi. Aynı jtag cihazını kullanıyorum. Sebebi hakkında bilginiz varmı?
Mavi Bar çıkan projede Option For Targette Utilities menude STM32F103 için herhangi bir algoritma seçilmemişken, İkinci projede algoritma seçmezsem programlama yapamıyorum. Bu da bir diğer ilginç durum.
FSMC nedir Nerelerde Kullanılır ? Neden TFT lerde Kullanıyorlar ?
I/O port üzerinden klasik LCD ye data yollarken ne yapıyorsun?
Yollanacak Datayı porta yazıyorsun
LCDnin Enable bacağının bağlı olduğu pinden enable anlamına gelecek lojik seviyede sinyal çıkıyorsun
LCDnin R/W bacağının bağlı olduğu pinden Write anlamına gelecek lojik seviyede sinyal çıkıyorsun
Biraz bekliyorsun
Enable ve write pinlerini tekrar yazılımla değiştiriyorsun.
Bunların her biri yazılımla yapılır.
FSMC modülünde sen datayı yola çıkarttığın anda r/w enable gibi bus sinyalleri donanımsal olarak üretilir.
Bu da yüksek hızlı external memory tipi çevrebirimlerine hızlıca erişim yapman anlamına gelir.
En yalın hali kısaca bu şekilde. Eskiden içinde Ram ve Rom olmayan işlemcilerin zaten sahip olduğu bir özellik bu.
(FSMC İlave özellikleri vardır. Dokumana bakmadan konuştum.)
Hocam 32f103rbt6 kullanarak ili9325 2.8 lik lcd süreceğim. datasına baktığımda hiç TFT den bahsetmiyor. Aksine Hafızadan Bahsediyor.
Muhittin hocam , st 100 pın ve uzerı cortex ıslemcılerıne fsmc modulunu koyuyor. Senın dedıgın R serısı 100+ pın mı bılmıyorum ( pc basında degılım ) datasheetler ortak oldugu ıcın fsmc modulun varlıgı kolayca anlasılmıyor ılk bakısta. Hepsınde var gıbı duruyor.
Tft kullanımı ıcın ıse, st 'de aslında fsmc modulu harıcı depolama bırımlerı ıcın tasarlanmıs. Fsmc alanları sram flash gıbı alanlara bolunmus. Dogrudan bır lcd tft vb alan yok. Bu durumda herhagı bır sram blogu kullanılıyor. Cıkısları da tft ye baglanıyor. Kısaca sram gorunumlu tft oluyor. Adres pınlerı de canlı oluyor ancak sadece bırı porta yonlendırılıyorr. Bu da tft nın kontrol pını oluyor.
St nın hazırlanan yenı M4 serılerınde sanırım fsmc da bagımsız tft modulu var. Anlasılan yukarıdakı dertler gecıcı olacak.
Nxp'de de halı hazırda tft destegı olan modeller gordum.
yok hocam 64pinli.
GPIOx_CRL ve GPIOx_CRH registerleri ile PORT pinlerinin Floating Input yada Pull-Up/Pull-Down yapılabileceği bildirilmiş.
Fakat Input moduna alınmış bir pinin nasıl Pull-Up yada Pull-Down yapılacağını tanımlamaya yarayan registeri göremedim.
Neyse sorumu yazarken dokümanı da inceliyordum ve gördüm galiba.
Gene de emin olayım.
GPIO da ilgilendiğimiz input pinini, GPIO_ODR ye H yada L yazarak Pull-Up/Pull-Down yapabiliyoruz. Doğrumudur.
Eğer böyleyse hiç hoş olmamış.
(http://i.imgur.com/Sf5UI6G.png)
evet hocam dediğiniz gibi gözüküyor
Çipin içine eften püften işler için 50 bin tane register koyan firma bu iş için neden ayrı bir register koymamış hayret bir şey.
STM32F103 PWM üretirken Kodu Keil vs ortamda durdurrsak PWM üretimi devam ediyor.
Bu benim istemediğim bir durum.
CPU, JTAG vs üzerinden durdurulduğunda PWM çıkışlarının aktif olmayan konuma inmesini isterim.
Bu mümkünmü?
ccs de dur deyince duruyor.pwm çıkışı.
TI çiplerinde çevre birimlerinin çalışmaya devam edip etmemesi kullanıcı tercihine sunulmuş.
Fractal TI nin LM4F kiti ile deneme yapmayı planlıyorum. Önerin nedir ?
Biraz bilgi verebilirmisin ?
hocam ben 8 bit piclerden zort diye stellaris e atladım.ccs de bilmiyordum.ve hazır bir kitimde yoktu.ama özllikle kitin varsa stellaris ware dökümanlarınıda indirirsen ve örnek videolarıda izlersem.olay gerçekten cok basitmiş gibi geliyor.tüm modüllerin videoları örnekler var ve kitinde varsa hepsi çalışıyor.lm3 serisinde bazıları 100 kez programlanabiliyormuş diyorlar ben şuana kadar 1000 geçmişimdir birşey olmadı.lm4f serisinde yokmuş.register fonksiyonları daha gelişmişmilş.birde şunu öğrendim işlemcinin class ları varmış.hangi class da ise o komut kümesini tanıyor.derleyici bundan habersiz tabi.ti formlarıda güzel çalışıyor hemen cevap veriyorlar.adc modülünü cözmek 1 saatimi aldı ama pwm modülü şu class olayından dolayı 3 günümü aldı.ama pwm modülüne bayıldım belki daha iyisini görmediğimdendir.atıyorum 2 kanal pwm çıkışı ayarlıyorsun istediğin gibi dans ettiriyon.hemde cok kolay.zaten üç tane örnekte mevcut.pwm de adc tetiklemede var.sanırım pwm ile akım kontrolü için.şimdi ben uDMA modülünü kurcalayacağım..
Alıntı YapIn practice, the CoreSight debug structure on the STM32 provides an enhanced real-time version of the standard
JTAG debug features. The STM32 CoreSight debug system provides 8 hardware breakpoints which can be nonintrusively
set and cleared while the Cortex CPU is running. In addition the Data Watch trace allows you to view
the contents of memory locations non intrusively while the Cortex CPU is running. The CoreSight debug system
can stay active when the Cortex core enters a low power or sleep mode. This makes a world of difference when
debugging a low power application. Additionally the STM32 timers can be halted when the CPU is halted by the
CoreSight system. This allows you to single-step your code and keep the timers in sync. with the instructions
executing on the Cortex CPU. The CoreSight debug infrastructure significantly improves the real-time debug
capabilities of the STM32 over earlier ARM7 and ARM9 CPUs whilst still using the same low cost hardware.
Peki nasıl olacak?
şöyle bir durum tespit ettim neden oluyor bilmiyorum.örneğin d0 pinini high yapan programı yüklüyorum.daha sonra bambaşka bir yazılım yapıyorum ve d0 pinini hiç kullanmıyorum.onu yüklediğimde bile program çalışınca d0 pini high oluyor.bunu anlamadım.istesem yapamam.
aynı şekilde pwm modülünü çalıştırdım.daha sonra çalışması sağlayan kodları çıkardım.yine her türlü çalışıyor...
Alıntı yapılan: z - 19 Mart 2013, 12:39:16
Peki nasıl olacak?
Keilin Debug ayarları kısmında kullandığımız jtag ayarlarında debug/reset e baktığımızda TI de RSTREQ gibi bir durum ayarlıyken
Jlink, ST gibi JTAGlerde bu kısım normal de belki bu ayarı core'a getirirsek istediğiniz olur hocam
bağlı olmadan taktığımdan connect kısmının seçimler yok oradaki ayarlardan da olabilir
http://www.keil.com/support/man/docs/jlink/jLink_conf_debug.htm (http://www.keil.com/support/man/docs/jlink/jLink_conf_debug.htm)
normalde cpu u durduruyor diyor gerçi =/
(http://i.imgur.com/f31EPvS.png)
Bunu Cip içindeki bir registerden belirlemek lazım diye düşünüyorum. Keil JTAG üzerinden yapabiliyorsa zaten biz de kod ile bunu yapabiliriz.
Alıntı yapılan: z - 19 Mart 2013, 16:27:31
Bunu Cip içindeki bir registerden belirlemek lazım diye düşünüyorum. Keil JTAG üzerinden yapabiliyorsa zaten biz de kod ile bunu yapabiliriz.
CPU bir halt işlediğinde Timer vs çevrebirimlerinin durup durmamasını DBGMCU_CR registerinden ayarlayabiliyormusuz.
mesaj birleştirme:: 19 Mart 2013, 23:20:05
STM32F103C8'de pinlerle bağlantısı olan Timerlarımız TMR1...4
TMR5 ve sonrası çipin içinde varmı?Bütün timerları aynı Relod değeri yükleyerek aynı değerde taşacak şekilde çalıştıracağım.
Fakat timerların hepsine birden tek hamlede start verebilmek istiyorum.
Senkronizasyonla ilgili bir şeyler var ama istediğim oluyormu anlamadım.
Tüm timerları aynı anda durdurup aynı anda çalıştırabilirmiyim?
Evet TIMx_CR2 den tüm timerları enable etmemize yarayan kurulum var.
Tam detayın bakmadım fakat MMS bitlerini 001 yapacağız. Bu tüm tümerların ENB girişlerinin tek noktadan kontrol edilmesini sağlayacak.
Timerları enable disable etmeden resetlemek de aynı işi görecek gibi.
mesaj birleştirme:: 20 Mart 2013, 02:27:03
DOC ID 13902 Rev 14 (32F103 un rehber dokumanı) de 392 sayfadaki tabloya göre;
TIMx_SMCR registerinde TS Bitlerini 011 olarak set edersem;
Slave tanımldığım Timer 2 ve Timer 3, Master tanımladığım Timer 4 tarafından tetiklenecek.
Doğrumudur?
Elimdeki STM32F103 dokumanı Low, Medium, High, XL çiplerin hepsini birden anlatıyor.
Halbuki ben STM32F103C8 ile ilgileniyorum ve dokumanda diğer çiplerin anlatımları sık sık hata yapmama neden oluyor.
Sadece STM32F103C8 çipin registerlerini anlatan sadeleştirmiş dokuman varmı?
STM32F103C8 de TIM2 yi remap etmam gerekiyor. Ayrıca JTAG yerine de SWD kullanacağım.
Şimdilik SWD kalsın dedim ve TIM2 yi remap etmeye çalışıyorum. Bir türlü olmadı.
APB2ENR de 0. biti set ederek AF remap registerin clock isaretini verdim.
Ardından da AFIO_MAPR registerine 0x00000300 yazıyorum.
Ardından da ne yazmışım diye geri okuyorum. Okunan değer 0x00000000
Test amaçlı olarak 0xFF yazar geri okursam 0xFF okuyorum. Demekki registere yazma sorunum yok.
RM0008 dokumanında sayfa 179 (Rehber dokuman) da bu register anlatılmış. Fakat low-medium-high ve XL için aynı sayfada açıklama yapılmış.
Anlatımda high 16 yı ve ortadaki değil alttaki Low 16 yı STM32F103C8 için AFIO_MAPR olarak algıladım.
Sorun ne olabilir? Neden 0x300 yazarsam geri okuduğumda 0x0000 okuyorum?
En çok korktuğum hatayı yapmışım.
AFIO_EVCR ile AFIO_MAPR registerlerini tanımladığım adres dosyasında bu iki regin adresini birbiri ile karıştırmışım. Sorun çözüldü.
Timer 4 ve Timer 2 yi PWM modunda kullanıyorum.
Her iki timera da aynı Reload değerlerini yüklüyorum.
Timer 4 ü başlatıyorum.
Bilinçli olarak yazılımı döngüde bekletiyorum ve ardından Timer 2 yi başlatıyorum.
Bu durumda Timer 4'e ait PWM ler ile Timer 2'ye ait PWM ler arasında faz farklı oluşuyor.
Bu faz farkının oluşması uygulamamda sorun oluşturuyor. Diyeceksiniz ki bekleme yapma her iki timerı da hemencecik peşpeşe kur.
Öyle yapacağım fakat Timer blokları bir birine senkronlanabiliyor. Dokuman öyle diyor. Bu özelliği aktif edeceğim.
Timer 4 reload işlemi yaparken Timer 2'ye de sen de kendini resetle desin istiyorum.
Fakat namuzsuzları bir türlü senkronize edemedim. Dokumanda bu kısımla ilgili açıklamayı anlayamadım.
İstediğim tarzda senkronlama işini yapabilecek C kodunuz varsa incelemek isterim.
@ z
hocam pcb yi hangi programla çiziyorsun acaba.İsis değildir herhalde ;D
Eagle fakat çok çok artistik bir şey lazım olursa Paint Brush kullanırım.
mesaj birleştirme:: 25 Mart 2013, 00:56:30
http://read.pudn.com/downloads106/sourcecode/embed/437624/stm32/STM32F%20Documents/Application%20Note/STM32F10xxx%20TIM%20application%20examples.pdf (http://read.pudn.com/downloads106/sourcecode/embed/437624/stm32/STM32F%20Documents/Application%20Note/STM32F10xxx%20TIM%20application%20examples.pdf)
Timerların event üretmesi durumunda bu event ile diğer timerlara bazı tetiklemeler yaptırabiliyoruz. Bunu Master timerın TRGO çıkışı ile slave timerın TRGI girişini ilişkilendirmek suretiyle yapıyoruz.
Örneğim Timer 4'ü master, Timer 2 yi de slave tanımladığımızda
Timer 4 ün TRGO çıkışını Timer 2 nin TRGI girişine bağladığımızda
Timer 4 ün EGR registerinde UG bitini yazılımla tetiklediğimizde Timer 4 ve Timer 2 birlikte resetleniyorlar.
Böylece iki timer farklı zamanlarda kurulup koşturulmuş olsalar da yaptığımız bu ortak tetikleme her ikisini de eşzamanlı çalışmaya zorlamış oluyor.
Alıntı yapılan: z - 19 Mart 2013, 12:39:16
Peki nasıl olacak?
Hocam bu konuyu başka bir başlıkta konuşmuştuk , yine içerden bir bit ile , debug stop modunda timer ların durması sağlanabiliyordu. Bulursam o başlığı link atarım.
M3 çüler pwm interrupt ayarlamak için hangi registerları kullanıyoruz.aşağıdaki şekilde ayarlayınca çalışmıyor..
IntMasterEnable();
PWMGenIntTrigEnable(PWM_BASE, PWM_GEN_0,PWM_TR_CNT_ZERO );
PWMIntEnable(PWM_BASE, PWM_INT_GEN_0);
IntEnable(INT_PWM0);
STM32F103C8 48 pinlik kılıflı az bacaklı çiplerden.
İçinde TMR1...TMR4 olmak üzere 4 tane timer var. Bu timerlar pinlerle ilişkilendirilmiş. Son iki harf C8 den farklı daha çok bacaklı çiplerde 8 tane timer da olabiliyor. Bu durumda bunlar da pinlerle ilişkilendirilebiliyor.
Acaba C8'de pinlerle ilişkilendirilmemiş TMR5 ve sonrası varmıdır diye merak ediyordum. Küçük bir ihtimal, timer donanımının bu çipte de olacağıydı.
Kesinleşti, yerinde yeller esiyor. Adamlar koymamışlar.
ADC leri injection modunda kullanıyor ve tetiklemeyi timer'ın CCx eventi ile yapıyorum.
(ADC_CR2 Bits 14:12 JEXTSEL[2:0]
Fakat timerda TIMx_EGR registerden ilgili eventi enable yapmadığım halde ADC dönüşüm işlerini olması gerektiği zamanda yapmaya başlıyor.
EGR registeri aslında DMA'ye start ve INT flağı set etmeye izin vermek için gibi görünüyor. ADC ye start verme işi ile bu kısım ilgilenmiyor gibi duruyor.
Peki bu durumda Tımer'ın ADC'ye üreteceği eventları Timer tarafından enable Disable edemeyecekmiyim?
İllaki bu işi ADC den mi yapacağım?
Lazım olduğunda aramam gerekiyor.
STM32F103C8 için NVIC vs dokumanı
http://www.st.com/st-web-ui/static/active/en/resource/technical/document/programming_manual/CD00228163.pdf?s_searchtype=keyword (http://www.st.com/st-web-ui/static/active/en/resource/technical/document/programming_manual/CD00228163.pdf?s_searchtype=keyword)
Alıntı yapılan: z - 31 Mart 2013, 01:49:44
ADC leri injection modunda kullanıyor ve tetiklemeyi timer'ın CCx eventi ile yapıyorum.
(ADC_CR2 Bits 14:12 JEXTSEL[2:0]
Fakat timerda TIMx_EGR registerden ilgili eventi enable yapmadığım halde ADC dönüşüm işlerini olması gerektiği zamanda yapmaya başlıyor.
EGR registeri aslında DMA'ye start ve INT flağı set etmeye izin vermek için gibi görünüyor. ADC ye start verme işi ile bu kısım ilgilenmiyor gibi duruyor.
Peki bu durumda Tımer'ın ADC'ye üreteceği eventları Timer tarafından enable Disable edemeyecekmiyim?
İllaki bu işi ADC den mi yapacağım?
TIMx_EGR den update i kontrol etmek için MMS(master mode selection) 'ın reset konumunda olması gerekiyormuş hocam
TIMx_CR2 register'ına bakarsanız trgo nun hangi durumlarda tetikleneceği açıklanıyor
STM32F103 çipli devremde VDA, VDD ile doğrudan bağlantılı.
ADC ile çipin besleme gerilimini ölçmeye kalktığımda FB0 gibi FFF den düşük sonuç okudum.
Girişe 47K üzerinden 5v uygulayınca sonucun FFF olduğunu gördüm.
Besleme gerilimini FFF olarak dönüştürmesi gerekmiyormu bunun? Kalibrasyon işlemi de yaptırdım fakat sonuç gene değişmedi.
4 kanalda denedim hiç birisi de FFF okumadı.
Sample alma sürelerini uzatmayı denemedim.
Tecrübelerinizi bilmek isterim.
Vref+ a ilk girmiş olabilir misiniz hocam?
veya devrede besleme ilk oraya girip sonra mı vdd vs dağılıyor?
Açıkcası Vref konusuna hiç bakmamıştım. Şimdi STM32F103C8 dokumanına baktım da Vref pini yok galiba bu çipte.
Elimdeki Çin malı kartta Vdda 100uH bobin üzerinden Vdd den almış beslemeyi.
Ayrıca dokumanda sıcaklık ve Vrefint ölçmek için 16 ve 17. kanallarından bahsediyor. 103C8 de 16 ve 17 kanalı da yok bildiğim kadarıyla.
Şu 100uH bobinin uçlarında voltaj düşüyormu ölçüp bildireyim.
EDIT
1.1 Ohm omik dirence sahip bobin uçlarında 3mV voltaj okudum. Cımbızla kısa devre ettim değişen bir şey olmadı. Kayıp bayağı bir aralık var.
Sample alma süresini max yaptım değişen bir şey olmadı.
Elinde STM32F103 çipli devresi olan Vdda voltajını ADC ile ölçüp FFF okuyamazsa ne diyeyim kabullenecem bu durumu.
TI'yım da TI'yım demeye başladım git gide.
kayıp 70mV (3.3V için)
vssA içinde bobin kullanmışlar mı peki?
tasarımla alakalı bence hocam, dahili kısa devre olan bir yapıda bu kadar kayıp imkansız
bir de besleme gerilimini nasıl okudunuz?
bildiğim kadarıyla dahili okuma imkanı yok
Yok Vssa doğrudan Gndye bağlı.
Bobinin bir tarafında 3.338v okuyorum, diğer tarafında 3.335 buda en fazla FF0 okumama neden olur. Aslında bir dakika. Bu düşünce de yanlış. Vdda neyse ne. Ben girişlere Vdda verdiğimde FFF okumalıyım.
ADC max olan 14Mhz yerine 12Mhz de (düşük hızda) çalıştırıyorum.
Beslemeyi nasıl okudunuz derken tam anlamadım. ADC girişlerine Vdda dan bir dirençle girdim.
1K denedim, 15 ohm denedim, doğrudan denedim. Kanalda sorun vardır dedim diğer kanallarda denedim.
Bir de şu durum olabilir. Çip üreticilerinin standartı sağlamayan çiplerini sadece biz uyanık Türkler almıyoruzdur.
Çinli ucuz kart satacağım diye pek ala bu çipleri kartlara takıp ebaydan bize kakalıyordur.
İnşallah kodlamada ben hata yapmışımdır.
Vdd den okurken FFF alıyorken VddA dan FB0 alıyorsunuz doğru anladıysam
o çip dediğiniz gibi olabilir hocam ama birşey daha geldi aklıma bobinden sonra kondansatör var mı peki?
okuma sırasında ADC osilasyona giriyor olabilir?
Endüktansın iki tarafında da kapasitörler var. Scopta da temiz DC görüyorum.
Girişleri Vssa ya bağlarsam sıfır okuyorum. Vdda ya bağlarsam FC0 civarında okuyorum.
Eğer girişe 47 k üzerinden 5v dayarsam FFF okuyorum.
(http://i.imgur.com/z5eIK2t.png)
garip ???
kart üstünde Vdd ile VddA karışmış olabilir mi?
Hocam Vdd 3.3v olsun.
Vdda da atıyorum 3v olsun.
ADC girişine 3 v uyguladığımda FFF olarak dönüşüm olması lazım.
ADC girişine ADC beslemesi kadar voltaj uyguladığım halde FFF alamıyorum. Analog beslemenin üstünde voltaj girmem gerekiyor.
Daha önce hiç bir çipte böyle bir durumla karşılaşmamıştım.
aynı şeyleri konuşuyoruz hocam
sadece konuşurken referans aldığımız noktalarını teyit etmeye çalışıyordum.
kart üzerinde VddA yazıyordur ama Vdd ye bağlıdır aslında gibi
çünkü çipin içinde sorun olsa FFF de göstermemesi lazım max FC0 da kalır
STM32F103 çipli kartı olan arkadaşlar merakta bırakmayın beni. Denemek fazla zamanınızı almaz.
ADC girişine Vdda voltajını dayadığınızda dönüşüm ardından hangi değeri okuyorsunuz? Söyleyebilirmisiniz?
Ben FC0 gibi bir değer okuyorum.
kalibrasyon işlemini yanlış yapıyormuşum daha doğrusu yapamıyormuşum. Hep sıfır sonucu üretiyordu.
Çipin rehber dokumanından okuyunca yöntem yanlış anlaşılıyor deneme ile yöntemini buldum
Kalibrasyon işlemi yaptığımda, kalibrasyon değeri olarak 0x3F sonucu üretiliyor. Bu da eksik olan değerimizdi ve 0xFFF - 0x3F = 0xFC0 olarak elde ettiğim sonucu açıklar.
Bu durumda aklıma şu geliyor. ADC diyorki;
Kardeşim sen girişlere Vdda uygular ve bana dönüşümü yaptırırsan benim üreteceğim değer 0xFFF - Kalibrasyon değeridir. Ayağını denk al hesaplarını buna göre yap
Bu sonuca ulaştığım için mutluyum.
(http://framboise78.free.fr/Danse1/danseur03.gif)
Edit: Bu sonucun yanlış olduğuna ulaştığım için daha da mutluyum. Doğru sonuç aşağıda.
STM32F Calibration, STM32F çipinde kalibrasyon işlemi ve sonucu düzeltmek (http://www.cncdesigner.com/wordpress/?p=2757)
- Hocam, kalibrasyondan sonra , ölçüm sonucu 0xFFF mi geliyor , yoksa kalibrasyondan çıkan değeri siz mi ekliyorsunuz ?
- kalibrasyondan sonra FFF dışında diğer ölçümler doğru mu peki , gözlemleyebildiniz mi ? Örneğin VDD/2 uyguladığımızda 0x7FF okuyabiliyor musunuz ?
Kalibrasyon işleminden sonra artık 0xFFF okunuyor. Ben bir şey ilave etmiyorum.
Vdda/2 girdiğimde 7FF okuyorum.
Adamlar bu işi nasıl yapmışlar anlamadım ipucu da vermemişler.
Benim aklıma gelen, bir kereye mahsus bölme işlemi ve her ölçüm için çarpma işlemi gerekiyor.
Ama 6. hissim böyle değil diyor.
Düşünün ADC niz besleme gerilimini eksik ölçüyor. Hatayı buluyorsunuz.
Sonra öyle bir işlem yapıyorsunuz ki soft bir şey yapmadan ADC niz doğru sonucu göstermeye başlıyor.
Nasıl yapmışlardır?
Vref dac ile besleniyor olabilir
Bu çok önemli bir özellik olurdu hocam. Böyle bir özelliği bizlerin de kullanımına açarlardı.
Açmazlarmıydı? Başka yolları da olması lazım.
En azından geyik yaparız.
http://www-mtl.mit.edu/researchgroups/hslee/1207kara.pdf (http://www-mtl.mit.edu/researchgroups/hslee/1207kara.pdf)
http://eetimes.com/ContentEETimes/Documents/Schweber/C0976/C0976edited.pdf (http://eetimes.com/ContentEETimes/Documents/Schweber/C0976/C0976edited.pdf)
http://renaud.dura.free.fr/EE/adc_calibration/Background%20Digital%20Calibration%20Techniques%20for%20Pipeline%20Adc.pdf (http://renaud.dura.free.fr/EE/adc_calibration/Background%20Digital%20Calibration%20Techniques%20for%20Pipeline%20Adc.pdf)
aslında kalibrasyon olarak açık durumda, bir voltaj girip bu benim FFF değerim buna göre bana çıkış ver diyoruz
(https://upload.wikimedia.org/wikipedia/en/thumb/6/61/SA_ADC_block_diagram.png/300px-SA_ADC_block_diagram.png)
içerisinde SAR ADC mevcut yani bir adet DAC mevcut
digital olarak çarp böl ekle ADC yi yavaşlatacağından ve sisteme entegrasyonu zor olacağından en ucuzundan r-2r mantığıyla Vref bölünerek DAC a girilirse
iş ucuz, kısa, hızlı ve esnek olarak çözülmüş olur. işin içinde 12 hassasiyet bit olunca başka yöntemler daha uğraştırıcı gibi geliyor
Girişe Vss verdim çıkışım 0x000 oldu.
Girişe Vdd verdim çıkışım 0xFC0 oldu.
SAR da Kalibrasyon nasıl olacak açıklayabilirmisin?
http://www.analog.com/static/imported-files/tutorials/MT-021.pdf (http://www.analog.com/static/imported-files/tutorials/MT-021.pdf)
http://www.umac.mo/rectors_office/docs/ruimartins_cv/publications/conferences/140.pdf (http://www.umac.mo/rectors_office/docs/ruimartins_cv/publications/conferences/140.pdf)
Şimdi sorun;
Adamlar Ref voltajı Vdda dan üretmişler. Vdda değişirse Vref de oynar. Vrefi ellerinden geldiğince iyi yapmışlardır. Ben ADC hatasının Vrefden kaynaklandığını düşünmüyorum.
Sorun kapasitörlerle yapılmış DAC devresindeki kapasitörlerin değer faklılıklarından kaynaklanıyor.
http://course.ee.ust.hk/elec692w/lecture6_sar_adc.pdf (http://course.ee.ust.hk/elec692w/lecture6_sar_adc.pdf)
http://www.aspdac.com/aspdac2011/archive/pdf/8B-3.pdf (http://www.aspdac.com/aspdac2011/archive/pdf/8B-3.pdf)
burada yapılan bir teknikten bahsediliyor,
2. bir dac devresi mutlaka işin içinde oluyor ama hatta yük olarak ekleniyor :o
Merhaba,
ADC1 ile 2 kanal voltaj ölçüyorum, yalnız bir acayiplik var. Devreyi resetlediğimde bazen kalibrasyon kayıyor.
Örneğin iki kanaldan 2795 ve 2819 değerleri okuyorum, daha sonra devreyi resetliyorum (bazen 3 defa resetleyince değişiyor) ve okuduğum değerler 2814 ve 2826 oluyor. Değerler birbirine yakın fakat giriş voltajım çok stabil, büyük kondansatörlerle dolu ve düşük geçiren filtreler kullanıyorum. Bazen 3-5 defa resetlediğimde bile ADC den aynı değerleri okuyorum, bazen ise birden değişme oluyor. Değişme aralığı da sabit değil, bazen 5 bazen 45 değer fark ediyor.
Bunun init de yaptığı kalibrasyon ile ilgili olabileceğini düşünüyorum, fikri olan var mı?
EDIT:
Bir sebep daha aklıma geldi:
ADC den DMA ile okutup RAM e yazıyorum ve RAM değişkeninden gelişi güzel (ADC okumasıyla senkronize olmayan bir şekilde RAM den) okuyup hesap yapıyorum... Burada RAM den okuma yapılırken DMA de yazma yaparsa, yada yazmanın yarısında okuma yaparsam işler biraz karışabilir. Böyle birşey mümkün müdür? Mümkünse 2 kanal ADC okuması bittikten sonra DMA in kesme oluşturmasını nasıl sağlayabilirim?
DMA_ITConfig (DMA_Channel, DMA_IT_TC, ENABLE);
Alıntı yapılan: Klein - 20 Nisan 2013, 23:21:43
DMA_ITConfig (DMA_Channel, DMA_IT_TC, ENABLE);
Hocam yani 2. sebepten dolayı reset sonrası voltaj ölçümünde değişme olduğunu mu düşünüyorsun?
Alıntı YapADC den DMA ile okutup RAM e yazıyorum ve RAM değişkeninden gelişi güzel (ADC okumasıyla senkronize olmayan bir şekilde RAM den) okuyup hesap yapıyorum... Burada RAM den okuma yapılırken DMA de yazma yaparsa, yada yazmanın yarısında okuma yaparsam işler biraz karışabilir. Böyle birşey mümkün müdür?
Yok. Sadece NAsıl interrupt üretebilirim sorusunun cevabıydı.
Rastgele zamanlarda okumanın böyle bir soruna neden olacağını sanmıyorum. Sen Ram'ı okumaya başladıktan sonra DMA değeri güncellemeye çalışabilir. Ancak o değer zaten register'e(r0..rn registerlerinden bahsediyorum) alınmış olacaktır. Yaptığın işlem registerdeki değer ile olacağı için, DMA'nın bu esnada adc değerini güncellemesinin bir etkisi olmayacaktır.
Sorunun açışışta işlettilen kalibrasyon prosödüründen kaynaklanabileceğini düşünüyorum.
Açılıştan sonra tek okuma yapıp duruyor musun? Süreklimi okuyorsun?
Sürekli okuyorsan; bir kez hatalı hatalı okumaya başladı mı , kapanana kadar mı hatalı okuyor? yoksa ilk veri mi hatalı geliyor?
Resetlemeyi nasıl apıyorsun. Power-off-on şeklinde resetlediğinde veya harware veya software reset yaptığında , hatanın şeklinde bir değişiklik oluyor mu?
Hocam ben de aynı şekilde kalibrasyon prosedüründen kaynaklı olduğunu düşünüyorum. Sırayla sorularını denedim, cevaplar şöyle;
Alıntı yapılan: Klein - 21 Nisan 2013, 16:15:33
1- Açılıştan sonra tek okuma yapıp duruyor musun? Süreklimi okuyorsun?
2- Sürekli okuyorsan; bir kez hatalı hatalı okumaya başladı mı , kapanana kadar mı hatalı okuyor? yoksa ilk veri mi hatalı geliyor?
3- Resetlemeyi nasıl apıyorsun. Power-off-on şeklinde resetlediğinde veya harware veya software reset yaptığında , hatanın şeklinde bir değişiklik oluyor mu?
1- Açılışta 4 kanal ADC1 i DMA ile kuruyorum, continious mode olarak sürekli okuyor. Hiç bir zaman durmuyor.
2- Kapanana kadar hep hatalı okuyor, yani örneğin şimdi denedim 1106 okuyor sürekli olarak, dakikalarca değişiklik yok. Daha sonra birkaç defa resetledim ve 1145 oldu, sonra tekrar resetledim 1165 oldu, tekrar 1120 oldu gibi...
3- USB den komut gönderiyorum ve program NVIC_SystemReset(); çağırıp kendini resetliyor. El ile reset pininden resetlemeyi denedim şimdi ve enerjiyi kestim, tekrar taktım defalarca denedim, bence hiç bir fark yok. Aynı davranıyor. İlk açılışta ADC Init kodunu geçtikten sonra zaten ADC ile ilgili bir işlem yapılmıyor.
Bence kesin ADC kodlarında bir sıkıntı var. Kod olarak senin paylaştığın DMA lı ADC kodlarını kullanıyorum, yalnız 4 kanal.
ADC_Cmd(ADC1, ENABLE);
ADC_ResetCalibration(ADC1);
while(ADC_GetResetCalibrationStatus(ADC1));
ADC_StartCalibration(ADC1);
while(ADC_GetCalibrationStatus(ADC1));
Başka kodlarda dikkatimi çeken; sample lar arası 20 cycle bekleme süresi gibi bir değer veriliyor. Bendeki kodda bu yok.
Tüm kodu buraya yapıştırdım: http://pastebin.com/d521NaKi (http://pastebin.com/d521NaKi)
Bolumu biraz canlandirayim istedim.
STM32F103 lerin yerine , STM32F303 Cortex-M4 +FPU 72MHz LQFP48 cazip gorunuyor 103ler ile pin uyumu var
fiyatlar önemli tabi. Ürün çeşitliliği pazarlama ile iç içe ve güzel kurgulanmış.
Bir zamanlar yana yakıla STM32F103C8 için şema aramıştım.
O dönemlerde Çinden satın aldığım minik kartın şeması.
http://www.cncdesigner.com/wordpress/wp-content/uploads/stm32f103c8sema.pdf (http://www.cncdesigner.com/wordpress/wp-content/uploads/stm32f103c8sema.pdf)
6 giriş ADC ile birlikte Timer 3 için PWM için PA6, PA7, PB0, PB1 pinlerini kullanacaksam sorun yok.
Eğer ADC giriş sayısı 7, Timer 3 PWM çıkışları da 3 tane olsun dersem Microxplorer Timer 3 ile PWM üretemezsin diyor. Timer 3 devre dışı kalıyor.
Burada herhangi bir esneklik yokmu? Yoksa Microxplorerın dediği gibi Timer 3 elden gidiyormu?
TIM3 4 PWM, TIM2 4PWM olmak üzere toplam 8 PWM ve 8 kanal adc kullanıyorum. sorun yok.
Hocam 8 pwm ve 8 ADC kullandim ama simdiki sorum bunun la ilgili degil.
Microxplorer programini calistirip
Tim4 u aktif edin.
ADC1 de PA0...PA5 pinlerini secin.
SPI, USART vs de secin. En son Timer 3 PWM için PA6, PA7, PB0, PB1 secin.
Bu durumda zaten tim2 ve tim1 elden gidiyor.
Simdi PA0....PA5 ADC pinlerimiz
Timer 3 PWM için PA6, PA7, PB0, PB1 pinlerimiz.
Bu sartlar altinda PA6 pinini TIMER3 den kurtarip ADC girisi olarak kullanabilirmiyim? (TIM3 de PWM sayisini 3 yapabilirmiyim?)
Evet hocam yapabilirsiniz.
Kendi init kodlarımla bunu yapıyorum zaten. Ama soru mixroxplorer ile ilgili olduğu için
MicroXplorer kurup denedim. Sorun yok orada da yapabiliyorum.
Ekleme: MicroXplorer ile yapamıyormuşum. PWM input moduna geçtiğini farketmemişim.
PWM output yaptığımda illa 4 kanl kullanmaya zorluyor.
NEden yaptığını anlamadım. Gerçekte çipin böyle bir zorlaması yok.
STM32F103C8T6 kullanıyorum. Farnelldeki fiyatlara bakarken STM32F103C8T7 dikkatimi çekti.
C8T6 €6.46 iken, C8T7 €3.83
Elimdeki dokümanda T6 T7 ayrımından bahsedilmemiş. Aralarındaki fark nedir?
mesaj birleştirme:: 01 Mayıs 2014, 20:37:52
Buldum bu adamlar kafayı yemiş
T6 -40 +85 derecede çalışıyor ve daha pahalı.
T7 -40 +105 aralığında çalışıyor daha ucuz.
Farnell'le alakalı bir durum sanırım, diğerlerinde hemen hemen aynı:
http://octopart.com/partsearch# (http://octopart.com/partsearch#)!?q=STM32F103C8T6
http://octopart.com/partsearch# (http://octopart.com/partsearch#)!?q=STM32F103C8T7
ben de gördüm o durumu , eski partiler olabilir belki.
STM32F103C8 de karsilastigim iki olayi dip not olarak yazayim istedim.
1) VAA pinine 1 ohm direnc uzerinden voltaj verecek sekilde PCB hazirladim. PCB elime gectiginde 1 ohm direncim olmadigi icin VAA pini bosta olacak sekilde karti calistirdim ve osc calismadi.
Sonuc: OSC devreleri, PLL vs beslemesini bu pinden aliyor olmali. (Kataloga bakmadim)
2) SWD baglantisinda SDCLK SDIO ve GND pinlerini JTAG cihazima bagladim. Jtag cihazinin 3.3v'a baglanmasi gereken pinini islemcili kartima değil de JTAG kartinin kendi 3.3 voltuna bagladim.
Islemciyi barindiran kartima votaj verdigimde sorunsuz islemci calismaya basliyor. Yani reset islemi gerceklesiyor.
Fakat JTAG uzerinden program atmaya kalkarsam internal command error hatasi aliyorum. Sorunu asmanin tek yolu islemcime reset atmak.
Birazdan Jtagin kendi 3.3v pininden aldigim kabloyu islemcimim 3.3voltuna baglayacagim. Bakalim durum ne olacak?
Edit: Ilgili pini islemcinin 3.3 voltuna bagladigimda sorun kalkiyor.
Sonuc: JTAG islemcisi muhtemelen ADC ile kartin voltajini takip ediyor. Voltaj verildiginde kartin resetlendigini anliyor ve ona gore davraniyordur.
STM32F10x icin sadece timerlari anlatan kapsamli bir dokuman vardi.
Hatta forumda da paylasilmisti ama bulamadim.
Goren bilen varmi?
Şu muydu hocam?
http://www.st.com/web/en/resource/technical/document/application_note/DM00042534.pdf (http://www.st.com/web/en/resource/technical/document/application_note/DM00042534.pdf)
Emin olamadim ama bu dokuman da guzelmis.
Timer unitesinde shadow registere sahip registerlerin adlarini buliyormusunuz?
"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.
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 (http://www.microchip.com/pic32)
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?
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.
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?
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.
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 (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.
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.
https://www.infineon.com/cms/en/product/channel.html?channel=db3a30433c1a8752013c3e221b9d004f (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
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.
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 */
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 (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.
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.
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.