Şimdi Ara

pic rs232

Daha Fazla
Bu Konudaki Kullanıcılar: Daha Az
1 Misafir - 1 Masaüstü
5 sn
6
Cevap
0
Favori
3.361
Tıklama
Daha Fazla
İstatistik
  • Konu İstatistikleri Yükleniyor
0 oy
Öne Çıkar
Sayfa: 1
Giriş
Mesaj
  • merhaba.bir picin rx tx bacaklarının haricinde başka bacakları bu amaçla kullanabiliyor muyuz?
    ccs'nin kullanım kılavuzunda aşağıdaki gibi bir örnek var;

    #use rs232(baud=9600,xmit=pin_c6,rcv=pin_c7,stream=HOSTPC) 

    #use rs232(baud=1200,xmit=pin_b1,rcv=pin_b0,stream=GPS)

    #use rs232(baud=9600,xmit=pin_b3,stream=DEBUG)

    ...

    while(TRUE) {

    c=fgetc(GPS);

    fputc(c,HOSTPC);

    if(c==13)

    fprintf(DEBUG,"Got a CR\r\n");

    }
    gibi..



  • Örnek kodlarını verdiğiniz CCS derleyicisinin rs232 kütüphanesi, hem yazılımsal (rs232 simlasyonu şeklinde, yani istediğiniz pinler kullnılarak) olarak hemde donanımsal (sadece gerçek rs232 pinleri kullnılarak) rs232 kodlarını desteklemektedir. Yani buradaki #use_rs232 önişlmeci komutu ile datasheet'te rs232 ile ilişkilendirilmeyen pinleri kullanırsanız yazılımsal rs232 'yi kullanmış olursunuz. bu da sizi rs232'nin kesmesinden ve buffer özelliğinden mahrum bırakır. Ayrıca yazılımsal rs232'de baudrate ayarının yeterince hassas olmadığını da hatta internal osilatör kullnıldığında receive işleminin çok sıklıkla hatayla oluşabileceğini söylemek isterim.

    Ama bu yazılımsal rs232 'nin en güzel tarafı seri iletişim birimi içermeyen piclerin bile rs232 ile haberleşebilmesidir. Taibiki rs232 data formatını ve inceliklerini biliyorsanız siz simülatif rs232 kodları yazabilirsiniz.

    Daha çok bilgi için CCS derleyicisinin deneme sürümünü indirip oradan help dosyasına bakarsanız oldukça yeterli bilgiye sahip olabilirsiniz. Ama en öenmlisi kullndığınız işlemcinin datasheetini hep gözden geçirmektir. Kolaylıklar dilerim..




  • bu aralar pek bi haşır neşir olmaya çalışıyorum rs232 protokolü ile. fakat birden fazla kanal kullanmak icap etti.buraya yazmadan önce de baya araştırdım ve denemeler yaptım; sonuç gerçek rs232 bacaklarındaki gibi olmuyor.gelen bilgi alakasız ve yanlış oluyor.demek ki dediğin sebeplerden olabülür bu hatalar.teşekkür ederim vermiş olduğun bilgiler için. yine dediğin gibi olayları daha detaylı gözden geçirmeliyim.iyi çalışmalar.
  • Merhaba,

    Her ne kadar bu mikrodenetleyiciler multitasking değilde sırayla işlem yapsalara da akıllı bir tasarım ile bu mümkün olabilir. Eğer yüksek hızlı iletişimleri düşünmüyorsan 18F452 işini görecektir. Aslında burada donanımsal interface kullanmak çok şart değil. Çünkü donanımsal yapının yaptığını pekala yazılımla da yapabiliyoruz.

    Peki donanım ne yapıyor? Herhangi bir bilgi akışı olduğunda çalışmakta olan yazılımı sekteye uğratmadan 1 byte'lık veriler halinde RS232 registerına yerleştiyor. İhtiyacınız olduğunda donanım kesmesi size haber vererek bu bilgiyi alıyorsunuz.

    Öyleyse bunu yazılımla da yapabiliriz? Çünkü PORTB'de herhangi bir hareketlilik olduğunda bizi uyaran donanım kesmesi mevcut. PORTA'da ise bir tane var. Ama yetmiyor tabii, veriyi tamponlamak gerekiyor. Yoksa bir bit bile kaçırdığımızda okunan byte diğer bytle karışırsa sekronizasyon sağlanamayıp okuma hatalı olur.

    Örnek kod vermek gerekirse:

     
    #define GMxTakasBellekBoyutu 64

    BYTE GMxTakasRxBellek[GMxTakasBellekBoyutu];
    BYTE GMxSonrakiGelen = 0;
    BYTE GMxSonrakiGiden = 0;

    int32 z1Say;

    // 9600 hızında, eşlik biti olmadan bir bayt seri iletişimi ayarlar
    #use RS232(baud=9600, parity=N, bits=8, xmit=GMxTXD, rcv=GMxRXD, RESTART_WDT)

    #define GMxKbOran (GMxSonrakiGelen != GMxSonrakiGiden)

    BYTE GMxKarakterAl () {
    BYTE xKarakter;

    while (!GMxKbOran) ;
    xKarakter = GMxTakasRxBellek [GMxSonrakiGiden];
    GMxSonrakiGiden = (GMxSonrakiGiden+1) % GMxTakasBellekBoyutu;
    return(xKarakter);

    #int_rdb
    void SeriBilgiAl() {
    int xTakas;

    GMxTakasRxBellek [GMxSonrakiGelen] = getc();
    xTakas = GMxSonrakiGelen;
    GMxSonrakiGelen = (GMxSonrakiGelen + 1) % GMxTakasBellekBoyutu;
    if (GMxSonrakiGelen == GMxSonrakiGiden)
    GMxSonrakiGelen = xTakas;
    }

    GMxTXD ve GMxRXD değişkenlerini kullanmak istediğiniz portlara ayarlarsınız, bağladığım portlarda kesme olduğu anda (-bkz. #int_rdb) veri okunur ve bir diziye aktarılır. Aslında yukarıdaki kodların bir benzeri CSS yardım dosyalarında da vardır. Ben sadece kendi projeme uyarladım ama tampon oluşturmak çok önemli. Aynısı olması çok şart değil. Teorik olarak CSS'de ne kadar kesme kurabiliyorsanız o kadar kanaldan veri alabilirsiniz demektir. Ben aynı anda deneme yapmadım ama dediğim gibi teorik olarak mümkün. Çalışmalarınızı arasıra geçerseniz biz de öğrenmiş oluruz.

    Kolay gelsin...




  • merhaba

    ben her ne kadar rs232 protokolunu ccs ile hiç denememiş olsamda bu konu hakkında baya bi deneyim sahibi oldum..ben programlarımda hitech yazılımını kullandım..hitech in bildiğimiz c dilinden farkı olmadığı ve kolay olduğu için tercih ettim..

    diğer arkadaşlarında dediği gibi pic in donanımsal desteklediği USART protokolunu kullanmak hem daha kolay hem de daha az hata rsiki olur sanırım..ama daha fazla rs232 giriş çıkış kullanmak zorundaysan bunu yazılımsal olarak port kontrolleriyle yapman daha kullanışlı ve hatasız olur sanırım..dediğim gibi ccs kullanmadığım için yanlış bilgilendirmek de istemem ama bazen yazılımların destekledikleri kodlar programda karışıklığa neden olabiliyor...eğer ccs nin kendi içinde hazır bulundurduğu kodlarla hata oluşuyorsa bence birde port kontrolü yaparak seri iletişimi de çok rahat yapabilirsin

    kolay gelsin....




  • cevaplarınız için teşekkürler.faydalı bir konu oldu.bir örnek uygulama yaptığım zaman buraya geçeceğim.
    iyi çalışmalar..
  • 
Sayfa: 1
- x
Bildirim
mesajınız kopyalandı (ctrl+v) yapıştırmak istediğiniz yere yapıştırabilirsiniz.