Haberler:

Foruma Resim Yükleme ve Boyut Sınırlaması ( ! )  https://bit.ly/2GMFb8H

Ana Menü

PIC-MAX232-C#

Başlatan phiber-optic, 22 Mart 2012, 01:35:13

phiber-optic

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

jozzef

Merhaba,
"DataRecieved" event'ını kullanıyor musunuz?
Kullanıyorsanız gelen bilgiyi User Interface (UI) aktarmak için Invoke ediyor musunuz?

phiber-optic

Merhaba
Evet kullaniyorum. Ayni kod ile garmin gps ten seri port ile veri alabiliyorum

vitruvius

Kodlarınızı ve şemanızı görmeden yardım etmek zor.

phiber-optic

#4
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??






#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");
}
}

JKramer

Kondansatörlerin kutuplu olması gerekiyor, yönlerine dikkat ettiniz mi?

phiber-optic

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

serhat1990

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/

phiber-optic

gönderdiğiniz link açılmıyor :( direk 320 volt un anasayfasına gidiyor

serhat1990

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 .

phiber-optic

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

jozzef

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ı?

phiber-optic

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

kudretuzuner

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
Amatör

phiber-optic

#14
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