pic basic pro ile serial iletişim..

Başlatan madmax, 01 Kasım 2002, 10:40:48

dombilik

DEFINE CHAR_PACING 1000
yazdığımda sadece DOMBİLİK karakterinin ilk karakteri hariç diğerleri cuk oturdu
fakat 30000 lere kadar büyüttüğüm halde öylece kaldı ..
şu an ilk karakterin dışında problemim kalmadı :)
Bildiklerini kime miras bıraktın?kimseyemi? O zaman bildiklerinin ne önemi kalır. ******** /////////// ******** PROTON-ASM PROTEUS 7.4 SP3 EAGLE 5.40

CaFFeiNe

PORTC.6 ile VTI terminalin RXD ucunu birbirine direk bağlama araya 1K direnç koy problem çözülecek hatta DEFINE CHAR_PACING 1000 satırını silsen bile çalışacak az önce denedim

dombilik

Teşekkürler caffeine ustam
problem çözüldü..
normale geldi sağol..
önceki sayfada hyper terminal ve COMPIM ile ilgi bir sorum daha vardı birde ona bir el atıverseniz :D
Bildiklerini kime miras bıraktın?kimseyemi? O zaman bildiklerinin ne önemi kalır. ******** /////////// ******** PROTON-ASM PROTEUS 7.4 SP3 EAGLE 5.40

CaFFeiNe

compim denilen komponenti biraz inceledim pcnin seri portlarına ulaşmaya yarıyor ve gerçek dış dünya ile simülasyonunu birbirine bağlayabiliyorsun mesela bu componentle elinde seri porta bağlanan bir cihaz varsa bununla haberleşebilirsin (modem, eski tip mouselar, çeşitli endüstriyel kartlar olabilir mesela S7 kablosu ve S7 serisi plcler bile olabilir )
ama bu komponenti kullanarak hyperterminal olayının olacağını zannetmiyorum

forsa1975

Arkadaşlar birkaç gündür forumda serin2 serin komutlarını aradım. Ne yaptıysam bir türlü pc/pic arası haberleşmede pc den pice veri göndermede tam bir başarı yakalayamadım. Picden gelen bilgilerde sorun yok. Fakat serin2 komutunu kullanınca pic bilgi göndermez oluyor. Ve pc den giden bilgileri sağlıklı okuyamıyor. Aynı anda( veya aynı programda sırayla)  hem veri alan hemde gönderen bir program yapmaya çalışıyorum.  O kadar çok deneme yanılma yaptımki bıktırdı artık.

Include "modedefs.bas"          ' Include serial modes
 
DEFINE ADC_BITS      10 ' ADC sonucu 10 bitlik
DEFINE ADC_CLOCK     1  ' ADC saat kaynağı( 0=oscillator/8 )
DEFINE ADC_SAMPLEUS  100 ' ADC örnekleme zamanı us cinsinden


define CHAR_PACING 1000

 

ADCON1 = 4
TRISC=%11111111
TRISB=%10000001
TRISD=%00000000
trise=%111111111
a var byte
B0 var word
giden var word
gelen var byte
portcg var word
port var byte
pin var byte
degeri var byte
bitir var byte
POT_DEG1 var word

portd0 var byte
portd1 var byte
portd2 var byte
portd3 var byte
portd4 var byte
portd5 var byte
portd6 var byte
portd7 var byte
pa var byte
pe var byte
pb var byte
pc var byte
pd var byte
pag var word
peg var word
pbg var word
pcg var word
pdg var word
sayisal var byte
sonuc var byte


pa=3
pb=0
pc=1
pd=0
pe=1

port=0

pin=0
degeri=0
bitir=0
pag="3"
pbg="1"
pcg="2"
pdg="1"
peg="2"

'Serout portb.7,T2400,[" Seri Port Deneme programı "]
portb=0
portd=0
oku:

'serin2 portb.6,396,100,yaz,[WAIT("h"),port,pin,degeri]
'hserin portb.6,T2400,100,yaz,WAIT ("h"),port
'HSERIN {ParityLabel,}{Timeout,Label,}[Item{,...}]
port=0

Serin2 portb.6,396,100,yaz,[WAIT("ha"),port]',pin,degeri]
'Serin2 portb.6,396,150,yaz,[WAIT("s"),pin]
'Serin2 portb.6,396,150,yaz,[WAIT("v"),degeri]
pin=4
degeri=1

if port=4 then
if pin=0 then
portd.0=degeri
endif
if pin=1then
portd.1=degeri
endif
if pin=2 then
portd.2=degeri
endif
if pin=3 then
portd.3=degeri
endif
if pin=4 then
portd.4=degeri
endif
if pin=5 then
portd.5=degeri
endif
if pin=6 then
portd.6=degeri
endif
if pin=7 then
portd.7=degeri
endif

endif



yaz:


'write 1,port
'write 2,pin
'write 3,degeri


Serout portb.7,T2400,["k"]
Serout portb.7,T2400,[pag]
Serout portb.7,T2400,[pbg]
Serout portb.7,T2400,[pcg]
Serout portb.7,T2400,[pdg]
Serout portb.7,T2400,[peg]
Serout portb.7,T2400,["l"]
'endif

Serout portb.7,T2400,["u"]
 FOR a = 0 TO 2 ' Count from 0 to 5
  
        LOOKUP2 a,[port,pin,degeri],giden ' Get character number B0 from string to variable B1
       
        LOOKUP giden,["0123456789"],sonuc ' Get character number B0 from string to variable B1
        Serout portb.7,T2400,[sonuc]
        
 NEXT a ' 


Serout portb.7,T2400,["a"]

if pa<3 then

    for a=0 to 5
        LOOKUP2 a,[porta.0,porta.1,porta.2,porta.3,porta.4,porta.5],giden
 
        if giden=1 then
            Serout portb.7,T2400,["1"]
        else
            Serout portb.7,T2400,["0"]
        endif
        pause 1
    next a
else
    Serout portb.7,T2400,["000000"]
    pause 1
endif

pause 1

Serout portb.7,T2400,["b"]
pause 1
for a=0 to 7
LOOKUP2 a,[portb.0,portb.1,portb.2,portb.3,portb.4,portb.5,portb.6,portb.7],giden
if giden=1 then
Serout portb.7,T2400,["1"]
else
Serout portb.7,T2400,["0"]
endif
pause 1
next a

pause 2

Serout portb.7,T2400,["c"]
pause 1
for a=0 to 7
LOOKUP2 a,[portc.0,portc.1,portc.2,portc.3,portc.4,portc.5,portc.6,portc.7],giden
if giden=1 then
Serout portb.7,T2400,["1"]
else
Serout portb.7,T2400,["0"]
endif
pause 1
next a

pause 2

Serout portb.7,T2400,["d"]
pause 1
for a=0 to 7
LOOKUP2 a,[portd.0,portd.1,portd.2,portd.3,portd.4,portd.5,portd.6,portd.7],giden
 
if giden=1 then
Serout portb.7,T2400,["1"]
else
Serout portb.7,T2400,["0"]
endif
pause 1
next a
pause 2

Serout portb.7,T2400,["e"]
pause 1
if pe<3 then
for a=0 to 2
LOOKUP2 a,[porte.0,porte.1,porte.2],giden

if giden=1 then
Serout portb.7,T2400,["1"]
else
Serout portb.7,T2400,["0"]
endif
pause 1
next a
else
Serout portb.7,T2400,["000"]
pause 1
endif

Serout portb.7,T2400,["z"]
pause 1
    
goto oku
 
  

end



koddaki dağınıklık için özür önemli olan serin komutu


 

Lütfi AYYILDIZ

'Serout portb.7,T2400,[" Seri Port Deneme programı "]
portb=0
portd=0
oku:

'serin2 portb.6,396,100,yaz,[WAIT("h"),port,pin,degeri]
'hserin portb.6,T2400,100,yaz,WAIT ("h"),port
'HSERIN {ParityLabel,}{Timeout,Label,}[Item{,...}]


Sanırım bu kodların işlenmesi için biraz gecikmekler kullanma gerek . Dikkat edersen hiç gecikme kullanmadan komutları ard arda yazmışsın. Birde aralara 50 veya 100ms lik gecikmelerle dene.

forsa1975

portb=0 
portd=0 
oku: 

'serin2 portb.6,396,100,yaz,[WAIT("h"),port,pin,degeri] 
'hserin portb.6,T2400,100,yaz,WAIT ("h"),port 
'HSERIN {ParityLabel,}{Timeout,Label,}[Item{,...}] 
port=0 

Serin2 portb.6,396,100,yaz,[WAIT("ha"),port]',pin,degeri] 
'Serin2 portb.6,396,150,yaz,[WAIT("s"),pin] 
'Serin2 portb.6,396,150,yaz,[WAIT("v"),degeri]


yukarıdaki serin komutlarından sadece biri çalışır durumda diğerleri ' ile  iptal edildi. Amacım; bu komutu şu şekillerde kullanmayı denedim demekti.

Bu arada problemimi çözdüm. Program istediğim şekilde çalışıyor.
Şimdi de com portlarda problem var. Com1 seri iletişim portu data gönderiyor fakat picden gelen datayı almıyor.

 Bu olay com3'e bir pcsuit telefon programı kurulduktan sonra oldu. Çakışma gözükmüyor.
Bi türlü düzeltemedim. Programı kaldırmam fayda etmedi. Com2 de ise
gelen data eksik geliyor. Ortak kullanılan bir pc olduğu için format atıp tekrar işletim sistemi kurmak istemiyorum.

nuh

ALIN ARKADAŞLAR SİZİE PROBLEMSİZ ÇALIŞAN Bİ PROGRAM PIC 16F877 NİN USART MODÜLÜNÜ KULLANIYOR 16F628 LEDE KULLANABİLRSİNİZ DEVRE ŞEMSI İÇİN NUH86@HOTMAİL.COM A MESAJ ATIN YOLLAYAYIM İYİ ÇALIŞMALAR.......


ALLAH'A EMANET OLUN




DEFINE LCD_DREG     PORTD
DEFINE LCD_DBIT     0    
DEFINE LCD_RSREG    PORTE
DEFINE LCD_RSBIT    0
DEFINE LCD_EREG     PORTE
DEFINE LCD_EBIT     1
DEFINE LCD_LINES    2
DEFINE OSC 4
DEFINE LCD_BITS   8

DEFINE HSER_RCSTA 90H
DEFINE HSER_TXSTA 20H
DEFINE HSER_BAUD 2400
DEFINE HSER_CLROERR 1

COMMAND VAR BYTE


ADCON1=7
PORTE.2=0
PAUSE 100
LCDOUT $FE,1
COMMAND=0
'********************************************************************
'****************************   ANA MENU   **************************
BASLA:
PAUSE 2000
LCDOUT $FE,1,"PROGRAM HAZIR"
LCDOUT $FE,$C0,"NUH TAMGUC"
PAUSE 1000

START:
COMMAND=0
HSERIN [COMMAND]
IF COMMAND = "8" THEN
LCDOUT $FE,1
ENDIF
IF COMMAND = "1" THEN
GOTO SATIRA
ENDIF
IF COMMAND = "2" THEN
GOTO SATIRB
ENDIF
GOTO START

SATIRA:
HSEROUT ["1.SATIR YAZ"]
DONGUA:
COMMAND=0
HSERIN [COMMAND]
IF COMMAND=27 THEN
GOTO START
ENDIF
IF COMMAND = "8" THEN
LCDOUT $FE,1
ENDIF
LCDOUT COMMAND
GOTO DONGUA

SATIRB:
HSEROUT ["2.SATIR YAZ"]
DONGUB:
COMMAND=0
HSERIN [COMMAND]
IF COMMAND=27 THEN
GOTO START
ENDIF
IF COMMAND = "8" THEN
LCDOUT $FE,1
ENDIF
LCDOUT $FE,$C0, COMMAND
GOTO DONGUB
GOTO START
   END

OG

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

net65

ben 2 pic arasi seri iletisimli veri alıp vermek istiyorum fakat string(8 karatter kadar yeterli) alıs verisini nasıl yapacagim bilmiyorum.

lütfen yardimci olursanız sevinirim...

vatandas30

arkadaşlar benim şöyle bir sorunum var.
pc ile pici haberleştiriyorum. picin usart modulunu kullanıyorum.pic aldığı verileri harici eproma yazıyor ve sonra buradan okuyor. buraya kadar herşey normal. okuma yaparken eğer pc den yeni bilgi gelirse bilgileri alıp tekrar eproma yazmasını istiyorum. kaçırma olayı olmaması için portun cts ucunu pice bağladım. pic meşgul iken cts=1 yapıyorum.
sorun şu:
cts ucunu 1 yaptığım halde hyperterminal yavaş yavaş verileri göndermeye çalışıyor. ve böyle olunca da ilk karakterler kaçıyor. okuduğum tüm kaynaklarda yazdığına göre cts=1 iken pc nin veri göndermemesi gerekiyor. acaba hyperterminalde bilmediğim bir ayar mı var?
ayrıca kesme kullanamıyorum. çünkü program hafızası yetmiyor. belli aralıklarla veri var mı diye programı dallandırıyorum.
yardımlarınızı bekliyorum.