Ana Sayfa FPGA FPGA ile RS232 Haberleşmesi(Transmitter)

FPGA ile RS232 Haberleşmesi(Transmitter)

7 min read
4
0
740

Merhaba arkadaşlar,

Bugün sizlere FPGA ile bilgisayar arasında RS232 haberleşme protokolünün transmitter katını anlatmaya çalışacağım.RS232 eski bir haberleşme yöntemi olmasına rağmen gönümüzde önemini hala korumaktadır.

Projemizde deney setimizin RS232 portunu USB-RS232 dönüştürücü ile bilgisayara bağladıktan sonra 8 bitlik verileri deney setimizin SW(0)  dan SW(7) ye kadar olan switchlerinden FPGA e göndereceğiz, gönderilen verileri REALTERM programını kullanarak anlık olarak bilgisayardan izleyebileceğiz.

Projemizde sekiz bitlik data girişi, oluşturduğumuz modülü aktifleştirmek için enable, 50 MHz clock girişi, modülü resetlemek için reset girişi bulunacak çıkışlar ise seri olarak verilerin gönderildiği tx ve verinin gönderildiğini gösteren done çıkışından oluşacak.

 

Ekran Alıntısı

 

RS232 haberleşmede start bitinden sonra 8 bitlik bilgi, parity biti ve son olarak stop bitinden oluşmaktadır.

(Projemizde parity biti kullanılmayacaktır.)

İsteğe bağlı olarak 8 bit’den daha küçük veri paketleri gönderilebilinir fakat genel olarak 8 bit’lik haberleşme paketleri kullanıldığı için projemizde bizde 8 bitlik veri göndereceğiz.

 

2.2

 

Yukarıdaki şekile baktığımızda veri yolu ilk olarak birden sıfıra düştüğü anda (start biti) alıcı taraf verinin gelmeye başlayacağını anlar, start bitinden sonra gelen 8 bit veri olarak alınır ve 8 bitin sonunda gelen bit sıfır olunca haberleşmenin bittiği anlaşılır.

Bu haberleşme esnasında gönderici taraf ile alıcı tarafın bir biriyle senkron bir şekilde çalışması gerekmektedir.

Alıcı ile gönderici arasındaki bu uyumu yakalamak için baudrate kavramını bilmek gerekir. Baudrate  saniyede gönderilmesi gereken bit sayısını belirtmektedir. Projemizde 9600 baudrate kullanacağımız için deney setimizde ki 50MHz’lik  sinyal ile haberleşme sistemimizin düzgün çalışması için uygun bir bekleme miktarı hesaplamamız gerekir bunun için bekleme=50Mhz/9600 işleminden yaklaşık olarak 5200 değerinde bir sayı elde ederiz bu değeri VHDL kodumuzda her bir bitin gönderilmesinden sonra bekleme miktarı olarak kullanacağız.

 

 

 

huhu

Sistemimizin çalışma şeması yukarıdaki gibi olacak.

VHDL KODU:


library IEEE;
use IEEE.STD_LOGIC_1164.ALL;
use IEEE.STD_LOGIC_ARITH.ALL;
use IEEE.STD_LOGIC_UNSIGNED.ALL;

entity rs232_txd is
Port ( clk : in STD_LOGIC;
reset : in STD_LOGIC;
input : in STD_LOGIC_vector(7 downto 0);
start : in STD_LOGIC;
done : out STD_LOGIC;
clean : out std_logic;  ---CTS çıkışı
output : out STD_LOGIC );
end rs232_txd;

architecture Behavioral of rs232_txd is
constant bekleme:integer:= 5200;--baudrate sistemin bekleme süresi
type state_type is (idle,starttx,sendtx,stoptx);
signal state,state_next:state_type;
signal N,N_next:integer;
signal count,count_next:integer;
signal data,data_next:std_logic;
begin
process(clk,reset)
begin
if reset = '1' then
state<= idle;
count<= 0;
data<='1';
N<=0;
elsif clk='1' and clk'event then
state<=state_next;
count<=count_next;
data<=data_next;
N<=N_next;
clean<='0';
end if;
end process;

process(state,count,data,N,start,reset)
begin
data_next<='1';
count_next<=count;
state_next<=state;
N_next<=N;
done<='0';
case state is
when IDLE=>

if start= '1' and reset='0' then
state_next<=start_txd;
end if;
when starttx =>
count_next<=count+1;
data_next<='0';
if count = bekleme then
count_next<=0;
state_next<=send_txd;
end if;
when sendtx =>
count_next<=count+1;
data_next<= input(N);
if count = bekleme then
if N= 7 then
state_next<=stop_txd;
N_next<=0;
else
N_next<=N+1;
end if;
count_next<=0;
end if;
when stoptx =>
count_next<=count+1;
if count = bekleme then
count_next<=0;
done<='1';
state_next<=idle;
end if;
end case;
end process;
output<=data;
end Behavioral;

real

Realterm programında bilgisayarın port 3 girişinden gelen bilgi.

Projeyi gerçekleştirmede büyük katkısı olan FPGANEDİR.COM sitesi yazarlarına teşekkürü bir borç bilirim.

  • FPGA ile RS232 Haberleşmesi(Receiver)

    Merhaba arkadaşlar, Çizgi market sponsorluğunda tarafımıza gönderilen FPGA ile çalışmaları…
Buna Benzer Yazılar Göster !
  • FPGA ile RS232 Haberleşmesi(Receiver)

    Merhaba arkadaşlar, Çizgi market sponsorluğunda tarafımıza gönderilen FPGA ile çalışmaları…
  • FPGA ile 7-Segment Sayıcı

    Merhaba arkadaşlar, Çizgi market sponsorluğunda tarafımıza gönderilen FPGA ile çalışmaları…
  • FPGA ile Step Motor Kontrolü

    Merhaba arkadaşlar. Çizgi market sponsorluğunda tarafımıza gönderilen FPGA ile çalışmaları…
Daha Fazlasını Yükle - Ahmet Memeşil
  • VHDL Nedir?

    VHDL ,FPGA entegrelerinin donanım yapısını değiştirdiğimiz donanım tanımlama dilidir. Dili…
  • FPGA ile RS232 Haberleşmesi(Receiver)

    Merhaba arkadaşlar, Çizgi market sponsorluğunda tarafımıza gönderilen FPGA ile çalışmaları…
  • FPGA ile 7-Segment Sayıcı

    Merhaba arkadaşlar, Çizgi market sponsorluğunda tarafımıza gönderilen FPGA ile çalışmaları…
Daha Fazla Göster -  FPGA

4 Yorumlar

  1. emrah zeren

    23 Ocak 2016 at 20:18

    merhaba ben iki altera’yı birbiri ile kontrol etmek(haberleştirmek) istiyorum. bunu nasıl yapabilirim. ve ayrıca altera ile nokia display ekranın da nasıl bir tane pikseli gösterebilirim

    Reply

    • Ahmet Memeşil

      Ahmet Memeşil

      23 Ocak 2016 at 20:43

      Merhaba, rs232 portları uygun biçimde birbirine bağlandıktan sonra eğer sadece birinden diğerine (master dan slave’e) bilgi aktarımı olacak ise master’a sadece transmitter, slave’e de sadece receiver kodları yazılıp haberleştirilebilir. Eğer ikiside birbirine bilgi göndericek ise her ikisinede transmitter-receiver kodu yazılması lazım.
      Nokia display hakkında pek bir bilgim yok malesef.

      Reply

  2. fatih kurnaz

    4 Mart 2016 at 12:04

    hocam merhaba;

    hocam ben aynı kodu koşturuyorum ama ne input verirsem vereyim pcden sürekli E0 00 çıktısı alıyorum gözden kaçırdığım bir durum mu var

    Reply

    • Ahmet Memeşil

      Ahmet Memeşil

      6 Mart 2016 at 13:09

      Merhaba, sıkıntı baudrate ayarından kaynaklanıyor olabilir bilgisayarın uygun portunu 9600 e ayarlamayı unutmayın birde cts pinini her clockta sıfıra çekmeniz lazım bunları bir kontrol edin isterseniz.

      Reply

Bir Cevap Yazın

E-posta hesabınız yayımlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir

Bak Bakalım ?

FPGA ile RS232 Haberleşmesi(Receiver)

Merhaba arkadaşlar, Çizgi market sponsorluğunda tarafımıza gönderilen FPGA ile çalışmaları…