Picproje Elektronik Sitesi

PROGRAMLAMA DİLLERİ => Visual C# => Konuyu başlatan: phiber-optic - 22 Mart 2012, 01:35:13

Başlık: PIC-MAX232-C#
Gönderen: phiber-optic - 22 Mart 2012, 01:35:13
herkese merhaba,

pic max232 ve c# ile bir seri port uygulaması yapmaya çalışıyorum fakat bir türlü c# tarafından bir veri okuyamadım. programa hiçbirşey yazmıyor :/

picte bir hata olacağını çok fazla düşünmüyorum çünkü osiloskopla pic in bacağında, seri port çıkışında ve kablonun bilgisayara giriş pinlerinde ölçüm yapınca sinyali görüyorum.

ama c# tan okumaya çalıştığım zaman bir türlü olmuyor. acaba nerede hata olabilir? baud rate vs gibi ayarlar tam olarak yapılı.

acaba max 232 kullandığım için sinyal terslenmiş olarak geliyor bununla ilgili bir sorun olabilir miy? eğer öyle ise nasıl çözeceğim. mesela proteusta simulasyon yaparken virtual terminalden verileri okumak için ayarlardan inverted seçmek gerekiyor. c# da bu işi nasıl yapacağım??

yardımcı olabilirseniz çok memnun olurum. günlerdir bayağı canımı sıktı bu olay
Başlık: Ynt: PIC-MAX232-C#
Gönderen: jozzef - 22 Mart 2012, 07:29:03
Merhaba,
"DataRecieved" event'ını kullanıyor musunuz?
Kullanıyorsanız gelen bilgiyi User Interface (UI) aktarmak için Invoke ediyor musunuz?
Başlık: Ynt: PIC-MAX232-C#
Gönderen: phiber-optic - 22 Mart 2012, 09:07:13
Merhaba
Evet kullaniyorum. Ayni kod ile garmin gps ten seri port ile veri alabiliyorum
Başlık: Ynt: PIC-MAX232-C#
Gönderen: vitruvius - 22 Mart 2012, 09:55:25
Kodlarınızı ve şemanızı görmeden yardım etmek zor.
Başlık: Ynt: PIC-MAX232-C#
Gönderen: phiber-optic - 22 Mart 2012, 11:11:06
c# kodunu da gönderirim ama hyperterminalden veri almaya çalışıyorum şimdilik. onda da olmuyor :/ aslında sorun c# kodunda değil gibi görünüyor??

(http://f1203.hizliresim.com/v/q/3r3uw.png)







#define FOSC (4000000L)
#define EIGHT_BITS (0)
#define NINE_BITS (1)



extern unsigned char sci_Init(unsigned long int, unsigned char);
extern unsigned char sci_GetByte(void);
extern void sci_PutByte(unsigned char);
extern void sci_PutString(const char*);


void sci_PutString(const char * s)
{
while(*s)
sci_PutByte(*s++);
}

void sci_PutByte(unsigned char byte)
{
while(!TXIF)
continue;
TXREG = byte;

return;
}

unsigned char sci_GetByte(void)
{
while(!RCIF) // Wait until port is ready
continue;

return RCREG; // Get byte
}

unsigned char sci_Init(unsigned long int baud, unsigned char ninebits)
{
int X;
unsigned long tmp;

tmp = 16UL * baud;
X = (int)(FOSC/tmp) - 1;
if((X>255) || (X<0))
{
tmp = 64UL * baud;
X = (int)(FOSC/tmp) - 1;
if((X>255) || (X<0))
{
return 1; // baud is unobtainable
}
else
BRGH = 0;
}
else
BRGH = 1;
SPBRG = X;  //sed baud rate

SYNC = 0; //async
SPEN = 1;
CREN = 1;
SREN = 0;
TXIE = 0;//tx interrupr disable
RCIE = 0;//rc interrupt disable
TX9  = ninebits?1:0;
RX9  = ninebits?1:0;
TXEN = 1;

return 0;
}




void main() {

TRISC=0b11010000;
        PORTC=0x00;

sci_Init(9600,EIGHT_BITS)

while(1) {
            DelayMs(2000);
sci_PutString("deneme");
}
}

Başlık: Ynt: PIC-MAX232-C#
Gönderen: JKramer - 22 Mart 2012, 11:32:54
Kondansatörlerin kutuplu olması gerekiyor, yönlerine dikkat ettiniz mi?
Başlık: Ynt: PIC-MAX232-C#
Gönderen: phiber-optic - 22 Mart 2012, 11:34:27
yok hayır. dikkat etmedim. ama kutuplu kondansatör baglamadık. yalnız osiloskopla baktgm zaman bir sinyal görüyorum seri port terminalinin pinlerinde
Başlık: Ynt: PIC-MAX232-C#
Gönderen: serhat1990 - 22 Mart 2012, 11:42:27
Max 232 kompanentlerinin bağlantısında ardakaşın dediği gibi kondasatörler kutuplu olması lazım

https://320volt.com/ds89c430-ile-cisim-uzunlugunun-hesaplanmasi/
Başlık: Ynt: PIC-MAX232-C#
Gönderen: phiber-optic - 22 Mart 2012, 11:44:38
gönderdiğiniz link açılmıyor :( direk 320 volt un anasayfasına gidiyor
Başlık: Ynt: PIC-MAX232-C#
Gönderen: serhat1990 - 22 Mart 2012, 11:54:40
Ben açıyorum gittiği sayfada altta max232 bağlantısı ile ilgili şema var . Kondasatör yönleri çok önemli ben uygulamalarımda 10uF 16V kondansatör kullanıyorum hiç bir sıkıntı yaşamadım .
Başlık: Ynt: PIC-MAX232-C#
Gönderen: phiber-optic - 22 Mart 2012, 15:43:39
Dediginiz gibi yaptm kutuplu ile degistrdm. 1uf de yaptm devredekiler 100n di.


Osiloskopla bilgisayara girecek olan kablonun pinlerine bakiyorum 5 ve 2. Pin arasnda +-5v arasinda bir sinyal geliyor kare dalga gibi. Dogru degil mi bu? Ama pc ye taktigim zaman hyperterminalden birsey gorulmuyor
Başlık: Ynt: PIC-MAX232-C#
Gönderen: jozzef - 22 Mart 2012, 18:56:14
PIC'ten veri gönderirken başka bir seri port monitörüyle ( mesela CCS C'nin) terminalden verip gelip gelmediğine baktınız mı?
Başlık: Ynt: PIC-MAX232-C#
Gönderen: phiber-optic - 22 Mart 2012, 19:08:39
Ccs c yi bilmiyorum derleyici olarak hitech c kullaniyorum. Kodu proteusa attgm zaman calisiyor. Ama iste oradaki virtual terminalden inverted secmem gerekiyor gelen verileri. Duzgun olmasi icin. C# ya da pcde herhangi bir yerde boyle birsey yapmam gerekiyor mu? Bir de su an zaten pic e gomulu plan kod microchipin ornek bir uygulamasi usarr test etmek icin ama boyle ya da kendi kodumla calismiyor :/ devre semasini gonderdim. Onun uzerindr c1 ve c2 apasiteleri 1uF ve kutuplubolarak degistrdm. Bir de sanirim orada konnektorun yanlis.bacaklarona gidiyordu sinyal. Onlari pc ye girecek olan ucun 2 ve 5. Pinleri olacak sekilde degistirdim
Başlık: Ynt: PIC-MAX232-C#
Gönderen: kudretuzuner - 22 Mart 2012, 19:20:16
Merhaba
PIC tarafındaki yazılımı bilmiyorum PC tarafındaki C# kodları görürsem yorum yapabilirim,ama VB.Net bana daha kolay geliyor.Ben size PIC tarafında  asm ile yazılmış PC tarafında ise VB.Net kodları da bulunan bir dosya vereyim.Belki işinize yarar.Kolay gelsin.Not:Max 232 den çıkan ve PC'ye giren sinyalin seviyesi   -10v  ile -12v arası olmalıdır.
https://rapidshare.com/files/2578416879/phiber_optic.rar
Başlık: Ynt: PIC-MAX232-C#
Gönderen: phiber-optic - 22 Mart 2012, 19:57:44
gönderdiğiniz dökümanı inceleyeceğim hemen. benim c# kodlarım şu şekilde:



        SerialPort sp = new SerialPort();
        public delegate void SetTextDeleg(string rdata);

     
        private void button1_Click(object sender, EventArgs e)
        {
            try //try to open serial port
            {

            if (sp.IsOpen)
            {
                sp.Close();
                terminal.Items.Add("port kapatıldı");

            }
            else
            {
                sp.PortName = comboBox1.SelectedItem.ToString();
                sp.BaudRate = Convert.ToInt32(comboBox2.SelectedItem.ToString());
                sp.DataBits = 8;
                sp.Parity = Parity.None;
                sp.StopBits = StopBits.One;
                sp.BreakState = true;

                sp.Open();
                terminal.Items.Add("Seri port açıldı");
                sp.DataReceived += new SerialDataReceivedEventHandler(sp_ReceivedData);

            }
            }
            catch (Exception ex) //if error while openning
            {

                MessageBox.Show("Hata mesajı : " + ex.Message);
            }

        }


        private void sp_ReceivedData(object sender, SerialDataReceivedEventArgs e)
        {

            string test;

            try
            {
                test = sp.ReadLine();

                this.BeginInvoke(new SetTextDeleg(sp_DataReceived), new object[] { test });
            }
            catch(Exception ex)
            {
                MessageBox.Show("Hata mesajı : " + ex.Message);               
            }

        }
        private void sp_DataReceived(string rData)
        {


            terminal.Items.Add(rData);

            terminal.SelectedIndex = terminal.Items.Count - 1;
            terminal.SelectedIndex = -1;

        }



devredeki C4 (100nF) ve C5(1uF) hala kutupsuz kondansatörler takılı. acaba bu sorun yapar mı? başka birisi yapmaz dedi ama bilemiyorum ben :/ çok fazla şey okumaktan artık hepsi allak bullak oldu
Başlık: Ynt: PIC-MAX232-C#
Gönderen: EMG81 - 22 Mart 2012, 20:05:54
Alıntı yapılan: JKramer - 22 Mart 2012, 11:32:54
Kondansatörlerin kutuplu olması gerekiyor, yönlerine dikkat ettiniz mi?

Kutupsuz olsada çalışır.

@phiber-optic
Öncelikle Hyper termianal gibi bir programla işlemci kısmında herhangi bir sorun olmadığını teyit et.

Başlık: Ynt: PIC-MAX232-C#
Gönderen: phiber-optic - 22 Mart 2012, 20:08:32
işlemci kısmında bir sorun derken tam olarak ne demek istediniz anlayamadım? pic çalışıyor. led yakma filan oluyor isteğim şekilde tepki veriyor devre içinde. ama max232 den geçirip pc den okumaya çalıştığımda hiçbirşey çıkmıyor ekrana. hyperterminal den bakıyorum zaten orada hiçbirşey gelmiyor ekrana. baudrate vs ayarları doğru
Başlık: Ynt: PIC-MAX232-C#
Gönderen: kudretuzuner - 22 Mart 2012, 20:45:38
Merhaba
C# 'a baktım.Siz string olarak data yolluyorsunuz.Benim size şöyle bir önerim olacak.PIC tarafındaki yazılımı sadece klavye "1" yani bir rakkamını yollamanızı ve bunu da PC'de 49 olarak görmelisiniz.Özetle PIC bir rakkamını H'31' olarak PC'ye yollar ama PC bunu örneğin textbox'ta 49 olarak yansıtır.hex olarak yollanır ama desimal olarak gösterilir.Aşağıdaki tablodan hangi hexile ne yollanabileceği ve de textboxta ne olarak görebileceğinizi gösteren ASCII tablosu var.
http://www.table-ascii.com/ (http://www.table-ascii.com/)
Başlık: Ynt: PIC-MAX232-C#
Gönderen: jozzef - 24 Mart 2012, 10:12:45
Alıntı yapılan: phiber-optic - 22 Mart 2012, 20:08:32
işlemci kısmında bir sorun derken tam olarak ne demek istediniz anlayamadım? pic çalışıyor. led yakma filan oluyor isteğim şekilde tepki veriyor devre içinde. ama max232 den geçirip pc den okumaya çalıştığımda hiçbirşey çıkmıyor ekrana. hyperterminal den bakıyorum zaten orada hiçbirşey gelmiyor ekrana. baudrate vs ayarları doğru
Aslında bunu demek istiyordum, hyperterminal'den baktığınızda veri gelmediğine göre sorun donanımsal. Konunun C# ile bir alakası mevcut değil.
Donanimsal sorunları belli noktalardan sonra tahmin etmek mümkün olamayabiliyor. PIC'in sadece seri iletişim bacaklarında, MAX232de de sorunlar olabilir.
İyi çalışmalar
Başlık: Ynt: PIC-MAX232-C#
Gönderen: jackal183 - 24 Mart 2012, 10:47:03
kablonun pcye girişi uçlarında sinyali görüyorum diyorsun. yanlış anlamadıysam pic çıkışında ve max232 çıkışında ilgili sinyali görüyorsun ama pcde göremiyorsun. bu durumda kullandığın rs232 kablosunu kontrol etmeni öneririm. bazı rs232 kablolarında 2 ile 3 birebir olur, bazı kablolarda ise 2 ile 3 birbirine çapraz olur. bir uygulamamda karşılaşmıştım bu durumla. senin uygulaman için hangisi uygunsa onu kullan.