Terminal Programim veriyi karisik karekterlerle gösteriyor.

Başlatan Digimensch, 31 Ağustos 2006, 00:33:46

Digimensch

Arkadaslar ben su CCS Kodu ile PIC'den Serial Port'a veri gönderiyorum.
Kod calisiyor.
#include <16F84A.h>
//#fuses XT,NOWDT,NOPROTECT
#fuses HS,NOWDT,NOPROTECT,NOPUT
#use delay(clock=4000000)
#use rs232(baud=9600,rcv=PIN_A0,xmit=PIN_A1)
void main()
{
while(true)
{
printf("Bu bir Deneme Yazidir\n\r");
}
}

Ame devreyi kurup gercek denememde PC'deki Terminal Programim gelen veriyi cok karisik Karekterlerde'de gösteriyor.
Veri Kodda görüldügü gibi
9600 bautrate ile Serial Porta geliyor.
Terminal Programindada ayarlari aynen
9600
N
8
1
seklinde yapiyorum.Ama ne yaptimsa Karekterleri karma karisik gösteriyor  kullandigim Terminal Programlari.
Ayni Kod ISIS'deki denememde gayet güzel karekterleri iyi gösteriyor.

Veli B.

#use delay(clock=2000000)

Eger 2 Mhz kullanmıyor isen, bir sıfır daha eklemeyi dene.

Digimensch

Devrede 4 MHZ kullaniyorum.
40000000
ve
4000000
seklinde denedim sonuc yine ayni.
Terminal Programi
5#5%5ëåë{¿;-¿w5#5%5ëåë{¿;-¿w5#5%5ëåë{¿;


seklinde gelen veriyi gösteriyor.

SpeedyX

#use rs232(baud=9600,rcv=PIN_A0,xmit=PIN_A1)
Buradaki ayarları pc dekinin aynısı olarak dene.
9600
N
8
1 şeklinde..

#fuses HS,NOWDT,NOPROTECT,NOPUT
osilator u gerçekte kullandığın ile değiştir, mesela XT

Digimensch

Alıntı Yap#use rs232(baud=9600,rcv=PIN_A0,xmit=PIN_A1)
Buradaki ayarları pc dekinin aynısı olarak dene.
9600
N
8

Kullanmakta oldugum terminal Programlarinda Configration bölümünde PIC'e yazdigim Kodlardaki verilerin aynisini ayarliyorum.
Baud rate :9600
Parity:None
Data Bits:8
Stop Bits:1


Ve
#fuses HS,NOWDT,NOPROTECT,NOPUT  satirini
#fuses XT,HS,NOWDT,NOPROTECT,NOPUT  seklinde degistirdim denedim yine ayni olay.
ISIS'de deniyorum ordaki Virtual Terminal karekterleri düzgün sekilde gösteriyor.
Gercek denemede PC'de kullandigim diger Terminal Programlari karekterleri düzgün cikarmiyor.

Logan

@digimensch, piclerde seri port kontrolü yaparken kullandığın clock frekansı ile baud-rate uyumunu göz önünde bulundurman gerekir. Zamanında smart kart programlayıcı yaparken buna benzer sorunları bende yaşamıştım.4 Mhz-9600 baud-rate'de bitleri kaçırabiliyor, hatta alakasız yerlere alakasız veriler atabiliyordu.Sana tavsiyem baud-rate'i düşür, yada clock frekansını yükselt.Umarım sorunu çözersin.Kolay gelsin.
İmza.

kurumahmut

default bit sayısı sanırım CCS de 9 olarak atanıyor son versiiyonlarda bits=8 diye eklemede yapıp bi dene istersen...

bmutlu

kristal frekansı uygun olmayabilir hata bu tüzden olabilir.

uzaylivolkan

Problemin seri datanın pc ye INVERT (terslenmiş) olarak gitmesi
Bunun için araya max232 tampon devre koyman gerekir

Digimensch

@Uzaylivolkan,
Ben bundan önce hic Tampon kullanmadan normal PC'de PIC Basic Kodlar ile bir cok deneme yaptim .Bu sorun ile karsilasmadim.
Ama simdi Leptopda deniyorum ve Leptoptda USB-RS232 dönüstürücü adapter kullaniyorum.
Acaba sorun bundan kaynaklaniyor olabilirmi?

Simdi,
Kodlari arkadaslarin yukardaki anlattiklari sekile getirdim,Baut Rateyi düsürdüm kod icinde bits=8  tanimladim ama yine ayni.
Karekterler anlamsiz geliyor.
#include <16F84A.h>
#use delay(clock=4000000)
#fuses XT,NOWDT,PUT, NOPROTECT
#use rs232(baud=2400,parity=N,xmit=PIN_A0,rcv=PIN_A1,bits=8)

void main()
{
while(true)
{
printf("Bu bir Deneme Yazidir\n\r");
}
}

kurumahmut

bu pinlerde ve de bu PICi daha önce RS232 kullanmıştım. Sorun çıkmamıştı. PC de ama. Labtopta olması sorun çıkarır mı bilemem. Labtoplarda seviyeler farklı olduğunu biliyorum. Acama max232 nin farklı bir versiyonu mu labtoplar için kullanılır bilmiyorum. RS232nin çalışma mantığına bakmak gerek. İçinde bufferlar var. Ama işlevleri hakkında yani gerilim örneklerini nerden aldıkları hakkında bilgim yok.

Bide transmit receive pinlerini doğru bağlamışsındır. inşalllah

rcv atadığın pin rs232nin tx pinine
xmit atadığın pin rs232nin rx pinine bağlanmalıydı. Yanlış hatırlamıyorsam....

XMIT=pin  Set transmit pin
RCV=pin   Set receive pin

helpte bu ifadeler var. Bunları yazarken PIC için demişlerdir herhalde değili? Stajdayım die emin konuşamıyom evde olsam bi deneme yapp kesin bilgiler verirdim. Ama hafta sonu anca....

Uzmanına sorulur....

SpeedyX

invert meselesini denemek kolay.
#use rs232(baud=2400,xmit=PIN_A0,rcv=PIN_A1,parity=N,bits=8,INVERT)

HEXF2

Arkadaşlar C18'de yazdığım kodda 20MHz kristal ile seri porta bilgi gönderirken abuk subuk karakterler alıyorum.PROTEUS'ta deniyorum ama misal "a" gönderiyorum "ç" çıkıyor.Ama kristalı 4MHz yapıp SPBRG = 25 yapınca sorun yok.20MHz'de SPBRG yazmacını düzenleyim gönderme yapınca sapıtıyor.Acaba sorun C18'de mi yoksa PROTEUS'da mı???

Macera

Bendede vardı aynı sorunlar
Breadbordu değiştirdim bütün sorunlarım çözüldü.
"Art without engineering is dreaming; engineering without art is calculating." -- Steven K. Roberts

Digimensch

Alıntı yapılan: "SpeedyX"invert meselesini denemek kolay.
#use rs232(baud=2400,xmit=PIN_A0,rcv=PIN_A1,parity=N,bits=8,INVERT)
@SpeedyX dostum tesekkürler ise yaradi.
Evet arkadaslar INVERT eklenince karekterler düzeldi.

@SpeedyX
Peki,
Eger tampon 232 kullanmiyorsak INVERTI koda kendimiz ekleyerek bu isi haledebilecekmiyiz yani?
Bu Tampon devrenin yapacagini Kod icindeki bu INVERT hallediyormu?