A

seri iletişimde sorun (YARDIM)

Başlatan ahmet22, 23 Şubat 2013, 02:47:32

ete

Her iki yöne yolladığın bilgilerin sonuna bir adet 10 (line feed)ve 1 adet 13 (carriage return) ekle sorun ortadan kalkar.
Ete

pwm3434

ete  hocam  bu  değini  yapmaya  çalıştım ama sonuç  alamadım.pbp kodlarına  sana zahmet  bakarmısın.
@ DEVICE pic16F876                     'işlemci 16F876                           
@ DEVICE pic16F876, WDT_ON              'Watch Dog timer açık
@ DEVICE pic16F876, PWRT_ON             'Power on timer açık
@ DEVICE pic16F876, PROTECT_OFF         'Kod Protek kapalı
@ DEVICE PIC16F876, LVP_OFF
@ DEVICE PIC16F876, CPD_OFF
@ DEVICE pic16F876, XT_OSC

'---------------------------INPUT-OUTPUT ARRANGEMENT----------------------------
PORTA=0:TRISA=0
PORTB=0:TRISB=0 'PORTB.1 is input all others are output.
PORTC=0:TRISC=%10000000
'-------------------COMUNICATION DEFINES----------------------------------------
ADCON1=7
DEFINE OSC 4
INCLUDE "TANIMLCD"
INCLUDE "TANIMBAUD2400"
'-------------------------VARIABLES---------------------------------------------
Cnt       VAR byte' Cnt is a word variable
inputData1 var byte' variable to receive data into
TEMP      var BYTE 52
POZ        VAR  BYTE:POZ=0:inputData1 =0:Cnt=0

SYMBOL GIE  =INTCON.7   'genel interruptları açıyor
SYMBOL PEIE =INTCON.6   'peripheralinterruptları açıyor
SYMBOL RCIE =PIE1.5     'USART Recive interrupt enable bit
SYMBOL RCIF =PIR1.5     'USART Receive interrupt flag bit
symbol led1=PORTA.0
SYMBOL Led2=PORTA.1
'---------------------------INITIALISATION--------------------------------------
RCIE=1
PEIE=1
GIE=1
INTCON=%11000000
ON INTERRUPT GOTO INT
PAUSE 500:LCDOUT $FE,1:LOW PORTB.2

        START:
LCDOUT $FE,$80,"DEC : ",DEC CNT,13,10 
LCDOUT $FE,$C0,"KARE : ",CNT,13,10
IF POZ<=1 THEN
poz=poz+1
HSerOut  ["bu devre ete hocadan  alintidir. ETE1 ve ETEA ile  led  kontrolu yapilir",13,10] 
HSerOut  ["pİc pc den  den  mousun X ve Y koordinat bilgisini alir"]   
ENDIF
 
IF Cnt="R" THEN
POZ=0
Cnt=0 
endIF
goto start

DISABLE
INT:
    GIE=0
    hSerIn , [WAIT ("ETE"),INPUTDATA1]
    Cnt=inputdata1
    TEMP=RCREG
    GIE=1
    Resume
enable

END


bunlarda  c#  arayüz  kodları  ama  c#' a eklenmesi  gereken  10 (line feed)ve 1 adet 13 (carriage return)  rakamlarını  nereye ekleyeceğim  tam olarak  bilmiyorum   şimdilik  aşağıdaki gibi ve  değişik  kombinas larda  denedim olmadı.

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;
using System.IO.Ports;

namespace serı
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }
        private void timer1_Tick(object sender, EventArgs e)
        {
            int a = MousePosition.X;
            int b = MousePosition.Y;
            textBox3.Text = a.ToString();
            textBox4.Text = b.ToString();

        }

        private void Form1_Load(object sender, EventArgs e)
        {
            timer1.Start();
            timer1.Interval = 1;

        }
       
        private void button1_Click(object sender, EventArgs e)
        {
            if (!serialPort1.IsOpen)
            {
               serialPort1.Open();
            }
            textBox1.Text = "ETE" + textBox3.Text+",13,10";
            serialPort1.WriteLine("ETE" + textBox3.Text + ",13,10");
}
private void button2_Click(object sender, EventArgs e)
        {
           textBox2.Text = serialPort1.ReadLine();
           
            serialPort1.Close();
}

    }
}

ete

Pic tarafında Hserout komutunun sonuna eklemen gerek. Önce 10 sonra 13 olmalı. Sen önce 13 sonra 10 yapmışsın.
İkinci Heseorut komut sonuna da eklememişsin. İkisinede eklemen gerekir.

PC tarafında ise "10,13" şeklinde değil, CHR$10,CHR$13  şeklinde eklemen gerekir sanırım. Yada tırnak kullanmadan 10,13 şeklinde yollasanda olur gibi geliyor bana.

Ete

İlyas KAYA

Konuyu çok takip etmedim ama tanımlamalar kısmını şu şekilde değiştirip denermisin.


'-------------------COMUNICATION DEFINES----------------------------------------
ADCON1=7
DEFINE OSC 4
DEFINE HSER_RCSTA 90h ' Enable serial port & continuous receive
DEFINE HSER_TXSTA 24h ' Enable transmit, BRGH = 0
DEFINE HSER_BAUD 2400  ' 2400 Baud @ 4MHz, 0,17%
DEFINE HSER_CLROERR 1 ' Clear overflow automatically

Göz odur ki dağ ardını görsün,
Akıl odur ki başa geleceği bilsin.!

pwm3434

kayatech  denedim  dediğin  gibi  şimdilik  olmadı.  bu günde  sahladım  ehhe allah  belasını  vermesin  bu  elektroniğin,eğlenceli eğlenceli  olmaya da  ama  işte  biraz  sabır yönünden  külfetli oluyor  neyse  yola  devam :) 

pwm3434

#35
pc seri  port  çıkışındaki bilgileri  pıc'e bağlı  LCD'de göstermek  için  pıc  tarafındaki  alınan  bilgileri  atama  yapılan  değişken  türü  ne  olmalıdır. gelen  veri ise   textbox'a girilen  bilgidir.anladğım kadarıyla  textbox larda herhangi  bir veriyi  gösterebilmek için o  verinin  string  tipinde  olması  gereklidir. durum  böyle  ise   pıc  tarafındaki hserin ile  alınan  bilginin  atandığı  değişken  tipi  nasıl  olmalıdır.
ete hocam  buradaki mesajını okudum, hocam eksiğim  nedir  ki. 
kodlara  bakarmısınız.
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;

namespace serımeftun
{
    public partial class Form1 : Form
    {
       
        public Form1()
        {
            InitializeComponent();
        }

        private void button1_Click(object sender, EventArgs e)
        {
            if (!serialPort1.IsOpen)
            {
                serialPort1.Open();
            }
                 
             byte[] data = {0x01, 0xFF };
            serialPort1.Write(data,0,2); // Bu şekilde bir kullanımda 0×01 ve 0xFF elemanları sırayla porta yazılır.

        }
    }
}


@ DEVICE pic16F876                     'işlemci 16F876                           
@ DEVICE pic16F876, WDT_ON              'Watch Dog timer açık
@ DEVICE pic16F876, PWRT_ON             'Power on timer açık
@ DEVICE pic16F876, PROTECT_OFF         'Kod Protek kapalı
@ DEVICE PIC16F876, LVP_OFF
@ DEVICE PIC16F876, CPD_OFF
@ DEVICE pic16F876, XT_OSC

'---------------------------INPUT-OUTPUT ARRANGEMENT----------------------------
PORTA=0:TRISA=0
PORTB=0:TRISB=0 'PORTB.1 is input all others are output.
PORTC=0:TRISC=%10000000
'-------------------COMUNICATION DEFINES----------------------------------------
ADCON1=7
DEFINE OSC 4
include "modedefs.bas"
INCLUDE "TANIMLCD"

DEFINE HSER_RCSTA 90h ' Enable serial port & continuous receive
DEFINE HSER_TXSTA 20h ' Enable transmit, BRGH = 1
DEFINE HSER_SPBRG 25 ' 2400 Baud @ 4MHz, 0,16%
DEFINE HSER_CLROERR 1 ' Clear overflow automatically
'-------------------------VARIABLES---------------------------------------------
Cnt       VAR byte' Cnt is a word variable
inputData1 var byte' variable to receive data into
TEMP      var BYTE 52
POZ        VAR  BYTE
SONUC      VAR BYTE
DENEME     VAR BYTE
POZ=0:inputData1 =0:Cnt=0:SONUC=0:DENEME=123

SYMBOL GIE  =INTCON.7   'genel interruptları açıyor
SYMBOL PEIE =INTCON.6   'peripheralinterruptları açıyor
SYMBOL RCIE =PIE1.5     'USART Recive interrupt enable bit
SYMBOL RCIF =PIR1.5     'USART Receive interrupt flag bit
symbol led1=PORTA.0
SYMBOL Led2=PORTA.1
'---------------------------INITIALISATION--------------------------------------
RCIE=1
PEIE=1
GIE=1
INTCON=%11000000
ON INTERRUPT GOTO INT
PAUSE 500:LCDOUT $FE,1:LOW PORTB.2

START:
LCDOUT $FE,$80,"CNT:",#Cnt
LCDOUT $FE,$C0,CNT
IF POZ<=0 THEN
poz=poz+1
HSerOut  ["bu devre ete hocadan  alintidir. ETE1 ve ETEA ile  led  kontrolu yapilir",10,13] 
HSerOut  ["pic pc den mous X ve Y koordinat bilgisini alir",10,13]   
ENDIF
 
IF Cnt="R" THEN
POZ=0
Cnt=0 
endIF
goto start

DISABLE
INT:
    GIE=0
    hSerIn ,[INPUTDATA1]
    Cnt=inputdata1
    PAUSE 500
    TEMP=RCREG
    GIE=1
    Resume
enable
END

pwm3434

pıc  den  pc' e gönderdim  ama  pc den  pıc'e ıkısmen   gönderemedim.
aşağıdaki satırlara göre  bılgi değişkeni  nasıl  tanımlamalıyım

serialPort1.WriteLine(textBox5.Text); komutu ile seri porttan giden veri tek başına bir 123 (integer veya byte) değildir. Senin verin '1'  '2'  '3' şeklide char tipinde sıra ile gider. Ayrıca buradaki '1' normla 1 sayısı değil ASCI table deki 1 dir. İşlemci kodunu tam inceleyemedim fakat işlemcin char tipinde veri alacak şekilde yazılım barındırıyorsa tek yapman gereken 3 tane char değeri alıp lcd ye basmak. Zaten bu yüzden sadece yüzler hanesi görünüyordur.
 

Powered by EzPortal