Şimdi Ara

1000ms de 9600 bit veriyi nasıl okurum ?

Daha Fazla
Bu Konudaki Kullanıcılar: Daha Az
1 Misafir - 1 Masaüstü
5 sn
16
Cevap
0
Favori
591
Tıklama
Daha Fazla
İstatistik
  • Konu İstatistikleri Yükleniyor
0 oy
Öne Çıkar
Sayfa: 1
Giriş
Mesaj
  • Arkadaşlar 16F84 te seri porttan veri okumayı çalışıyorum. 9600bps hızına ulaşmam için sanırım 1 sn de 9600 bit veri okumalıyım. prescaller ve tmr0 olaylarını 1ms ye göre ayarlarsam 1 saniyede 1000 sayar. Bunu nasıl çözebilirim ?
    Yine benzeri bir şekilde callerid devresinde 250ms de 240bit veri okumam gerekiyor. tmr0 sayacı ile 1 saniyede 1000milisaniye sayacak şekilde kursam ve her bir milisaniyede 1 bit okusam diyorum ama süreler eş değil (1000-9600). Bu bölümleri nasıl yazmalıyım.



  • www.bilgeyazilim.net adresindeki MAKALELER kısmı yardımcı olabilir... Benim bir öğrencimin açtığı
    PİC ,PLC ,PLC-PC haberleşmesi ve yazılım konularında da geniş bilgi sahibi olabileceğiniz bir site ...Bir göz atın....
  • projenizde F84 yerine F628 kullanırsanız seri iletişim için PICin UART özelliğini kullanırsınız ayrıca CallerID özelliği için de gereken timer değerlerini tmr0 modülünü kullanarak rahatça halledersiniz...
  • valla PICC'de

    #USE RS232(BAUD=9600, XMIT=PIN_A0, RCV=PIN_A1, PARITY=N, BITS=8, STREAM=serial_data)
    //ayarlamalar. sırasıyla: sembol hızı, yollama pini, alma pini, eşlik biti, yollanacak veri gruplarının bit sayısı, seri yol adı (birden çok seri yol varsa okurken aşağıdaki gibi yapılıyor)

    serial=fgetc(serial_data); //okuma işlemi
  • quote:

    Orjinalden alıntı: r2d2droids

    projenizde F84 yerine F628 kullanırsanız seri iletişim için PICin UART özelliğini kullanırsınız ayrıca CallerID özelliği için de gereken timer değerlerini tmr0 modülünü kullanarak rahatça halledersiniz...


    F628 deki uart denen şeyi hiç duymadım. Microchip.com dan indirdiğim datasheet içerisinde de uart ile ilgili hçiç bir bilgi yok, biraz anlatırmısınız lütfen.
  • doğrusu USART olacak yanlış yazmışım
  • arkadaşlar PIC in her modeli ile 9600 baud haberleşilir. UART olmasına gerek yok.

    Dostum 9600 baud haberleşmede 1 bit toplam 104 mikrosaniyedir. hatta 104,2 mikro diyebiliriz.

    8 Bit haberleşmede 1 Start Biti+8 Bit Data+Stop biti şeklinde düşünürsek. Ve UART nin hakkını vermek içinde biti tam ortasında okumanın en faydalı yöntem olduğunuda unutmadan...
    Not: Stop biti LOW seviyededir

    İlk adım şu
    1 Hattımız Normalde HIGH seviyede.
    2 Hat LOW'a iner inmez Timerını kur. Öyle ayarlaki 1 Bit 104 mikrosaniye ya, gelende bir Start bitimi diye kontrol edeceksin. O halde 104/2 52mikrosaniye sonra zamanda Start bitinin ortasında olursun. Ancak hazırlıkların içinde bir 10 mikrosaniye falan geriye alsan. PortChange interruptı patlayınca Timerını 42 mikrosaniye sonrasına kur. Ve çık. Interrupt patladığında biti tam ortasında okumak için daha 10 mikrosaniyen olur ve ondan sonra işini bitirip çıkmak içinde 52 mikrosaniyen olur. O arada ilk bit için kurarsın. İlk bit MSB dir. Mantık basitce bu dostum.

    Unutma program kodu işletirken zaman geçiyor. Bit kaybolmadan işini hallet!!!

    İstersen bu işi yapan Rutini sana yollayabilirim. Hem Timerlı hem 4 byte haberleşme yapıyor. Hemde F84 de çalışır. Yani UART olmayan modellerde bile.




  • Yapay Zeka’dan İlgili Konular
    Daha Fazla Göster
  • Evet belki bütün PIC'lerde seri haberleşme rutinleriyle bu yapılabilir.Ancak bu yazılıma bir yük getirecektir ve işlemci gücünün önemli kısmı haberleşmeye harcanacaktır.USART bulunan modellerde ise bu donanımla yapıldığından programlar daha hafif olacaktır.Ayrıca şu zamanlarda 16f628 16f84 ile aynı fiyatta satılıyor(daha ucuz da olabilir)
  • belki. zaten bu çözüm F84 gibi entegreler içindir. Ama yinede Timer ile yapıldığı ve 4 Byte haberleşme olduğunu düşünürsek. Birkaç milisaniyede işimizi bitirdiğimiz varsayarsak. OVERHEAD olayı minimuma inecektir. Zaten PIC le motor kontrolü yapmadığınız sürece, interruptlar ile oyalanmanın çokda önemi yok bence. Hani 3 Faz PWM üretseniz size katılırdım ama, alt tarafı bir adet sayma yada sıcaklık ölçme gibi verileri PC ortamına atacaksak işlemci yükü neden haberleşmede olmasınki?



    < Bu mesaj bu kişi tarafından değiştirildi bahabur -- 11 Ağustos 2006; 11:25:02 >
  • quote:

    Orjinalden alıntı: bahabur

    arkadaşlar PIC in her modeli ile 9600 baud haberleşilir. UART olmasına gerek yok.

    Dostum 9600 baud haberleşmede 1 bit toplam 104 mikrosaniyedir. hatta 104,2 mikro diyebiliriz.

    8 Bit haberleşmede 1 Start Biti+8 Bit Data+Stop biti şeklinde düşünürsek. Ve UART nin hakkını vermek içinde biti tam ortasında okumanın en faydalı yöntem olduğunuda unutmadan...
    Not: Stop biti LOW seviyededir

    İlk adım şu
    1 Hattımız Normalde HIGH seviyede.
    2 Hat LOW'a iner inmez Timerını kur. Öyle ayarlaki 1 Bit 104 mikrosaniye ya, gelende bir Start bitimi diye kontrol edeceksin. O halde 104/2 52mikrosaniye sonra zamanda Start bitinin ortasında olursun. Ancak hazırlıkların içinde bir 10 mikrosaniye falan geriye alsan. PortChange interruptı patlayınca Timerını 42 mikrosaniye sonrasına kur. Ve çık. Interrupt patladığında biti tam ortasında okumak için daha 10 mikrosaniyen olur ve ondan sonra işini bitirip çıkmak içinde 52 mikrosaniyen olur. O arada ilk bit için kurarsın. İlk bit MSB dir. Mantık basitce bu dostum.

    Unutma program kodu işletirken zaman geçiyor. Bit kaybolmadan işini hallet!!!

    İstersen bu işi yapan Rutini sana yollayabilirim. Hem Timerlı hem 4 byte haberleşme yapıyor. Hemde F84 de çalışır. Yani UART olmayan modellerde bile.



    Eğer 104 mikroda bir bit okur isem 104x9600 = 998400, ilk bitide 52. mikroda okuduğumu düşünür ise +52 = 998452, 1 saniyeden 1548mikrosaniye önce bitirmiş olmuyormuyum ? bu durumda 14,8 adet biti almamış olacakmışım gibi geliyor.

    Birde MSB nedir verinin gelmeye başladığını söyleyen 9600 bitten hariç bir bit falanmı ? eğer öğle ise geriye 13.8 bit kalıyor ????

    "Stop biti low dur, hat sıfıra iner inmez timerı kur" demişsiniz. start biti de her zaman low mudur ?


    Eğer çok karışık değil ise rutini gönderebilir isen sevinirim tyilgin@yahoo.com

    İlgin ve cevabın için teşekkür ederim.




  • Tamam. adresine hemen gönderiyorum

    HEADER File ve INTERRUPT.ASM yi

    Sen gerekli düzenlemeleri yaparsın.
    F84 için geliştirmiştim zamanında ve C711 ilede denemiştim. (Analog Kanallı EEPROMSUZ Flaşsız)

    9600 Baud haberleşme yapar.
    Protokol şu.

    Bilgisayar 4 Byte gönderir. (Visual Basic de şöyle Port tanımla (9600,n,8,1) Parity yok 1 Stop biti
    1. BYTE Ağdaki adres. (RS485 olursa hangi cihaza soru sorduğu belli olsun diye)
    2. BYTE Komut. (YAZMA yada OKUMA Bu şu demek. PC OKUMA yaparsa PIC cevap yollar. YAZMA yaparsa sadece verilen emiri yapar.
    3. BYTE Değişecek değişkenin PIC deki adresi.
    4. BYTE Değişecek değişkene verilecek değer.

    Sen artık kendi isteğine göre değiştir.
  • yalnış yazmışım.
    Start LOW dur. STOP HIGH dır. Yalnız bunlar RS-232 nin TTL sinyale çevrilmiş halidir. yani -12 Volt a karşılık 5Vdc
    (MAX232 Entegresi mesela anımsayın)

    PC nin TX hattı Normalde HIGH seviyededir.

    Start vermek için LOW'a çeker
    Sonra 8 Bit yollar
    Sonra HIGH'a çeker Bu en salt halidir.
    Parity ve 2. bir STOP biti yoktur bunda. 8 bit paket ve 2 bit Start Stop
  • tabi zevk size ait ama USARTsız yaparak amerikayı yeniden keşfetmeye gerek yok diye düşünüyorum ben ki bunun üstüne bir de CallerID rutini eklenecek.
    bence programınızda; tmr0 modülünü CallerID için ayarlayın, ilk sinyali bekleyin gelen sinyalin en az darbe süresinin yarısı kadar kaydırdıktan sonra data bitlerini okuyun ve 8 er bitlik gruplar halinde register lara aktarın. kaydedilen register larıda USARTla baud ratesini belirlerdikten sonra PC ye gönderin.
    gibi...
  • Haklısın bende zaten "Al bununla yap işini görür demiyorum"
    Arkadaş F84 le nasıl 9600 okunur onu sordu bende onu cevapladım.
    Yoksa asıl Amerkiyı keşfedenler halen PIC ile uğraşanlar diyebilirdim.
    benim PIC ile hiç işim olmaz. Daha sağlam işlemciler kullanıyorum.

    Bunlarımı söyleseydim.
    Ama ben yardımcı olmayı seçtim.

    Kolay Gelsin Bu mesleğe gönül verenlere
  • Öncelikle bahadur ve r2d2droids 'e ayrı ayrı teşekkür ederim. Her ikinizin de yardımcı olmak adına klavyenize dokunduğunuzu biliyorum. Aslında şu anda kullandığımda 16F628 ancak şu usart olayını bilmiyor iken bahadur sayesinde bu iş hakkında bayağı fikir sahibi oldum. Zaman ayırıp farklı bir yöntemle olsada, detaylı bir açıklama yaptığı için bahadur'a ikinci kez teşekkür etmek istiyorum.

    r2d2droids usart ile yapılışını, vaktin olurda açıklayabilirsen sevinirim.

    Bu arada yukarıdada belirmiştim. kısa bir paket okuyor isek sorun olmaz belki ama uzun bir haberleşmede 9600 bit sonrasında doğacak 1548 mikrosaniyelik farkı nasıl atlatabilirim ?



    < Bu mesaj bu kişi tarafından değiştirildi tyilgin1 -- 12 Ağustos 2006; 14:17:30 >
  • USART
    http://ww1.microchip.com/downloads/en/DeviceDoc/31018a.pdf
    döküman yardımcı olamazsa elimizden geleni yaparız.
    kolay gelsin...
  • 
Sayfa: 1
- x
Bildirim
mesajınız kopyalandı (ctrl+v) yapıştırmak istediğiniz yere yapıştırabilirsiniz.