Picproje Elektronik Sitesi

PICPROJE PROGRAMLAMA DERSLERİ => Arm Öğreniyoruz => Konuyu başlatan: z - 26 Aralık 2013, 17:28:23

Başlık: STM32F4 - Kolay programlama - ZIOS
Gönderen: z - 26 Aralık 2013, 17:28:23
ARM çiplerle tanışmak isteyenlerle biraraya gelip, geçmiş dönemde STM32F4 Discovery kiti satın almış ve sanal dersane ortamında çalışmalar yapmıştık. Eminimki, elektronik yada işlemci camiasına yeni adım atmış ya da hiç adım atmamış arkadaşlar için bu çalısma ağır kaçmış ve çok da faydası olmamıştır.

Zaten o derslerin en başında, anlatıları kavrayabilmek için en azından bir işlemci uzerinde deneyim sahibi olmak ve bununla bir yada iki proje geliştirmiş olmak şart gibi bir ifade kullandığımı hatırlıyorum.

Bu yazımda ise, C dili ile PC de kod yazabilen fakat hiç elektronik tecrübesi olmayan arkadaşlara, sanki PC de proje geliştirir gibi doğrudan  donanıma mudahale etmeden  ("register"larla vs uğraşmadan) STM232F4 Discovery kitinde proje geliştirmelerine yardımcı olacak ZIOS kütüphanesinin kullanımını anlatacağım.

(http://www.mathworks.com/cmsimages/80038_wm_st-discovery-board-gallery-image1.jpg)

Bu calışmada STM32F4 Discovery kit üzerindeki STM32F407 çipini tanımanız gerekmiyor.
Karmaşık ve uzun uzun satırlar yazmayı gerektiren CMSIS fonskiyonlarıyla hiç işiniz yok.

İhtiyacınız olan donanım, STM32F4 Discovery kiti. Bunun dışında SD kart takabileceğimiz bir konnektor, 2x16 LCD, kablo parçacıkları, lehim ve havya. Tabiki istek.

STM32F4 Discovery başlı başına bir mikro bilgisayar. Bununla elektrikli cihazları on-off edebilir, SD karttaki bir dosyayı okuyabilir, SD kartda dosya olusturabilir, dosya içine bir şeyler yazabilir, 2x16 LCD de mesaj verebilir, mouse butonuna benzer yapıda kullanacağımız çok fonksiyonlu mavi butonu okuyabilir, ADC den voltaj ölçümü yapabilir, seri porttan veri alıp gönderebilirsiniz. Bunları yapmak icin mevcut bilgileriniz size yetecek. İlave hiç bir şey bilmenize gerek kalmayacak.

Tüm bu işler icin sadece 4Kb civarında yer kaplayan ZIOS kutuphanesini projemize dahil etmemiz gerekiyor. Bir de havya kullanarak Discovery kitin bazi pinlerine bir kaç kablo lehimleyip bu tellere kart okuyucu, LCD vs bağlayacağız. Bunları da resim ve gerekiyorsa videolarla açıklayacağım.

Yaşasın C, sen sağ ol varol.

Bu arada ZIOS, Z's Input Output System demek.

ZIOS ne ise yarar?

PC donanimini dusunun. Konuyu, eski zamanlardaki  taaa XT-AT gibi PC donemlerinden hatirladigim orneklerle aciklayayim;

"PC"de timer 8253/54 diye bir cip bulunur(du).  Bunun icinde 3 tane Timer/Counter unitesi vardır. BIOS/DOS gelistirilirken adamlar demislerki atiyorum Timer 1 system tick icin kullanilsin, Timer 2 duduk sesi icin, Timer 3 DRAMlari refresh etmek icin. (Rakamlara takilmayin yanlis hatirliyorumdur onemli değil)


Boyle bir kabul yapınca yani hangi donanımın hangi işte kullanilacağı kesinleşince her şey kolaylaşıyor.
Boyle bir kabul yapildiktan sonra DOS yada PC ye uygulama programi yazanlar ben bu siralamaya uymayacagim ben Timer 1 şu amaçla kullanacagim dememisler. Boylece bazi standartlar olusmus.

Kullanıcı programı yazanlar donanımla ilgili rutinler yazmayıp DOS'daki ya da BIOS'daki alt rutinleri çağırır olmuşlar.

BIOS, donanımla ilgili fonksiyonları barındıran temel program parçacıklarını içerir. Örneğin, keyboard controller ile haberleşip herhang bir tuşa basıldı ise bunu okuyan program parçacığı ya da ekranda mesaj vermeye yarayan fonksiyonlar BIOS'da mevcuttur.  Ekran kartı ile ilgili temel programlar da BIOS içinde mevcutdur.

STM32F407 gibi ici tika basa timerlar, seri portlar, IO portlar, ADC ler vs vs olan cipimiz var.  Bu çiple proje geliştirirken şu timer şu ise yarasin, ADC nin su pini kullanılsın şeklinde kendimizce görev paylaşımı yapıyoruz.

Ardından da bu tanımlara uygun register yapılandırmaları yapiyoruz. Yani initialize rutinleri yaziyoruz.

Iste bu noktada isler yeni baslayanlar icin cetrefilli bir hal aliyor.

Çipin registerlerini anlatan binlerce sayfalik dokuman var. Ustelik Ingilizce.
Arkadasimiz cipi zaten tanimiyor. Eger daha once bu tip ciplerle de calismadi ise bilgi denizinde bogulmaya mahkum kalmaktadir.

Bir çipin registerlerini öğrenseniz bile, bir başka çiple çalışacaksanız gene bir bocalama dönemi olmaktadır.

Adamlar bu isleri basitlestirmek adina CMSIS (Cortex Microcontroller Software interface Standart) diye bir seyler yapmislar. Siz bunu bir kez ogrendinizmi artik hangi cipi kullanırsaniz kullanın çipin içi daha oncekilerden cok cok farkli bile olsa register initialize islemlerini bu CMSIS kod parcalari kendi basina yapiyor. Sizin detaylari bilmeniz gerekmiyor.

Iyi tamam da bu CMSIS de iki üç sayfalık dokumanla açıklanmıyor ki.  Hiç bir şey bilmeyen için, CMSIS de kocaman bir öcü.

Isin ozu, ARM sistemlerle bir iki basit deneme yapmak isteyen fakat daha once islerle hic uğraşmamış birisinin ağrısız sızısız bir şeyler yapması pek mümkün görünmüyor. Ya hazır program parçaları bulup uzerinde oynayacak ya kafayı takacak bu işleri adım adım ögrenecek yada şimdi anlatmaya calistigim ZIOS kutuphanesini kullanacak.

ZIOS ahım şahım bir sey değil.  STM32F407 içindeki bazı donanımlara el koydum. Bunların hangi amaçla kullanılacağına karar verdim, initialize rutinlerini yazdım, bu donanımların C ile bağlantılı komutlarıyla ilgili rutinlerini de hazırladım ve kütüphane şekline getirdim alın size ZIOS. 

Yani BIOS (Basic Input Output System) rutinlerinin STM32F4 Discovery'deki karşılığına ZIOS dedim.

Keil'de ZIOS'u projenize dahil edip derleme ardından kodunuzu çalıştırdığınızda, reset işlemi ardından main satirina gelinceye kadar geçen ara süreçte  farkına bile varılmayacak pek cok initialize işlemi çoktan yapılmış olmaktadır.

Bu durumda daha main'in ilk satirinda Lcd_Msg(0,0,Merhaba Dunya") yazarsaniz 2x16 LCD ekranda Merhaba Dunya yazısını görürsünüz.

Ya da mainin ilk satırında zlist(&File,0) yazarsaniz SD kart icindeki Root klasorundeki dosyalardan ilk 16 tanesinin ismi File buffer içinde hazır olacaktır.

ZIOS kullanmasaydık aynı işlemleri yapabilmek için SystemInit fonksiyonu içine kullanılan donanım parçacıklarının init işlemlerini yapan kodları yazmamız gerekecekti. Keza LCD, SD kart gibi orta seviyede ara kodlama gerektiren donanım parçacıkları içinde oku/yaz türü program parçacıklarının programımıza dail edilmesi gerekecekti.

İşte ZIOS, bu SystemInit ve temel I/O donanımları ile ilgili fonksiyonları içinde barındırmakta, ilk başlarda acemilik döneminde kabus gibi görünen bu rutinlerin ayak bağı olmamasını sağlamaktadır.

Sizin ne SD kart donanimini init eden rutini ne de LCD yi init rutinini cagirmaniz gerekmektedir. ADC de o anki cevrilmis degeri okumak icin ADC nin yapilandirilmasi ile ugrasmaniz gerekmemektedir. Cunku o anki deger hazir olarak okunmayi beklemektedir.

Kisacasi ZIOS programınızın donanımla ilgili iletişimini üstlenir bu kısımlara kafa yormanıza gerek kalmaz.  Size sadece, amaca yonelik C kodlama yapmak kalir.

Peki cip icindeki tum donanimlari init ettim mi? Hayir. Lazım oldukca ZIOS'a ekleyebilirim. Yada işin içine girip olayları kavradıkça register bazlı kodlamalarınızı yada CMSIS kodlarınızı ZIOS ile birlikte kullanabilirsiniz.

Sistemde kaza (crash) istemiyorsaniz işin başlarında donanıma ulaşmamaya çalışın. Bırakın ZIOS sizin için yapsın. Kendinizi hür hissetmeye başladığınızda ZIOS'a ihtiyacınız kalmayacak ve ARM ciplere %100 kendi kodlarinizi yazabileceksiniz.

Yeterki merakiniz olsun ve gayret edin....

Eger yazimin icinde Zlib gibi bir ifade gorurseniz yadirgamayin, bu bir dil surcmesidir. Cunku ZIOSun bebeklik haline Zlib adini vermistim. ZIOS yada Zlib ayni anlama gelmektedir.
Başlık: Milli oluyoruz
Gönderen: z - 29 Aralık 2013, 00:51:12
STM32F4 Discovery kitimizi masamizdaki metal objelerin ustune koymuyoruz. Kitin altindaki pinlerin metal nesnelerle temas etmesine engel olacak cozumler getiriyoruz. Mesela;

STM32F4 Discovery (http://www.youtube.com/watch?v=1fb3IZk9GR0#)

KEIL Programinin kurulmasi

ARM işlemcilere program yazmak, derlemek, derlenmiş kodları çipe aktarmak, çipteki yazılımı koşturmak ve yazdığımız kodlardaki hataları ayıklamak için Keil programı kullanacağız.

Keil profesyonel ve pahalı bir yazılım ancak, 32 KByte uzunluğa kadar deneme amaçlı program yazımına imkan tanıyan ücretsiz sürümü http://www.keil.com/ (http://www.keil.com/) sitesinden indirip kurabilir ve güncellemeleri takip ederek deneme sürümünüzü güncel tutabilirsiniz.

https://www.keil.com/arm/demo/eval/arm.htm (https://www.keil.com/arm/demo/eval/arm.htm) adresini tıklayarak karşınıza gelen tabloyu doldurup yollayın. Bu  işlem ardından kurulum dosyasını bilgisayarınıza indirin ve kurulumu başlatın.

(http://cncdesigner.com/STM/Keil.JPG)

Kurulum biraz zaman alıyor. 

Asagidaki linkten Discovery kitin PC tarafindan taninmasi icin gerekli driver'i indirin ve kurun.

http://www.st.com/st-web-ui/static/active/en/st_prod_software_internet/resource/technical/software/utility/stsw-link004.zip (http://www.st.com/st-web-ui/static/active/en/st_prod_software_internet/resource/technical/software/utility/stsw-link004.zip)

mesaj birleştirme:: 29 Aralık 2013, 01:12:34

Ilk uygulamamiz tahmin edeceginiz gibi yanip sonen LED programi.

Discovery kitin uzerinde kullanicinin yakip sondurebilecegi mavi, yesil, kirmizi ve kavun ici olmak uzere 4 adet led var.

Kitimizin iki kenarina siralanmis pinlerin ustune dikkat ederseniz PA1, PB2, PC1, PD5, PE1 gibi minik yazilar goreceksiniz.

PA, PB, PC, PD, PE islemcimizin I/O portlaridir.  Herbirinde 16 tane I/O pini vardir.

Kart uzerinde sozunu ettigimiz ledler PD15, PD14, PD13 ve PD12 pinlerine baglidir.

Ilk deneme programimizi yuklemek icin asagidaki linki tiklayin ve bilgisayariniza yukleyin, RAR'ı patlatıp icinden Discovery klasorunu cikartin. ZIOS.lib Proje dosyalarının içinde mevcut. (ZIOS V1.02)
ZIOS versiyonu değiştiğinde yeni versiyonu gene bu linktden indirebilirsiniz.

http://www.cncdesigner.com/wordpress/wp-content/uploads/Discovery_V1.02.rar (http://www.cncdesigner.com/wordpress/wp-content/uploads/Discovery_V1.02.rar)

Discovery proje dosyasini cift tiklayip projenin KEIL icinde acilmasini saglayin.

main.c ana programi icerisinde asagidaki satirlari goreceksiniz.


/*   Yanip sonen led  */

#include "Zystem.h"


void delay()
{
volatile int i;
         
    for(i=0;i<10000000;i++);   // 0'dan 10 milyona kadar birer birer say       
}

int main()
{
    while(1)               // Asagidaki komut satirlarini surekli tekrarla
      {
         pinset('D',15);   // GPIOD 15 (D15) pinine bagli mavi ledi yak
         delay();          // Delay rutinine git ve bekle         
         pinclr('D',15);   // GPIOD 15 (D15) pinine bagli mavi ledi sondur
         delay();          // Delay rutinine git ve bekle         
      }             
}



Asagidaki videodan programin derlenmesini, kite yuklenmesini ve kodun calistirilmasini izleyebilirsiniz.

Milli oluyoruz (http://www.youtube.com/watch?v=8tAuGr1siwo#)
Başlık: Ynt: Hâla STM32F4 de kod yazamayanlar için ZIOS
Gönderen: z - 29 Aralık 2013, 02:01:12
Yukaridaki ornek icin sorulan ilk sorulardan birisi ledin yanip sonme suresi ile delay parametresi olan 10000000 sayisi arasindaki bagintinin ne oldugu.

Bilmiyorum. Ama kisaca acikliyayim. C derleyici 1 den 10000000'a kadar sayan C satirinin makine kod karsiligini, istenen optimizasyon seviyesini de dikkate alarak uretti. Islemcimiz 168 Mhz hizda kosarken bu sayma islemi bilmem kac saniye zaman aldi.

Programi ilk calistirdigimda parametre 10000 idi. Ledin yanip sonme hizina baktim begenmedim cunku ledin yanip sondugu belli bile olmuyordu. Parametreyi kafadan artirdim eksilttim. En sonunda evet bu iyi oldu deyip 10000000 degerinde biraktim.

Peki hep boyle deneme yanilmayla mi yapacagiz?

Elbette hayir. Bundan sonraki gecikme rutinlerini ilk ornegimizdeki gibi değil asagidaki programdaki gibi yapacagiz.

Ikinci programimiz, kirmizi ledi 100 mili saniye yakip ardindan 900ms boyunca sonuk tutmaktadir.

/*   Yanip sonen led  */

#include "Zystem.h"

volatile short MyDelay;

void BirMiliSaniye() // V1.03 den sonra Milisecond adını aldı
{
    if(MyDelay) MyDelay--;     
}

int main()
{
    while(1)             // Asagidaki komut satirlarini surekli tekrarla
      {
         pinset('D',14);                // GPIOD 14 (D14) pinine bagli kirmizi ledi yak
         MyDelay=100; while(MyDelay);   // MyDelay=100 yap ve bunun sifir olmasini bekle
         pinclr('D',14);                // GPIOD 14 (D14) pinine bagli kirmizi ledi sondur
         MyDelay=900; while(MyDelay);   // MyDelay=900 yap ve bunun sifir olmasini bekle
      }             
}



Bu ornekte sureyi dilediginiz gibi ve oldukca dogru olarak belirleyebilirsiniz.

BirMiliSaniye fonksiyonu ZIOS tarafindan bir mili saniye araliklarla periyodik olarak cagrilir. Dolayisi ile bu rutin icine koyacaginiz minik kod parcalari her bir milisaniyede 1 kez calisacaktir.

Bu fonksiyonun icine zaman alici kodlar koymamalisiniz. Cunku bu bir interrupt fonksiyonudur.

Led ve Delay kullanimi ile ilgili son bir ornek daha yapalim.

Peryodik olarak;

Mavi led 50 ms boyunca yanacak 400ms boyunca sonecektir.
Yesil led ise 30ms boyunca yanacak 600 ms boyunca sonecektir.
Kirmizi led ise 60ms boyunca yanacak 2sn boyunca sonecektir.

/*   Yanip sonen led  */

#include "Zystem.h"

volatile short Tm,Ty,Tk;

void BirMiliSaniye()
{
    Tm++; if(Tm>=450)  Tm=0;
    Ty++; if(Ty>=630)  Ty=0;
    Tk++; if(Tk>=2060) Tk=0;         
}

int main()
{
    Tm=Ty=Tk=0;
         
    while(1)   
      {
         if(Tm<=50) pinset('D',15); else pinclr('D',15);
         if(Ty<=30) pinset('D',12); else pinclr('D',12);
         if(Tk<=60) pinset('D',14); else pinclr('D',14);
      }             
}




mesaj birleştirme:: 29 Aralık 2013, 00:59:13

Peki 1 mili saniyeden daha kucuk surelerde gecikme istersek ne yapacagiz?

100 mikrosaniye ve katlari icin YuzMikroSaniye diye bir fonksiyonumuz daha var.


void YuzMikroSaniye()
{
}


Yukaridaki fonksiyon her yuz mikro saniyede bir kez periyodik olarak cagrilir. Bu da, BirMiliSaniye gibi bir interrupt fonksiyonudur ve icinde zaman alici kodlar calistirmamalisiniz.

BirMiliSaniye ve YuzMikroSaniye fonksiyonlarin doğruluğu üzerine önemli bir uyarı da bulunmam gerekli.

Gelisiguzel bir zamanda bu fonksiyonlari cagirirsaniz;

Bu fonksiyonda degeri bir eksiltilen degiskene ornegin 1 yuklemis olalim. Bu andan itibaren interrupt olusuncaya kadar gecen sure degiskene ne zaman 1 yuklediginizle alakalidir.

1MiliSaniyeFonksiyonu icin konusursak;

Değişkene değer yukledikten hemen sonra Değişken bir eksiltilebilecegi gibi 1ms sonra da eksiltilebilir.

Bu belirsizlikten dolayi gercekten 1ms referans zamana ihtiyaciniz varsa degiskene 1 yukleyip bekleyin. Sifir oldugunda bu sizin 0 ms aninizdir. Tekrar degiskene 1 degeri yukleyin. Degisken 0 oldugunda tam 1 ms zaman gecmis demektir.

Birden cok degisken interrupt rutininde 1 eksiltilmek istenebilir. Bu nedenle degiskene deger yuklendigi anda timeri da sifirlama yoluna gitmedim.

Gelişigüzel bir zamanda  Delay değişkeninize örneğin 10 değeri yüklediyseniz elde edeceğiniz gecikme 9..10ms aralığında olacaktir. (-1...0) ms hatanız olacaktr.
Başlık: Ynt: Hâla STM32F4 de kod yazamayanlar için ZIOS
Gönderen: z - 29 Aralık 2013, 03:18:03
Yukaridaki mesajlardan birisinde PA,PB,PC,PD gibi GPIO (General Purpose Input Output) portlardan dan bahsettik.

Bu GPIO portlar sadece 1-0 seklinde bilgi cikmaya yaramaz. Dis dunyadaki 1-0 tipindeki voltaj bilgilerini okumak icin de bu portlardan yararlaniriz.

Cip dokumanlarinda bu GPIO girislerinin pek cogunun 5 volta dayanikli oldugu soylense de siz girislere negatif voltaj ve 3 voltdan buyuk voltaj uygulamamaya ozen gosterin.

Zira GPIO pinleri sadece kartin kenarina dizilmis pinlere gitmemekte, bazilari kart uzerindeki yardimci ciplere de baglidir.

ZIOS kutuphanesi 4 adet ledin bagli oldugu GPIOD de PD15...PD6 arasindaki tum pinleri cikis moduna ayarlar.

PD15, PD14, PD13 ve PD12 ledlere baglidir. PD11, PD10, PD9, PD8, PD7 ve PD6 ise ileride kitimize baglayacagimiz 2x16 LCD display icin ayrilmistir.
Ben LCD'mi bu bacaklara baglamak istemiyorum ben baska bacaklara baglayacagim derseniz ZIOS size yardimci olmaz.

PA5, PA6, PA7, PE7  pinleri MEMS çipi için alıkonulmuştur. SD kart için ise PC12, PC11i PC10 ve PD0 pinleri de SD kart okuyucu için ayrılmıştır.

Bunlarin disinda kalan pinleri kendi ozel amaclarimiz icin kullanabiliriz. Gene de bu asamada keyfi pinlerle calismayip derslerimizde kullandigimiz pinlerle calisin. Zira daha once de dedigim gibi GPIO pinlerinin pek cogu kart uzerindeki ciplere baglidir. Bu ciplere 1/0 tipi bilgiler uygulamak sorun yasatabilir. Ciplerin cikisina zit seviyede voltaj verme durumumuz varmi bunu ilk firsatta arastiracagim. (Kendime Odev)

Dis dunyadan 1/0 tipi bilgi okumak.

Bu amacla hic kablo vs baglantisi yapmadan kart uzerindeki hazir mavi butonun uretecegi 1/0 bilgisini okuyup butona basildi ise mavi ledi yakan, basili değilken mavi ledi sonduren programi yazalim.

Mavi buton GPIOA nin 0 nolu pinine (PA0'a) baglidir. Butona basildiginda PA0=1, basilmadiginda PA0=0 olmaktadir. ZIOS kutuphanesi PA0 pinini output olarak değil input olarak tanimlamistir. Dolayisi ile bizim bu pin icin herhangi bir init islemi yapmamiza gerek kalmamaktadir.



#include "Zystem.h"

int main()
{
    while(1)   
      {
         // Mavi butona bastiginiz surece mavi led yanar 
         // Bir baska ifadeyle GPIOA 0 pini 1 ise mavi led yanar               
         if(pininp('A',0)==1) pinset('D',15); else pinclr('D',15);
      }             
}


mesaj birleştirme:: 29 Aralık 2013, 03:45:22

pinset, pinclr ve pininp fonksiyonlarinin her birisi hata dondurme yetenegine sahiptir.

Hata degeri 2 olarak geri donulduyse olmayan bir GPIO dan yada olmayan bir pin numarasindan bahsediyoruz demektir.

pinset('J',0) yada pinclr('A',20) 2 hatasi ile geri donuse neden olur.

Yukaridaki program PA0 pinini input olarak kullaniyordu. Simdi de PC7 pininden 1/0 bilgisi girelim. Fakat bu kez parmak yalayacağız.


#include "Zystem.h"

int main()
{
    while(1)   
      {
         // GPIOC 7 pini 1 ise mavi led yanar               
         if(pininp('C',7)==1) pinset('D',15); else pinclr('D',15);
      }             
}


Programi derleyip calistirin. Baş ve işaret parmağınızı yalayın. Başparmağınızı PC7 pinine, işaret parmağınızı da 3v pinine dokundurun.
Ya da parmaklarınıza toplu iğne vs ince bir metal alıp PC7 pinine dokunun. İlginç değil mi?

C bilmiyor ve yazılarımı öylesine okuyorsanız size bir trick vereyim.

C dili ozellikle de ZIOS fonksiyonlari kitap okunur gibi okunur.

Örneğin aşağıdaki komut satırını okuyalım ve Türkçeye çevirelim.

if(pininp('C',7)==1) pinset('D',15); else pinclr('D',15);

Eger, PC7 pin girisi 1 ise D15 pinini set et. değilse D15 pinini sil.


Bakın C ne kadar kolaymış değil mi? Bence sizler de takip edin C yi kavrayacaksınız.
Başlık: Ynt: Hâla STM32F4 de kod yazamayanlar için ZIOS
Gönderen: z - 29 Aralık 2013, 05:02:50
Herhangi bir GPIO pininin giris/cikis tanimini yapmak.

ZIOS cikis amacli kullanacagi pinleri (alıkonan pinler) zaten cikis olarak tanimlamaktadir. Alikonmamis tum diger pinler input olarak tanimlidir.

Bu dersimizde input tanimli bir pini output tipine cevirmeyi, yada tersine output tanimli pini input tipine cevirmeyi gorecegiz.

Bu arada yeri gelmisken onemli bir uyari yapacagim.

PA14, PA13 ve PB3 pinlerine, pinset yada pinclr ile mudahale etmeyin yada simdi anlatacagim pinmod fonksiyonu ile tanım yapmayın.
Bu pinler islemciye program yuklemeye yarayan ozel pinlerdir. Bu pinlere müdahale yaptığinız takdirde kartınıza bir daha program yükleyemeyebilirsiniz. (Kurtarma işlemi gerekir)

Şimdi pinmod komutunu göstereceğim. Artık Discovery kitimize bir seyler bağlamanın vakti geldi. Pinlerden birisine ilave LED baglayalım.Fakat daha önce havya nasıl kullanılır, lehim nasıl yapılır onu göstermem gerekecek.

http://youtu.be/s-KhwVNLD5k (http://youtu.be/s-KhwVNLD5k)

Havya kullanımını artik bildiğimize göre bir de LED den bahsedeyim. Discovery kitimizin GPIOC7 pinine led nasıl bağlanır onu da videoda göstereyim.

(Anlayış gösterin, bu dersler PC programcılarına yönelik. Bu arkadaşlar belki de bugüne kadar ellerine hiç havya, lehim teli, led, direnç almadılar.)

Video çekimleri gerçekten bilgi ve tecrübe istiyor. Ortamın aydınlatılması yanısıra çekim yapan kişinin ne zaman zoom yapacağı ne zaman uzak çekim yapacaği ortaya çikan işin kalitesi açısindan çok önemli.

Yardımcı olmaları için hanımdan (kendi hanımımdan) yada oğlumdan destek alıyorum ve kavga gürültü kopuyor. Kimse benim videomu çekmek istemiyor. Cünkü sonuç kötü olunca kızıyor köpürüyorum çekimi tekrar yapıyoruz. Bu sefer evde yardımcı olacak kimse yoktu ve mikroskop kamera ile tek başıma video çektim. Ortaya hiç de iyi bir sonuç çıkmadı.

Kusuruma bakmayın.

PC7 Led (http://www.youtube.com/watch?v=VbuyrmxP7xA#)

Videoda renkleri görünüyor olsa da belirtmeyi unutmuşum, kullandığım 220 ohm değerindeki direncin renkleri kirmizi kirmizi kahverengi.

Elinizde farkli renklerde dirençler varken hangisinin 220 ohm olduğunu bu renklerden tanıyacaksınız. Hemen belirteyim ki 220 ohm yerine 330 ohm da kullanabilirsiniz. Bu durumda ışığın parlaklığı biraz düşebilir.

Videodaki kadar uğraşa ne gerek var, lede direnci baglarım sonra voltaj verip hangi ucun + hangi ucun - olduğunu tespit ederim de diyebilirsiniz tabiki...
Başlık: Ynt: Hâla STM32F4 de kod yazamayanlar için ZIOS
Gönderen: z - 29 Aralık 2013, 18:26:12
PC7 pinini output tanımlamak ve bu pine bağladığımız ledi yakip sondürmek.



#include "Zystem.h"

volatile short T;

void BirMiliSaniye() // V1.03 den sonra Milisecond adını aldı
{
   if(T) T--;         
}

int main()
{
    pinmod('C',7,output); // PC7 Pini artik cikis oldu.
         
    while(1)   
      {
         pinset('C',7);
         T=50; while(T);       
         pinclr('C',7);
         T=950; while(T);       
      }             
}


PC7 Yanıp sönen led (http://www.youtube.com/watch?v=OYfxMmhkNgs#)
Başlık: Ynt: Hâla STM32F4 de kod yazamayanlar için ZIOS
Gönderen: z - 29 Aralık 2013, 21:36:46
Artik Discovery kitimizde her hangi bir pini nasil output nasil input tanimlayabilecegimizi, bir pinden nasil 1/0 bilgisi çıkartabileceğimizi yada bir pindeki 1/o bilgisini nasil okuyabilecegimizi biliyoruz.

Şimdi ogrendiklerimizi pekiştirmek adına  ses uygulamasi yapalim. Bunun için 100nF lik bir kondansator ve bilgisayarlara baglanan amplifikatorlu hoparlore ihtiyacımız olacak.

Discovery ses uygulaması (http://www.youtube.com/watch?v=l51R6myCzGY#ws)

Ses efekti uygulaması


#include "Zystem.h"

short YariPeryod;

void YuzMikroSaniye() // V1.03 den sonra Microsecond adını aldı
{
   if(YariPeryod) YariPeryod--;
}

void Duduk(short Peryod, short Tekrar)
{
short n;
         
    for(n=0;n<Tekrar;n++)
      {       
        pinset('C',7); YariPeryod=Peryod>>1; while(YariPeryod && pininp('A',0));
        pinclr('C',7); YariPeryod=Peryod>>1; while(YariPeryod && pininp('A',0));
      }
}

int main()
{
short T=0;
         
    pinmod('C',7,output);
   
    while(1)
      {
         while(!pininp('A',0)); // Mavi buton basili değilse beklemede kal
         while(T<20){Duduk(T,T & 7); T++;}
         while(T)   {Duduk(T,T & 7); T--;}                 
      }             
}
Başlık: Ynt: Hâla STM32F4 de kod yazamayanlar için ZIOS
Gönderen: z - 30 Aralık 2013, 00:30:25
getch komutu ile mavi butonlu klavyeyi okumak

// getch komutu

#include "Zystem.h"

#define Mavi 15
#define Yesil 12
#define Kirmizi 14

int main()
{
char Tus=0;
         
    while(1)
      {
         switch(getch())
           {
              case 0: {break;}         // Tanimsiz       
              case 1: {Tus^=1; break;} // Tek  Tik
              case 2: {Tus^=2; break;} // Cift Tik
              case 3: {Tus^=4; break;} // Uzun sureli Tik
           }
         if(Tus&1) pinset('D',Mavi);    else pinclr('D',Mavi);
         if(Tus&2) pinset('D',Kirmizi); else pinclr('D',Kirmizi);
         if(Tus&4) pinset('D',Yesil);   else pinclr('D',Yesil);
      }             
}

Başlık: Ynt: Hâla STM32F4 de kod yazamayanlar için ZIOS
Gönderen: z - 30 Aralık 2013, 16:07:08
Discovery kitimize 2x16 LCD display bağlamak.

2x16 LCD dedigimiz malzeme, iki satir 16 sutunda,  alfanumerik karakterleri gosteren aşagidaki gibi bir malzeme.

Bunun mavi olani, yesil orani, sari olani, arkadan aydinlatmasi olani olmayani var.

(http://www.dorukanstore.com/modules/catalog/products/pr_01_18884_max.jpg?rev=1380722950)

Sifirdan montaji anlatan video cekmek cok zamanimi alacak. Bunun yerine baglanti semasini verecegim.

(http://www.cncdesigner.com/wordpress/wp-content/uploads/LCD.jpg)

Satın aldığınız LCD yukarıdakinden daha farklı ise bağlantıları yukarıdaki gibi yapmadan önce "LCD"nizin fotoğrafını çekip yada linkini verip bacak bağlantısı için forum üyelerinin fikrini alınız.
Başlık: Ynt: Hâla STM32F4 de kod yazamayanlar için ZIOS
Gönderen: z - 30 Aralık 2013, 19:45:50
LCD displayde istenen satır ve sütunda mesaj vermek, değişken değerini göstermek, ekranı silmek.

Lcd ekran (http://www.youtube.com/watch?v=-Om1lzPYPUE#)


#include "Zystem.h"
#include "stdio.h"

char kbhit()
{
     return(pininp('A',0));     
}

int main()
{
int i;
char s[17];         
         
    while(1)
      {
         if(kbhit()) display(0,0,"Parmagini ceksen");
         while(kbhit());       
               
         display(0,0,"Merhaba Dunyali");
         display(0,1,"Mavi tusa bas");

         getch(); // Mavi tusa basilmasini bekle;
         cls();   // Ekrani temizle
               
         for(i=1500;i>=0;i--)
           {
             sprintf(s,"Sayac:%d",i);       
             display(0,0,&s[0]);       
           }                     
           
         display(0,0,"Hoslandin mi?");
         getch(); 
      }             
}
Başlık: ZIOS ile gürültüsüz patırtısız ADC dönüşümü yapma - Yeni yılınız kutlu olsun
Gönderen: z - 01 Ocak 2014, 01:38:58
ZIOS ile GPIOA1 pininden gürültüsüz patırtısız ADC dönüşümü yapma

Bu uygulamayı yapmak icin "ZIOS"un yeni versiyonununun indirilmesi gerekiyor.

ADC dönüşümü yapmak için herhangi bir komut işletmeye gerek yok. 1ms aralıklarla update edilen short tanımlı Analog değişkenini okumanız yeterli.

Ayarlı voltaj için trimpot denen malzemeden yararlandim. Bu malzeme ayarli bir direnç olup değeri, vidasının  döndürülmesiyle değiştirilir.

Trimpotun en dıştaki bacaklarından birisine GND, diğerisine de + 3v bağladiğımızda orta bacaktan değeri değiştirilebilen voltaj elde ederiz. Orta bacak PA1 pinine bağlanmıştır.
Bu uygulamada 100K değerinde trimpot kullanılmıştır. 10K, 22K, 47K gibi değerleri de kullanabilirsiniz.

(http://www.akoma-trade.com/images/tradeimages/TRADE_1189130127.jpg)


#include "Zystem.h"
#include "stdio.h"
#include "string.h"

short T;
float V;

void BirMiliSaniye() // V1.03 den sonra Milisecond adını aldı
{
    if(T) T--;               
}

int main()
{
char s[17];         
         
/*  ver komutu ZIOS versionunu getirir. (V1.01)
    Program derlenmiyorsa yeni ZIOS'u indirmeniz gerekir.*/

    while(1)
      {
         T=250; while(T);                   // Her 250 mili saniyede ADC sonucunu stringe cevir
         V=(float)Analog*3/4095;           
         sprintf(s,"V = %1.3f volt",V);     
         display(0,0,&s[0]);
         if(!strcmp(s,"V = 2.014 volt")) display(0,1,"MUTLU YILLAR");
         else display(0,1,"");       
      }             
}


ZIOS ile ADC uygulaması (http://www.youtube.com/watch?v=OQ8IEYOQvdE#ws)

Başlık: Ynt: Hâla STM32F4 de kod yazamayanlar için ZIOS
Gönderen: z - 01 Ocak 2014, 16:03:03
Analog sinyal üretmek

Analog sinyaller digital sinyaliller gibi sadece 0-1 degerlerinden olusmaz.
Örnekteki program PA4 pininde 0...3 volt araliginda 3/4096 adimlarla trapez dalga formunda voltaj üretir.

DAC (http://www.youtube.com/watch?v=bmxN_YrwudA#ws)

// PA4 pininde 3v genlikte Trapez dalga uretir

#include "Zystem.h"


int main()
{
short a;
         
/*  ver komutu ZIOS versionunu getirir. (V1.01)
    Program derlenmiyorsa yeni ZIOS'u indirmeniz gerekir.*/
         
    ver();         
             
    while(1)
      {
        for(a=0;a<4096;a++) dac(a);     // Yokus Cik
        for(a=0;a<4096;a++) dac(4095);  // Duz git   
        for(a=4095;a>=0;a--)dac(a);     // Yokus in
        for(a=0;a<4096;a++) dac(0);     // Duz git
      }             
}

Başlık: Ynt: Hâla STM32F4 de kod yazamayanlar için ZIOS
Gönderen: z - 01 Ocak 2014, 21:10:36
otomobiller için emniyet kemeri uyarısi.

DAC sayesinde analog sinyaller uretmeyi ogrenmistik. Bu kez ding sesi uretecegiz.

Emniyet kemeri uyarisi (http://www.youtube.com/watch?v=dDvIbLB8RY0#ws)

// PA4 pinine amplifikator baglayin

#include "Zystem.h"

volatile int T,T1;

int main()
{
short a,a0,a1,a2;
         
/*  ver komutu ZIOS versiyonunu dondurur.
    Program derlenmiyorsa yeni ZIOS'u indirmeniz gerekir.*/
         
    ver();         
   
    while(1)
      {
        while(!pininp('A',0))
          {                 
            a0=720; a1=0; a2=32767;         
            for(T=0;T<80000;T++)
              {       
                for(T1=0;T1<100;T1++);
                a=((((a0*32734))>>14) - a1); a1=a0; a0=a;
                a2=(a2*32767)>>15;       
                a=(a*a2)>>15;       
                dac((a>>3)+2048); 
              }
          }   
      }             
}


Daha önceki hoparlor bağlantısını PC7 pininden yapmıştık. Bu kez PA4 pininden bağlantı yapacağız.

Jack uçlarına kablo bağlantısı yapmayla ilgili videoyu bir kez daha veriyorum.

http://www.youtube.com/watch?v=l51R6myCzGY#ws (http://www.youtube.com/watch?v=l51R6myCzGY#ws)
Başlık: Ynt: STM32F4 de kod yazamayanlar için ZIOS
Gönderen: z - 03 Ocak 2014, 01:55:13
ZIOS ile USART uygulaması (Asenkron Seri Data alıp verme)

PB10 Tx pini
PB11 Rx pini


Bu amaçla 2 komutumuz var.

serinit(int BaudRate);
sersend(char Data);

Seri portun stop biti yok 1 olsun yok 2 olsun, yok parity odd olsun even olsun süsü püsü ile ugrasmadim. (İhtiyaç olduğunu da sanmıyorum.)

8 data bit, 1 stop bit, non parity kullanıyor. Baud rate'i dilediginiz gibi verebilirsiniz.

Ornegin 9600 baud icin serinit(9600), 1000 baud icin serinit(1000) gibi.

serinit komutu ardindan seri port iletişime hazır olur.

sersend komutuyla  8 bitlik deger yollayabilirsiniz.

Ornegin 0x17 yollamak icin sersend(0x17);

Peki gelen veriler hangi komut ile okunacak?

Bunun için komut kullanmıyoruz. Seri portdan bir data gelirse okunuyor ve dogrudan SerDataReady() fonksiyonu cağrılıyor.

Siz bu rutin içinde datanızı doğrudan kullanıyorsunuz.

Aşağıdaki ornekte gelen data geri yollanıyor. SerDataReady rutininde 16 derinlikli dairesel bir buffer (FIFO) kullandım. Siz bunu ister 1 byte yapın ister 1Kbyte.
Veriler gelirken siz bambaşka bir döngüde dahi kalsanız circular buffer kendi kendini ezmediği sürece orada oyalanabilirsiniz.

SerDataReady bir interrupt fonksiyonudur ve bu rutin içinde zaman alıcı işler yapmamalısınız.


#include "Zystem.h"

char i, RxBuf[16];


void SerDataReady(char RxData)
{
     RxBuf[i]=RxData;
     i++; i&=0x0F;       // Dairesel buffer                 
}


int main()
{
char j;
         
      ver();            // ZIOS versiyon kontrolu
         
      serinit(9600);    // 9600 baud, 8 data, 1 stop, no parity
         
      i=0; j=0;
         
      while(1)
        {
           while(i==j);          // Data gelinceye kadar bekle 
           sersend(RxBuf[j]);    // Gelen datayi geri yolla
           j++;  j&=0x0F;
        }
}
Başlık: Ynt: STM32F4 de kod yazamayanlar için ZIOS
Gönderen: z - 04 Ocak 2014, 20:14:11
MEMS çipi okuma komutu


#include "STM32F4xx.h"
#include "Zystem.h"
#include "string.h"
#include "stdio.h"

int main()
{
char s[17];         

   if(ver()<0x102)
    {
      display(0,0,"ZIOS-1.02 gerekli");   
      while(1); // ZIOS 1.02 yuklu değil             
    }       
         
   while(1)
     {   
       mems();               

       sprintf(s,"X:%3d",_X);
       display(0,0,&s[0]); 
               
       sprintf(s,"Y:%3d",_Y);
       display(0,1,&s[0]);       
     }
}


MEMS (http://www.youtube.com/watch?v=0mUNZFcrYgM#ws)

MEMS çipini okumayla ilgili bir problem olduğunu düşünüyorum ancak sorunu bulamadım.
Videodan da goreceğiniz gibi kart masaya paralel iken X ve Y degerleri yaklaşık 0 iken, kartta +/- 90 derecelik aci değişimi yapilirsa MEM cipinden okunan register değerleri  0..+/- 50 civarinda oluyor.

Bu degerlerin +/- 127 civarında olması gerekmez mi?
Başlık: Ynt: STM32F4 de kod yazamayanlar için ZIOS
Gönderen: Mucit23 - 04 Ocak 2014, 20:20:36
Yok hocam öyle olmuyor. Mesela Z eksenini okursanız ortalama 55-60 gibi bir değer alırsınız. Bu dünyadaki yerçekimi kuvvetinin sensöre etkisinden kaynaklanıyor. Bundan sonrası için sensöre dünyanın yer çekim kuvvetinden daha fazla bir kuvvet uygulamanız gerekir.
Başlık: Ynt: STM32F4 de kod yazamayanlar için ZIOS
Gönderen: z - 04 Ocak 2014, 20:22:56
Yani elde ettigim değerler yaklaşık dogrumu?
Başlık: Ynt: STM32F4 de kod yazamayanlar için ZIOS
Gönderen: Mucit23 - 04 Ocak 2014, 20:26:22
Bende aynı değerleri alıyorum.
STM32 & LIS302DL ile İvme Ölçer uygulaması (http://www.youtube.com/watch?v=S9n7DrwivMs#ws)
Hatta Sensörü yukarı aşağı salladığımda Z ekseninden okunan değerin 100'ün üzerine çıktığını görebilirsiniz.
Başlık: Ynt: STM32F4 de kod yazamayanlar için ZIOS
Gönderen: muhittin_kaplan - 04 Ocak 2014, 23:06:14
Degerler dogru hocam
Başlık: Ynt: STM32F4 de kod yazamayanlar için ZIOS
Gönderen: Burak B - 05 Ocak 2014, 00:52:38
Sensörün yere dönük yüzeyine 1g uygulanır. Bundan dolayı o eksende okunan değer sizi aldatmasın.
Başlık: Ynt: STM32F4 de kod yazamayanlar için ZIOS
Gönderen: z - 05 Ocak 2014, 17:30:11
ZIOS - SPI uygulaması

SPI ile çalışmak çok kolaylaştı.

PB13 SCK
PB14 MISO
PB15 MOSI

#include "STM32F4xx.h"
#include "Zystem.h"

int main()
{
char TxData, RxData;

   if(ver()<0x102)
    {
      display(0,0,"ZIOS-1.02 gerekli");   
      while(1); // En azından ZIOS 1.02 gerekiyor.             
    }       
       
   SPIinit(MSB, Pol_0, Frq_5);
   
   RxData=SPITxRx(TxData)
   
   while(1);
}


8Bit modu için yazdığım SPIinit komutu, 3 parametre istiyor.

1. parametre, ilk gönderilecek bitin MSB mi yoksa LSB mi olduğu,
2. parametre, clock polarity,
3. parametre, clock frekansı.

SPITxRx komutu ile gonderilmek istenen data yollanırken geri dönüşte Rx data alınmış oluyor.

     SPIinit(first, pol_x, freq_x)
     
     first Parametresi
     
     MSB : first MSB bit send
     LSB : first LSB bit send

    polarity_x parametresi
     
     Pol_0 Clk: idle 0, clk: low  to high
     Pol_1 Clk: idle 0, clk: high to low
     Pol_2 Clk: idle 1, clk: high to low
     Pol_3 Clk: idle 1, clk: low  to high
     
     frequecy_x parametresi
     
     frq_0 : 21.0 Mhz
     frq_1 : 10.5 Mhz
     frq_2 : 5.25 Mhz
     frq_3 : 2.62 Mhz
     frq_4 : 1.31 Mhz
     frq_5 :  656 Khz
     frq_6 :  328 Khz
     frq_7 :  164 Khz

Zystem.h da parametre tanımları aşağıdaki gibi.

#define MSB     0     
#define LSB     1   

#define Pol_0   0 
#define Pol_1   1 
#define Pol_2   2 
#define Pol_3   3 

#define Frq_0   0 
#define Frq_1   1 
#define Frq_2   2 
#define Frq_3   3 
#define Frq_4   4 
#define Frq_5   5 
#define Frq_6   6 
#define Frq_7   7


ZIOS,bebeklik döneminden bu yana sürekli olarak gelişiyor haliyle de flashda daha çok yer kaplıyor. En son haliyle ZIOS (ver1.02), flash romda sadece 5Kb makine kodu yer kaplıyor.
(Ver1.02 henüz yayınlanmadı.)

Çok yakında daha önce üyelerce CMSIS yada doğrudan register erişimi ile yazılmış ve forumda yayınlanmış bir programı  sadece ZIOS komutlarıyla yazıp yayınlayacağım.

Hangisi daha anlaşılır, hangisiyle sonuca odaklı daha hızlı kod yazılır, hangisi flash'da daha az yer kaplıyor , hangisi daha hızlı koşuyor hep birlikte mukayese etme şansımız olacak
Başlık: Ynt: STM32F4 de kod yazamayanlar için ZIOS
Gönderen: z - 06 Ocak 2014, 19:55:23
STM32F4 de kullanılan pinler + Boştaki I/O pinler

(http://www.cncdesigner.com/wordpress/wp-content/uploads/ZIOS.jpg)

Gri hatlar plananan ancak hangi pin olacağı henüz kesinleşmemiş sinyalleri göstermektedir.

Başlık: Ynt: STM32F4 de kod yazamayanlar için ZIOS
Gönderen: z - 08 Ocak 2014, 05:41:01
ZIOS - 4 Kanal PWM

Pwm1234Init(Frekans) şeklinde kullanılan init komutu, frekansı parametrede verilen değer olacak şekilde, PD15, PD14, PD13 ve PD12 I/O pinlerini Pwm tipi pinlere dönüştürür.

Pwm1234(Ch1,Ch2,Ch3,Ch4) olarak hazirlanmış komut ise ch1...ch4 yani (pd15...pd12) pinlerindeki pwm sinyallerinin duty degerini belirler.

Duty, frekansdan bagimsiz olarak 0....100 araligindadir.

Ornegin Duty=10 ise 10 birim zamanda cikis 1 iken 90 birim zamanda cikis 0 olacaktir.

Dilediginiz her frekansi olusturamazsiniz.

Verdiginiz frekans parametresi ile gercekte olusan pwm sinyalin frekansi farkli olabilir.

Gercek frekansi asagidaki bagintidan hesaplayabilirsiniz.

GF Gercek frekans, VF verilen frekans

GF= 42000000/ (Tam kisim (42000000/VF))

Ornegin 20Khz icin 42000000/ (Tam kisim (42000000/20000))= tamı tamına 20000 Hz olurken

33456 Hz icin gercekteki frekans 42000000/ (Tam kisim (42000000/33456))=33466 Hz olacaktir.

Duty, 1. kanal için 10, 2. kanal için 20, 3. kanal için 30, 4. kanal için 40 olacaksa komutumuz;

Pwm1234(10, 20, 30, 40); şeklinde yazılacaktır.

Aşağıdaki örnekte PD15, PD12, PD11 ve PD10 pinlerine bağlı kart üzerindeki 4 adet led yavaş yavaş parlamakta ve yavaş yavaş sönmektedir.

#include "STM32F4xx.h"
#include "Zystem.h"

volatile short T;

void BirMiliSaniye() // V1.03 den sonra Milisecond adını aldı
{
    if (T) T--;     
}

void Delay(short D)
{
    T=D; while(T);           
}

int main()
{
int i;
         
   if(ver()>=0x102)
    {
      Pwm1234Init(20000); // pwm frekansini 20Khz yap
      while(1)
        {       
          for(i=0;i<=100;i++){Delay(2); Pwm1234(i,i,i,i);}; // Yavasca yan
          for(i=100;i>=0;i--){Delay(2); Pwm1234(i,i,i,i);}; // Yavasca son
          for(i=0;i<100;i++) Delay(10); // 1 sn sonuk kal
        }
    }
}


ZIOS - 4 Channel PWM (http://www.youtube.com/watch?v=4LmLRXJhwA4#)
Başlık: Ynt: STM32F4 de kod yazamayanlar için ZIOS
Gönderen: erhanmete - 08 Ocak 2014, 10:22:30
yeni kütüphanenin linkini benmi göremiyorum yoksa yokmu ?
Başlık: Ynt: STM32F4 de kod yazamayanlar için ZIOS
Gönderen: z - 08 Ocak 2014, 11:07:55
Bir iki komut daha ekleyeyim sonra linki veririm mantığıyla hareket edince kütüphane biraz geriden geliyor.
Başlık: Ynt: STM32F4 de kod yazamayanlar için ZIOS
Gönderen: erhanmete - 08 Ocak 2014, 12:32:02
heyecanla takip ediyoruz hocam
merak o yüzden.
Başlık: Ynt: STM32F4 de kod yazamayanlar için ZIOS
Gönderen: alihan07 - 08 Ocak 2014, 13:40:55
pwm den sonra sıra servom motor kodunda heralde  :)
Başlık: Ynt: STM32F4 de kod yazamayanlar için ZIOS
Gönderen: z - 08 Ocak 2014, 14:33:20
Alıntı yapılan: gerbay - 08 Ocak 2014, 13:18:21
resmen "Bunu yazan Tosun, okuyana kosun"   yazıyor...

Hocam, ASM dosyayı gıdıklamana gerek yoktu.

ZIOS ile SD karta format atınca SD kart içinde Readme.txt adıyla bir dosya oluşturuluyor.
Bu dosyayı PC'de word, notepad vs ile açtığın zaman o meşhur yazıyı zaten görecektin.

Gavurlar "The quick brown fox jumps over the lazy dog" gibi textler kullanıyor. Ben de bizim milli textlerimizden birisini yazdım.
Amaç espri.

Yoksa haddime mi?

------------------------------------

ZIOS V1.02 yü siteye yükledim ancak, yeni dosyayı yüklememe rağmen indirilmek istendiğinde hala eski dosya geliyor.
Mecburen Discovery.rar dosya adını değiştireceğim. DiscoveryV1.02.rar yapacağım.

V 1.02 ile scatter dosyası da değişti. Bu çok ama çok önemli bir dosya. Sadece ZIOS.LIB ve Zystem.h dosyalarını kopya ile proje klasörüne atarsanız C programınız kesinlikle kaza yapar.
Muhakkak ZIOS.sct dosyasının linkere tanıtılması gerekiyor. Bu nedenle yeni proje dosyası oluşturmak yerine  DiscoveryV1.02.rar dosyasını açıp örnek projeden yola çıkmakta fayda var.
Rar dosyasındaki projede sözkonusu scatter dosyası zaten keile durumu bildirdiği için sorun yok. Bakınca zaten nasıl eklendiğini göreceksiniz. (option for target de linker başlığında)
Başlık: Ynt: STM32F4 de kod yazamayanlar için ZIOS
Gönderen: z - 08 Ocak 2014, 16:59:55
Evet haklısın hocam.

ZIOS'un en büyük eksikliklerinden birisi ortaya çıktı. V1.03 de bu eksikliği giderelim.

ZIOS V1.02 (http://www.cncdesigner.com/wordpress/wp-content/uploads/Discovery_V1.02.rar)

Proje klasörü ilk açıldığında ZIOS.sct için yol hatası uyarısı veriliyor ve bir daha bu uyarı çıkmıyor. V1.03 de bu ufak sorun olmayacak.

Aşağıdaki pin durumlarını gösteren blok şemayı mesajlarımda ara ara tekrarlayacağım.

(http://www.cncdesigner.com/wordpress/wp-content/uploads/ZIOS.jpg)

Eğer ileride 2. SPI portuna ihtiyaç duyarsak MEMS ile SD kartı aynı hatta bağlayarak SPI portun birisini boşa çıkartabiliriz.
Başlık: Ynt: STM32F4 de kod yazamayanlar için ZIOS
Gönderen: z - 09 Ocak 2014, 03:23:21
ZIOS ile SD karta format atmak, dosya oluşturmak

En baştan itibaren yaptığımız tüm örnekleri içeren menülü bir demo programı oluşturdum.

Bu seferki program tanıtımını oğlum yaptı. (Anlayın artık ZIOS basit işte.)

ZIOS (http://www.youtube.com/watch?v=AnEpH6E2fiQ#)

Komple proje klasoru

http://www.cncdesigner.com/wordpress/wp-content/uploads/ZIOS_Demo.rar (http://www.cncdesigner.com/wordpress/wp-content/uploads/ZIOS_Demo.rar)


#include "Zystem.h"
#include "string.h"
#include "stdio.h"

volatile short T;

char s[][17]={"BLINKING LED","PWM","MEMS","SOUNDS-DAC","ADC","RS232","SPI","Format SD CARD","Create File"};
char msg[17];

char RxBuffer[17];

char RxIndex=0,LastIndex=0;

void RxDataReady(char RxDat)
{
     RxBuffer[RxIndex]=RxDat;
     RxIndex=(RxIndex+1)&0x0F;           
}

void BirMiliSaniye() // V1.03 den sonra Milisecond adını aldı
{
    if (T) T--;     
}

void delay(short D)
{
    T=D; while(T);           
}


/* one click = next menu
   double click = change direction
   long push = select */

char menu(char n)
{
     display(0,0,s[n]);       // LCD message
     while(!getch());         // Read blue button
     if (Buton==3)     
        {
          display(0,1,"Demo begin");       
        }               
     return(Buton);     
}

// Blue, Red, Green and Orange LEDs blinking

void blinkdemo()
{
      pinmod('D',15,output); pinmod('D',14,output);
      pinmod('D',13,output); pinmod('D',12,output);
      Buton=0;
      while(!Buton)
        {
          pinset('D',15); pinset('D',14);         
          pinset('D',13); pinset('D',12);         
          delay(1000);       
          pinclr('D',15); pinclr('D',14);         
          pinclr('D',13); pinclr('D',12);         
          delay(1000);       
        }                 
}

// Blue, Red, Green and Orange LEDs soft blinking

void pwmdemo()
{
int i;         
      Buton=0;
      Pwm1234Init(20000); // fpwm=20Khz
      while(!Buton)
        {       
          for(i=0;i<=100;i++){delay(2); Pwm1234(i,0,0,0);}; // soft on
          for(i=0;i<=100;i++){delay(2); Pwm1234(100,i,0,0);}; // soft on
          for(i=0;i<=100;i++){delay(2); Pwm1234(100,100,i,0);}; // soft on
          for(i=0;i<=100;i++){delay(2); Pwm1234(100,100,100,i);}; // soft on
         
          for(i=100;i>=0;i--){delay(2); Pwm1234(i,100,100,100);}; // soft off
          for(i=100;i>=0;i--){delay(2); Pwm1234(0,i,100,100);}; // soft off
          for(i=100;i>=0;i--){delay(2); Pwm1234(0,0,i,100);}; // soft off
          for(i=100;i>=0;i--){delay(2); Pwm1234(0,0,0,i);}; // soft off
        }
}

// Lets learn angle of Discovery card

void memsdemo()
{
      Buton=0;
      while(!Buton)
        {
          mems();
          sprintf(msg,"X: %3d",_X); display(0,0,&msg[0]);     
          sprintf(msg,"Y: %3d",_Y); display(0,2,&msg[0]);     
        }                 
}

// To hear the sound you must connect the PC amplificator to PA4 pin.

void dacdemo()
{
short a,a0,a1,a2,T1;
volatile int T;
         
    Buton=0;     
    while(!Buton)
      {
        a0=720; a1=0; a2=32767;         
        for(T=0;T<80000;T++)
          {       
            for(T1=0;T1<100;T1++);
            a=((((a0*32734))>>14) - a1); a1=a0; a0=a;
            a2=(a2*32767)>>15;       
            a=(a*a2)>>15;       
            dac((a>>3)+2048); 
          }
      }             
}

// ADC input pin is PA1 (Voltage range: 0..3v)

void adcdemo()
{
float V;
         
    Buton=0;     
    while(!Buton)
      {
         delay(250);                   // Read ADC at the every 250 mili sec
         V=(float)Analog*3/4095;           
         sprintf(msg,"V = %1.3f volt",V);     
         display(0,0,&msg[0]);
      }             
}

// you must use RS232 level converter if you want to communicate with PC
// read received char and send back again (echo)
// this function not tested

// PB10 Tx pin
// PB11 Rx pin

void RS232demo()
{
     RxIndex=0; LastIndex=0;     
     serinit(9600); // 9600 baud, 8 data, 1 stop, no parity
     Buton=0;
     while(!Buton)         
       {   
         while(RxIndex!=LastIndex)
           {       
            sersend(RxBuffer[LastIndex]);
            LastIndex=(LastIndex+1)&0x0F;       
           }         
       }                 
}

void SPIdemo()
{
volatile char rx;
char i;         
         
         
     spiinit(MSB,Pol_0,Frq_7);// for details look inside Zystems.h
     Buton=0;
     while(!Buton)
       {
          for(i='A';i<='Z';i++)       
          rx=spiTxRx(i);      // send the value of i and read received data       
       }               
}

// format the 2 GByte SD card
// all data will be delete

void formatdemo()
{
     display(0,0, "WARNING SD CARD");         
     display(0,1, "will format");         
     delay(3000);
     display(0,0, "double click");
     display(0,1, "to format");         
     delay(3000);
     display(0,0, "1 clicks");
     display(0,1, "to exit");
     if (getch()==2)
       {
         cls();
         display(0,0,"Format beginning");                     
         if (!zormat(&File))
           {
             display(0,0,"Format completed");                     
           }                   
         else
           {
             display(0,0,"Format error");                     
           }                   
       }
     else display(0,0,"You have exited");
                     
     delay(2000);   
         
}

// This function create 64Kbyte fixed length file

void createdemo()
{
short i;
         
     zopen("TEST.TXT",&File,1); // open "TEST.TXT "if file exist "TEST.TXT"     
                                // if not exist create it.
     findex=0; sector=0;         

     for(i='0';i<='9';i++) write(i);
     write(0x0d);         
     write(0x0a);         
     for(i='A';i<='Z';i++) write(i);
     write(0x0d);         
     write(0x0a);         
     if(findex<512) err=zwrite(&File,sector);
     if(!err) display(0,0,"TEST.TXT ready");
     else display(0,0,"File error");
     delay(2000);         
}

int main()
{
signed char n=0, UpDown=0;

short i;
         
    i=ver();     
    sprintf(msg,"ZIOS ver %x.%2x",i>>8,i&0xFF);         
    display(0,0,&msg[0]);     
    delay(1500);
         
    while(1)     
     {
      cls(); // Clear screen       
      switch(menu(n))
        {
           case 2: { UpDown^=1; }
           case 1: { if (!UpDown) {n++; if (n>8) n=0;}
                     else {n--; if (n<0) n=8;}
                     break;
                   }
           case 3: {
                     switch(n)
                       {
                         case 0: { // Blinking Led demo
                                   blinkdemo();
                                   break;
                                 }                                   
                         case 1: { // PWM demo
                                   pwmdemo();
                                   break;
                                 }                                   
                         case 2: { // MEMS demo
                                   memsdemo();
                                   break;
                                 }                                   
                         case 3: { // DAC demo
                                   dacdemo();
                                   break;
                                 }                                   
                         case 4: { // ADC demo
                                   adcdemo();
                                   break;
                                 }                                   
                         case 5: { // RS232 demo
                                   RS232demo();
                                   break;
                                 }                                   
                         case 6: { // SPI demo
                                   SPIdemo();
                                   break;
                                 }                                   
                         case 7: { // SD Card demo1
                                   formatdemo();
                                   break;
                                 }                                   
                         case 8: { // SD Card demo2
                                   createdemo();
                                   break;
                                 }                                   
                       }
                     break;
                   }                     
        }       
     }               
}



Dosya okuma ve SD kart içindeki dosyalari listeleme  örneğini bir sonraki yazıda ele alacağım.
Başlık: Ynt: STM32F4 - Kolay programlama - ZIOS
Gönderen: z - 18 Ocak 2014, 15:48:53
ZIOS ile I2C uygulaması  (TCM8240MD kamera registerlerine erişim)  // ZIOS 1.03 de I2C komutlari yenilendi bu ornek yeniden yazilacak.

SCL  Pin PB6
SDA  Pin PB7

PD1 Kamera reset



#include "Zystem.h"

short T;

void MiliSecond()
{
    if(T) T--;     
}

int main()
{
char RxData;
         
//  TCM8240MD I2C example     
         
    pinmod('D',1,output);    // GPIOD01 is a output for the TCM8240MD Reset pin
    pinclr('D',1);           // TCM8240MD Reset line is low
    T=100; while(T);         // wait 100ms
    pinset('D',1);           // TCM8240MD Reset line is high
    T=10; while(T);          // wait 10ms
         
    I2Cinit(400000);         // I2C clock frequency is 400 Khz   
         
//  Lets read 0x04 location of TCM8240MD

    I2Cstart();              // Start Condition
    I2Ccmd(0x3D,0);          // TCM8240MD Adr=0x3D, (R/W bit=0, write means)
    I2Cwrite(0x04);          // TCM8240MD register address is 0x04
    I2Cstart();              // Start Condition
    I2Ccmd(0x3D,1);          // TCM8240MD Adr=0x3D, (R/W bit=0, read means)
    RxData=I2CreadNack();    // Read [0x04] register (No ACK)
    I2Cstop();               // Stop condition       
         
//  Lets write 0x0B in to 0x04 location of TCM8240MD
         
    I2Cstart();              // Start Condition
    I2Ccmd(0x3D,0);          // TCM8240MD Adr=0x3D, (R/W bit=0, write means)
    I2Cwrite(0x04);          // Register address is 0x04
    I2Cwrite(0x0B);          // Register data is 0x0B
    I2Cstop();               // Stop condition         
         
    while(1);
   
}


Bu uygulama en azından ZIOS v1.3 de calışmaktadır.

Henuz V1.3 yayinlanmadı.
Başlık: Ynt: STM32F4 - Kolay programlama - ZIOS
Gönderen: z - 22 Ocak 2014, 04:03:13
ZIOS ile (I2C) 24LC64 yazma-okuma


#include "Zystem.h"

char Rx;

char Write(short Adr,char Data)
{
char ok,n;
         
    ok=0; n=0;
    while(!ok && (n<5))           
      {       
        ok=I2Cstart(0x50,0);           // 24LC64 Adr=0x50, (R/W bit=0, write means)
        if(ok) ok=I2Cwrite(Adr>>8);    // High addres
        if(ok) ok=I2Cwrite(Adr);       // Low addres
        if(ok) ok=I2Cwrite(Data);      // write data to [Adr]
        I2Cstop();                     // Stop condition       
        if(!ok){I2Creinit(); n++;}       
      }
    return(ok); 
}

char Read(short Adr,char* var)
{
char ok,n;
         
    ok=0; n=0;
    while(!ok && (n<5))           
      {       
        ok=I2Cstart(0x50,0);           // 24LC64 Adr=0x50, (R/W bit=0, write means)
        if(ok) ok=I2Cwrite(Adr>>8);    // High addres
        if(ok) ok=I2Cwrite(Adr);       // Low addres
        if(ok) ok=I2Cstart(0x50,1);    // 24LC64 Adr=0x50, (R/W bit=0, read means)
        if(ok) ok=I2CreadNack(var);    // Read [Adr] address (No ACK)
        I2Cstop();                     // Stop condition   
        if(!ok){I2Creinit(); n++;}       
      }         
    return(ok); 
}

int main()
{
         
//  24LC64 I2C example (A2=A1=A0=0)   
         
    I2Cinit(400000,10000);        // I2C clock frequency is 400 Khz, try 10000 times   
         
    if(!Write(0x100,0x77))        // [0x100]=0x77     
      {
        // Write Error       
      }               
     
    if(!Read(0x100,&Rx))          // Rx=[0x100]     
      {
        // Read Error       
      }               
   
    while(1);
   
}


ZIOS V1.04 (http://www.cncdesigner.com/wordpress/wp-content/uploads/ZIOS-V104.rar)
Başlık: Ynt: STM32F4 - Kolay programlama - ZIOS
Gönderen: byclgn - 26 Ocak 2014, 12:14:35
Hocam, .lib dosyası sıkıştırılmış durumda acaba içeriğini ilerde yayınlamayi düşünüyormusunuz genellikle  mbed gibi os dosyalari açık kaynak oluyor ileri düzeyde yapılan uygulamalarda ayarların ve değişkenlerin değiştirilmesi için.
Yani açık kaynak olsa heralde daha da gelişebilir zos. Gercekten emeginize sağlık Teşekkürler hocam
Başlık: Ynt: STM32F4 - Kolay programlama - ZIOS
Gönderen: muhittin_kaplan - 26 Ocak 2014, 16:33:12
Zanmam,Zios Açık Zaçık Olmaz.
Başlık: Ynt: STM32F4 - Kolay programlama - ZIOS
Gönderen: z - 04 Şubat 2014, 19:35:40
Hocam bir haftayi askin zamandir bilgisayarsizdim. Cep telefonundan da yazmaya usendim.

Header dosya icinde C fonksiyonlari vs var.

Ornek programlari main.c, zios.h ve zios.lib olarak dusundugumden bahsettigin sorunlara neden olacak durumlari hic dusunmedim. ZIOS.h dosyasini kullanici istedigi gibi sekillendirebilir.

Sonucta ortada ciddi problemler gormuyorum.

Cikan her versiyonda ufak tefek sorunlar olacaktir bunlar bir sonraki versiyonda duzeltilir ve yeni sorunlar da beraberinde gelir. Tum dunyada bu boyle yuruyor.

-------------

SystemInit fonksiyonunu kullanicilarin elinden aldim cunku Bu kartla yeni tanisan birisinin uzunca bir sure farkli donanimlarin kurulumu ile isi olmayacak cunku
ihtiyac oldugu dusunulen tum donanimlar zaten ZIOS.LIB icinde yapilandirilmis durumda.

Eger ki benim kurulumlarim begenilmiyorsa,  systeminit gibi bir fonskiyon yazilabilir ve bu main fonksiyonu icinden cagrilabilir. Ortalikta SystemInit gorunmese de aslinda kimsenin elinden SystemInit alinmis durumda değil.

Başlık: Ynt: STM32F4 - Kolay programlama - ZIOS
Gönderen: z - 05 Şubat 2014, 07:36:57
Nasil yani?

Reset rutini icinde benim init ettigim donanimlari daha sonra main rutini icinde yeni bastan init edemeyecegini mi soyluyorsun?

Mesela soyle bir soru sorsam;

CPU yu 72Mhz de kosacak sekilde yapilandirsam, USARTi 9600 baudda calisacak sekilde kursam, B portunun tum pinlerini input yapsam,
tum interruptlari aktif etmis olsam ve vizir vizir interruptlar isleme alinmaya baslanmis olsa vs vs

Sonra da desem ki Gerbay haydi bana bu sekilde init edilmis islemciyi main fonksiyonun hemen girisinden cagiracagin bir fonksiyon sayesinde 36 Mhz de kostur,
Usarti 115200'e set et B portunun tum pinlerini de output yap desem yapamazmisin?

Eger STM32F4 discovery kitine harici ram takacagim buyuk projeler yapacagim derseniz zaten ZIOS rutinlerini kullanmaniza gerek kalmayacak kadar yol katetmissiniz demektir.

ZIOS, islemciyi 168Mhz de kosacak sekilde yapilandirir ve kullanicinin bu kiti benim ongordugum sekilde kullanacagini varsayar. Bunlar tamamen benim kabullerim.
Kabullerimi begenmeyen ZIOS'u kullanmaz yada main rutininin basina kendi kurulum fonksiyonlarini yazar. Bu basligin ilk mesajina tekrardan gozatarsaniz (https://www.picproje.org/index.php/topic,50595.0.html) PC donaniminda yapilan
bazi kabulleri ornek gostermistim. ZIOS da bazi kabuller uzerine kuruldu. Eger bu kabulleri kabullenmez ve donanimnda cok farkli kodlama yapmayi geretiren donanimsal degisikliklere
giderseniz, PC'niz artik eski deyimiyle IBM compatible unvanini yitirecektir.

Fakat Ver 1.04 de sirf senin hatirin icin GInit fonksiyonunu main fonksiyondan once cagiracak eklentiyi yapacagim.
Isteyenler Ginit icine kendi yapilandirma  fonksiyonlarini yazarlar.

Tekrar tekrar soyluyorum;

ZIOS STM32F4 de cok yol katetmisler icin değil, yeni bir seyler yapmak isteyenler icin.

ZIOS.H icindeki C fonksiyonlarini bahsettiginiz olumsuzluklari yok etmek adina ayri bir C dosyasi icine koyabilirsiniz.

Hatta ZIOS.H in icindekileri  main.C nin en tepesine yerlestirin ve H dosyasini silip atin.

ZIOS V1.04 (http://www.cncdesigner.com/wordpress/wp-content/uploads/ZIOS-V104.rar)

Bu versiyonda onemli bir degisiklik yok. 1.03 de versiyon bilgisi unutkanliktan dolayi 0x102 olarak gelirken bu versiyonda ver() komutunun 0x104 olarak donmesine ozellikle dikkat edildi. (Belki 1.05 de gene unutacagim ve bu kez de 0x104 donecek)

Gerbay'in agir elestirisi uzerine Ver 1.04'de, taa basindan beri kullanicinin elinden almis oldugum(?) SystemInit rutinlerinin, istege bagli olarak yeniden yazilmasina imkan veren Ginit adini verdigim initialize fonksiyonu eklentisi, V1.00 dan bu yana en radikal degisiklik oldu.

(Fakat hemen belirtmeliyim ki init edilmis bir donanimi yeni bastan init etmek, hic init edilmemis bir donanimi init etmekten cok  daha zordur, daha cok dikkatli olmayi gerektirir. Bu yola mumkun oldugunca girmemeye calisin, eger gerekiyorsa registerleri anlatan dokumanlarla cok daha fazla hasir nesir olmak zorunda kalacaksiniz. Bu eklentiyi sirf Gerbayi memnun etmek icin yaptim)

Kendi SystemInit fonksiyonunuzu yazmak isterseniz kodlarinizi Ginit icine yazabilirsiniz.

Bu durumda once ZIOS.LIB donaniminizi init eder daha sonra sizin Ginit kodlariniz ardindan C yapilandirma rutinleri cagrilir ve nihayetinde main fonksiyonunuz isleme alinir.

void Ginit()
{
// Isterseniz kendi init kodlarinizi buraya ekleyebilirsiniz
}

Eger Ginit kodlari kullanmayacaksaniz ici bos Ginit fonksiyonu olusturmaniza gerek yoktur.
Başlık: Ynt: STM32F4 - Kolay programlama - ZIOS
Gönderen: z - 05 Şubat 2014, 21:32:18
@Gerbay

V1.03 de Ginit fonksiyonumuz yoktu. V1.03 icin, main icinden init etmeyle ilgili  sorun yasayacagimiz bir bir ornek verebilirmisin?
Başlık: Ynt: STM32F4 - Kolay programlama - ZIOS
Gönderen: z - 09 Şubat 2014, 11:52:38
Hocam bir ust mesajimdaki sorumu cevapsiz biraktin.

-------------------

SD kart uygulamasi yapmak icin gerekli detaylar

(http://ecx.images-amazon.com/images/I/414Tw%2BTm8sL._SY300_.jpg)

(http://www.cncdesigner.com/wordpress/wp-content/uploads/SD-Socket.jpg)

(http://www.direnc.net/modules/catalog/products/pr_01_7277_max.jpg)

http://katalog.we-online.de/em/datasheet/693061010911.pdf (http://katalog.we-online.de/em/datasheet/693061010911.pdf)
Başlık: Ynt: STM32F4 - Kolay programlama - ZIOS
Gönderen: aliugur35 - 21 Şubat 2014, 15:17:27
#include "Zystem.h"

int main()
{
    while(1)   
      {
         // GPIOC 7 pini 1 ise mavi led yanar               
         if(pininp('C',7)==1) pinset('D',15); else pinclr('D',15);
      }             
}

arkadaşlar bu ornekte oldugu gibi karta 4 adet input girişi oluşturmak istiyorum.PC7 pini dışında hangi pinleri input için kullanabilirim.
Başlık: Ynt: STM32F4 - Kolay programlama - ZIOS
Gönderen: z - 21 Şubat 2014, 15:54:51
Blok şemada gösterilen pinler ve JTAG (PA13, PA14, PB3) pinleri hariç diğer pinleri kullanabilirsin.

(http://www.cncdesigner.com/wordpress/wp-content/uploads/ZIOS.jpg)

Aşağıdaki dokümandan da bu amaçla faydalanabilirsin.

http://www.st.com/st-web-ui/static/active/en/resource/technical/document/user_manual/DM00039084.pdf (http://www.st.com/st-web-ui/static/active/en/resource/technical/document/user_manual/DM00039084.pdf)


Başlık: Ynt: STM32F4 - Kolay programlama - ZIOS
Gönderen: MCansız - 21 Şubat 2014, 16:26:32
bu sisteme USB haberleşmesi eklemeyi düşünüyormusunuz acaba
Başlık: Ynt: STM32F4 - Kolay programlama - ZIOS
Gönderen: z - 21 Şubat 2014, 16:29:14
Şu sıralar bu konu ile uğraşamıyorum. Belki ileride evet.
Başlık: Ynt: STM32F4 - Kolay programlama - ZIOS
Gönderen: emre salman - 24 Şubat 2014, 08:45:46
elinize emeğinize sağlık hocam ben liseden yeni mezun olmuş bir öğrenciyim 6 yıldır piclerle uğraşıyordum parsic kullanmıştım ilk başlarda ve şimdidi ccs c de programlama yapıyorum bir iki haftadır arm işlemcisine geçmeyi düşünüyordum ama cesaret edemiyordum dediğiniz gibi configurasyon ayarlamaları filan gözümü korkutuyordu sizin bu zıos projenizi görünce karar verdim artık başlamaya ama benim şöyle bir korkum var bu işe ilk parsic ile başladığım için kendimi suçluyordum boş yere 1 yılım gitmiş hiç birşey öğrenmedim parsicle diye şimdi zıosla başlarsam daha sonra aynı şeyi düşünürmüyüm diye korkuyorum bildiğiniz gibi parsic son derece sınırlı uygulama üretebileceğimiz ve tek bir kod yazmaç öğrenemeyeceğimiz bir platform sizce benim zıosla başlamam mı daha iyi olur yoksa en baştan öğrenmem mi bu işi meslek olarak düşünüyorum gelip geçiçi veya bir kaç uygulamayla sınırlı olmayacak
Başlık: Ynt: STM32F4 - Kolay programlama - ZIOS
Gönderen: z - 24 Şubat 2014, 10:14:09
C bilmiyorsan ZIOS ile basla. Cok kisa bir sure sonra birseyler yapmaya basladiysan C yi de ogrenmeye basladin demektir. Aksi takdirde C'yi mi ogreneceksin yoksa STM'yi mi bocalarsin.

ZIOS tam senin icin. Daha sonra ZIOSu kolayca terkedebilirsin.
Başlık: Ynt: STM32F4 - Kolay programlama - ZIOS
Gönderen: emre salman - 24 Şubat 2014, 19:16:45
Anladım hocam sozunu dinleyip kiti getirtiyorum ama yanlış kiti getirtmekten korkuyorum bana link gonderebilir misiniz
Başlık: Ynt: STM32F4 - Kolay programlama - ZIOS
Gönderen: Melih1802 - 24 Şubat 2014, 21:00:36
Selam.

Yazıyı okuyunca bende heveslendim ve hemen buradan sipariş ettim. Umarım doğrusunu sipariş etmişimdir.
http://www.digikey.com/product-search/en?x=0&y=0&lang=en&site=us&KeyWords=497-11455-ND (http://www.digikey.com/product-search/en?x=0&y=0&lang=en&site=us&KeyWords=497-11455-ND)

mesaj birleştirme:: 24 Şubat 2014, 21:23:17

Konuyu dağıtmadan bir sorum olacak.  C dilini bilmiyorum"Z" hocam sayesinde kiti sipariş vererek işe başladım fakat bu işlerde çok geri kaldığımdan ZİOS bile öğrenmek bayaa gözümde büyüyor.

Fakat PLC biliyorum ve LADDER bana daha basit gelmekte bir arayüz ile bu kiti LADDER aracılığı ile programlayabilirmiyiz böyle bir yazılım varmıdır veya yapılabilirmi.

LDmicro gibi. http://cq.cx/ladder.pl (http://cq.cx/ladder.pl)

"Z" hocam emeğine sağlık inşallah hakkını verir bu işi öğrenirim.
Başlık: Ynt: STM32F4 - Kolay programlama - ZIOS
Gönderen: z - 24 Şubat 2014, 21:28:25
Cizgitagem de satiyordu. Bizler bayagi bir indirimle aldik. Simdilerde gercek degeriyle satiliyordur. Gene de Turkiye fiyatlarini arastirin derim.
Başlık: Ynt: STM32F4 - Kolay programlama - ZIOS
Gönderen: Melih1802 - 25 Şubat 2014, 11:59:23
ZİOS ile sadece bu STM32F4 kitinimi programlayabiliriz yoksa daha sade ve daha ucuz kitleride programlayabilirmiyiz.

Başlık: Ynt: STM32F4 - Kolay programlama - ZIOS
Gönderen: z - 25 Şubat 2014, 12:41:30
Malesef sadece ve sadece STM32F407 çipi  için geçerli.
Başlık: Ynt: STM32F4 - Kolay programlama - ZIOS
Gönderen: Faraday - 27 Şubat 2014, 13:05:52
Zios ile Coocox'un CoSmart'ı arasındaki fark nedir ?
Başlık: Ynt: STM32F4 - Kolay programlama - ZIOS
Gönderen: muhittin_kaplan - 27 Şubat 2014, 15:32:13
CoCmart Keske ST içinde Çalışsa
Başlık: Ynt: STM32F4 - Kolay programlama - ZIOS
Gönderen: aliugur35 - 01 Mart 2014, 20:25:32
Alıntı yapılan: aliugur35 - 21 Şubat 2014, 15:17:27
#include "Zystem.h"

int main()
{
    while(1)   
      {
         // GPIOC 7 pini 1 ise mavi led yanar               
         if(pininp('C',7)==1) pinset('D',15); else pinclr('D',15);
      }             
}

arkadaşlar bu ornekte oldugu gibi karta 4 adet input girişi oluşturmak istiyorum.PC7 pini dışında hangi pinleri input için kullanabilirim.

ilginizden dolayi teşekkür ederim ben kodları oluşturdum fakat karta yüklemeden(malum kart çok hassas) sizede danışmak istedim aceba doğru olmuş mu?

#include "Zystem.h"

int main()
{
    while(1)   
      {
         // GPIOC 7 pini 1 ise mavi led yanar               
         if(pininp('C',7)==1 && pininp('C',6)==1 && pininp('C',8)==1 && pininp('C',9)==1) pinset('D',15); else pinclr('D',15);
      }             
}
Başlık: Ynt: STM32F4 - Kolay programlama - ZIOS
Gönderen: Faraday - 07 Mart 2014, 10:50:50
Alıntı yapılan: muhittin_kaplan - 27 Şubat 2014, 15:32:13
CoCmart Keske ST içinde Çalışsa
Birileri duymuş olmalı, CUBE diye birşey yapmışlar henüz tanışmadım, bilgisi olan tecrübeli birileri bir topik açsa çok güzel olur, hatta uygulamasıda olsa tadından yenmez kanımca. 8)

http://www.st.com/web/en/catalog/tools/FM147/CL1794/SC961/SS1533/PF259242?icmp=pf259242_prom_stm32cube-long-promo_feb2014 (http://www.st.com/web/en/catalog/tools/FM147/CL1794/SC961/SS1533/PF259242?icmp=pf259242_prom_stm32cube-long-promo_feb2014)
Başlık: Ynt: STM32F4 - Kolay programlama - ZIOS
Gönderen: muhendisbey - 07 Mart 2014, 11:08:35
texas'ın pinmux'ı ile aynı tip bir program. Tabi daha detaylı.
Başlık: Ynt: STM32F4 - Kolay programlama - ZIOS
Gönderen: z - 07 Mart 2014, 13:55:23
@aliugur35

Input amaçlı kullanmayı düşündüğün pinleri pinmod fonksiyonu ile input moduna almalısın.

#include "Zystem.h"

int main()
{
    pinmod('C',7,input);  pinmod('C',6,input);  //       C7 ve C6 pinlerini input moduna alalım.
    pinmod('C',8,input);  pinmod('C',9,input);  //       C8 ve C9 pinlerini input moduna alalım.

    while(1)   
      {
          if((pininp('C',7)==1) && (pininp('C',6)==1) && (pininp('C',8)==1) && (pininp('C',9)==1)) pinset('D',15); else pinclr('D',15);
      }             
}

Başlık: Ynt: STM32F4 - Kolay programlama - ZIOS
Gönderen: ArifAhmet - 30 Haziran 2014, 17:32:47
Merhaba Hocam,
SD kart kullanmak istiyorum. Tüm pinleri sizin yazdığınız gibi bağladım. Fakat sürekli kitin üzerindeki yeşil ışık yanıp sönüyor, yani bağlanmıyor. Sorun nedir acaba?
Başlık: Ynt: STM32F4 - Kolay programlama - ZIOS
Gönderen: z - 30 Haziran 2014, 18:00:23
Çalıştığından emin olduğun herhangi bir programı JTAG ile atmayı dene ve ardından çalıştır.

Atamıyorsan Debug ve Utilities menülerindeki tanımları gözden geçirmen gerek.
Başlık: Ynt: STM32F4 - Kolay programlama - ZIOS
Gönderen: ArifAhmet - 30 Haziran 2014, 19:09:38
Alıntı yapılan: z - 30 Haziran 2014, 18:00:23
Çalıştığından emin olduğun herhangi bir programı JTAG ile atmayı dene ve ardından çalıştır.

Atamıyorsan Debug ve Utilities menülerindeki tanımları gözden geçirmen gerek.
Yanlış anladınız hocam. Programı kite yüklüyorum. Siz programda eğer SD kartla ilgili bir hata olursa yeşil ledi yakmışsınız. Yani kitin üzerinde yeşil led sürekli yanıp sönüyor, sd karta bağlanmıyor.
Başlık: Ynt: STM32F4 - Kolay programlama - ZIOS
Gönderen: BLİZZARD - 27 Aralık 2015, 20:40:00
Z hocam nasılsınız .. Sizden bi isteğim olacak  zios versiyonu keil 5 1.0.8 versiyonuna uyarlanabilir mıyız ?? Nasıl yapabilirim veya
Başlık: Ynt: STM32F4 - Kolay programlama - ZIOS
Gönderen: z - 27 Aralık 2015, 20:48:13
Eski versiyonla derlendi diye yeni versiyonlar bu kütüphaneyi kullanmıyor mu?

Aradan çok zaman geçti ve artık terketmiştim. Kaynak kodları duruyorsa derleyeyim tekrar.