اطلاعیه

Collapse
No announcement yet.

مشکل در شمارش با CPLD

Collapse
X
 
  • فیلتر
  • زمان
  • Show
Clear All
new posts

    مشکل در شمارش با CPLD

    سلام دوستان.

    من با XC9572 یه counter ساده 16 بیتی ساختم. قرار هست از این کانتر برای شمردن پالس های انکودر استفاده کنم که در هر 360 درجه، 3600 تا پالس میده، و به عبارتی فرکانس کل شمارش میشه 7200 پالس در هر دور.
    مشکلی که من دارن دقیقاً همین جاست. یعنی یه انکودر آروم بچرخه و چه سریع، کانتر درست نمی شمره. دقیق تر بگم، مثلاً از شماره 32500 اگر شروع به شمردن کنم، میره تا 32900 بعد برمی گرده 32700، دوباره تا 32900 میره بالا و دوباره برمی گرده 32700، و این کار 2، 3 بار تکرار میشه و بعد از اون یهو میره 33500!!!
    خیلی تو اینترنت گشتم، اما چیزی پیدا نکردم. ممنون میشم اگر کمک کنید.
    دانش فني تا به عمل تبديل نشده، ذره اي ارزش نداره. اما بعضي وقت ها بايد از دانش براي باز کردن مرزهاي جديدي در علم استفاده کرد، نه اينکه اونها رو صرفاً فقط به عمل تبديل کرد.

    #2
    پاسخ : مشکل در شمارش با CPLD

    نوشته اصلی توسط حامد پور آزاد
    سلام دوستان.

    من با XC9572 یه counter ساده 16 بیتی ساختم. قرار هست از این کانتر برای شمردن پالس های انکودر استفاده کنم که در هر 360 درجه، 3600 تا پالس میده، و به عبارتی فرکانس کل شمارش میشه 7200 پالس در هر دور.
    مشکلی که من دارن دقیقاً همین جاست. یعنی یه انکودر آروم بچرخه و چه سریع، کانتر درست نمی شمره. دقیق تر بگم، مثلاً از شماره 32500 اگر شروع به شمردن کنم، میره تا 32900 بعد برمی گرده 32700، دوباره تا 32900 میره بالا و دوباره برمی گرده 32700، و این کار 2، 3 بار تکرار میشه و بعد از اون یهو میره 33500!!!
    خیلی تو اینترنت گشتم، اما چیزی پیدا نکردم. ممنون میشم اگر کمک کنید.
    code کانتری که نوشتی رو بزار
    خدا گفت : به جهنم ببریدش، او برگشت و با تعجب به خدا نگاه کرد. خدا گفت : به بهشت ببریدش. فرشتگان پرسیدند: چرا؟! خدا گفت : او هنوز به من امیدوار است...

    دیدگاه


      #3
      پاسخ : مشکل در شمارش با CPLD

      نوشته اصلی توسط حمید نجفی
      code کانتری که نوشتی رو بزار
      کد:
      	entity Counter is
      		 Port ( mreset : in std_logic;
      				 reset1 	: in std_logic;		-- asynchronous reset1
      				 a,b : in std_logic;
      				 clk1: in std_logic;
      				 xclk: in std_logic;
      				 output1 : out UNSIGNED (15 downto 0)); -- output of the counter1
      	end Counter;
       
      architecture behavioral of Counter is
      
      	COMPONENT D_FF
      		PORT (d,clock : IN STD_LOGIC;
      				q : OUT STD_LOGIC);
      		END component;
      	
      	component XOR_2
      		PORT (x, y : IN STD_LOGIC;
      	  z : OUT STD_LOGIC);
      		END component;
      	
      	component Digital_Filter is
      		port ( a   : in  std_logic; 
      				clock : in  std_logic; 
      				a_f  : out  std_logic);
      		end component;
      
      	signal a_f, b_f: std_logic;
      	signal clk1_f, reset1_f: std_logic;
      	signal out_d: std_logic;
      	signal	out1: UNSIGNED(15 downto 0);
      
      	begin
       
      		f1: Digital_filter port map (a,xclk,a_f);
      		f2: Digital_filter port map (b,xclk,b_f);
      		f3: Digital_filter port map (reset1,xclk,reset1_f);
      		
      		d1: D_FF port map (b_f,a_f,out_d);
      		x1: XOR_2 port map (b_f,a_f,clk1_f);
      		cntr1: process (clk1_f, out_d, reset1_f, mreset)
      		begin
      			if (clk1_f'event and clk1_f='1') then
      				if (reset1_f or mreset)='1' then out1 <= "0111111111111111";
      				elsif (reset1_f or mreset)='0' then
      					if (out_d='1') then out1 <= out1+'1';
      					elsif (out_d='0') then out1 <= out1-'1';
      					end if;
      				end if;
      			else
      				NULL;
      			end if;
      		end process cntr1; --- that's all
      		output1 <= out1;
      end architecture;

      یه چندتا توضیح کوچولو. اینکه اون کامپوننت digital_Filter رو برای از بین بردن نویز spike گذاشتم. بر اساس یه آی سی کانتر 16 بیتی که تو اینترنت پیداش کردم. و در ضمن با انکودر می خوام هم بالا رونده بشمرم و هم پائین رونده. اون فلیپ فلاپ D هم برای انتخاب بالا شمارش یا پائین شمارش گذاشته شده.

      یه توضیح دیگه. من دقیقاً نقطه پرش رو بدست آوردم. اما نمی تونم درک کنم:

      همه اعداد هگز هستند.
      دفعه اول که شمارش تا 84FF انجام میشه و بعد به 80FF پرش می کنه (یعنش به جای اینکه بشه 8500 میشه 80FF)، بعد یک بار دیگه میره تا 84FF و بعد دوباره میشه 80FF (این بار باید بشه 86FF)، بعد از این یکی دیگه که میشمره ناگهان می پره به 8700.
      این قضیه توی تمام حالت ها تکرار میشه:
      از 80FF به 82FF، از 84FF به 86FF و فکر می کنم از 88FF به 8AFF. که البته این آخری رو حدث میزنم بر اساس ترتیبی که داره این طور عمل میکنه.
      دانش فني تا به عمل تبديل نشده، ذره اي ارزش نداره. اما بعضي وقت ها بايد از دانش براي باز کردن مرزهاي جديدي در علم استفاده کرد، نه اينکه اونها رو صرفاً فقط به عمل تبديل کرد.

      دیدگاه


        #4
        پاسخ : مشکل در شمارش با CPLD

        مشکل بوجود اومده به ساده ترین شکل ممکن حل شد!!!

        اشکال از خود CPLD بود. اون رو که عوض کردم برطرف شد.

        با تشکر
        دانش فني تا به عمل تبديل نشده، ذره اي ارزش نداره. اما بعضي وقت ها بايد از دانش براي باز کردن مرزهاي جديدي در علم استفاده کرد، نه اينکه اونها رو صرفاً فقط به عمل تبديل کرد.

        دیدگاه


          #5
          پاسخ : مشکل در شمارش با CPLD

          خب یکاری کن اول
          یک کانتر معمولی ساده رو به بالا بزار
          ببن تو اون حالت هم همینه؟
          هیچ کامپوننتی بهش متصل نکن
          باید مشکل رو ردیابی کنی
          اول این رو تست کن تا تکلیف یک سری چیز ها روشت بشه
          خدا گفت : به جهنم ببریدش، او برگشت و با تعجب به خدا نگاه کرد. خدا گفت : به بهشت ببریدش. فرشتگان پرسیدند: چرا؟! خدا گفت : او هنوز به من امیدوار است...

          دیدگاه


            #6
            پاسخ : مشکل در شمارش با CPLD

            نوشته اصلی توسط حامد پور آزاد
            مشکل بوجود اومده به ساده ترین شکل ممکن حل شد!!!

            اشکال از خود CPLD بود. اون رو که عوض کردم برطرف شد.

            با تشکر
            به سلامتی
            ولی بلاخره پیداش میکردیم :smile:
            خدا گفت : به جهنم ببریدش، او برگشت و با تعجب به خدا نگاه کرد. خدا گفت : به بهشت ببریدش. فرشتگان پرسیدند: چرا؟! خدا گفت : او هنوز به من امیدوار است...

            دیدگاه


              #7
              پاسخ : مشکل در شمارش با CPLD

              نوشته اصلی توسط حمید نجفی
              به سلامتی
              ولی بلاخره پیداش میکردیم :smile:
              همون دیگه. از دیشب همه موارد رو تست کردم، تا آخر با تست با مولتی متر متوجه شدم که اشکال از خود CPLD بود. بازم ممنون.
              دانش فني تا به عمل تبديل نشده، ذره اي ارزش نداره. اما بعضي وقت ها بايد از دانش براي باز کردن مرزهاي جديدي در علم استفاده کرد، نه اينکه اونها رو صرفاً فقط به عمل تبديل کرد.

              دیدگاه

              لطفا صبر کنید...
              X