Sayısal Filtreler ve Sistemler Dersi 1. Ödev İçin Yardımcı Bilgiler Emrah Abtioğlu eabtioglu@itu.edu.tr İTÜ Gömülü Sistem Tasarımı Laboratuvarı, 26/03/2013. UART (Universal Asynchronous Receiver / Transmitter) Evrensel asenkron alıcı/göndericiler, veriyi paralel formdan seri forma ya da seri formdan paralel forma çeviren donanımlardır. RS-232, RS-422 ve RS-485 gibi haberleşme standartlarının gerçeklemesinde bu donanımdan yararlanılır. FPGA ve bilgisayar arasındaki haberleşmeyi sağlamak için çalışma yapısı aşağıda açıklanan 115200bps ile çalışan 1-Startbit, 8-bit veri, 1-stopbit ve no parity özelliklerine sahip UART kullanılacaktır. Baudrate bir saniyede gönderilen toplam bit sayısı(bits per second, bps) olarak tanımlanmıştır. Bir örnekle açıklarsak, 8-bit uzunluğundaki bir veriyi göndermek için, bu verinin başına 1-startbit ve sonuna 1-stopbit eklenir ve toplamda 10-bitlik bir veri gönderilir. 115200bps ile 1 saniyede maksimum 115200/10 = 11520 bayt gönderilebilir. Şekil 1 Şekil 1 UART'ın iletim hattında haberleşme sırasındaki değişimleri göstermektedir. Veri gönderilmediği zaman iletim hattı lojik 1 seviyesinde tutulur. Gönderici veri iletimine başlayacağını bildirmek için iletim hattına lojik 0 (Startbit) gönderir. Daha sonra 8-bitlik veri Bit 0'dan (LSB) başlayarak (Little Endian gönderim) sırayla iletim hattından gönderilir. Bit 7 (MSB) gönderildikten sonra veri iletiminin sona erdiğini bildirmek için iletim hattına lojik 1 (Stopbit) gönderilir. Bir sonraki veri iletimine kadar iletim hattı lojik 1 seviyesinde tutulur. Filtre tasarımınızda FPGA ile bilgisayar arasındaki iletişimi sağlamak için kullanılacak olan, seri porttan aldığı veriyi yankı yaparak tekrar seri porta basan, ECHOv1.v modülüdür. Şekil 2 ECHOv1 modülünün giriş ve çıkışları Şekil 2 de gösterilmiştir. RxD pini bilgisayardan seri alıcıya veri aktarırken, TxD pini de seri alıcı ile alınmış 8-bitlik veriyi bilgisayara aktarır. Veri iletişiminde bir hata algılandığında, hata çıkışı modül reset yapılana kadar aktif olur. Modülün iç yapısını ECHOv1.v dosyasındaki açıklamaları okuyarak daha iyi anlayabilirsiniz. ECHOv1 modülünün alt modülü UARTv1.v modülüdür. Şekil 3 Şekil 3 te UARTv1.v modülünün giriş ve çıkışları gösterilmiştir. Giriş kısmında göndericinin 8-bitlik veri girişi (Tx_Data_In), reset, alıcının veri aldığı pin (RxD), göndericiye veri iletimine başlamasını bildiren pin (Tx_Start) ve son olarak üst modülden (ECHOv1.v) veri iletişiminin doğru bir şekilde gerçekleştiğini bildiren pin (Ust_Modul_Bayt_Alindi) yer almaktadır. Çıkış kısmında ise, alıcının 8-bitlik veri çıkışı(Rx_Data_Out), veri iletişiminde hata olduğunu kullanıcıya bildiren çıkış (hata), verinin doğru alındığını üst modüle bildiren çıkış (Rx_Bayt_Geldi), hatalı veri alındığını bildiren çıkış (Rx_Hatali_Geldi), göndericinin veri gönderdiği çıkış (TxD), ve son olarak göndericinin veri gönderdiğini üst modüle bildiren çıkış (Tx_Gonderiyor_Out) yer almaktadır. ECHOv1.v modülünde yankı işlemini gerçeklemek için UARTv1.v modülünün Rx_Data_Out çıkışı, Tx_Data_In girişine bağlanmıştır. Tasarlayacağınız filtrenin veri girişine Rx_Data_Out çıkışını, filtrenin çıkışını da Tx_Data_In girişine bağlamanız gerekmektedir. Rx_Data_Out çıkışındaki veriyi ne zaman alacağınızı ya da Tx_Data_In girişine veri yazıp gönderme işlemini ne zaman yapacağınızı ECHOv1.v modülündeki açıklamaları okuyup, benzer bir kontrol yapısı gerçekleyerek belirleyebilirsiniz. UARTv1.v modülünün alt modülleri, UARv13.v (alıcı modülü) ve UATv12.v (gönderici modül) modülleridir. Bu modüllerin açıklamalarını dikkatlice okuyup özellikle davranışsal bloklarının yapısını anlamanız, seri iletişimdeki hataları algılamanızda ve kontrolcü tasarımında büyük önem arz etmektedir. MATLAB ile Seri Haberleşme Portunun Kullanılması: MATLAB ile seri porta veri göndermek yada veri almak için “serial” fonksiyonu ile seri port nesnesi oluşturulmalıdır. Fonksiyonun kullanımı aşağıdaki gibidir. S1= serial(‘COMX’, ‘P1’,’V1’,’P2’,’V2’,’P3’,’V3’…..); • • • S1, belirtilen özelliklerde oluşturulan seri port nesnesinin adıdır. COMX, kısmına COM1, COM2 gibi değerler girilerek oluşturulan seri port nesnesinin hangi porta bağlanacağı belirlenir. Hangi portun kullanılması gerektiğini anlamak için aygıt yöneticisine başvurulur. P’ler seri portun özelliklerine, V’ler de bu özelliklerin alacağı değerlere karşılık gelmektedir. Örnek: s1 = serial ('COM4', 'BaudRate', 115200, 'OutputBufferSize', 700000, 'Timeout', 10); 'InputBufferSize', 700000, s1 adıyla oluşturulan seri port nesnesinin, veri aktarım hızı 115200bps, gelen verileri depoladığı tamponun ve gönderdiği verileri sırada beklettiği tamponun boyutu 700000 byte, seri porttan okuma yapmaya çalıştığında tepki alamazsa, okuma işlemini sonlandırmak için beklemesi gereken süre 10 saniye olarak belirlenmiştir. Serial fonksiyonu ile ilgili daha fazla bilgiye MATLAB komut satırına 'help serial' yazarak veya http://www.mathworks.com/help/matlab/ref/serial.html linkine tıklayarak ulaşabilirsiniz. Oluşturulan seri port nesnelerinin seri port ile bağlantılarını açmak için fopen(), bağlantılarını kesmek için fclose(), seri port nesnesini silmek için delete() fonksiyonları kullanılır. Örnek kullanımlar aşağıdaki gibidir. • fopen(s1) • flcose(s1) • delete(s1) Oluşturulan seri port nesnesi fopen() fonksiyonu ile bağlantıya hazır hale getirildiğinde, seri porta veri göndermek için fwrite(), seri porttan veri okumak için fread() fonksiyonları kullanılabilir. Örnek kullanımlar aşağıdaki gibidir. • • • • fwrite(s1,6,'uint8'); fwrite(s1,H((1:10)),'int8'); fread(s1,1,'uint8'); fread(s1,20,'int8'); İlk örnek s1 nesnesinin bağlı olduğu seri porta, 6’nın karşılığı olan 8-bitlik 0x06 değerini gönderir. İkinci örnekte H matrisindeki ilk 10 eleman arka arkaya gönderilir. Üçüncü örnekte ise seri porttan uint8 türünde 8-bitlik veri okunur. 4.örnekte ise seri porttan arka arkaya 20 tane int8 türünde veri okunur. Bu fonksiyonları inceleyebilirsiniz. daha iyi anlamak Seri_Sin.m dosyasını okuyup