Şimdi Ara

Arduino'ya Başlamadan Önce Bilmeniz Gerekenler (Okumadan Geçmeyin)

Daha Fazla
Bu Konudaki Kullanıcılar: Daha Az
3 Misafir - 3 Masaüstü
5 sn
3
Cevap
1
Favori
620
Tıklama
Daha Fazla
İstatistik
  • Konu İstatistikleri Yükleniyor
2 oy
Öne Çıkar
Sayfa: 1
Giriş
Mesaj
  • Aklıma gelmişken bir yere yazayım dedim. Sonra yazasım gelmiyor

    Arduino öğrenmekle elektroniği öğrenmiş olmazsınız. Arduino'nun elektronikteki yeri kabaca şöyledir
    Elektronik > Dijital Elektronik > Mikroişlemciler > Mikrodenetleyiciler > 8-bit mikrodenetleyiciler> Atmel AVR > Arduino

    Mikrodenetleyicileri bit olarak ayırmak belki doğru olmayabilir fakat 8-bit ile 32-bit mikrodenetleyiciler arasında ciddi fark var bunu yapılan projelerde görebilirsiniz. Başka bir yönden de mikrodenetleyicileri ayırmak mümkün çeşit çok olduğundan fakat en temel 8-bit, 16-bit, 32-bit diye ayırabiliriz.

    Mikrodenetleyiciler CPU barındırdıklarından mikroişlemcilerin içinde yer alır.

    Dijital elektronikte ise ikilik sisteme göre sabit bir gerilimle çalışan mantıksal devreler ele alınır.

    Led bile optoelektronik elemanlardan biridir. Elektroniğin ışık ile alakadar dalına optoelektronik denir.

    Endüstriyel elektronik, güç elektroniği , görüntü ve ses, haberleşme, radyo bunlar hep ayrı dallardır.


    Arduino'nun üzerindeki Atmel AVR mikrodenetleyiciyi bile programlamak için MicroBasic, MikroC, Assembly, AVR-C gibi farklı dil ve derleyiciler kullanılır. Arduino kolaylaştırılmış bir C/c++ temelli dil ve derleme ortamıdır. (Arduino dili diye bilerek söylüyorum.)
    Arduino'nun ortaya çıkmasındaki sebep gömülü sistemleri ve elektroniği herkese öğretebilmektir. Onun için kolaylaştırılmış, kırpılmış, fazla gerekmeyecek özellikler es geçilmiş ve herkesin öğrenebileceği bir platform ortaya çıkmıştır. Bütün fonksiyonları incelediğinizde AVR-C kodlarından oluştuğunu görebilirsiniz. Basit bir AVR-C kodu atayım neden zor olduğunu az çok görelim.

    int main()
    {
    DDRB = 0x00;
    DDRC = 0xFF;

    while(1)
    {
    PORTC = PINB;
    }
    return 0;
    }


    main fonksiyonu ile ana program başlar. (buraya kadar kolay)

    DDRB değişkeni D portunun bit konfigürasyonunu içinde barındırır. 0x00 yani hexadesimal tabanda 0 değeri atandığından tüm port çıkış olarak tanımlanmıştır.
    DDRC ise C portunun bit konfigürasyonunu içinde barındırır. 0xFF yani 255 yani 111 111 11 değeri verilmiştir bu da tüm ayakların 1 değerinde yani giriş olduğunu belirtir.

    While(!) ile program döngüsü başlar.


    PORTC = PINB; komutu ile C portundaki ayakların bit çıkışı B Portundaki ayakların bit konumuna göre ayarlanır. Yani giriş çıkış PORT yazmacı, okuma PIN yazmacı DDRB veri yönü yazmacı olup bu giriş çıkış için bu yazmaçlara değerler atanır. 0 bit olduğu için 000 000 00 binary sıra ile mikrodenetleyicinin 0'dan 7 ye kadar olan ayaklarına ayrı bir bit düşer.

    Port giriş çıkışı için daima B01010101 şeklinde yazmak ya da 0xff diyerek hexadesimal yoldan kısaca yazmak gerekir. (Hexadesimal sayının nasıl hangi ayağın hangi pini olduğunu öğrenecekler değil mi? Ama yazılan kodlarda hexadesimal değerler bolca var. )

    Tek bir bit için ise şöyle bir kod kullanılır. D portunun 0 numaralı pinini 1 konumuna getirmek için mesela;
    PORTD = (1 << PD0); veya
    PORTD = (1 << 0);
    Burada yazmaçlardan tutun işlemcinin ayaklarına sayı sistemlerine kadar pek çok konuya hakim olmak gerek tam anlamak için


    Arduino kodu yazalım şimdi ne kadar anlaşılır olduğunu görelim.


    void setup()
    {
    pinMode(13,OUTPUT);
    }

    void main()
    {
    digitalWrite(13,HIGH);
    }

    Setup ingilizce ayarlamak, hazırlamak manasında kullanılan bir kelime. Demek ki burada ön ayar yapıldığı aşikar.
    pinMode adlı fonksiyon pin modu ise bu ayakların durumunu ayarlıyor. 13 13 numaralı ayak. OUTPUT çıkış demek
    main ana program fakat burada while(1) döngüsüne ihtiyaç yok. Bilgisayarda C dilinde ana program döngüye girmez. Burada standart dışı olsa da daha pratik.

    digitalWrite fonksiyonun anlamı dijital yazmak demek ki çıkış için bu fonksiyonu kullanacağız. 13 bacak numarası HIGH dediğimize göre 1 konumunda 13. bacak ayarlanacak.

    Kelimelerin sözlük anlamına bakarak dahi mantık yürütüp ne işe yaradığını kodları okurken anlayabiliyoruz. Ayakları tek tek rahatça kontrol edebiliyoruz. Hem de sayı sistemleri ile yazmaçlarla uğraşmadan. Bunun dezavantajı port kontrolü için avr-c ye müracaat etmek ve kartın donanımsal olarak portlara göre değil pinlere göre olması. Bu durumda bazen alt alta 7-8 komut yazarak tek tek ayakları kontrol ediyoruz. Karaşimşek devresi için 000 000 01 diye başlayıp bit kaydırma ile açıp kapatmakla uğraşmadan kolayca yapmak mümkün. Onun gibi 7 segment gösterge sürücüleri 4 bit giriş aldığı için programda 5 desek gösterge 5 olarak gösteriyor. Ayrı bir kütüphane yazmaya gerek yok çünkü port doğrudan bizim yazdığımız sayıyı ikilik sayı sistemine göre işliyor.

    Paralel haberleşme için iki portu birbirine bağlayıp sadece tek bir kodla değer okuyabilirsiniz. 8 bit dediğimiz olay bu zaten o 8 ayaktan oluşan küme bir sayı değerini temsil ediyor. 16x2 lcd ekranlar da paralel iletişime göre çalışıyor. Sırf arduino kullanayım derseniz her harf için tek tek 1 ve 0 diye girmeniz gerekir. Bir diğeri de 4 bitlik ikilik sayıların onaltılık olarak tek bir rakam ile ifade edilebilmesi söz konusu. F0 dediğimizde 11110000 demek oluyor. Toplamda 8 bitlik değeri 2 rakam ile yazabilmek ve bunu aynı 0-100 gibi tam bir ölçüde ifade edebilme imkanımız var. Bunun sebebi onaltılık sistemin ikilik sistemin katı olması. O yüzden makina 10luk sisteme uyumlu değildir.

    Mikrodenetleyicinin giriş çıkış görevini yapan port adı verilen ayak grupları mevcuttur. bunlar işlemci tarafından düzenlenerek dış dünya ile iletişim sağlanır. Kısacası bütün işlemci ve ona ait sistem içerde gömülü olup dış dünya ile alakayı giriş çıkış birimleri sağlar. Bunun yanında iletişim protokolleri de aynı ayaklar üzerinden ama donanımsal olarak gerçekleştirilir. Yani siz mikrodenetleyici ile hazır bir sistem alıp programı yüklemekle beraber istediğiniz yerde kullanabiliyorsunuz. Bunun avantajları dezavantajlarından oldukça fazladır.

    Bir diğer konu da mikrodenetleyiciyi tanımak. Bunun tek yolu var datasheet okumak. Onu üreten firma bilmeniz gereken herşeyi orada yazıyor. ticari ürün olduğu için yazmadıkları çok şey de var da Atmel bu konuda diğerlerine göre oldukça iyi. Atmega328p için 600 sayfaya yakın datasheet yazmışlardı yanılmıyorsam. Orada C için örnek kod, assembly için örnek kod, blok şemalar, ayakların görevleri, yazmaçlar, bellek vs. hepsi ayrıntısıyla anlatılır. Bunları okumakla mikrodenetleyiciyi çalışma mantığını ne yapabildiğini vs. öğrenirsiniz.

    Kısacası siz kendi işlemcinizi, mikrodenetleyicinizi, geliştirme kartınızı, geliştirme platformunuzu yapabilirsiniz.


    Bunları öğrenmeyi bir kenara bırakıp Arduinoya bağlanmakla hata edersiniz Arduino sihirli değnek değil.

    Arduino ile yapabileceklerimizin sadece hayal gücümüzle sınırlı olduğunu savunanlar yüzünden böyle bir algı oluştu. Arduino böyleyse STM32 ile marsa gitmemiz lazım..

    Arduino basit mikrodenetleyici uygulamaları için biçilmiş kaftan veya bir iki günde bir prototip ortaya çıkarmak istiyorsanız başka seçenek fazla yok. Kütüphaneler ile yıllarını veren mühendisler ile aynı uygulamayı yapabiliyorsunuz. Teknik veri sayfasını okuyup anlamak zorunda kalmadan sadece kod yazarak bir saatten kısa sürede 1 haftalık işi yapıyorsunuz. Ama bir noktadan sonra hep aynı projeler, modüller dönüp duruyor. bilen birisinin yeni kütüphane yazmasını, firmaların yeni modül çıkarmasını bekliyorsunuz.

    Arduino'yu öğrendiniz. Bilmediğiniz kütüphane, fonksiyon vs. yok diyelim. Sonrasında teknik ve akademik lügata hakim bir ingilizce öğrenerek C, AVR ve AVR-C hakkındaki kaynakları okuyup öğrenmeniz gerekli. Sonrasında hangi alan üzerine çalışacaksanız o konuda bilgi sahibi olun. Hepsini öğrenmenize gerek yok belli temel bilgileri bildikten sonra alanınızda kendinizi geliştirin.



    Eleştirdiğiniz nokta varsa belirtin hatalar olabilir.



    < Bu mesaj bu kişi tarafından değiştirildi RitalinDelisi -- 9 Kasım 2017; 7:3:33 >







  • altına imzamı atarım

    arduino hobiciler için biçilmiş kaftan.. ana mantık sizden önce birileri yolu açmış, asfaltı, çevre aydınlatması, trafik lambası ve tabelalarını yerleştirmiş, konaklama tesisleri ve benzin istasyonlarını kurmuş size düşen arabayı huzur ve güven içinde kullanmak.

    kendi yolunuzu, asfaltınızı vs. yapmak istiyorsanız. daha önce kimsenin yapmadığını yapabilmek için temelini öğrenmelisiniz aksi halde yardım edecek kütüphaneleriniz yoksa patlarsınız



    < Bu mesaj bu kişi tarafından değiştirildi enrgrup -- 9 Kasım 2017; 11:45:7 >
  • avr programlayan biri olarak söylüyorum arduino ile uğraşanların ileri düzey elektronik öğrenmek gibi bir kaygısı olmamalı. biraz c/c++ hatta java bilen bir kişi devre tasarlamak yerine doğrudan program yazarak işlerini halledebilmeli. arduino kartını tasarlayanlar muhakkak bu şekilde düşünmüşlerdir. ama gelin görünki burada opampla, 555'le yada basitçe transistörle halledilebilecek işlerde arduino kullanmayı tavsiye edenleri görünce benim de hoşuma gitmiyor bu kadar kolaycı olunmamalı. bazı durumlarda da kütüphane yazamayacak derecede hızlı bitirmek gerekiyor projeyi o zaman da arduino kütüphanelerini kullanmak kolaylık oluyor. örneğin doğrudan atmega328 programlıyoruz ve 433mhz transmitter-receiver ile iletişim kuracağız. avr içerisinde böyle bir kütüphane yok ve bunu yazmak için dijital modülasyon tekniklerini falan bilmek gerekiyor ve buna göre bir iletişim protokolü yazmak gerekiyor. zaman kaybetmemek açısından hazır kütüphane kullanmakta bir sakınca görmüyorum. ama daha basit devrelerle yapılacak işlerde arduino hatta atmega kullanmanın israf olduğunu düşünüyorum.




  • Yapay Zeka’dan İlgili Konular
    Daha Fazla Göster
    
Sayfa: 1
- x
Bildirim
mesajınız kopyalandı (ctrl+v) yapıştırmak istediğiniz yere yapıştırabilirsiniz.