www.elektronik.si Seznam forumov www.elektronik.si
Forum o elektrotehniki in računalništvu
 
 PomočPomoč  IščiIšči  Seznam članovSeznam članov  SkupineSkupine  StatisticsStatistika  AlbumAlbum  DatotekeFilemanager DokumentacijaDocDB LinksPovezave   Registriraj seRegistriraj se 
  PravilaPravila  LinksBolha  PriponkePriponke  KoledarKoledar  ZapiskiZapiski Tvoj profilTvoj profil Prijava za pregled zasebnih sporočilPrijava za pregled zasebnih sporočil PrijavaPrijava 

Serijska komunikacija v VHDL

 
Objavi novo temo   Odgovori na to temo   Printer-friendly version    www.elektronik.si Seznam forumov -> FPGA in CPLD programabilna vezja
Poglej prejšnjo temo :: Poglej naslednjo temo  
Avtor Sporočilo
aly
Član
Član



Pridružen-a: Tor 28 Sep 2004 14:51
Prispevkov: 9406
Aktiv.: 42.36
Kraj: Kranj - struževo

PrispevekObjavljeno: Pet Jun 03, 2011 10:22 pm    Naslov sporočila:  Serijska komunikacija v VHDL Odgovori s citatom

gregzy87 je napisal/a:
Lep pozdrav!

Priznam, za fax se matram z nekim "projektom", ki ga moram narediti. Pa mi ne gre najbolje. Če bi lahko tukaj rešila, bi bil zelo hvaležen.

Gre za RS232 komunikacijo. Tipka T0 pošlje ascii znak 0 v 8 bitni obliki, tipka T1 pa ascii znak 1. Zraven je še start in stop bit.
Torej zadeva mora na 1 bitnem izhodu pošiljati bit za bitom.

Vem, tukaj bi rabil "hendlat" z pomikalnim registrom a se ne spomnim kako točno smo mi to takrat delali Confused . Mogoče bi šlo še kako drugače?

Spodaj sem že sam nekaj napisal za eno tipko in mislim da je to skoraj že to, nisem pa siguren. Poleg tega ne vem kako sedaj še za drugo tipko rešiti. Še en process s case stavkom? Ampak potem bo najmanj 1 signal v dveh processih, to pa ni dobro.

Skratka, kakšnih nasvetov in pomoči se nebi branil.

Hvala,

LP

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

--  Uncomment the following lines to use the declarations that are
--  provided for instantiating Xilinx primitive components.
--library UNISIM;
--use UNISIM.VComponents.all;

entity RS232komun is
  Port ( t0 : in std_logic;
         --t1 : in std_logic;
         clk : in std_logic;
         izhod : out std_logic);
end RS232komun;

architecture Behavioral of RS232komun is
---------- notranji signali -----------------------------------------------------------------
signal delilnik: std_logic_vector (3 downto 0):="0000";
--signal korak: std_logic:='0';
signal ascii: std_logic;
--signal izhod1: std_logic;


begin

-- deljenje vhodne ure na 38,4 kHz ----------------------------------------------------------

deljenje: process (clk)
begin

if rising_edge(clk) then delilnik <= delilnik + 1;
--if delilnik = "0100" then korak <= '1';      -- ko pride do 26
--delilnik <= "0000";
--else korak <= '0';

--end if;
end if;

end process;


-- pošiljanje podatkov po RS232 protokolu ---------------------------------------------------

process(T0, ascii, delilnik)
begin

--if rising_edge(korak) then
   if T0 = '0' then ascii <= '1';
      else
        
         case delilnik (3 downto 0) is
            when "0000" => ascii <= '0';   -- start bit
            when "0001" => ascii <= '0';   -- 1 p
            when "0010" => ascii <= '0';   -- 2 o
            when "0011" => ascii <= '0';  -- 3 d
            when "0100" => ascii <= '0';   -- 4 a
            when "0101" => ascii <= '1';   -- 5 t
            when "0110" => ascii <= '1';   -- 6 k
            when "0111" => ascii <= '0';  -- 7 i
            when "1000" => ascii <= '0';   -- 8 i
            when "1001" => ascii <= '1';   -- stop bit
            when others => ascii <= '1';   -- ni podatka
         end case;
      --end if;
   end if;

end process;

izhod <= ascii;



end Behavioral;

_________________
I'm going to stand outside, so if anyone asks, I'm outstanding Smile
Nazaj na vrh
Skrit Poglej uporabnikov profil Pošlji zasebno sporočilo Obišči avtorjevo spletno stran MSN Messenger - naslov
aly
Član
Član



Pridružen-a: Tor 28 Sep 2004 14:51
Prispevkov: 9406
Aktiv.: 42.36
Kraj: Kranj - struževo

PrispevekObjavljeno: Pet Jun 03, 2011 10:28 pm    Naslov sporočila:   Odgovori s citatom

Znak se pošilja ven s shift registrom in ne s case stavkom d'oh!
Če ga ne znaš napisati, si potegni dol skripto na spletnih straneh FE ali najdi na netu. Jaz sem ga našel v 3 sekundah.

reg <= reg(9 downto 1) & 0;

Najlažje bo, če si narediš en blok, ki na zahtevo pošlje podatek.
Torej ima vhode Start in Data in izhode Serial_out in Finish.
V glavnem delu pa narediš avtomat, ki ob pritisnjeni tipki postavi ustrezen znak na Data vodilo, sproži Start in čaka na Finish signal in gre spet na čakanje tipke.
Sicer lahko tisti ubogi shift register za pošiljanje implementiraš kar v enem stanju avtomata. Seveda rabiš še en števec bitov pri pošiljanju.

_________________
I'm going to stand outside, so if anyone asks, I'm outstanding Smile
Nazaj na vrh
Skrit Poglej uporabnikov profil Pošlji zasebno sporočilo Obišči avtorjevo spletno stran MSN Messenger - naslov
gregzy87
Član
Član



Pridružen-a: Čet 08 Feb 2007 2:48
Prispevkov: 741
Aktiv.: 3.55
Kraj: Okolica Vrhnike

PrispevekObjavljeno: Pet Jun 03, 2011 11:06 pm    Naslov sporočila:   Odgovori s citatom

Torej bo treba res z avtomatom rešiti d'oh! .
Števec bitov verjetno zato, da ko bo preštel do 8, bo dal stop bit 1 na izhod.
Blok je mišljeno kot process?

Hvala, jutri poskusim kaj sčarati Mr. Green .
Nazaj na vrh
Odsoten Poglej uporabnikov profil Pošlji zasebno sporočilo MSN Messenger - naslov
gregzy87
Član
Član



Pridružen-a: Čet 08 Feb 2007 2:48
Prispevkov: 741
Aktiv.: 3.55
Kraj: Okolica Vrhnike

PrispevekObjavljeno: Sob Jun 04, 2011 4:17 pm    Naslov sporočila:   Odgovori s citatom

Skripto sem našel a mi v tem mojem primeru ne pomaga kaj dosti ...
Najprej moram rešiti to, da nek 8 bitni podatek (npr.: "11001010") pošljem ven na eno bitni izhod enega za drugim: "1" "1" "0" "0" "1" "0" "1" "0". To mi pa nikakor noče delati Sad .
Dela mi tako, da če dam na vhod nek 8 bitni podatek, dobim na izhod1 za 1 višjo cifro ... Če nastavim izhod1 da je eno bitni signal vrže ven error.

Ko bom to uspel narediti grem šele na avtomat.

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

--  Uncomment the following lines to use the declarations that are
--  provided for instantiating Xilinx primitive components.
--library UNISIM;
--use UNISIM.VComponents.all;

entity RS232komun is
  Port ( vhod : in std_logic_vector(7 downto 0);
         clk : in std_logic);
     
end RS232komun;

architecture Behavioral of RS232komun is
---------- notranji signali -----------------------------------------------------------------
signal izhod1: std_logic_vector(7 downto 0);


begin

-- pošiljanje podatkov ------------------------------------

neki: process (clk)
begin

if rising_edge(clk) then

izhod1 <= vhod(6 downto 0) & '0';

end if;
end process;

end Behavioral;


Po daljšem mučenju nekako rešil.
Nazaj na vrh
Odsoten Poglej uporabnikov profil Pošlji zasebno sporočilo MSN Messenger - naslov
Pokaži sporočila:   
Objavi novo temo   Odgovori na to temo   Printer-friendly version    www.elektronik.si Seznam forumov -> FPGA in CPLD programabilna vezja Časovni pas GMT + 2 uri, srednjeevropski - poletni čas
Stran 1 od 1

 
Pojdi na:  
Ne, ne moreš dodajati novih tem v tem forumu
Ne, ne moreš odgovarjati na teme v tem forumu
Ne, ne moreš urejati svojih prispevkov v tem forumu
Ne, ne moreš brisati svojih prispevkov v tem forumu
Ne ne moreš glasovati v anketi v tem forumu
Ne, ne moreš pripeti datotek v tem forumu
Ne, ne moreš povleči datotek v tem forumu

Uptime: 48 dni


Powered by phpBB © 2001, 2005 phpBB Group