09-27-2011 05:58 PM
Herkese selamlar. Pic basic pro ile programladığım bir pic16f876 devresinde servo motor kontrolü yapmak istiyorum. Devre deney düzeneğinin bir parçası olduğu için bunu labview ile gerçekleştirmem gerekiyor. Ben pic i programladım ve isiste sorunsuz çalışıyor. 3 komut gönderiyorum MAYA0 komutu ile servo motor 0 dereceye (bir nevi off), MAYA1 komutu ile servo motor 90 dereceye ve MAYA2 komutu ile de servo motor 180 dereceye geliyor. Fakat bunu labview den komut göndererek yapmaya çalıştığımda hiç bir hareket gerçekleşmiyor. Labview içerisinde ki örneklerden Basic Serial & Write.Vi de baund, bit vs. ayarları yapmama rağmen komut gönderince hiçbir karşılık alamıyorum. İsiste virtual terminal üzerinde ki ayarlardan RX/TX polarity ve Inverted seçeneklerini kullanarak çalışan simülasyon sorunsuz çalışıyor. Ekteki dosyada isiste ki virtual terminal görünümü ve pic16f876 nın pic basic pro kodlaması mevcut.
Bu konuda yardımcı olurmusunuz.
Teşekkürler.
Solved! Go to Solution.
09-28-2011 01:34 AM - edited 09-28-2011 01:39 AM
Merhaba,
ISIS ve LabView konusunda uzman değilim.
Ancak seri port ve NI ürünleri ile pek çok uygulama gerçekleştirdim. Basit gibi görünmesine rağmen içinde pekçok ayrıntı barındıran bir konu.
Öncelikle, simülasyonlara körü körüne güvenmemek gerekiyor.
ISIS simülasyonunda çalıştığı söylenen bazı PIC devrelerinin gerçekte çalışmadığına kendim birkaç kez şahit oldum.
Yapmanız gereken artık simülasyonu bir kenara bırakıp, önünüzdeki devrenin sorununu bulmanız.
Bunun için de bazı araçlara ihtiyacınız olacak. En önemlisi bir osiloskoba...
Soru metninde geçmiyor ancak PIC-bilgisayar bağlantısını MAX232 benzeri bir entegre üzerinden gerçekleştirmeniz gerekiyor.
Sanırım ISIS simüle edilen devrenizde bu entegre eksik olsa bile bu durumu dert etmiyor ve çalışıyor gösteriyor.
Bu entegre ve çevresindeki kapasitelerin bağlantılarının doğru olması sistemin doğru çalışabilmesi için oldukça önemli.
Bunu doğrulamanın en kolay yolu da giriş ve çıkışlarını osiloskop ile kontrol etmek. Bilgisayardan çıkan seri kanal sinyallerinin MAX232'ye ulaştığını ve buradan doğru seviyelere dönüştükten sonra PIC'in ilgili bacağına ulaştığına emin olmanın daha garantili bir yöntemi yok.
Bilgisayardaki programınızın istediğiniz komutları gönderdiğini kontrol etmek için kullandığınız seri portun 2. (receive) ve 3. (transmit) pinlerini birbirine kısa devre yapabilirsiniz. (Tabi bu esnada bilgisayarın PIC ile bağlantılarını ayırın. En kestirme yöntem dişi bir dsub-9 konektörün 2 ve 3ncü pinlerini kısa devre yapıp bilgisayarın seri portuna takmak olacaktır.)
Bu durumda gönderdiğiniz her komut size geri gelecektir. Porttan yazdığınız kadar byte'ı okuyarak gönderdiğiniz ile aynı olup olmadığını kontrol edebilirsiniz.
Sizin PIC kodunuzda kesme'ler de var ki, bu durum, kodu simülasyon ve debug açısından daha da sorunlu hale getirebilir.
Bence (hele yeterli tecrübeniz yoksa) önce kesme kullanmadan, daha basit bir kodla sisteminizin çalıştığını görüp, sonra yavaş yavaş kodunuzu karmaşıklaştırabilirsiniz.
Cevabınıza göre ayrıntılar konusunda yardımcı olmaya çalışacağım.
Kolay gelsin.
09-28-2011 02:40 AM
Öncelikle Hyper Terminal penceresinden haberleşmeyi deneyiniz. Orada kullandığınız ayarları bire bir Labview'da kullanırsanız hiç bir sorun çıkmaması gerekir. Örneklerden açtığınız RS232 haberleşme yapan VI da bu işi gerçekleştirmek için yeterlidir.
09-28-2011 06:19 PM
Öncelikle ilginize çok teşekkür ederim.
Zafer Hocam yazmamışım ilk mesajıma ama LV den önce Hyper Terminalden ve Farklı seri iletişim programlarından yaptığım denemelerde de sonuç alamamıştım. (burdan sonuç alamadan LV den almaya çalışmakta heralde bana özgü bir girişim olsa gerek.)
Eren Hocam osiloskop ile kontrol işlemini gerçekleştirdim ama sorun çıkmadı. Bunun üzerine sorunun programda olabileceğini düşünüyorum. Sizinde dediğiniz gibi simülasyona güvenip program sorunsuz demek yanlış olur.
Şuanda microc ile hem yeni bir programlama yapıp devreyede gerekli olan reset, filtre gibi özellikleri ekleyip, led ile iletimi kontrol edip LCD ile de gelen değerleri okuyabileceğim bir devre geliştiriyorum. Bu işlemleri cumaya kadar tamamlayıp sonucu burada paylaşacağım.
09-29-2011 02:35 AM
Benim tahminim (tamamen hatalı da olabilir), yolladığınız ya da okumaya çalıştığınız veri biçimi normal karakter kümesinden farklı olabilir. Mesela her bir karakter için kullanılan ASCII karakteri yerine kontroller HEX biçimli veri kullanıyor olabilir. Haberleşmeyi başarabildiğiniz bir alt yapı varsa gönderilen ya da okunan verileri başka bir noktadan dinlemeyi deneyebilirsiniz.
09-30-2011 06:12 PM
Selamlar bu sorunu yeni yaptığımız devre ve micro c programıyla yazdığımız hex dosyası ile çözdük. Ama aklıma takılan bir şeyi sizinle paylaşmak istiyorum. Micro C ile kontrol sağlarken ben devreye 3 hareket belirledim 0 a bastığımda (basmak derken göndermekten bahsediyorum) 1. pozisyona gelip lcd den gönderilen veriyi 48 olarak okuyorum, 1 e bastığımda gönderilen veriyi 49 olarak okuyorum ve 2 ye bastığım zaman gönderilen veriyi 50 olarak okuyorum. Yani bu kısımda bir terslik yok. Fakat labview de iş ilginç bir şekilde farklılaşıyor. string olarak 48 ve 49 girdilerini algılamazken 50-51-52 girdilerini algılıyor.
Micro C de 0 LV de 50 ye, Micro C de 1 LV de 51 e ve Micro C de 2 LV de 52 ye denk geliyor. Yani 48 49 50 olması gerekirken arada ki 2 fark neden kaynaklanıyor çözemedim.
Dediğim gibi bu bir sorun teşkil etmiyor sonuçta devrem tamamlandı ama sizce neden böyle bir terslik (belkide sebebini ben bilmediğim için böyle algılıyorum) söz konusu.
Bu arada sorunun çözümünde emeği geçen Eren ve Zafer Bey'lere teşekkür ederim.
12-05-2011 08:27 AM
belkide ascii olarak alıyorsunuzdur. LAbview okudugunuz verileri string olarak alır . onu çevirmeyi denediniz mi . Yada gönderirken string gönderin.