Haberler
Haberler
MCU'nun en güçlü popüler bilim özeti [önerilen koleksiyon] (2)
2022-03-17 230

6

Mikrokontrolcü programlama


 

Mikrodenetleyici (MCU) program yazımı ile bilgisayar (PC) program yazımı arasında büyük bir fark vardır. C tabanlı MCU geliştirme araçları giderek daha popüler hale gelse de, verimli program kodu isteyen ve assembly dilini kullanmayı seven tasarımcılar için assembly dili hala en özlü ve etkili programlama dilidir.


Mikrodenetleyici programlama için temel çerçeve kabaca aynıdır ve genellikle üç bölüme ayrılır: başlatma bölümü (bu, mikrodenetleyici programlama ile PC programlama arasındaki en büyük farktır), ana program döngüsü gövdesi ve kesme işleyici. Bunlar aşağıdaki gibi açıklanmaktadır:
  1. Başlatma:Tüm mikrodenetleyici programlarının tasarımı için başlatma, en temel ve önemli adımdır ve genellikle aşağıdakileri içerir:
  Tüm kesintileri maskeleyin ve yığın işaretçisini başlatın:Başlatma aşaması genellikle herhangi bir kesintinin meydana gelmesini istemez.  
  Sistemdeki RAM alanını temizleyin ve Belleği görüntüleyin:Her ne kadar bazen tamamen gerekli olmasa da, güvenilirlik ve tutarlılık açısından, özellikle beklenmedik hataları önlemek için iyi programlama alışkanlıkları geliştirilmesi önerilir.  
  G/Ç portunun başlatılması:Projenin uygulama gereksinimlerine göre, ilgili IO portunun giriş ve çıkış modunu ayarlayın. Giriş portu için, pull-up veya pull-down direncini ayarlamanız gerekir; çıkış portu için ise gereksiz hataları önlemek amacıyla başlangıç ​​seviyesi çıkışını ayarlamanız gerekir.  
  Kesme ayarları:Projede kullanılması gereken tüm kesme kaynakları etkinleştirilmeli ve kesme için tetikleme koşulları ayarlanmalıdır; kullanılmayan gereksiz kesmeler ise devre dışı bırakılmalıdır.  
  Diğer fonksiyonel modüllerin başlatılması:Mikrodenetleyicinin (MCU) kullanılacak tüm çevresel fonksiyon modülleri için, proje uygulamasının gereksinimlerine göre ilgili ayarlar yapılmalıdır. Örneğin, UART iletişimi için Baud Hızı, veri uzunluğu, doğrulama yöntemi ve Durdurma Biti uzunluğu ayarlanmalıdır. Programlayıcı Zamanlayıcı için ise saat kaynağı, frekans bölme sayısı ve Yeniden Yükleme Verisi ayarlanmalıdır.  
  Parametrelerin başlatılması:MCU donanımının ve kaynaklarının başlatılmasının tamamlanmasının ardından, bir sonraki adım programda kullanılan bazı değişkenlerin ve verilerin başlatılmasıdır. Bu bölümün başlatılması, belirli projeye ve programın genel düzenine göre tasarlanmalıdır. Proje önceden hazırlanmış verilerini kaydetmek için EEPROM kullanan bazı uygulamalar için, programın verilere erişim hızını artırmak ve sistemin güç tüketimini azaltmak için başlatma sırasında ilgili verilerin MCU'nun RAM'ine kopyalanması önerilir (prensip olarak, harici EEPROM'a erişim güç kaynağının güç tüketimini artıracaktır).  
  2. Ana program döngüsü gövdesi:Çoğu mikrodenetleyici uzun süre sürekli çalıştığı için, ana program gövdeleri temelde bir döngü şeklinde tasarlanmıştır. Birden fazla çalışma moduna sahip uygulamalar için, durum bayrakları aracılığıyla dönüştürülen birden fazla döngü gövdesi olabilir. Ana program gövdesi için genellikle aşağıdaki modüller düzenlenir:
  Hesaplama prosedürü:Hesaplama programları genellikle zaman alıcıdır, bu nedenle özellikle çarpma ve bölme işlemleri olmak üzere, bu tür işlemlerin herhangi bir kesinti sırasında işlenmesine kesinlikle karşıyız.  
Gerçek zamanlı gereksinimleri düşük veya hiç olmayan programların işlenmesi;
 
  Aktarım işlemini göster:Esas olarak harici LED ve LCD sürücülerine sahip uygulamalar için tasarlanmıştır.  
  3. Kesme işleyici:Kesme programları, esas olarak dışarıdan gelen ani sinyallerin tespiti, düğme algılama ve işleme, zamanlama sayımı, LED ekran taraması vb. gibi yüksek gerçek zamanlı gereksinimlere sahip görevleri ve olayları ele almak için kullanılır.  
Normal şartlar altında, kesme programı kodunu olabildiğince özlü ve kısa tutmalıdır. Gerçek zamanlı olarak işlenmesi gerekmeyen fonksiyonlar için, kesmede tetikleme bayrağı ayarlanabilir ve ardından ana program belirli işlemleri gerçekleştirir. Bu, özellikle tüm kesmelere zamanında yanıt vermesi gereken düşük güç tüketimli, düşük hızlı mikrodenetleyiciler için çok önemlidir.  
  4. Farklı görev birimlerinin düzenlenmesi için, farklı mikrodenetleyiciler farklı işlem yöntemlerine sahiptir:  
 Örneğin, düşük hızlı, düşük güç tüketimli MCU (Fosc=32768Hz) uygulamaları için, bu tür projelerin el tipi cihazlar olduğu ve sıradan LCD ekranlar kullandığı göz önüne alındığında, tuş basmalarına ve ekran tepkisine verilen yanıtın yüksek gerçek zamanlı performans gerektirdiği için, tuş basmalarını işlemek ve veri görüntülemek için genellikle zamanlı kesintiler kullanılır; Fosc>1MHz uygulamaları gibi yüksek hızlı MCU'lar için ise, MCU'nun bu sırada ana program döngüsü gövdesini yürütmek için yeterli zamanı olduğundan, yalnızca ilgili kesintilerde çeşitli tetikleme bayraklarını ayarlayabilir ve tüm görevleri ana program gövdesinde yürütülmek üzere yerleştirebilir.  
  5. Mikrodenetleyici programlamasında özellikle dikkat edilmesi gereken bir nokta şudur:

Aynı değişkenin veya verinin aynı anda kesme ve ana program gövdelerinde erişilmesini veya ayarlanmasını önlemek gereklidir. Etkili bir önleme yöntemi, bu tür verilerin işlenmesini bir modülde düzenlemek ve tetikleme bayrağına bakarak veriler üzerinde ilgili işlemlerin yapılıp yapılmayacağına karar vermektir; diğer program gövdelerinde (özellikle kesmelerde), yalnızca verilerin işlenmesi gereken yerlerde tetikleme bayrakları ayarlanır. --Bu, veri yürütmesinin öngörülebilir ve benzersiz olmasını sağlar.

7

Mühendisin mikrodenetleyici programlaması hakkındaki özeti



 

1,Özetleme alışkanlığını geliştirin. Özetleme sadece kendi öğreniminizin bir özeti değil, aynı zamanda öğrenme sürecinin gözden geçirilmesi ve derinleştirilmesidir. Ayrıca hataları ikinci kez yapmaktan da kaçınmanızı sağlar.


  2,Bir program yazmadan önce, öncelikle projeyi iyice anlamanız, farkında olmanız ve genel bir çerçeve oluşturmanız gerekir. Programın nasıl düzenleneceğini ve en mantıklı düzenlemenin ne olduğunu dikkatlice düşünmek çok önemlidir. Hangi modülün önce yapılacağına, bu modülün belirli adımlarına, her fonksiyonun nasıl adlandırılacağına, diğer modüllerle bağlantısına vb. konulara odaklanmak gerekir. Bir kağıt parçası alıp önemli süreçleri not etmek iyi bir fikirdir.  
  3,C dilinde modüler programlama için öncelikle her modülü bölmeniz, modül modül programlamanız, bir sıra belirlemeniz, bu sırayı takip etmeniz ve modül başarıyla tamamlandıktan sonra bir sonraki modülü yazmanız gerekir. Başlık dosyaları için ise, modül yazıldıktan sonra modülün başlık dosyasını yazmanız gerekmektedir.  
  4,Görünen uyarıları görmezden gelmeyin. Bu, programda mantıksız bir şey olduğu anlamına gelir. Kaynağını anlamak ve bir çözüm bulmak gerekir. Kaynak ararken spesifik olun. Bu alanda bilgi için internette arama yapabilir veya başkalarından tavsiye isteyebilirsiniz. Örneğin, başka bir projedeki ana fonksiyon aslında bu projeye eklenmiş olabilir. Aslında aynı fonksiyon adları tekrarlanıyor olabilir. Deneysel olayları analiz etmenin ve adım adım ilerlemenin de nedenleri vardır. Port tanımlanırken yanlış arayüz seçilmiş olabilir. Bazen, gerçekten çözemiyorsanız ara verip düşünmek iyidir. Ne kadar basit olursa olsun, hatalar olabileceği için dikkat etmelisiniz.   
Mikrokontrolcü uygulamalarının geliştirilmesinde, kod kullanım verimliliği, parazit önleme performansı ve mikrokontrolcülerin güvenilirliği gibi sorunlar hala çözüme kavuşturulmaya çalışılmaktadır. Şimdi, mikrokontrolcü geliştirmede mutlaka edinilmesi gereken birkaç temel beceriyi özetleyeceğiz.        
         

8

Mikrokontrolcü geliştirme becerileri


   
       

1.Programlardaki hataları nasıl azaltabiliriz?

Program hatalarını azaltmaya gelince, öncelikle sistem çalışması sırasında dikkate alınması gereken aşağıdaki aralık dışı yönetim parametrelerini göz önünde bulundurmalısınız.


  • Fiziksel parametreler: Bu parametreler esas olarak sistemin giriş parametreleridir ve uyarıcı parametreleri, veri toplama işlemi sırasındaki işletim parametreleri ve işlemin sonundaki sonuç parametrelerini içerir.

  • Kaynak parametreleri: Bu parametreler esas olarak sistemdeki devrelerin, aygıtların ve fonksiyonel birimlerin kaynaklarıdır; örneğin bellek kapasitesi, depolama birimi uzunluğu ve istifleme derinliği.

  • Uygulama parametreleri: Bu uygulama parametreleri genellikle bazı mikrodenetleyicilerin ve fonksiyonel birimlerin uygulama koşulları olarak ortaya çıkar. Proses parametreleri: Sistem çalışması sırasında düzenli bir şekilde değişen parametreleri ifade eder.


2.C programlama dili kodunun verimliliğini nasıl artırabiliriz?

Mikrokontrolcü programlamasında C dilinin kullanımı, mikrokontrolcülerin geliştirilmesi ve uygulanmasında kaçınılmaz bir trenddir. C dilinde programlama yaparken maksimum verimliliğe ulaşmak istiyorsanız, kullandığınız C derleyicisini iyi tanımanız en iyisidir. Öncelikle, her bir C dili derlemesine karşılık gelen assembly dili ifadelerinin satır sayısını test edin, böylece verimliliği net bir şekilde anlayabilirsiniz. Gelecekte programlama yaparken, en yüksek derleme verimliliğine sahip ifadeyi kullanın. Her C derleyicisinin belirli farklılıkları olacaktır, bu nedenle derleme verimliliği de farklı olacaktır. Gömülü sistemler için mükemmel bir C derleyicisinin kod uzunluğu ve yürütme süresi, assembly dilinde yazılmış aynı fonksiyona göre yalnızca %5-20 daha uzundur.


Geliştirme süresi kısıtlı karmaşık projeler için C dili kullanılabilir, ancak ön koşul, C diline ve MCU sisteminin C derleyicisine çok aşina olmanızdır. C derleme sisteminin desteklediği veri tiplerine ve algoritmalara özellikle dikkat edin. C dili en yaygın yüksek seviyeli dil olmasına rağmen, farklı MCU üreticilerinin özellikle bazı özel fonksiyon modüllerinin çalışmasında farklı C dili derleme sistemleri vardır. Bu nedenle, bu özellikleri anlamazsanız, hata ayıklama sırasında birçok sorunla karşılaşacaksınız ve bu da derleme diline göre daha düşük yürütme verimliliğine yol açacaktır.


       3.Mikrokontrolcünün parazit önleme sorununu nasıl çözebiliriz?Parazit oluşumunu önlemenin en etkili yolu, parazit kaynağını ortadan kaldırmak ve parazit yolunu engellemektir; ancak bunu yapmak genellikle zordur, bu nedenle yalnızca mikrodenetleyicinin parazit önleme yeteneğinin yeterince güçlü olup olmadığını görebiliriz. Donanım sistemlerinin parazit önleme yeteneğini geliştirirken, esnek tasarımı, donanım kaynaklarından tasarruf sağlaması ve yüksek güvenilirliği nedeniyle yazılım tabanlı parazit önleme giderek daha fazla ilgi görmektedir.  
Mikrokontrolcülerde en sık görülen parazit olayı sıfırlama (reset) durumudur. Programın kontrolden çıkması durumunda ise yazılım tuzakları ve bekçi mekanizmaları (watchdog) kullanılarak program sıfırlama durumuna geri döndürülebilir. Bu nedenle, mikrokontrolcü yazılımının parazitlere karşı direnci için en önemli şey sıfırlama durumunu yönetmektir.  
Genellikle mikrodenetleyicilerde sıfırlamanın nedenini belirlemek için kullanılabilecek bazı bayrak kayıtları bulunur; ayrıca, bazı bayrakları kendiniz de RAM'e gömebilirsiniz. Program her sıfırlandığında, bu bayraklara bakarak farklı sıfırlama nedenleri belirlenebilir; ayrıca farklı bayraklara bağlı olarak ilgili programa doğrudan atlayabilirsiniz. Bu, programın sürekli çalışmasını sağlar ve kullanıcı programı kullanırken sıfırlandığını fark etmez.  
       4.Mikrokontrolcü sisteminin güvenilirliği nasıl test edilir?Bir mikrodenetleyici sistem tasarımı tamamlandığında, farklı mikrodenetleyici sistem ürünleri için farklı test öğeleri ve yöntemleri olacaktır, ancak bazıları mutlaka test edilmelidir:
 
  • Mikrokontrolcü yazılım fonksiyonlarının eksiksizliğini test edin.
  • Açma ve kapatma testi
  • Yaşlanma testi
  • ESD ve EFT gibi testler

Bazen, insan kullanımı sırasında meydana gelebilecek hasarı da simüle edebiliriz. Örneğin, antistatik özelliğini test etmek için mikrodenetleyici sisteminin temas noktasını kasıtlı olarak insan vücudu veya giysi kumaşıyla ovabiliriz. Elektromanyetik girişime karşı direncini test etmek için mikrodenetleyici sistemine yakın bir yerde yüksek güçlü bir elektrikli matkap kullanabiliriz.  
Özetle, tek çipli mikrobilgisayar, bilgisayar geliştirme ve uygulamalarının önemli bir yönü haline gelmiştir. Tek çipli mikrobilgisayar uygulamalarının önemli yanı, geleneksel kontrol sistemi tasarım fikirlerini ve tasarım yöntemlerini temelden değiştirmesidir.  
Daha önce analog veya dijital devrelerle gerçekleştirilmesi gereken birçok işlev, artık mikrodenetleyiciler kullanılarak yazılım yöntemleriyle gerçekleştirilebiliyor. Yazılımın donanımın yerini aldığı bu tür kontrol teknolojisine mikrodenetleme teknolojisi de deniyor ve bu, geleneksel kontrol teknolojisinde bir devrim niteliğinde.  
Ayrıca, geliştirme ve uygulama sürecinde, daha geniş bir kullanım alanına sahip olabilmesi için becerilerimizi geliştirmeli ve verimliliği artırmalıyız.  
         

9

Çip çalışma özeti


 
 

Çip üzerindeki işlemler esas olarak çipteki kayıtlara yapılan işlemlerdir. Çipteki kayıtların belleğe eşlenmiş kendi benzersiz adresleri vardır ve bu adreslere karşılık gelen işlemler gerçekleştirilir. Çipe bakarken, öncelikle zamanlama diyagramına bakın, ardından ilgili kayıtları anlayın, nasıl çalıştıklarını kavrayın, gerekli portları tanımlayın (bunlar program tarafından belirlenebilir) ve yazma işlemi prosedürlerini ve okuma işlemi prosedürlerini yazın.


Çipe veri nasıl yazılır, veri nasıl okunur ve hangi porttan veri girilir veya okunur (en önemli şey).  
Çipleri bir veri yolu üzerinden bağlarken, öncelikle veri yolunun protokolünü anlamanız gerekir. I2C veri yoluna bağlı çip, esas olarak bu veri yolu üzerinden diğer çipleri kontrol eder.  
  1,Örgüdeki 74hc595 diyotlarından biri sütun seçimi için, diğer ikisi ise renk seçimi için kullanılır. Örgü, bir diyot koleksiyonuna eşdeğerdir.
Diyotun yanması için bir ucuna yüksek, diğer ucuna düşük seviye verilmesi gerekir. Sadece bir ucuna farklı seviye verildiğinde farklı renkler yanar.  
Zamanlayıcı çalışma modunun seçimi: En yüksek dört bit T1 zamanlayıcısını, en düşük dört bit ise T0 zamanlayıcısını ayarlar. Ardından her modun son iki basamağı çalışma modunu ayarlar. İki zamanlayıcı ayarlarken veya (|) operatörünü kullanmaya dikkat edin. Kesmeler kullanılırken, kesmeye girdikten sonra temizlenmesi gerekenleri temizlemeye dikkat edin.  
  2,Seri port alıcı-verici: Baud hızı genellikle 2. modda (başlangıç ​​değerine otomatik olarak yeniden yükleme) ayarlanır. Farklı cihazların farklı veri işleme kapasiteleri olduğundan, baud hızının ayarlanması esas olarak düşük hızlı cihazları dikkate almak ve birbirleriyle iletişim kurmak içindir. Kesme bayrağı biti yazılım tarafından temizlenmelidir. Seri port kesmesi ayarlanırken, gönderme veya alma işleminden kaynaklanan kesmelerden hangisi olursa olsun, kesme fonksiyonuna girebilir, bu nedenle kesme fonksiyonunun ayarlanmasına dikkat edin. (Genellikle ana bilgisayar veya yardımcı bilgisayar olarak bir fonksiyon ayarlanır.)  
Eğer veri göndermek için kesme (interrupt) kullanıyorsanız, ilk kez kesmeye nasıl gireceğinizi bulmanız gerekir; yani önce bir kez göndermeniz, ardından kesmeye girebilirsiniz. Bir seferde yalnızca bir bayt gönderilebilir ve bir sonraki bit ancak TI ayarlandıktan sonra gönderilebilir.  
  3,PCF8591AD dönüştürücünün dört giriş kanalı vardır. PCF8591'den veri okunurken, hangi kanal seçilirse o kanaldan gelen voltaj girişi okunur. Dönüştürülen veriler çipe kaydedilir ve ardından okunur. Okuma işlemi sırasında önce çipin adresi, ardından cihazın alt adresi (0x40|kanal numarası) yazılır ve daha sonra veri okunur.  
  4,DA dönüşümü, öncelikle cihaz adresini çipe yazmak, ardından alt adresi (0x40) yazmak ve son olarak dönüştürülecek dijital miktarı yazmaktır. Cihaz adresi çip bilgisi bu şekilde girilir.  
  5,LCD ekran için, veriler yazılıp görüntülendikten sonra, sürekli yenileme olmadan her zaman aynı şekilde görüntülenecektir. Değiştirmek isterseniz, yalnızca yeniden girmeniz gerekir.  
  6,DS1302 saat çipi için, veri okuma işleminde ilk veri sekizinci saat darbesinin düşen kenarında okunurken, veri yazma işleminde ise sonraki çıktı için hazırlık yapılır. Programın yazma yöntemine ve dönüş değerinin konumuna dikkat edin.  
  7,DS1302'de önce kaydediciyi belirtin, ardından ona veri yazın. Çip üzerindeki veri kaydedicisi adresi gösterir. (Yazma koruma programını hala tam olarak anlamıyorum. Her zaman yazma işlemi olmuyor mu? Yazma koruması neden hala açık?)
(Önceki kahramana göre, başlatma zamanından sonra bir bayrak ayarlayabilirsiniz. Bu bayrak varsa, başlatma zamanına gerek yoktur. Ancak, güç kapatıldığında, MCU'nun RAM'i bu bayrağı kaydedemez, bu nedenle bayrağı kaydetmek için DS1302'nin RAM'ini kullanabilir ve güç açıldıktan sonra bayrağı okuyabilirsiniz. Ben de bir acemiyim ve yakın zamanda DS1302 kullanmayı planlıyorum. Bunun doğru olup olmadığını bilmiyorum ve henüz uygulamadım. Lütfen daha fazla bilgi paylaşın.)
  8,Sonradan unutmanız ihtimaline karşı başlatma ayarlarını not almak en iyisidir. Okuma veya yazma sırasında en düşük bitin mi yoksa en yüksek bitin mi önce işlendiğine dikkat edin; bu, zamanlama diyagramına göre değerlendirilebilir.  
  9,Kızılötesi alıcı-verici, sinyal alırken, düşen iki kenar arasındaki süreye göre yüksek seviye mi yoksa düşük seviye mi olduğunu belirler. Bir program yazarken, önce zamanı belirlemek için bir zamanlayıcı kullanın, kaydedin ve ardından ikili sayıya dönüştürün (bu programın nasıl yazılacağı hakkında daha fazla bilgi edinin, çok faydalı).  
  10,Step motor: Esas olarak anahtarlama için kullanılır. Step motorun torku, dönüş hızı arttıkça azalır. Ağırlıklı olarak takım tezgahlarında işlenen parçaların otomatik beslenmesinde kullanılır. Ayrıca daha yüksek hassasiyet gerektiren kontrol yerlerinde de kullanılabilir.  
Step motor, elektrik darbe sinyallerini açısal veya doğrusal yer değiştirmeye dönüştüren açık döngülü bir kontrol elemanıdır. Aşırı yüklenme olmayan koşullarda, motorun hızı ve durma pozisyonu yalnızca darbe sinyalinin frekansına ve darbe sayısına bağlıdır ve yük değişikliklerinden etkilenmez. Step sürücü bir darbe sinyali aldığında, step motoru "adım açısı" adı verilen sabit bir açıda, belirlenen yönde döndürmeye başlar. Dönüşü, sabit bir açıda adım adım gerçekleşir. Açısal yer değiştirme, doğru konumlandırma elde etmek için darbe sayısını kontrol ederek kontrol edilebilir; aynı zamanda, motor dönüşünün hızı ve ivmesi, hız düzenlemesi elde etmek için darbe frekansını kontrol ederek kontrol edilebilir.  
  11,Servo motor: (servo motor), servo sisteminde mekanik bileşenlerin çalışmasını kontrol eden motora verilen isimdir. Motora yardımcı olan dolaylı bir iletim cihazıdır. Servo motorlar, hızı ve konum doğruluğunu çok hassas bir şekilde kontrol edebilir ve voltaj sinyallerini tork ve dönme hızına dönüştürerek kontrol nesnelerini çalıştırabilir. Servo motorun rotor hızı, giriş sinyali tarafından kontrol edilir ve hızlı tepki verebilir. Otomatik kontrol sisteminde aktüatör olarak kullanılır ve küçük elektromekanik zaman sabiti, yüksek doğrusallık, düşük başlangıç ​​voltajı vb. özelliklere sahiptir. Alınan elektrik sinyalini motor şaftında açısal yer değiştirme veya açısal hız çıkışına dönüştürebilir. İki kategoriye ayrılırlar: DC ve AC servo motorlar. Ana özellikleri, sinyal voltajı sıfır olduğunda dönme olmaması ve tork arttıkça dönme hızının sabit bir hızda azalmasıdır. DC motor: Geniş kullanım alanı, küçük araçlarda yaygın olarak kullanılır.


Yasal Uyarı: Bu makale "Uluslararası Elektronik İşletme Bilgileri"nden alınmıştır. Bu makale yalnızca yazarın kişisel görüşlerini temsil eder ve Sacco Micro'nun ve sektörün görüşlerini yansıtmaz. Yalnızca yeniden basım ve paylaşım amaçlıdır ve fikri mülkiyet haklarının korunmasını destekler. Yeniden basım için lütfen orijinal kaynağı ve yazarı belirtin. Herhangi bir ihlal durumunda, lütfen silinmesi için bizimle iletişime geçin.

Şirket telefon numarası: +86-0755-83044319
Faks: +86-0755-83975897
E-posta: 1615456225@qq.com
QQ: 3518641314 Yönetici Li

QQ: 332496225 Yönetici Qiu

Adres: Shenzhen, Longhua Yeni Bölgesi, Minzhi Caddesi No. 1079, Zhantao Teknoloji Binası, C Binası, Oda 809

whatsapp

WhatsApp

Whatsapp:+8618073002950