Proton ve Usart Seri port

Başlatan Mnemonic, 20 Kasım 2005, 14:15:19

Mnemonic

Selamla
bir projem için 18f452 chip ve proton 2.2.0 beta8 kullanıyorum
Benim sorunum su sekilde bilgisayardan pice ciddi bir veri transferi olacak picte aldıgı veriri I2C eeproma akraracak daha sonra bunu satır satır alım ıslıycek bukısımlarda her halngı bır sorun yok
sorun su noktada olusuyorkı bılgısayar bır text dosyasını gonder dedınmı kopup gonderıyor ve pıc bu arada baska ıslemler yaparken arada verı kayboluyor benım ıstedıgm sey pıcın serı alma ıslemı bıtıpte (satıor ıcın) bunu  I2C ye gonderme esnasında PC ye dur demesı ve yenıden serı almaya hazır oldıgında basla demesını ıstıyorum bunu nasıl yapabılırım acaba bılgısı olan arkadas varmı ?

mhk

Sevgili Mnemonic. Bigisayardaki text dosyasını visual basic , delphi vs gibi programlarla göndermen daha sağlıklı olur. Örneğin visual basic'te bir text dosyasındaki her karakteri tek tek gönderebilirsin. Karakter göndermeden önce ,pic'e kontrol karakteri gönderebilirsin. Örneğin 255 decimal sayısı yada $FF gibi. Pic bu bilgiyi aldıktan sonra veri almaya başlayacağını anlamalı( Bunu pic ile yapabilirsin , 255 gelince veri almaya başla gibi ) $FF ten sonraki bilgiyi pic i2c ye yazar. Sonra geriye $FF bilgisi gönderir ( Veriyi aldım 2. veriyi gönder gibi ) Yine bilgisayar $FF sonra bilgi vs vs. Text dosyası bitene kadar gönderim ve alım yapılabilir. Bu şekilde gönderim ve alımın diğer bir avantajı ise haberleşme belli bir noktadan sonra kesildiğinde gerekli timer bileşenleri ( Visual basic ) ile veri alımının durduğunu hata mesajı ile bildirir. Umarım yardımcı olmuştur.
"Ya olduğun gibi görün, Ya da göründüğün gibi ol..." Mevlana

mmengi

Proton un help inde şöyle bir açıklama var.

SERIN PORTA.0\PORTA.1 , 84 , [SerData]

When SERIN executes, bit-0 of PORTA (Rpin) is made an input in preparation for incoming data, and bit-1 of PORTA (Fpin) is made an output low, to signal "go" to the sender. After SERIN finishes receiving data, bit-1 of PORTA is brought high to notify the sender to stop. If an inverted BaudMode had been specified, the Fpin's responses would have been reversed. The table below illustrates the relationship of serial polarity to Fpin states.

Serial Polarity	Ready to Receive ("Go")	Not Ready to Receive ("Stop")
Inverted	Fpin is High (1)	Fpin is Low (0)
Non-inverted	Fpin is Low (0)	Fpin is High (1)


Bu komut usart ı kullanmıyor ama sana eminim bir fikir verecektir. Gönderdiğin program sanırım windows un api sını kullanıyordur ve sen pic ten ayıracağın 1 pin ile akış kontrolünü elinde tutabilirsin. Yani bu pin ile pc ye pic in meşkul olduğunu ve data göndermemesi gerektiğini bildirebilirsin. Yanılmıyorsam "Data Terminal Ready" pin i bu iş için kullanılıyor. Bununla ilgili geniş detayı netten ufak bir araştırma ile bulabilirsin.

Mnemonic

Çok teşekkür ederim mmengi sanırım bu bilgi yeterli olucaktır.

Mnemonic

Selam arkadaşlar;
Bu konuda yeniden yardımınıza ihtiyacım var çünkü kafayı yemek üzereyim
2 pic arası iletişimde hiç bir sorun yaşamıyorum gayet güzel çalışıyor. Yanlız pic ile PC arasında bağlantı kurduğumda uzun bir veriyi hatasız akıtamıyorum mmengi'nin dediği şekilde bağlantıyı yaptım rx,tx ve cts uçlarının tamamını max232 entegresine sokup ttl to 12V değişimini yaptım kod olarak
serin portb.1\portb.2, 84, [Gorev]
bu sekilde pic flow control datasını gonderıyor ama pc sallamıyor
hyper terminalde eger tuslara tek tek basarsam sorun yok
ama bır texti kopyalar ve hyper terminale yapıştırırsam hızlı oluyor ve veride kayıp oluyor visual basic gibi falanda diller bilmediğim için diğer durumu oluşturamıyorum ne yapabilirim
yaklaşık olarak 200Kblik ir text dosyasını pice gonderip onun uzerimde islem yaptırmam gerekli cunku

bmutlu

Donanımsal uart kullan,uartın kesmesini kullan ve verebiliyorsan seri port kesmesine öncelik ver.

Mnemonic

Yanlız donanımsal uart modulundekı komutlarda flow control uzerıne bir sey soz konusu degıl bunu nasıl yapabılırım bıraz daha acarmısın lutfen

Mnemonic

Arkadaslar ben hala sıkısmıs vazıyetteyım sorunu gıderemedım yardım edebılecek olan varmı acaba
bu arada ben gercek rs232 kullanmıyorum USB konvertorle kullanıyorum sorun bundan kaynaklı olabılırmı acaba

mmengi

öncelikle işlemlerini gerçek bir com port üzerinden yapıp çalıştırmayı dene derim her ne kadar usb seri dönüştürücüsü normal çalışıyor gibi görünsede fifo tarzı buffer larin boyut farklılıklarından sıkıntı çıkıyor olabilir.

Alıntı Yapbu sekilde pic flow control datasını gonderıyor ama pc sallamıyor

dediğine göre belkide dönüştürücünün dtr ucu adam gibi çalışmıyor olabilir bunun pc ye gittiğini bir port monitörü ile bir kontrol et istersen.


pic in usart ını interrupt ile kullanıyorsan data gelip int. oluştuğunda flow portunu set yada reset yaparsın pc göndermeyi durdurur sen pic in bufferindeki datayı aldıktan sonra int. den çıkarken tekrar flow u açarsın 2. 8bitlik datayı beklersin. bunu deneyerek oturtabilirsin diye düşünüyorum.

Zaten usart ı ve usart int. larini kullanırsan zaten follow kontrole gerek kalacağını sanmıyorum ama bunu yaparken basic komutlarını kullanma kendin register kontrollerini yaparak işi çöz bu çok daha fazla hız sağlayacaktır sana. 20mhz. saat hızında 250000 baud luk bir hızda bile hiç bişi kaçırmıyor çünkü.