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

FPGA ile RS232 Haberleşmesi(Receiver)

6 min read
0
0
3,246

Merhaba arkadaşlar,

Çizgi market sponsorluğunda tarafımıza gönderilen FPGA ile çalışmalarımız devam ediyor.FPGA kitine buradan ulaşabilirsiniz.

Önceki paylaşımlarımızda RS232 haberleşme projemizin gönderici (transmitter) katını tasarlamıştık. Şimdi projemizin alıcı (receiver) katını tasarlayacağız. Bu projemizde realterm programını kullanarak bilgisayarın seri portundan (USB) gelen bilgileri USB-RS232 çevirici yardımıyla deney setimizin RS232 girişine bağlayıp gelen verileri set üzerinde bulunan ledler yardımıyla izleyeceğiz.

Gönderici katında verileri göndermeden önce start biti olarak 1 den 0 a düşen sinyal oluşturmuştuk, alıcı kısmında ise verilerin gelmeye başladığını yine 1 den 0 a düşen sinyali bekleyeceğiz. Start biti geldikten sonra gelen 8 tane bit veri olarak saklanacak  daha sonra gelen bit sıfır olduğunda stop biti olduğu anlaşılacak ve haberleşme tamamlanacak.

Gelen verilerin periyodu yine gönderici katında olduğu gibi haberleşmenin baudrate hızına bağlıdır. Alıcının ve vericinin senkron biçimde çalışa bilmesi iki tarafında baudrate hızını bilmesi gerektirir.

RECEIVER
RECEIVER

VHDL kod:

[php]

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

entity rs232receiver is
Port ( clk : in STD_LOGIC;
temizle : out std_logic;
reset : in STD_LOGIC;
input : in STD_LOGIC;
aktif : in STD_LOGIC;
done : out STD_LOGIC;
output : out STD_LOGIC_VECTOR (7 downto 0));
end rs232receiver;

architecture Behavioral of rs232rx is
constant bekleme:integer:=5200;— 50M/9600
type durum_type is (idle_rxd,start_rxd,receive_rxd,stop_rxd);
signal durum,durum_next:durum_type;
signal data,data_next: std_logic_vector(7 downto 0);
signal x,x_next:integer;
signal start_bit,stop_bit:std_logic;
signal data_receive,input_next:std_logic;
signal counter,counter_next:integer;

begin
process(clk,reset)
begin
if reset= ‘1’ then
durum<=idle_rxd;
data<=(others=>’0′);
x<=0;
input_next<=’0′;
counter<=0;
elsif clk=’1′ and clk’event then —değişkenlerin atanması
durum<=durum_next;  — bir sonraki durum
x<=x_next;
counter<=counter_next;
input_next<=input;
temizle<=’0′; —veri alabilir RTS.
end if;
end process;
data_receive<= input_next and (not input); —dusen kenar tespiti (start biti başlangıcı)

process(aktif,data_receive,x,data,durum,counter,reset)
begin
durum_next<= durum;
x_next <=x;
data_next<=data;
counter_next <=counter;
done<=’0′;
case durum is
when IDLE_RxD =>
if aktif = ‘1’ and data_receive=’1′ and reset=’0′ then
durum_next<=start_rxd;
end if;
when START_RxD=>
counter_next<=counter +1;
if counter = bekleme/2 then
if input= ‘0’ then
durum_next<= receive_rxd;
else
durum_next<= idle_rxd;
end if;
counter_next<=0;
end if;
when RECEIVE_RxD=>
counter_next<=counter +1;
if counter = bekleme then
data_next(x)<=input;
counter_next<=0;
if n= 7 then
x_next<=0;
durum_next<=stop_rxd;
else
x_next<=x +1;
end if;
end if;
when STOP_RxD=>
counter_next<=counter +1;
if counter = bekleme then
counter_next<=0;
if input= ‘1’ then
done<=’1′;
end if;
durum_next<=idle_rxd;
end if;
end case;
end process;
output<=data;  — alınan veriyi çıkışa ata
end Behavioral;

[/php]

rx

REALTERM programından gönderilen bilgi

22222

 

Çıkışta alınan “11001000” bilgisi.

  • FPGA ile RS232 Haberleşmesi(Transmitter)

    Merhaba arkadaşlar, Bugün sizlere FPGA ile bilgisayar arasında RS232 haberleşme protokolün…
Buna Benzer Yazılar Göster !
Daha Fazlasını Yükle - Ahmet Memeşil
Daha Fazla Göster -  FPGA

Bir cevap yazın

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

Bak Bakalım ?

FPGA İle PWM RC Servo Motor

19Merhabalar; Bu projemizde FPGA üzerinden servo motor sürmek için PWM sinyali oluşturacağ…