Thông báo

Collapse
No announcement yet.

Các pác giúp em khoản quét led với

Collapse
X
 
  • Lọc
  • Giờ
  • Show
Clear All
new posts

  • Các pác giúp em khoản quét led với

    e có thực hành trên vi điều khiển quét led thành công , mô phỏng trên proteus
    e mới quay sang FPGA e cũng thử quét led theo lý thuyết như vậy sao ko được



    dieukhienled<="0111";
    led7<="0000011" after 4ms;

    dieukhienled<="1011";
    led7<="1111000" after 4ms;

    cho vào vòng lặp và ko được .... >.<

  • #2
    Bạn kể lại chi tiết coi bạn làm những gì?
    1)
    2)
    3) ...

    Comment


    • #3
      Nguyên văn bởi jefflieu Xem bài viết
      Bạn kể lại chi tiết coi bạn làm những gì?
      1)
      2)
      3) ...

      chả là e vừa học vi dieu khiển thì thầy hướng dẫn quét led 7

      while(1)
      {
      LED1=1; LED2=0; // led 1 sáng led 2 tắt
      TRISD=0XC0; //hien thi len led
      Delay1KTCY(50); // delay

      LED1=0;LED2=1; // led 1 tắt led 2 sáng
      TRÍD=0X0F; // hien thi len led
      Delay1KTCY(50);// delay
      }

      e bê nó sang VHDL để cho zo FPGA như sau


      library IEEE;
      use IEEE.STD_LOGIC_1164.all;

      entity testled7 is
      port(
      led7 : out STD_LOGIC_vector(6 downto 0);
      dieukhienled : out STD_LOGIC_VECTOR(3 downto 0)
      );
      end testled7;


      architecture testled7 of testled7 is
      begin
      process
      variable c: integer;
      begin
      for c in 0 to 99999 loop

      dieukhienled<="0111"; --led thu 1 ngoài cùng sáng led 2,3,4 tắt
      led7<=1000000" after 4ms; -- hiển thị số 0

      dieukhienled<="1011"; ledn thu 2 sang led 1,3,4 tắt
      led7<="1111001" after 4ms; -- hiển thị số 1

      end loop;

      end process;
      end testled7;



      em tạo thành công file bit để nạp zo Spartan3E XCS250E nhưng nó sáng led 1 và hiển thị số 1 và led 2 ko sáng ToT
      chứ ko phải là số 01
      Last edited by vietanh28093; 02-06-2014, 19:06.

      Comment


      • #4
        Nguyên văn bởi vietanh28093 Xem bài viết

        chả là e vừa học vi dieu khiển thì thầy hướng dẫn quét led 7

        while(1)
        {
        LED1=1; LED2=0; // led 1 sáng led 2 tắt
        TRISD=0XC0; //hien thi len led
        Delay1KTCY(50); // delay

        LED1=0;LED2=1; // led 1 tắt led 2 sáng
        TRÍD=0X0F; // hien thi len led
        Delay1KTCY(50);// delay
        }

        e bê nó sang VHDL để cho zo FPGA như sau


        library IEEE;
        use IEEE.STD_LOGIC_1164.all;

        entity testled7 is
        port(
        led7 : out STD_LOGIC_vector(6 downto 0);
        dieukhienled : out STD_LOGIC_VECTOR(3 downto 0)
        );
        end testled7;


        architecture testled7 of testled7 is
        begin
        process
        variable c: integer;
        begin
        for c in 0 to 99999 loop

        dieukhienled<="0111"; --led thu 1 ngoài cùng sáng led 2,3,4 tắt
        led7<=1000000" after 4ms; -- hiển thị số 0

        dieukhienled<="1011"; ledn thu 2 sang led 1,3,4 tắt
        led7<="1111001" after 4ms; -- hiển thị số 1

        end loop;

        end process;
        end testled7;



        em tạo thành công file bit để nạp zo Spartan3E XCS250E nhưng nó sáng led 1 và hiển thị số 1 và led 2 ko sáng ToT
        chứ ko phải là số 01
        code của bạn chỉ chạy được trong mô phỏng thôi, không tạo ra mạch nạp vào chip được (còn gọi là not synthesizable).
        Lý do là trên FPGA/CPLD không có thành phần nào có thể thực hiện được việc delay 4ms.
        Tren FPGA/CPLD chỉ có một đống các flip-flop + Look-up-table (LUT). Flip-flop làm thanh ghi (register), LUT dùng để thực hiện hàm logic.

        Muốn thưc hiện môt "task" gồm nhiều bươc, thông thường phải dùng state-machine.

        Viết sẵn cho bạn state-machine gồm 2 state, bật tắt LED cho bạn thử. Tự bạn hiểu rồi áp dụng cho trường hợp của bạn

        signal counter : std_logic_vector(7 downto 0);
        signal state : std_logic;
        process(clk)
        begin
        if(rising_edge(clk)) then
        if(state='0') then -- Tat
        if(counter=x"FF") then state <= '1'; counter <= (others=>'0');
        else
        counter <= counter+1;
        end if;
        else --Bât
        if(counter=x"1F") then state <= '0'; counter <= (others=>'0'); else
        counter <= counter + 1;
        end if;
        end if;
        end if;
        end process;
        LED <= '0' when state = '1' else '0';

        Comment


        • #5
          Có phải state machine còn được gọi là máy trạng thái ko ạ, dịch tiếng ra thì đúng,
          cái máy trạng thái có cấu trúc nhất định ko ạ, tại trong sách của có viết về máy trang thái nhưng có cấu trúc
          architecture....of...is...
          type state is(.....);
          begin
          .
          .

          tức là phải khai báo ở type state

          Comment


          • #6
            Ừh, nó đó.
            Thay vì mình tự gán cho các trạng thái 1 giá trị
            Mình khai báo
            type T_STATE is (STATE_A, STATE_B, ... STATE_Z);
            signal state : T_STATE;
            Nghĩa là tạo thêm kiểu T_STATE và tên các state bằng chữ, rồi tạo thanh ghi kiểu T_STATE;
            Chương trình sẽ tự gán cho STATE_A một số nào đó ... gọi là mã hóa trạng thái (state encoding)
            Nếu state của bạn đơn giản, chỉ có 2 state thì gán đại cho 0 và 1.

            Comment


            • #7
              Cách đơn giản là bạn dùng một counter để đếm số clock , kiểm tra giá trị và xuất led theo bội số của counter.

              Các CPLD hầu hết đều không có delay block (như một vài FPGA có thể có block delay input / output ), xử lý đều dựa trên logic và thiên về tốc độ xuất nhập ( nó là Logic device ). Dùng nó thì thường kết hợp thêm với MCU hoặc Clock gen bên ngoài để xử lý .
              Với clock đầu vào cao mà sử dụng bộ đếm trực tiếp ... sẽ tốn rất nhiều "máu" (cell ) , những loại chip có số lượng macrocell , gate lớn thì còn đỡ ... chứ như mấy con 32 Mcell thì viết xử lý cái counter vài chục MHz cũng hết luôn bộ nhớ ... chẳng dùng được gì nữa luôn !
              Module RF chuyên dụng điều khiển, truyền dữ liệu, thiết kế đề tài, dự án điện tử - chuyển giao công nghệ... ĐT: 0904964977 - email: dientuqueduong@yahoo.com

              Comment


              • #8
                Thanks các pác, em làm được rồi, à các pác cho em hỏi có thể chạy 2 máy trạng thái song song nhau được ko ạ

                Comment

                Về tác giả

                Collapse

                vietanh28093 Tìm hiểu thêm về vietanh28093

                Bài viết mới nhất

                Collapse

                Đang tải...
                X