Kartla iletişim kurmak zor değil. Bunu kart üzerindeki usb girişinden de yapmak mümkün, usb-uart dönüştürücü ile de yapmak mümkün. Ama şu aşamada bunun anlamı yok.
Elindekilerle karta ancak program yükleyebilirsin. Kartı yeni doğmuş bebek gibi düşün. Bootloader yüklemek bebeğe dil öğretmeye benziyor. Bootloaderi olan kart artık iletişim kanallarından karta öğretmek istediklerini öğrenebilir. Ama sadece konuşmayı bilen çocuk gibi olur. Ne elini ne ayağını kullanmayı bilir.
Sadece bootloader yüklü karta "elini kaldır" dersen bunu anlamaz. İletişimle bir şey yaptırmak için önce karta "elini kaldırmanın" ne demek olduğunu tanımlamalasın ve bu komut geldiğinde elini nasıl kaldıracağının, kaldırdıktan sonra indirip indirmeyeceğinin vs. bilgisini de programlamalısın.
anlıyorum ben dün işi bilmediğimden ve biraz heyecan dan olsa gerek bir adım fazla gittim sanırım cihazlarlar iletişim konusunda daha yeni başlıyorum ama soru sormaya korkar oldum
Soru sormayı bıraktığın anda öğrenmeyi de bırakmışsın demektir, o yüzden bunu yapma. Öğrenme zamanla lineer artan birşey değil. Ben yeni bir konuyu öğrenirken bazan haftalarca yerinde sayıyorum, moralim bozuluyor, ümitsizliğe kapıldığım da oluyor, ama sonraki gün birden bir aydınlanma yaşıyorum ve büyük bir basamak atlıyorum. Belki de o basamağı atlaman o sormaya çekindiğin soruya bağlı, o yüzden sana ne kadar saçma da görünse sorunu sor.
USB de vendor id, "USB consortium" denen bir kurum tarafından firmalara atanır. Mesela Apple'ın, Logitech'in vs birer vendor id si vardır. Listeyi USB.org veya başka yerlerden görebilirsin.
product id ise, vendor id ye sahip olan firmalar tarafından kendi ürünlerine atanır. Mesela benim şirket Acme Corp, 17AF vendor id sini satın aldı. Sonra da "Flykey" USB klavyesini yapmaya karar verdim ve product id olarak da 4858 düşündüm. O zaman benim klavyeyi senin linux makinaya bağlayım lsusb yaparsan 17AF:4858 Acme Corp Flykey Keyboard göreceksin.
Blink led ile başlaman gereken yerde usb iletişimi yapmaya çalışarak başlıyorsun ve bu tam olarak işin ortasından başlamak oluyor. Blink led belki basit gelebilir ben okula başladığımda da Blink ile başladık ben okulda ilk blinki yaparken öncesinde yaptığım yüzlerce projenin güveniyle yapıyordum 5 6 ders sonra Blink bir hesap makinesine kadar evrildi.
bir buton girişi butona basıldığı sayı x 2 kadar led Blink yapacak hale geldik devam ettik 7 segment display ekledik böyle böyle ilerledi dersimiz.
En temel bana kolay gelir diyip ilerisini kaçırma
c++zaten pythonun "}{" hali neden mikropyhton kullanıyoruz direk python ile yapmak istiyorum yavaş ama olmazmı yani yazdıgım bişeyi led aç led kapa gibi yada basit bir yz bunu pythonla yapıp kartın anlıcagı şekilde ardunio yada C ve değişik bitlerdeki verilere bölmek zorundamıyım
micropython, python3 ün bir alt kümesi. Yani farklı bir python değil. Tüm kütüphaneler yok, tüm özellikler yok. Ama var olan özellikler de standart python3 ün aynısı. Ben böyle anlıyorum.
Kafan karışık ise, kafanın karışmadığı son noktaya geri dönmen lazım ve oradan tekrar ilerlemen lazım. Şu anda micropython ile bir blink kodu yazabilir misin? yazamazsan önce onu hallet.
Tek LED blink edebiliyorsan, 8 LED de kontrol edebilirsin. 7 segment display de zaten budur, 7 tane rakam segmenti 1 tane nokta. Birden fazla segmenti kontrol etmek için de eğer 16 pin varsa doğrudan kontrol edersin. Yoksa da taramalı yapman lazım. Bu noktada da python ile sıkıntı yaşarsın, muhtelemen yeterince hızlı tarayamazsın. Veya program farklı işler yaparken dijitlerde parlaklık değişimleri olur.
Aslında python'u zaten biliyorsun, sen neden doğrudan Arduino ve C++ ile başlamıyorsun?
zahmet olmazsa rica etsem bu kartlar hakkında 0 dan 100 e yazısı yazarmısın basit şekilde
benimm elimde
stm32f103c8t6
stm32f103c6t6a
stm32F401/411 bulunacak
stlınk de var
kusura bakmayın ama kod iyi güzelde işin içinde bilinmeyen bir x var benim için kafam okadar karıştı ki soru soramıyorum
denemelerimi bunlar üzeinde yapıccagım ama kafamda hala oturtamadım
@nt öğlen dediğim gibi yol haritası oluşturayım senin için;
Önceliğin aslında programlamaya olan yatkınlığın sebebiyle basitte olsa kendine bir debug portu oluşturman.
Bunun için kullancağın IDE'yi bilmeliyiz. Arduino IDE'mi kullanacaksın, Keil'mi, STM Cube IDE'mi?
Buna karar verdikten sonra debug şekline bakarız.
Neden debug portu işe başlamalıyız?
Bir değişken değerini izlemek, Dijital ve Analog pin durumunu görmek, Fiziksel input yapamayacağız, karakter veya sayısal giriş yapmamız gerektiği zaman kullanmak için debug portuna ihtiyacımız var. Öncelikle bunu halletmen mcu içindeki program seyrini izlemene çok yardımcı olur.
Debug portunu hallettikten sonra "Led Blink" ile başlamanı tavsiye ederim blink yaptıktan sonra bekleme süresi program içinde döngüsel olarak değişen örn: 5 değer artarak giden ve tepe değeri 500 ms olan 500ms beklemeyi yaptıktan sonra 10ms süreye kadar değişken olarak blink sürelerini işleyen bir şekle evirebilirisin.
Daha blink işlemini çok detaylandırırım fakat uğraşıp-uğraşıp 1 tane ledin yanıp söndüğünü izlemek heves etmemeni sağlayabilir.
1 Buton, 1 Direnç, 2 Jumper kablo ile yapabileceğin bir uygulama,:
Butona bastığında led yanıyor bıraktığında sönüyor.
Bu uygulamayı 1 adım daha ilerletip, butona 1 kez bastığında led yanacak 2. kez bastığında led sönecek.
Biraz daha ileri gidelim butona 1 kez bastıktan sonra led 1 saniye bekleyip yanacak tekrar bastığında beklemeden sönecek.
Çok daha ileri gidelim butona 1 kez bastığında led blink yapmaya başlayacak eğer uzun süre basılı tutarsan led kapanacak (long press), eğer hızlı şekilde 2 kez basarsan led sönecek led söndükten sonra tek bir basış ile bu döngünün başına geçecek.
Buton ile bu uygulamaları yaparsan dijital giriş ile ilgili ilerleme kat etmiş olursun.
Yine elektronik bilgisine dayalı gidelim bu sefer dijital çıkış;
Bu sefer ihtiyacımız olanlar 470R(ohm) direnç ve 1 adet 5mm Led.
Artık harici bir ledimiz daha var yani kullanabileceğimiz 2 adet ledimiz oldu birisi kartın üstündeki dahili led diğeride kendi bağladığımız fiziksel led.
Önce harici olarak bağladığımız led'e blink yaptıralım nereye bağladığımız önemli artık dijital olarak çıkış yapabilen bir pin'e bağlamış olmalıyız konunun devamında nasıl pin seçilir neye göre seçmeliyiz bunlara değineceğim.
Bağladığımız lede blink yaptırarak başlayalım yine bunu daha önce yaptığımız için kolay olacaktır sadece bağlı pini doğru olarak atamalıyız yazdığımız programa.
Bu zamana kadar öğrendiğimiz buton ve kullanabildiğimiz 2 led ile uygulama gerçekleştirelim.
Butona 1 kez bastığımızda blink yapmaya başlasın ama nasıl?
2 ledimizden 1 tanesi yanık konumdayken diğeri sönük olacak şekilde.
Yani birbirini izleyecekler biri yanarken diğeri sönük olacak ve sürekli yer değiştirecekler.
Bunuda döngü halinde yavaş konum değiştirirken belli oranda hızlanarak güzel bir görüntüde ortaya çıkarabiliriz.
Led ve buton ile yazabildiğim başlangıç için aklıma yatan projeler bunlar.
Mcu hakkında değineceğim detaylara bakalım elimizdeki kart dahilinde;
Bir cpu seçim sihirbazı aslında bu inceleyeyelim;
32F103'ün farklı modellerini kıyaslıyor.
Biz elimizdekinden yola çıkalım.
103Cx ibaresi yani C8 'mi C6 mı soldaki taraf C6 sağdaki C8 bunu tecrübeyle yazıyorum kendisi belirtmemiş.
Flash yani programı saklayacağımız hafıza;
C6-> 32 Kb.
C8-> 64 Kb. C8 daha fazla program hafızasına sahip.
SRam önce SRam'den bahsedeyim bizim programımızın çalışmasında ortaya çıkan verileri ENERJİSİ KESİLMEDİĞİ SÜRECE DEPOLAR. Elektrik kesildiği an SRam içinde yazdığı herşeyi unutur gider sadece enerjiliyken veri dapolar.
C6->10 Kb.
C8->20 Kb.
Gelelim bence bizim çok haşır neşir olacağımız Timer'lara;
Timer aslında adından anlayacağımız gibi zamanlayıcı verdiğimiz süre boyunca veya adet boyunca sayar biz bu saymayı programımızda veya donanım kontrolümüzde kullanırız.
Timer'ın bir avantajı sayarken ana programı işgal etmez! o bizim kurduğumuz ve say dediğimiz alanda kendi kendine sayar biz lazım olduğunda kullanırız ve programımıza kesintisiz devam ederiz.
C6-> 2 Adet Genel sayaç barındırıyor 1 Adet Gelişmiş Timer barındırıyor.
C8-> 3 Adet Genel sayaç barındırıyor 1 Adet Gelişmiş Timer barındırıyor.
Haberleşme çok geniş bir dünya bu gün ona değinmeyeceğim. Kafa karışıklığı yaratacaktır.
GP-IO;
Buradan sonrası 2 model içinde aynı devam ediyor.
2 modelde 32 adet GPIO barındırıyor.
GP-IO nedir?
Önce açılımını yapayım "General Purpose Input/Output" Yani genel amaçlı giriş çıkış.
GPIO etiketi taşıyan pinler Giriş veya Çıkış olarak çalışabilir yani Bir ledi yakabilir veya buton girişi yapabilirsin GPIO etiketi taşıyan pinden. Bu pinlerin farklı özellikleri'de bulunabiliyor aynı pin hem haberleşme hattı olarak çalışıp hem I/O olarak çalışıp hemde bir uyandırma dürtüsü özelliğine sahip olabiliyor.
ADC kısmına değinmeyeceğim çünkü temel elektronikden biraz fazlası gerekiyor analog işlerle uğraşmak için bir sonraki yazıda buna değinirim.
26382 eklentisine bakbasit bir pyton kodu ile bır buton koydum stm32 yı usb core ile cekıyorum
bana kartın içi lazım değil o bir sonraki aşama ben kendi yaptıgım prg ıle kartı konusturmak ıstıyorum
Python:
import usb.core
from kivy.app import App
from kivy.uix.boxlayout import BoxLayout
from kivy.uix.label import Label
from kivy.uix.button import Button
VENDOR_ID = 0x1eaf
PRODUCT_ID = 0x0004
class Buton(App):
def build(self):
layout = BoxLayout(orientation='vertical')
self.report_label = Label(text='Report Sonuc: ')
layout.add_widget(self.get_report_label)
self.report_button = Button(text='Report')
self.report_button.bind(on_press=self.report)
layout.add_widget(self.report_button)
return layout
def get_report(self, instance):
device = usb.core.find(idVendor=VENDOR_ID, idProduct=PRODUCT_ID)
if device is not None:
try:
data = device.ctrl_transfer(0x80, 1, 0, 0, 8)
formatted_data = ' '.join([str(byte) for byte in data])
self.get_report_label.text = 'Sonuc: {}'.format(formatted_data)
except Exception as e:
self.get_report_label.text = 'Hata: {}'.format(str(e))
else:
self.get_report_label.text = 'cihazı bulunamadı!'
if __name__ == '__main__':
Buton().run()
KARTIN İÇİNDE ÇALIŞAN BİR USB İLETİŞİMİ SAĞLAYAN PROGRAM YOKSA O KART SANA HİÇBİR CEVAP VEREMEZ NE KONUŞACAĞINI NE SÖYLEYECEĞİNİ BİLMİYOR @Mikro Step 'in Dediği gibi sen ST-LINK ile iletişim kuruyorsun bundan 32F103'ün haberi bile yok olsa da içinde bir program olmadığı için hiç bir şeye yaramayacak.
@nt iki adet program yazman lazım 1.si Piton ile oluşturacağın arayüz 2. Side mikrodenetleyici için PC ye nasıl işletim sistemi kurmadan kullanamıyorsak mikrodenetliyiciye de uygun bir program yazmadan kulanamayiz
Çok ortadan başlıyorsun yine daha haberleşme hakkında fikrin dahi yok, bunu çalıştırmak için usb/uart dönüştürücüye ihtiyacın var usbdeb veri çıkmıyor bu programda çıksa da bence bunun bir öğreticiliği yok.
Bluepill i PC ana kart gibi dusun. Bunun ramini, diskini, guc kaynagini vs vs herseyini ekledin. Ama HDD bos.
Simdi bu sartlarda PC ana kartin seri portuna yada usb portuna disaridan data yolluyorsun ve PC nin cevap vermesini bekliyorsun.
Olmaz boyle bir sey. Once HDD icine isletim sistemi yada hic olmazsa bir program atmaliyiz.
Bluepill deki durum da tipa tip ayni. Icindeki Flashi HDD gibi dusun icine bir kod atman gerekiyor. Bu kodu STLink ile atacagiz.
Peki neye ihtiyacimiz var. Senin istedigin isleri yapacak programin HEX dosyasina. Bunu bir kere atacagiz ve artik HEX dosya ile isin bitecek.
Cipe atilacak program da oyle bir iki registere veri yuklenip hallolacak bir sey degil. Hele hele USB hic oyle bir sey degil.
USB organizasyonu binlerce sayfalik talimatlar yayinlamis. O talimatlarin bir kismini yerine getiren bir program yazilacak.
Bir başka yolda var phytonda yapılan configlerden sonra config dosyalarını c ye çevirip daha sonra o dosyayı derleyip işlemciye boot etmeniz lazım ama bu çok ileri bir konu ve bunun içinde işlemci tarafında belli bir kod olması lazım. Yani pyhtondan işlemciyi kontrol etmek çok ileri bir konu onun yerine ikisi arasında haberleşme kurmanız lazım.
O senin yazdığın hello world, desktop sistemleri için. Gömülü sistemlerde her durumda çalışan bir printf yoktur. Çalıştırmak için takla gerekir. Gömülü sistemlerin hello world'ü LED blink yapar. Sen şimdi sıfırdan başla, bluepill kartını Arduino ide ile çalıştır, blink programını da yükle ve blink'i gör. Hatta video isteriz Ama ayrı bir konuda yap bunu. Acemi birisi olarak senin yaşayacağın sorunları başkaları da yaşayacak, onlara yardımcı olur açacağın konu.