serout ile veri gönderme hatası bir türlü olmuyor.?

Başlatan forumsad, 21 Mart 2011, 11:33:49

forumsad

arkadaşlar tüm denemelerimde hatalı veri gidiyor anlayamadım gitti

proton+içindeki serial communicator açtım
ayarları:
Com1
9600 baud
No parity
byte size is 8
1 stop bit


ayarlı

veri gönderdiğim kod aşağıdakigibidir:
Device 16F877A ;ENTEGRE TANIMLAMA
Xtal 4 ;KRISTAL FREKANSI 
'------------------------------------------------------------------------

TRISC=%10000000
PORTC=0 


    Declare SERIAL_DATA 8           ' Set SERIN and SEROUT data bits to 8 (default) 
    Symbol RS_IN  = PORTC.7         ' RS232 Data-Pin "T1_IN" (Pin12) on PortC.7 
    Symbol RS_OUT = PORTC.6         ' RS232 Data-Pin "R1_OUT" (Pin11) on PortC.6 
    All_Digital=TRUE                    'bütün portlari djital (1-0) yap 
   ' SERIAL_PARITY = ODD    ' Use if odd parity desired





'//////////////////////////////////////////////////////////////////////////
BASLA:
'SerOut PORTC.6 , 9600 , [ 65 ]
'SEROUT PORTC.6 , 16468 , [ 65 ]
'SerOut PORTC.6 , 16468  , [ 65 ]
'SerOut PORTC.6 , 16468 , [65, 13] 
'SEROUT RS_OUT ,16468,["PIC1", "A"]   'bilgileri gönder
SerOut RS_OUT ,16468,["PIC1", 49]   'bilgileri gönder

DelayMS  500


GoSub BASLA
'--------------------------------------------------------------------------------------------------------------



End



kodlar
ååååååååå

şeklinde gidiyor

neyi hatalı yapıyorum anlayamadım internetdeki bir çok öörneği denedim sonuç aynı

yardımlarınızı bekliyorum

teşekkürler

forumsad

SerOut RS_OUT ,84,["PIC1", "merhaba"]   'bilgileri gönder

84 yaptığımda çalıştı oysa
BaudRate 8-bit no-parity  inverted 8-bit no-parity true

9600            16468                           84

burda 16468 ile 84'ü neye göre seçiyoruz ??


9600 baud--No parity--byte size is 8--1 stop bit    karşılığı 84 ise
?                      ?                  ?                      ?         karşılığı  16468


teşekkürler

alayli

Aralarındaki fark inverted ve true farkıdır. Inverted'da datalalar lojik ters gider. 1'ler 0, 0'lar 1 olarak gider. Proton+ help dosyasında ayrıntısı var. Bu rakamlara bu kadar kafa yormanıza gerek de yok. Serin, Serout komutları çok daha ilkel olan Melabs PBP uyumu içindir. PBP'den Proton+'a geçenler için alıştıkları şekliyle kod yazabilsinler diye...

Oysa siz Proton+'ı yeni öğreniyorsunuz. RSIn ve RSOut gibi güzel komutları var Proton+'ın. Gerekli deklarasyonları yaptıktan sonra kullanımları çok daha sade. Deklarasyonlar:

Declare Rsout_Pin = Port.Pin ' RSOut komutuyla gönderilecek veri için çıkış pinini tayin eder. Çıkış olarak çalışan her port ve pin uygundur. Deklarasyon yapılmazsa varsayılan pin PortB.0 'dır.
Declare Rsin_Pin   = Port.Pin ' RSIn komutuyla alınacak veri için giriş pinini tayin eder. Giriş olarak çalışan her port ve pin uygundur. Deklarasyon yapılmazsa varsayılan pin PortB.1 'dir.
Declare Rsout_Mode_Inverted = True veya false (yada  1 veya 0 kullanabilirsin) ' Gönderilen data terslenmiş mi olacak buradan  tanımlanır. (true = 1 = terlenmiş) Deklarasyon yapılmazsa varsayılan olarak terslenmiş data gider.
Declare Rsin_Mode_Inverted = True veya false (yada  1 veya 0 kullanabilirsin) ' Alınan data terslenmiş mi olacak buradan  tanımlanır. (true = 1 = terlenmiş)  Deklarasyon yapılmazsa varsayılan olarak terslenmiş data alınır.
Declare Serial_Baud = 0 to 65535 bps (300, 600, 1200, 2400, 4800, 9600, 19200, 38400, 57600 vb.) RSIn ve RSOut komutlarıyla yapılacak veri alışverişinin baud değerini tanımlar. 4MHz kristal ile en garantili baud değeri 9600'dür. Daha yüksek hızlar için daha yüksek çalışma frekansları gerekir. (8, 10, 12, 16, 20 MHz gibi) Deklarasyon yapılmazsa varsayılan değer 9600 baud'dur...

Diğer ayrıntı deklarasyonlar (help : Rsin - Rsout Declares) ve data gönderim alım örnekleri (help: HRSIn ve HRSout komutları)  için Proton+ help e bakabilirsin.
Anca kazganmiş itmiş ilimiz törümüz erti. Türk Oguz begleri budun esiding. Üze tengri basmasar, asra yir telinmeser, Türk budun, ilingin törüngin kim artati? (udaci erti)

forumsad


aşagıdaki kod şu anda işimi görüyor ama dediğiniz gibi boş bir vakitte en yakın zamanda RSIn ve RSOut  uygulamaları deneyeceğim

hserin ve hserout denemelerim rs485 ile başarısız oldu....

herşey için teşekkürler

Device 16F877A ;ENTEGRE TANIMLAMA	
Xtal 4 ;KRISTAL FREKANSI 	
'------------------------------------------------------------------------	
	
TRISC=%10000000	
TRISE=%00000000
PORTC=0 
PORTE=0 	
	
	
'LCD TANITMA BOLÜMÜ.....................................................................................	
'-----------------------------------------------------------------------	
Declare LCD_DTPin PORTD.4	
Declare LCD_ENPin PORTD.3 'LCD "E" pin portb nin hangi bitine baglidir.	
Declare LCD_RSPin PORTD.2 'LCD "RS" pin portb nin hangi bitine baglidir.	
Declare LCD_Interface 4	
Declare LCD_Lines 4	
'---------------------------------------------------------------------- 	
	
'Hserial_Baud = 9600        ' Set baud rate to 9600						
'Hserial_RCSTA = %10010000  ' Enable serial port and continuous receive						
'Hserial_TXSTA = %00100100  ' Enable transmit and asynchronous mode 						
'Hserial_Clear = On         ' Optionally clear the buffer before receiving						
'Hserial_SPBRG= 25						
	
Declare SERIAL_DATA 8           ' Set SERIN and SEROUT data bits to 8 (default) 	
Symbol RS_IN  = PORTC.7         ' RS232 Data-Pin "T1_IN" (Pin12) on PortC.7 	
Symbol RS_OUT = PORTC.6         ' RS232 Data-Pin "R1_OUT" (Pin11) on PortC.6 	
All_Digital=TRUE                    'bütün portlari djital (1-0) yap 	
	
	
Dim SerString[8] As Byte	
Dim MYARRAY [10] As Byte   ' Create a 10-byte array.


Print At 1,1,"test"	
'//////////////////////////////////////////////////////////////////////////	
BASLA:
PORTE.2=1
PORTE.1=0

PORTC.5=0           '877 den max485'e veri gönderme izni iptal
PORTC.4=1           'com dan max485'e veri gönderme izni verildi

'SerIn RS_IN , 84 , [Str SerString\8]
SerIn RS_IN , 84 , [Wait ("###ETE"),Str SerString\8]

Print At 2,1,Str SerString			
DelayMS  100
If SerString[0]="A"  Then GoTo verigonder


	
GoSub BASLA	
'--------------------------------------------------------------------------------------------------------------	
 
 
verigonder:

PORTC.5=1           '877 den max485'e veri gönderme izni verildi
PORTC.4=0           'com dan max485'e veri gönderme izni iptal

PORTE.1=1
SerOut RS_OUT ,84,["PIC1", "merhaba"]   'bilgileri gönder

DelayMS  200

PORTC.5=0           '877 den max485'e veri gönderme izni iptal
PORTC.4=1           'com dan max485'e veri gönderme izni verildi

Cls	
GoSub BASLA	           	
End