Seri port üzerinden neden bilgi alamıyorum.

Başlatan dyonizos, 11 Eylül 2011, 16:29:53

dyonizos

selam arkadaşlar.

Device 16F876

Declare XTAL 4
Declare LCD_DTPIN PORTC.4
Declare LCD_RSPIN PORTC.2
Declare LCD_ENPIN PORTC.3
Declare LCD_INTERFACE 4
Declare LCD_LINES 4


AL VAR Byte
GIRIS VAR PORTA.0

pause 1000
LCDOUT $FE, 1
LCDOUT "hadi ya"
pause 1000
LCDOUT $FE, 1
BASLA:
SerIn GIRIS,396,[Wait ("Az"),AL]

LCDOUT $FE,$80 
LCDOUT "ENC=", DEC2 AL ," "
GoTo BASLA


bu kodları kullanarak seri port üzerinden gelen bilgiyi okuyamıyorum. Donanımsal olarakmı bir problem var acaba yoksa bu zaten yanlış bir kodlama mı?
seri portun 5. ground bacagını ve 3. transmit data bacagını kullanıyorum.

tesekkurler

FEHMİ_ASM

#1
    Proton bilmiyorum. Ancak şunu söyleyeyim. Usart'ta Asenkron Half-Duplex iletişim kuracaksan Rx pinini bağlaman yeterli. Ancak Senkron  Seri İletişim için birşey deyemeyeceğim. Tek yönlü iletişim kuracağını varsayarak:
     
    -SPEn biti modül kullanıma hazır varsayıldığında yazılım tarafından L-1 yapılmış mı?
SPEn biti L-1 ise RCIE ve ona izin veren kesmeler aktifleştirilmiş mi? . Eğer aktif  ise FErr ve OErr bitlerini kontrol et. İkisi de hiçbir zaman L-1 olmamalıdır. Bunu soruyorum çünkü yazılımdan şüphen var.

    -Yazılımda debug yaparken RCIF bitini test et, 1 olduğunda hemen RCREG registerini bir sayaç'a kopyala. Kopyaladığın an RCIF kendiliğinden Ljk-0'a çekilmesi lazım. (Eğer çekilmezse Pull-up dirençlerini kontrol et.)

    -Simülasyon programı olarak ISIS kullanıyorsun galiba. Simüle ederken de istediğin gibi çalışmıyor mu?

    -Alıcı ile Vericinin Usart'a ait parametreleri aynı olmalıdır. Veri iletim hızları her ikisi için aynı mı? (PIC için SPBRG, PC için Aktarım Hızı olarak geçer)

    -İşin kısası, RCSTA'yı incele.
   

-Hasan-

FEHMI_ASM Hocam; arkadaşımız yazılımsal (software) seri iletişim kurmak istiyor, siz donanımsal (hardwere) seri iletişim ile ilgili bilgi vermişsiniz.  :)

dyonizos; bilgisayar 2400 baud ' a ayarlı mı? Arada MAX232 var değil mi? Bir de veri göndermeden önce "A" ile "z" ye basıyormusunuz?

FEHMİ_ASM

#3
      Hasan Oguz Hocam,  Sanırım arkadaşımızın ---  seri iletişimin yazılımsal kısmında problem yaşadığını belirttiğini ifade ediyorsunuz. Doğru olabilir, fark etmemişim. Ancak sorunun donanım kaynaklı olabileceğini de belirtmiş. Proton bilmediğimden programın yazılım kısmına girmedim.
       Saygılar efendim.

-Hasan-

Yazılımında bir sıkıntı görmedim. Sorduğum soruları bir cevaplasın bakalım. Eğer yine olmazsa bir şey düşünürüz.

Saygılar, bol elektronikli günler... :)

dyonizos


arkadaşlar
aslında yapmak istediğim su; Orbitron adında bir program var bu program wisp DDE client programı ile ayarladıgımız porta deger gonderıyor. Benım ıstedıgım bu degerlerı okumak. Burada Azimuth ve elevator olarak iki deger almam lazım. Net üzerinde yapanları görüyorum ancak daha önce hiç seri port olayına girmediğim için ne yapacağımı tamda bilemiyorum. Netten bulduğum dökümalara göre Az ve El olarak iki degiskenden bahsediliyor.
Seri porttan gelen degerin tumunu herhangbir degisken belirtmeden gorme sansımız varmı? yanı program seri porta nasıl bır strıng gonderıyor onu tam olarak bulabılmek adına.

tesekkurler

OG

Devreden önce şöyle bir program ile gelen datayı kontrol et,
http://hotfile.com/dl/129580581/562451a/Terminal.exe.html

Sonra devrene bak.
FORUMU İLGİLENDİREN KONULARA ÖM İLE CEVAP VERİLMEZ.

kudretuzuner

Merhaba
Sizin de bildiğiniz gibi Seriporta gelen datalar byte byte paketler halinde belli bir baudrate (1200.....9600..vs)hızında gelir.Bu gelen paketin bayt adedini ve de hızını bilirseniz PC tarafında yazacağınız basit bir program ile görebilirsiniz.Tabii burada dikkat edilecek nokta,örneğin PC'ye gelen,mesela klavyenin bir rakkamı HEX'31' PC'de 49 okunur.PC tarafındaki yazılımda yazacağınız basit bir kod ile bu gelen 49 rakkamını (1) olarak gösterebilirsiniz.Burada kritik bilgi,gelen byte sayısı ve hızıdır.Not:Byte adedi bilinmiyorsa VB kodları:
   Private Sub SerialPort1_DataReceived(ByVal sender As Object, ByVal e As System.IO.Ports.SerialDataReceivedEventArgs) Handles SerialPort1.DataReceived
        Dim gelen As String = SerialPort1.ReadLine
MsgBox(gelen)
   End Sub
SerialPort1_DataReceived evantı ile gelen mesajı,mesaj boxta  (1)bir rakkamını 49 olarak görebilirsiniz.
Ama byte adeti tam bilinirse gelen paketler tek tek işlenerek daha kullanışlı hale getirilir.
Amatör

izzethoca

donanımsal seri port ile  uygulama şuan  çalışıyor birazdaha geliştirmeye çalışıyorum
'****************************************************************
'*  Name    : UNTITLED.BAS                                      *
'*  Author  : [İZZET AKDAĞ]                                     *
'*  Notice  : Copyright (c) 2011 [KONYA EREĞLİ END. MES. LİSES] *
'*          : All Rights Reserved                               *
'*  Date    : 27.08.2011                                        *
'*  Version : 1.0                                               *
'*  Notes   :                                                   *
'*          :                                                   *
'****************************************************************
Include "MODEDEFS.BAS"
Device 16F877A
 XTAL  4
'OPTION_REG=1
ADCON1=7

ALL_DIGITAL = TRUE 
TRISB=0
TRISA=0
PORTA=0
PORTB=0
TRISC=%10000000 
PORTD=%00000000
PORTD=0
RCSTA = 144
Dim VERI[15] As Byte
Dim bilgi As Word
Dim A1 As Byte
Dim A2 As Byte
bilgi=0 
Dim temp As Word


 HSERIAL_BAUD 1200 
  HSERIAL_RCSTA %10010000 
 HSERIAL_TXSTA %00100100
 HSERIAL_CLEAR = On
 
INTCON.7=1
INTCON.6=1 
PIE1.5 = 1 

'On_Hardware_Interrupt GoTo intr
On_Interrupt GoTo intr
'Declare LCD_TYPE 0 'LCD tanimlaniyor
'Declare LCD_DTPIN PORTB.4
   Declare LCD_DTPIN PORTB.4
'Declare LCD_ENPIN PORTB.1
    Declare LCD_ENPIN PORTB.1
'Declare LCD_RSPIN PORTB.0
     Declare LCD_RSPIN PORTB.0
'Declare LCD_INTERFACE 4
Declare LCD_LINES 2
Print $FE,1
DelayMS 500
High PORTC.2
DelayMS 400
High PORTC.3
DelayMS 400
High PORTD.0
DelayMS 400
High PORTD.1
DelayMS 400
Low PORTC.2 :Low PORTC.3: Low PORTD.0 : Low PORTD.1
HSerOut ["I","Z","ZET",13]
DelayMS 10
 HSerOut ["AKDAG",13]
DelayMS 10
BASLA:
HSerOut[VERI[0],VERI[1],VERI[2],VERI[3],VERI[4],VERI[5],VERI[6],VERI[7],VERI[8],VERI[9],VERI[10]]
If bilgi="A" Then High PORTD.1

 Print $FE,$C0,"TEST DEVRESI "
 DelayMS 500

GoTo BASLA
Disable
intr:
Context SAVE

HSerIn [Str VERI]

Print $FE,1
Print $FE,$80,VERI[0],VERI[1],VERI[2],VERI[3],VERI[4],VERI[5],VERI[6],VERI[7],VERI[8],VERI[9],VERI[10]
 Print $FE,$C0,"TEST DEVRESI "
HSerOut[VERI[0],VERI[1],VERI[2],VERI[3],VERI[4],VERI[5],VERI[6],VERI[7],VERI[8],VERI[9],VERI[10]] 
DelayMS 10 
PIR1.5=0 
DelayMS 10
Context Restore
Resume
Enable

End