Skocz do zawartości

FPGA (własne programy #4): komunikacja FPGA-Arduino UART-RS485


Pomocna odpowiedź

Po tej modyfikacji wyświetla się A5 (cokolwiek nie wpisze do terminala), a diody D3 i D4 święcą się stale (D5-8 zmieniają się według cyfry którą wybieram na klawiaturze)

Jak wpisywałam 1 to ona aktualizowała się na diodach D8-5 (czyli D8), a na D3 i D4 stale jest wysoki poziom (nie wpisywałam 12, powinna na drugim wyświetlaczu widnieć cyfra wpisywana przed 1, np 1)

Edytowano przez monsiw
Link to post
Share on other sites

To dobrze, miało się właśnie wyświetlać na stałe A5. Wyświetlane jest ładnie, bez nakładania się cyfr? Jeśli tak, to możemy założyć, że problem jest z UARTem lub jego obsługą. Wróć z tym fragmentem kodu do stanu poprzedniego.

 

Opis diod świecących w pliku UCF skopiowałem chyba z kursu Forbota bez sprawdzenia, tam jest odwrócony porządek bitów wobec tego, co zakładałem. Najmłodszy bit to dioda D8, a oczekiwałem, że będzie to D1. Nie ma to większego znaczenia. Trzeba ustalić skąd się biorą jedynki logiczne na D3 i D4 (czyli wartość 3, która już wcześniej pojawiała się na wyświetlaczu) w starszej połówce bajtu.

 

 

Możesz zrobić jakieś zrzuty ekranu z programu do obsługi portu szeregowego? W szczególności chodzi o wpisywane liczby oraz ustawienia portu.

 

Masz ewentualnie dostęp do analizatora stanów logicznych lub oscyloskopu – tak, żeby podejrzeć transmitowaną ramkę UART?
 

Link to post
Share on other sites

Tak, o to chodziło, chciałem się upewnić, czy ustawienia są takie same jak w kodzie odbiornika UART.

Te piny DTR i CTS nie powinny mieć znaczenia, ponieważ nie używasz opcji „Flow Control". Chyba, że ten konwerter działa jakoś inaczej, ale to mało prawdopodobne.

 

Chyba pozostaje sprawdzić dokładnie kod tego odbiornika UART, jego działanie w symulacji. Szkoda, że nie masz możliwości podejrzeć przesyłanej ramki, ale raczej powinna być poprawna.

  • Pomogłeś! 1
Link to post
Share on other sites
Zarejestruj się lub zaloguj, aby ukryć tę reklamę.
Zarejestruj się lub zaloguj, aby ukryć tę reklamę.

jlcpcb.jpg

jlcpcb.jpg

Produkcja i montaż PCB - wybierz sprawdzone PCBWay!
   • Darmowe płytki dla studentów i projektów non-profit
   • Tylko 5$ za 10 prototypów PCB w 24 godziny
   • Usługa projektowania PCB na zlecenie
   • Montaż PCB od 30$ + bezpłatna dostawa i szablony
   • Darmowe narzędzie do podglądu plików Gerber
Zobacz również » Film z fabryki PCBWay

Ok, załączam jeszcze przykładowy kod testowy (w VHDL), gdybyś chciała się pobawić w symulacji. Jest tam zasymulowane przesłanie kolejno po sobie czterech liczb: 1, 2, 3, 4. W rzeczywistości ramki przychodzą z większymi odstępami czasowymi pomiędzy nimi. Ale i tak nie widzę skąd bierze się ta „3".

LIBRARY ieee;
USE ieee.std_logic_1164.ALL;
use IEEE.Numeric_std.ALL;
use ieee.math_real.all;
 
ENTITY test IS
END test;
 
ARCHITECTURE behavior OF test IS 
 
   --Inputs
   signal i_Clk : std_logic := '0';
   signal i_UART_RX : std_logic := '0';

 	--Outputs
   signal o_UART_TX : std_logic;
   signal o_Segment_7 : std_logic;
   signal o_Segment_A : std_logic;
   signal o_Segment_B : std_logic;
   signal o_Segment_C : std_logic;
   signal o_Segment_D : std_logic;
   signal o_Segment_E : std_logic;
   signal o_Segment_F : std_logic;
   signal o_Segment_G : std_logic;
   signal led_enable : std_logic_vector(2 downto 0);
	signal LED : std_logic_vector(7 downto 0);
	
   -- Clock period definitions
   constant i_Clk_period : time := 83333 ps;
 
BEGIN
 
	-- Instantiate the Unit Under Test (UUT)
   uut: entity work.UART_RX_To_7_Seg_Top PORT MAP (
          i_Clk => i_Clk,
          i_UART_RX => i_UART_RX,
          o_UART_TX => o_UART_TX,
          o_Segment_7 => o_Segment_7,
          o_Segment_A => o_Segment_A,
          o_Segment_B => o_Segment_B,
          o_Segment_C => o_Segment_C,
          o_Segment_D => o_Segment_D,
          o_Segment_E => o_Segment_E,
          o_Segment_F => o_Segment_F,
          o_Segment_G => o_Segment_G,
          led_enable => led_enable,
			 LED => LED
        );

   -- Clock process definitions
   i_Clk_process :process
   begin
		i_Clk <= '0';
		wait for i_Clk_period/2;
		i_Clk <= '1';
		wait for i_Clk_period/2;
   end process;
 

   -- Stimulus process
   stim_proc: process
	variable wektor : unsigned(7 downto 0) := (others => '0');
   begin		
      -- hold reset state for 100 ns.
		i_UART_RX <= '1';
      wait for 100 ns;	

		
		for jj in 1 to 4 loop
			wektor := to_unsigned(jj, wektor'length);
		
			i_UART_RX <= '0'; -- Bit startu
			wait for i_Clk_period*104;
			
			for ii in 0 to 7 loop -- Bity danych od najmlodszego
				i_UART_RX <= wektor(ii);
				wait for i_Clk_period*104;
			end loop;
			
			i_UART_RX <= '1'; -- Bit stopu
			wait for i_Clk_period*104;

			--wait for i_Clk_period * 10; -- Przerwa pomiedzy ramkami
		
		end loop;
		

      wait;
   end process;

END;

Jeżeli ustalisz przyczynę problemów, to napisz.

  • Lubię! 1
Link to post
Share on other sites

@piotr96

Okazało się, że wszystko dobrze działa, na wyświetlaczu pojawia się forma hex znaku, który wpisywałam do terminala. Jako, że ja próbowałam tylko cyfry przesyłać, to na stałe pokazywała się cyfra 3 na jednym z wyświetlaczy bo tak jest w zapisie szesnastkowy. Teraz widzę, że w filmie dotyczącym Receiver'a jest to pokazane, najwidoczniej zasugerowałam się kolejnym "Transmitter" na którym wyglądało, że to co było wybierane bezpośrednio na klawiaturze wracało do terminala, ale w tym przypadku nie pokazał wyświetlaczy (na których najwidoczniej była forma hex).

Edytowano przez monsiw
  • Lubię! 2
Link to post
Share on other sites

Dołącz do dyskusji, napisz odpowiedź!

Jeśli masz już konto to zaloguj się teraz, aby opublikować wiadomość jako Ty. Możesz też napisać teraz i zarejestrować się później.
Uwaga: wgrywanie zdjęć i załączników dostępne jest po zalogowaniu!

Anonim
Dołącz do dyskusji! Kliknij i zacznij pisać...

×   Wklejony jako tekst z formatowaniem.   Przywróć formatowanie

  Dozwolonych jest tylko 75 emoji.

×   Twój link będzie automatycznie osadzony.   Wyświetlać jako link

×   Twoja poprzednia zawartość została przywrócona.   Wyczyść edytor

×   Nie możesz wkleić zdjęć bezpośrednio. Prześlij lub wstaw obrazy z adresu URL.

×
×
  • Utwórz nowe...

Ważne informacje

Ta strona używa ciasteczek (cookies), dzięki którym może działać lepiej. Więcej na ten temat znajdziesz w Polityce Prywatności.