Перейти к содержанию
    

Gas Wilson

Свой
  • Постов

    141
  • Зарегистрирован

  • Посещение

  • Победитель дней

    9

Весь контент Gas Wilson


  1. Большое спасибо! :a14: Переписал код entity spi_out is Port ( clk : in STD_LOGIC; dr : in STD_LOGIC; data : in STD_LOGIC_VECTOR (15 downto 0); CS : out STD_LOGIC; DCLK : out STD_LOGIC; MOSI : out STD_LOGIC); end spi_out; architecture Behavioral of spi_out is signal counter : integer range 0 to 32 := 0; signal cs_loc : std_logic := '1'; signal dclk_loc : std_logic := '1'; signal mosi_loc : std_logic := '0'; signal dac_value : std_logic_vector(11 downto 0) := (others => '0'); signal dac_command : std_logic_vector(3 downto 0) := (others => '0'); signal dac_addr : std_logic_vector(3 downto 0) := (others => '0'); begin cs <= cs_loc; dclk <= dclk_loc; mosi <= mosi_loc; send_data : process(clk) variable start : std_logic := '0'; begin if falling_edge(clk) then if dr = '1' then if start = '0' then start := '1'; cs_loc <= '0'; counter <= 0; dac_value <= data(15 downto 4); dac_command <= "0011"; dac_addr <= "0000"; report "SPI -> CS <= '0'"; end if; end if; if start = '1' then dclk_loc <= not dclk_loc; if (dclk_loc = '1') then report "SPI -> falling_edge"; if counter >=0 and counter <4 then mosi_loc <= dac_command(3 - counter); elsif counter < 8 then mosi_loc <= dac_addr(7 - counter); elsif counter < 20 then mosi_loc <= dac_value(19 - counter); else mosi_loc <= '0'; end if; if counter = 31 then start := '0'; cs_loc <= '1'; report "SPI -> CS <= '1'"; end if; else counter <= counter + 1; end if; end if; end if; end process send_data; end Behavioral;
  2. Хочу воспользоваться ЦАПом на Xilinx Spartan3E Starter Kit пишу это так entity spi_out is Port ( clk : in STD_LOGIC; dr : in STD_LOGIC; data : in STD_LOGIC_VECTOR (15 downto 0); CS : out STD_LOGIC; DCLK : out STD_LOGIC; MOSI : out STD_LOGIC); end spi_out; architecture Behavioral of spi_out is signal start : std_logic := '0'; signal counter : integer := 0; signal data_out : std_logic_vector(31 downto 0) := (others => '0'); signal cs_loc : std_logic := '1'; signal dclk_loc : std_logic := '0'; signal mosi_loc : std_logic := '0'; begin --cs <= cs_loc; dclk <= dclk_loc; mosi <= mosi_loc; send_data : process(clk) begin if falling_edge(clk) then if dr = '1' then if start = '0' then start <= '1'; cs <= '0'; counter <= 0; data_out(15 downto 0) <= data; data_out(19 downto 16) <= "0000"; data_out(23 downto 20) <= "0011"; data_out(31 downto 24) <= (others => '0'); report "SPI -> CS <='0'"; end if; end if; if start = '1' then if (dclk_loc = '1') then report "SPI -> falling_edge"; mosi_loc <= data_out(counter); if counter = 31 then report "SPI -> send finish"; start <= '0'; cs <= '1'; end if; else report "SPI -> rising_edge"; counter <= counter + 1; dclk_loc <= '1'; end if; dclk_loc <= not dclk_loc; end if; end if; end process send_data; end Behavioral; Если кому-нибудь не лень - покритикуйте, что неправильно/неоптимально... И почему при оптимизации среда обрезает некоторые сигналы и потом при маппировании генерит ошибку что их нет... (http://electronix.ru/forum/index.php?showtopic=49831) т.к. я новичок - прошу более-менее понятно объяснить. Буду оч. благодарен :)
  3. Уважемые гуру, а отчего вот такое происходит?
  4. АААААААААААА ну вот что я сделал - не понятно, но всё заработало...
  5. Это ещё не доконца дописанная версия - поэтому данные и не меняются. Вообще хочу написать контроллер лсд панельки... clk - тики системы, clk2 - clk/2, clk1 - 1,5clk2 и задержан относительно clk2... Про переменные/сигналы в vhdl знаю. В данном примере важна не логика выполнения а что совсем ничего не генерится... Я хочу понять - почему совсем ничего не генерится... Ножки правильно разведены... Завтра с работы кину ucf файл...
  6. Добрый день! Начинаю осваивать vhdl... Создал простой проект в ISE 9.2 но после генерации файла и прошивки его в Spartan 3E sample pack board ничего не работает.. какой то сигнал на выходе есть, но это явно не то что нужно... При этом синтез схемы показывает правельные результаты... Сам не могу разобраться в чём проблема... :05: entity main is Port ( clk : in STD_LOGIC; cl1 : out STD_LOGIC; cl2 : out STD_LOGIC; flm : out STD_LOGIC; d0 : out STD_LOGIC; d1 : out STD_LOGIC; d2 : out STD_LOGIC; d3 : out STD_LOGIC); end main; architecture Behavioral of main is begin main : process(clk) variable x_counter : integer :=0; variable flm_counter : integer :=0; variable cl2_counter : integer :=0; variable cl1_counter : integer :=0; variable clk_counter : integer :=0; variable cl2_val : std_logic :='0'; variable cl1_val : std_logic :='0'; begin if (clk='1') then clk_counter := clk_counter + 1; if (clk_counter = 1) then --cl2 rise cl2_val := not cl2_val; cl2 <= cl2_val; if (cl2_val='1') then --data d0 <= '0'; d1 <= '0'; d2 <= '1'; d3 <= '0'; cl2_counter := cl2_counter + 1; end if; elsif ((clk_counter = 2) AND (cl2_val = '1')) then --cl1 cl1_val := not cl1_val; cl1 <= cl1_val; elsif (clk_counter = 5) then --cl2 fall --cl2_val := '0'; --cl2 <= cl2_val; clk_counter := 0; end if; end if; end process main; end Behavioral; Буду благодарен за любые подсказки! :) При этом схема собранная на Schematic'е прекрасно работает...
  7. Всем спасибо! :a14: Буду разбираться...
  8. да тот же самый...
  9. Сейчас запустили на другом компе - все работает :( Т.е. где то у меня ошибка в настройках - вот только где? :05:
  10. 1. WinAVR 20071221 2. Везде где можно правильно указано... Причём это проявляется спонтанно - программа работала нормально, потом вдруг началось...
  11. Вопрос по AVRStudio

    В AVRах я новичок. Написал программку пытаюсь отладить - но при записи в регистры таймара данные пишутся не в те регистры - почему? Не могу понять... Может кто подскажет в чём ошибка? Пишу в OCR3A - 0x00FF , а записывается в OCR3B и т.д. AVRStudio 4.13 Build 528, микроконтроллер Atmega128 #include <avr\io.h> #include <avr\interrupt.h> #define bit_34 62 int main () { PORTE = 0; DDRE = 0; PORTB = 0; DDRB = 1 << 7; OCR3A = 0x00FF; OCR3B = bit_34; ETIMSK = 0; TCCR3B = (1 << WGM32); ASSR = 0; OCR0 = 127; TIMSK = (1 << OCIE0); TCNT0 = 0; TCCR0 = (1 << CS11) + (1 << CS10) + (1 << WGM01); EICRB = 1 << ISC50; EIMSK = 1 << INT5; while(1) {}; }
  12. А почему обязательно SD? Не прощё ми взять BlueTooth COM порт + микроконтроллер который будет поодерживать систему команд + опрашивать датчики - это более универсальное решение т.к. BlueTooth сейчас практически на всех КПК + никаких дров писать не надо будет...
×
×
  • Создать...