MPU 9250
  • arkadaşlar mpu 9250 titreşim sensöründen gyro değerleri almak istiyorum. spi modda örnek kodu olan var mı?
  • konu şuradan geliyor
    http://arduinoturkiye.com/arduino-uno/#comment-38601

    saniyede 20bin okuma yapılması söz konusu, mevcut kutuphaneler i2c ile okuma yapıyor bu da hız olarak 400khz e denk geliyor(yani 400/8bit=50bin byte. gelen değerler 2 byte yani 25bin okunabilir teoride) ama arduino bu okumalarda yapısı gereği zaman kaybediyor. spi modda biraz daha fazla okuma yapmak mumkun olabilir bu nedenle spi modda çalışılması önerildi.

    mevcut i2c kutuphane kullanılarak okuma yapmayı deneyıp bir pprotoıp ve max okuma suresi denenbilir daha sonra performans geliştirilmiş koda geçilebilir

    okumaları hızlandırma için bir tasarım vereyim deneyin ama kodları sizin geliştirmeniz lazım

    bir buffer açın, her bir eksen için diyelim 512 byte açtınız.

    bir loop içinde devamlı sensorü okuyun ve bu bufferi doldurun, bu loop içinde serial print gibi zaman kaybettirici şeyler olmamalı

    birde timer ınterrup başlatın ve her 10ms de bir bu bufferi okuyupveriyi yine interrupt tx rutini ile dışarı atın. görselleştirmeleri pc tarafında processing ile yapmaya çalışın.

    bu biraz kazık proje ama ben olsam bu şekilde yurumeye çalışırdım.

    gelişmiş programcılık seviyesi gerektirir. kopyala yapıştırla gidiyorsanız bu yol uymaz size

  • @okoman hocam bu gibi sorunlarda hızlı bir cpu ile (örneğin arduino due) çözum bulunamazmı?

    https://www.arduino.cc/en/Products/Compare

    bide bi başlıkta bize biraz kablolu iletisim anlatırmısın?
    spi nedir, i2c hangisi, tx-rx ne, serial ne? 232 niye var 232 varsa 485 kim? hepsini anladım diyelim başka ne var? gibi gibi gibi
  • arduino due yaklaşık 80 mhz civarı çalışıyor uno ise 16mhz de çalışıyor ama due de port erişim hızları uno ıle aynı neredeyse (arm işlemci yapısı gereği pinlerr ulaşacağınız veya ornekleyeceğiniz hızda baştan set edilme zorunda) yani hafızada işlenen kodlar çok hızlı ama donanıma ulaşacağınız işlerde uno ıle aynı düşünmek lazım. saat hızı herşey değil yani.
    burada harici porta erişim soz konusu oldugu ıcın performans dusuk olacak tek avantajı hafıza derdi çekmeden geniş geniş yazarsın o kadar
  • kablolu iletişim için bişey demedin hocam?
  • seri iletişimde senkron asenkron dıye ayırabiliriz

    senkron olanlar
    spi, i2c

    spi de, clock datain dataout ve chip select uzerınden protokol yurutulur chipselect 1 oldugunda (veya sıfır oldugunda bu cihazlara gore değişebılır datasheetıne bakmak gerek) her clockda dataoudan bir bit yollanır aynı anda datain den de data okunur protokolun hızını clock pini belirler her 1-0 oldugunda bir bir ilerlemiş olursun. çok hızlı çalışabilir 140mhz hızda veri okuma yazma yapılabılır mesela ( duruma ve cihaza gore dataout pinleri coğaltanlar var ozaman tek clock darbesinde 4bit birden basmış olursun)
    aynı hatlar paralel bağlanıp aynı anda bır cok cıhazı yonetebılırsın hangısını kullanacaksan onun chipselect pinine uygun sınyal vereceksın o kadar.

    i2c de spi ye benzer, clock ve data pini var veri alış verişi tek pin ustunden yurur veriler bunda da bit bit ıletilir once komutu veya adresi ıletırsın yıne her clock da bir bit gider 1 bit gelir komut veya adrese gore de cevap gelir yollanan alınan verinin şekli uzunluğu cihaza göre değişir kullanılacak donanıma gore datasheete açıp komutlara bakacaksın kullanmadan once. birden fazla cihaz paralel bağlanır bu durumda her cıhazın ustunde 2-3 bitlik adres seçme pini ımkanı olabılır bunları direk sabit +v ve gnd ye bağlayıp adresleyebılırsın burada her cıhazın ayrılmış bır adres blogu vardır bunun sonundakı tek bıtı değiştirerek seçme ınkanı oluyor genelde pek sorun çıkmaz.

    asenkron seri iletşimde ise,
    herhangi bir clock hattı olmaz rx ve tx hattı vardır kendi clokunu uretir veya hesaplar gibi dusunebilirsin. asenkron da baştan iletişim hızı belli olması lazım.
    başlangıçta hat yuksek/1 dir sıfıra düşünce start bit başlar hızın 1/10 suresi kadar start biti sürer sonra 8 bit lik veri yollanır bitin değeri 1 se hat yuksektir 0 ise düşüktür.en sonunda stop biti yollanır bu hep yuksek yani 1 dir. hey byte için 10bit yollanır yani.

    okuma için hat gozlenır data olmadıgı anda hat hep yuksektır , hat 0 olunca hattın bıt hızının yarısı kadar sure beklenır ornekleme yapılır 1-0 tespit edilir diğer geri kalan bitlerde de aynı işlem uygulanır ve diğer byte ıcın yine başa donulur. (hattın hızını otomatik bulmak da mumkun tabi bir sürü yontem var onları yazması uzun surer boşver)

    bu ıletişimde rx-tx kullanılabildiği gibi tek hat da kullanılabilir ama bu durumda işler biraz karışık oluyor baştan bazı işaretleşmeler filan oluyor bunlara girmeyelim hiç.

    seri iletişim için bir surucuye ihtiyac oluyor(ornek max232) bu bırtur sınyal seviye cevirici gibi dusunmek lazım rx veya tx hattında garip bir sinyal olur rs232 standartında gndye göre hat yuksekse +9v okunur hat düşükse gndye göre -9v okunur yani 18v luk bir potansiyel vardır hatta bazı durumlarda bu fark 30v kadar olabilir normaldir bunun nedeni 3-5mt mesafede endustriyel ortamdaki parazitlerden biraz olsun kurtulma ve hattın mesafesinden dolayı oluşabilecek gerilim düşümlerini karşılamak için yapılır ama sonuçta işlemciye hep 5v veya 3v seviyede anlamlı bir sınyal gelir.

    rs485 ise rs232 seri iletişim protokolunun mesafesını uzatma ve guvenli veri iletme amacıyla geliştirilmiş gibi görünüyor. bunda baktığımızda tx sinyal hattı A ve B diye iki hatta ayrılmıştır bunun da surucuye ıhtıyacı vardır(max485) burdaki a-b çıkışları bir birinin tersidir yani tamamlayıcısıdır ab arasındaki potansiyel voltaj 4.5v...5v civarı olur genelde.
    hattı böyle bırbırının tersi sınyali olacak şekilde surunce bakmışlar parazitler filan kayboluyor ustelik 4km ye kadar mesafeye veri de taşınabiliyor deyip yurümüşler abiler.

    rs485 half dublex iletişim şeklini sever yani hattı kullanırken ya tx yaparsın ya rx yaparsın genel olarak başta hattın ucundaki alet rx durumundadır birşeyler gelince o cagrıya cevap verir o kadar.

    rs232 ıle rs485 arasındaki en guzel fark rs232 de ıkı cihaz haberleşirken, rs485de bir hat ustunde 32 cihaz olabilir cihazlar yakınsa hatlar kısaysa 200 cihaz bıle olur ama bu iş hep şaibelidir yani veri son uca gittiğinde hiç tanınmayacak kadar zayıflamış olabilir. araya bir takım repeater denen moduller konarak node lar fılan oluşturmak da mumkun tabi. birde rs485 de hattın iki başına 60 veya120ohm luk direnç konup bir dengeleme yapmak gerekir yoksa hat çalışmıyor genelde yavaş yavaş buyuyen bu networklerde sonlandırma dırenci nerede diye arama derdi olur filan o da ayrı hıkaye.


    bu rs485 ilk ağ bilgisayarlarının unix in filan temel bağlantısıdır rs485 hattına tuştakımı ve text ekranlar filan bağlanıp bayağı işler yapıldı 10 yıllarca.

    rs485 altyapısı ethernette de kullanılıyor onda 4çift yani 8 kablo olur ama mantık hep yukarıda yazdığım rs232 gibidir ama hızlar şu anda Gbit mertebesine ulaştı. arada bu iletişimi yoneten akıllı bir kontrolcu olur o kadar.

    yukarıda anlattıklarım temel donanım katmanlarıdır bunların ustunde değişik değişik protokoller geliştirilir ihtiyaca göre kullanılır. protokoldeki kasıt bir iletişimin tarif edilmesidir ben sana veri paketi tanımlıyorum herkes boyle yaparsa guzel olur anlaşırız demek.

    rs232de veriyi atar durusun bunun ustune xmodem protokolu gelirse uzak mesafelerde veri transferı yapmış olursun.

    rs485 ustundekı protokol ıse modbus olabılır bunda da ağdaki cihazlardan bilgi sorma ve bilgi alma şekli tanımlanmıştır sahadaki 3bin iplik makınesinden kaç tur makara sardığını veya uzaktaki jenarator gruplarının durumunu veya sahadaki 18bın guneş panelinin veya aynanın açısını tek tek gunese gore yonetmeni sağlar.

    ethernet de ise tcp/ip ile tum dunya ustunde haberleşebileceğin bir iletişimi tanımlayabilirsin.

    USB de rs485 mantığından türetilmiş gibi durmaktadır a-b yerine -d ve +d hatları ustunde ıletişim surdurulup yine birbirini tamamlayan fark sinyalleri mantığında çalışmaktadır ama burada kıymetli olan protokol mantığının ıyı tasarlanmış olması ve bir çok güçlü çihazın aynı anda haberleşmesinin sağlanmıştır. USB de haberleşecek cihazları ureten abilerin USB konsorsiyumundan yıllık tonla para verip ID satın alarak bu sisteme girdiği de unutulmamalıdır. porta takılan her usb cihazın dunyadaki tanınmasını sağlayan ozel bir id sini konsorsiyuma kaydettirmeden kullanması yasaktır çünkü bu idler uzerınden hat ustundeki bilgiler dağıtılmaktadır bu idleri herkes kafasına göre kullanırsa video kamera olarak bağladığın cihaz bir bakmışın sistem onu mouse olarak tanımış olur filan karmaşa olur yani. genelde usb chip ureticileri bazı jenerik idleri serbest kullanıma açmıştır o chipi kullandığında bu idleri kullanabilirsin ancak aynı chipi kullanan başka bir arkdaşdada aynı id olacağından çakışma ıhtımali her zaman olur. sen bu id yi gps olarak kullanırken başkası bt modul olarak kullanmışsa işler karışabiliyor.

  • birde onewire denen maxim firmasının (veya eskiden adı dallas idi satıldı maxim oldu) geliştirdiği bir seri iletişim şeklidir burada sadece tek bir hat vardır bu hat ustunde ucuz basit sensor ve değişik akıllı cihazlar haberleşebilmektedir eskiden akbil vardı mesela buton şeklinde dokunduğun anda biletin içinden kontörü düşürürdü onlar hep onewire marifetiydi.

    bu onewire hattının önemi data hattı ustunde cihaza guç de ıletilmesi sağlanırdı. temas olduğu anda bir kaç yuz mılısaniye hat yukseğe çekılır ve sensor ıcındekı mınık kondansator dolar ve sensorun hafızanın çalışacak kadar beslemesini sağlar ve iş halledilir. onewire da iletişim seridir ama yapı değişiktir bazı temel komut setleri tanımlıdır bunları kullanarak cihazın/sensorun yeteneğinden faydalanılır ds18b20 ısı sensörü bu tip onewire yapısı ve protokolü kullanır mesela.

    birde tek hat ustunde çalışan protokollerden onemli olanı ise manchester kodlama denen akla ziyan bir şekli vardırki bu sadece bilgi olarak kalsın ama temelde sinyal boşluklarının suresinin olçumune dayanır rs232ye benzemez hat her sıfıra düştüğünde bişeler yapıyoruz yazması uzun youtube da cok vıdeosu var bakarsınız ama temelde işe yaradığı yer çok iğrenç ortamlarda kısa veri parçalarını iletmeye yarıyor mesela tv kumandasındaki IR verici protokolu veya araba kumandası filan bu protokolu kullanır pil bittikçe frekanslar filan değişse bile protokulun yapısı gereği yinede veri iletmede sorun olmaz.

    daha başka tek hattan veri durum iletme için analog yontemler kullanılabılıyor mesela yangın alarm sensorleri veya 400mt ılerıdekı fanın hızını ayarlamak için closedloop(bu isimden emin değilim araştırıp bakıcam) denen bir yontemle hatta akıtılan akımla (10-40ma) fan kontrol edilebiliyor yada fırının içindeki ısı sensoru içerideki sıcaklıkla akıttığı akımın olcumunden değer okunabiliyor.

    AC elektrik hattı ustunden veri iletişimi filanda yapılabiliyor bunlarda hep kablolu ıletişimdir aslında AC dalgalı sinyalin (sinisun) tam sıfır anında birkaç bit veri yollama esasına dayanır alıcı cihazlar enerji hattını izler ve tam sıfır noktasına geldiğinde yayınlanan mesajların gereğini yapar mesela uzaktaki lambanın açılması kapanması veya ışık şidetinin ayarlanması için kullanılabılır X10 du galiba protokolun adı.

    tabi kablolu iletişimde MODEM ler de çok kullanılır bu mesafeyi çok çok arttıran bir özellik sağlar. modulasayon ve demodulasyon kelimelerınden turemiştir yani veriyi 1-0 diye yollamak yerine ses sinyali şeklinde kodlanmış şeklinde yollanması seçilmiştir. burada bit olarak 1 yollanmak istediğinde 3khz ve 0 biti yollanmak istendiğinde 1khz gibi bir frekans yollanır alıcı taraf ise bu kodlanmış frekansları tekrar 1-0 bilgisine dönüştürür tabi burada bahsettiğim frekanslar mantığı anlatmak ve basitleştirmek için veriyorum çok farklı yontemler geliştirilmiş durumda bu konuda ama mantık bu.

    neyse... aklın ve muhendisliğin sonu yok yani.

    kolay gelsin
  • 1 kere okudum, bikaç bin kere daha okursam anlıycam inşallah :) teşekkler hocam

Howdy, Stranger!

It looks like you're new here. If you want to get involved, click one of these buttons!

Login with Facebook
Açık kaynak kültürü gereği, çözdüğünüz problemlerin çözümlerini paylaşmayı lütfen unutmayın.