MikroC ve PIC18F4550 ile USB temometre

Başlatan hikko, 25 Ocak 2012, 11:42:07

hikko

merhaba!
mikro ve pic18f4550 ile aynı flash disk gibi PC usb portuna bağlanan ve sıcaklığı ekranda gösteren bir c# programı.

Proteus şeması ve C# programı ile hex kod ekdedir. Ancak proteus simülasyonunu başlatmadan önce \"Virtual USB\" seçeneğinden sanl USB port driver\'ını kurmanız gerekir.

Kolay gelsin.

hikko

özür dilerim, ilk dosyada unutmuşum. ekdeki dosyada tamamen çalışan hali mevcut. usbLibrary.dll dosyası da rar\'lı dosyanın içerisinde..

yazici67

Güzel bir devre olmuş. C# uygulamasını geliştirirken bir sorunun olursa söyle yardımcı olabilirim. Kolay gelsin...

tekniker_erhan

Kaynak kodları paylaşılmadıktan sonra bu uygulamanın kimseye bi yararı olmaz.

yazici67

@tekniker_erhan devrenin kodlarında olmaz ama C# kodlarının hepsini okuyabilirim :)

tekniker_erhan

Hocam ben uygulama ile ilgi yorum yaptım ama bilgisayar tarafında USB hid ile ilgili c# ta yazılmış sade anlaşılır bir örnek proje veya kütüphane paylaşırsanız hayır demem.:)

hikko

merhaba!

çok yakında (1 ya da 2 hafta) hem PIC kodları, hem de C# kodlarını (hem de herkesin anlayabileceği şekilde hazırlanmış olarak ve açıklamalı) \"MikroC ve PIC18F4550\"  isimli kitapta bulabilirsiniz. Ayrıca USB konusunda en detaylı ve en anlaşılır kitap olduğunda iddialıyım. Herkes USB portu kullanılabilecek bu kitaptan sonra, onlarca uygulama var ve hepsi birbirinden basit düzeyde hazırlanmış durumda! Selamlar, kolay gelsin.

yazici67

@tekniker_erhan ben zaten kötü anlamda söylemedim espri manasında... :)

hikko

#8
canın sağolsun, ben de kötü anlamadım zaten!

daha bir çok uygulama var elimde, ama bunları kitap haline getirdim. Yakında baskıdan çıkar! Bütün kodlar kitapda olacak! RTC, Isı, ses, rotary encoder, HLVD, dc motor, step, RC servo, SD/MMC kart, grafik LCD, PIC18Fx550 \'nin bütün donanım anlatımı, falan hepsi olacak!



MikroC\'nin tek kitabı olacak piyasada ki (Beti\'nin help çevirisi hariç), yokluğunda CCS C bayağu kullanılır olmuş; fakat MikroC ona göre tartışmasız çok üstün. Kullandıkça herkes görecek!

yazici67

#9
@hikko MikroC konusunda birşey sormak istiyorum.Ben programlarım için CCS C yi tercih ediyorum MikroC nin ne gibi avantajları var ? Birde MikroC function pointer ları destekliyor mu ?
Ayrıca bu çalışman çok güzel olacağa benziyor. Kolay gelsin sana... Birçok kişi için yardımcı nitelikte önemli bir kitap...

hikko

#10
merhaba!

MikroC\'nin üstün yanları:

1. Tek bir paket programda, hemen hemen her şey. Hiçbir yardımcı program istemez!
2. Kullanılacak yan ürünler için kendi kütüphanesi tamamen yeterli. Başka hiçbir eklentiye include falan gerek yok!
3. Kendisini en çabuk yenileyen ve güncelleyen derleyici!
4. Kütüphanesi en zengin olan programlama dili. (kullanıcıya sadece kullanmak kalıyor)
5. Kendi içerisinde gelen example \'lar proje mahiyetinde, kullanıcıya sadece incelemek kalıyor. İnceledikçe yan elemanların nasıl kullanılacağını keşfediyorsunuz.
6. C tabanlı olduğu için, güçlü yapısı ve temeli ile yapamayacağınız hiçbir proje yok!
7. Web tabanlı olarak, mikroTeam tarafından yardım olanağı.
8. USB port\'u en kolay kullanabileceğiniz programlama yeteneği.
9. CCS C\'ye göre komutların daha kolay ve kullanışlı olması.
10. PIC donanımlarına kolayca ve daha esnek erişim imkanı.
11. Pointer tanımlama ve program içerisinde rahatça erişim.
12. CCS ile yapılmış bir program ile mikroC ile yapılmış bir programı kıyaslayın farkı görürsünüz.




www.mikroe.com\'dan demo\'sunu indirip, programı PC\'nize bir kurun ve sadece Help\'inde yer alan örnek devre şemalarını ve kodları inceleyin.

Başka birşey söylemeyeceğim, inanın memnun kalırsınız!

evimde internetim yok, işyerinden bağlanıyorum!

bi ara seri ve usb port programı yapmak için gerekli C# kodlarını açıkça gönderebilirim. Zaten PIC mikroC kodları oldukça basit!


selamlar, kolay gelsin!

yazici67


mmilamur

UsbLibrary.dll nasıl kullanılıyor? C# konusunda biraz bilgim var ama az. programı indirdim ama C# tarafından pek bişey anlamadım. Yardımcı olursanız sevinirim.

mmilamur

En basitinden bilgisayara pic i taktığımızda, bilgisayara usb den bişey takıldı diyen C# program kodları nasıl olmalı? yazici67 hocam C# konusunda yardımcı olabilir misiniz?

yazici67

#14
Hikko dan bu projenin kodlarını isteyebilirsin. UsbLibrary içinde DataReceivedEventHandler var UsbHid nesnesi oluşturduktan sonra bu olaya bir fonksiyon atayabilirsin...İnternette UsbHid C# diye aratırsan örnek projeler bulabilirsin.

mmilamur

Örnekler ve bu dll var elimde, acaba anlattığınızı küçük bir kod yazarak gösterebilir misiniz? Biraz zahmet veriyorum ama kusura bakmayın.

caglar

Arkadaşlar merhaba,
Ben bilgisayar mühendisliği bölümü öğrencisiyim doğal olarak biz donanımı pek sevmeyiz.(Hoş bilgisayar mühendisi dediğinin asıl işi donanım ama..)
Benim projem şu: Bilgisayarın sıcaklığını ölçecek bir devre sistemi ve daha sonra belli bir seviyenin üzerine çıkınca alarm verecek veya ışık yanacak sönecek..
Burada bir de pic programlama çalışmam için bana tavsiye edebileceğiniz kaynakları da bekliyorum.
Teşekkürler.Herkese iyi günler...

yazici67

#17
@mmilamur mesela bunlar hikko nun kodları:
public class Form1 : Form
{
    // Fields
    private IContainer components = null;
    private Label label1;
    private Label label2;
    private StatusStrip statusStrip1;
    private ToolStripStatusLabel toolStripStatusLabel1;
    private UsbHidPort usbHidPort1;

    // Methods
    public Form1()
    {
        this.InitializeComponent();
    }

    protected override void Dispose(bool disposing)
    {
        if (disposing && (this.components != null))
        {
            this.components.Dispose();
        }
        base.Dispose(disposing);
    }

    private void Form1_Load(object sender, EventArgs e)
    {
        this.label1.Text = \"DS18B20 Ölçülen Isı Değeri :\";
        this.label1.Font = new Font(\"Arial\", 20f);
        this.label2.Text = \"000.0000  C\";
        this.label1.Font = new Font(\"Arial\", 20f);
        this.toolStripStatusLabel1.Text = \" USB && DS18B20 Cihazı bağlı değil!..\";
        this.usbHidPort1.VendorId = 0x4d2;
        this.usbHidPort1.ProductId = 0x10e1;
        this.usbHidPort1.CheckDevicePresent();
    }

    private void InitializeComponent()
    {
        this.components = new Container();
        this.statusStrip1 = new StatusStrip();
        this.toolStripStatusLabel1 = new ToolStripStatusLabel();
        this.label1 = new Label();
        this.label2 = new Label();
        this.usbHidPort1 = new UsbHidPort(this.components);
        this.statusStrip1.SuspendLayout();
        base.SuspendLayout();
        this.statusStrip1.Items.AddRange(new ToolStripItem[] { this.toolStripStatusLabel1 });
        this.statusStrip1.Location = new Point(0, 0x75);
        this.statusStrip1.Name = \"statusStrip1\";
        this.statusStrip1.Size = new Size(0x1a8, 0x16);
        this.statusStrip1.TabIndex = 0;
        this.statusStrip1.Text = \"statusStrip1\";
        this.toolStripStatusLabel1.Name = \"toolStripStatusLabel1\";
        this.toolStripStatusLabel1.Size = new Size(0x76, 0x11);
        this.toolStripStatusLabel1.Text = \"toolStripStatusLabel1\";
        this.label1.AutoSize = true;
        this.label1.Font = new Font(\"Microsoft Sans Serif\", 20f, FontStyle.Regular, GraphicsUnit.Point, 0xa2);
        this.label1.Location = new Point(0x1c, 9);
        this.label1.Name = \"label1\";
        this.label1.Size = new Size(0x16e, 0x1f);
        this.label1.TabIndex = 1;
        this.label1.Text = \"DS18B20 Ölçülen Isı Değeri :\";
        this.label2.AutoSize = true;
        this.label2.Font = new Font(\"Microsoft Sans Serif\", 20f, FontStyle.Bold, GraphicsUnit.Point, 0xa2);
        this.label2.Location = new Point(0x7e, 0x38);
        this.label2.Name = \"label2\";
        this.label2.Size = new Size(0x5c, 0x1f);
        this.label2.TabIndex = 2;
        this.label2.Text = \"label2\";
        this.usbHidPort1.ProductId = 0;
        this.usbHidPort1.VendorId = 0;
        this.usbHidPort1.OnSpecifiedDeviceRemoved += new EventHandler(this.usbHidPort1_OnSpecifiedDeviceRemoved);
        this.usbHidPort1.OnDeviceArrived += new EventHandler(this.usbHidPort1_OnDeviceArrived);
        this.usbHidPort1.OnDeviceRemoved += new EventHandler(this.usbHidPort1_OnDeviceRemoved);
        this.usbHidPort1.OnDataRecieved += new DataRecievedEventHandler(this.usbHidPort1_OnDataRecieved);
        this.usbHidPort1.OnSpecifiedDeviceArrived += new EventHandler(this.usbHidPort1_OnSpecifiedDeviceArrived);
        base.AutoScaleDimensions = new SizeF(6f, 13f);
        base.AutoScaleMode = AutoScaleMode.Font;
        base.ClientSize = new Size(0x1a8, 0x8b);
        base.Controls.Add(this.label2);
        base.Controls.Add(this.label1);
        base.Controls.Add(this.statusStrip1);
        base.Name = \"Form1\";
        this.Text = \"USB & DS18B20 ISI \";
        base.Load += new EventHandler(this.Form1_Load);
        this.statusStrip1.ResumeLayout(false);
        this.statusStrip1.PerformLayout();
        base.ResumeLayout(false);
        base.PerformLayout();
    }

    protected override void OnHandleCreated(EventArgs e)
    {
        base.OnHandleCreated(e);
        this.usbHidPort1.RegisterHandle(base.Handle);
    }

    private void usbHidPort1_OnDataRecieved(object sender, DataRecievedEventArgs args)
    {
        if (base.InvokeRequired)
        {
            try
            {
                base.Invoke(new DataRecievedEventHandler(this.usbHidPort1_OnDataRecieved), new object[] { sender, args });
            }
            catch (Exception exception)
            {
                Console.WriteLine(exception.ToString());
            }
        }
        else
        {
            byte[] buffer = new byte[this.usbHidPort1.SpecifiedDevice.OutputReportLength + 1];
            byte index = 0;
            foreach (byte num2 in args.data)
            {
                index = (byte) (index + 1);
                buffer[index] = num2;
            }
            this.label2.Text = Convert.ToString(Convert.ToChar(buffer[1])) + Convert.ToString(Convert.ToChar(buffer[2])) + Convert.ToString(Convert.ToChar(buffer[3])) + Convert.ToString(Convert.ToChar(buffer[4])) + Convert.ToString(Convert.ToChar(buffer[5])) + Convert.ToString(Convert.ToChar(buffer[6])) + Convert.ToString(Convert.ToChar(buffer[7])) + \" \" + Convert.ToString(Convert.ToChar(0xb0)) + \"C\";
        }
    }

    private void usbHidPort1_OnDeviceArrived(object sender, EventArgs e)
    {
        this.toolStripStatusLabel1.Text = \" Herhangi bir USB Cihaz bağlandı!\";
    }

    private void usbHidPort1_OnDeviceRemoved(object sender, EventArgs e)
    {
        this.toolStripStatusLabel1.Text = \" Herhangi bir USB Cihaz çıkarıldı!\";
    }

    private void usbHidPort1_OnSpecifiedDeviceArrived(object sender, EventArgs e)
    {
        this.toolStripStatusLabel1.Text = \" USB && DS18B20 Cihazı bağlandı!\";
    }

    private void usbHidPort1_OnSpecifiedDeviceRemoved(object sender, EventArgs e)
    {
        this.toolStripStatusLabel1.Text = \" USB && DS18B20 Cihazı çıkarıldı!\";
    }

    protected override void WndProc(ref Message m)
    {
        this.usbHidPort1.ParseMessages(ref m);
        base.WndProc(ref m);
    }
}


@caglar ne derece PIC programlama biliyorsun? ona göre düşünelim...

caglar

İyi bir c kullanıcısıyım diyebilirim ama c# bilmiyorum bu kodlar da c# :(

yazici67

Ben bu kodları diğer arkadaşa yolladım zaten.Ben sana ne seviye PIC programlamasını biliyorsun diye sordum.

caglar

Hayır bu kodları anlayamıyorum anlamında söylemiştim yukarıdaki yorumları okudum ;)
Yanlış anlama :))

mmilamur

#21
Alıntı yapılan: yazici67 - 19 Haziran 2012, 19:25:23Hikko dan bu projenin kodlarını isteyebilirsin. UsbLibrary içinde DataReceivedEventHandler var UsbHid nesnesi oluşturduktan sonra bu olaya bir fonksiyon atayabilirsin...İnternette UsbHid C# diye aratırsan örnek projeler bulabilirsin.

Olaya fonksiyon atayarak dediğiniz gibi yaptım, oldu.  C# bilgim çok az olduğu için kodları hemen kavrayamıyorum. Ama şimdilik bir sıkıntı yok. Teşekkürler.

yazici67

@mmilamur önemli değil.Diğer örnek projeler için bloğu araştırabilirsin.
@caglar konudan sapmayalım :D Tekrar soruyorum ne seviye PIC biliyorsun? Mesela basit olarak ADC okuma biliyormusun? İstediğin proje için gerekli.

caglar

Açık söyleyeyim hiç bilmiyorum daha önce yapmadım ama C ile mantığı çok benzer bildiğim kadarıyla o yüzden buraya yazdım ki projeye yönelik çalışabileceğim kaynak ve tavsiyeleri öğrenebilmek için.

hikko

merhaba,
mlkroc ve pic18f4550 kitabında usbdll nin nasıl kullanılacağı detaylı bir şekilde anlatılıyor.

caglar


caglar

Bios tan sıcaklık değerini nasıl okuyabiliriz.
Bunu pic programlama ile okuyacağız.Yoksa başka programlama dilleri ile olur mu?
Sıcaklığı okuduktan sonra yine programın içinde kullanacağım.
İyi günler...

hikko

merhaba.
Pc\'de biosdan sıcaklık okumak icin neden pic kullanmak istiyorsun anlamadım. Herhangi bir programlama dilinden (özellikle assembly ile) bios adreslerine erişip sıcaklığı zaten okuyabilirsin. önemli olan sıcaklığın donanım adresini bulman gerekir.

caglar

Projede donanım kullanmam gerekliydi. Ama daha sonra temperature adresini buldum ve ubuntuda yaptım ama  windowsta yapamadım adres yanlıştı sanırım ya da başka bişey.


caglar


huba

hikmet hocam microc kodunuzda hata var gerçekte çalışmıyor. Hata ise bir ELSE yi unutmuşsunuz onun için - değer gösteriyor. ikincisi usb haberleşmesiyle onewire okumayı aynı anda yapamıyor.

hikko

Merhaba huba,
mikroc ve c# kodlari doğru dur. Bütün uygulamalar gerçek ortamda denenmis ve test edilmiştir. Özellikle bu uygulamada yaptigim termometre yi hala kullaniyorum. Selamlar.

huba

 tekrardan merhabalar hikmet hocam,

 Ben bu projede şöyle bir sorunla karşılaştım, Hem One-Wire haberleşme hemde USB haberleşmeyi beraber çalıştırdığım zaman(yani usb kablosunu bilgisayara taktığım zaman) pic sensörden bilgi okumuyor. 00625 gösteriyor hem lcd de hemde c# da. ve acil çözmem gerekiyor. Acaba sizinle daha hızlı bir haberleşme kanalını kullana bilir miyiz..?? iyi çalışmalar.

endrrylmz

Hocam Laptop Pc de bu devreyi kurup denedim "Herhangi bir aygıt algılandı" diyor. Ama masaüstü Pc de sıkıntısız çalışıyor nedeni nedir?

huba

merhaba endrylmz ,

laptop da 64 bitlik bir işletim sistemin varsa onun için çalışmamıştır.

Hızlı Yanıt

Not: Bu konu bir moderatör tarafından onaylanmadan görüntülenmeyecektir.

Adı:
E-Posta:
Doğrulama:
Lütfen bu kutuyu boş bırakın:
IRFP250 Nedir:
kısayollar: göndermek için alt+s veya önizleme yapmak için alt+p'ye basın