اطلاعیه

Collapse
No announcement yet.

یک سوال در مورد vhdl

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

    #16
    پاسخ : یک سوال در مورد vhdl

    نوشته اصلی توسط electronics
    سلام دوباره

    شما میدونید چه طور فرکانس یک اسیلاتور رو میشه پایین آورد؟

    منظورم کد VHDL هستش؟

    با تشکر
    سلام،
    اگه منظورتون این هستش که یک کلاک رو از یک اوسیلاتور بگیرید و اون رو کاهش بدید و بعد استفاده کنید، بهترین روش DCO هستش( Digitally Controlled Oscillator) ، هم قابلیت اختلاف فاز رو بهتون میده و هم تغییر در فرکانس رو، تعداد بیتهای شمارنده ای که به کار می برین هم دقتتون رو کم و زیاد میکنه.
    اسمایل، تومورو ویل بی وُرس

    دیدگاه


      #17
      پاسخ : یک سوال در مورد vhdl

      Digitally Controlled Oscillator
      منظورتون از این عبارت همون شمارنده است؟

      چون من این عبارت رو نفهمیدم!!


      چون مثلا من میخوام همون اعدادی که در ابتدای این تاپیک بحثش شد رو( که هنوز نتونستم پیاده اش کنم!! ) روی

      LCD نشون بدم برای نوشتن روی lcd نیاز به کلاک دارم ( نمیدونم با چه فرکانسی!!) در حالی که کریستال من

      40MHZ هستش و برای این منظور کلاک به مراتب پایین تری نیازه ولی چه جوری؟

      از اینکه راهنمایی میکنین ممنونم.


      حضرت محمد (ص):بدانید،کسی که نمی داند نباید از آموختن شرم کند،که قیمت هر کس به قدر معلو مات اوست.

      دیدگاه


        #18
        پاسخ : یک سوال در مورد vhdl


        منظورتون از این عبارت همون شمارنده است؟
        از شمارنده استفاده میکنه ولی به معنی شمارنده نیست، نوعی اوسیلاتور هست که یک کلاک ثابت رو میگیره و هر کلاک دلخواه پایین تر از کلاک اصلی رو میده.


        چون مثلا من میخوام همون اعدادی که در ابتدای این تاپیک بحثش شد رو( که هنوز نتونستم پیاده اش کنم!! ) روی

        LCD نشون بدم برای نوشتن روی lcd نیاز به کلاک دارم ( نمیدونم با چه فرکانسی!!) در حالی که کریستال من

        40MHZ هستش و برای این منظور کلاک به مراتب پایین تری نیازه ولی چه جوری؟
        برای اینکار، میتونید از همون تکنیکی استفاده کنید که برای PWM استفاده میشه، یعنی یک شمارنده میسازید که با کلاک 40 مگ بشمره، حالا اگه مثلا کلاک 1 هرتز لازم دارین کافیه شمارنده تا عدد 40 میلیون بشمره، هر موقع به این عدد رسید یک کلاک به ماژول LCD زده میشه و اینکار هر بار تکرار میشه، یادتون نره که شمارنده رو مساوی صفر قرار بدین، هر بار که به 40 میلیون رسید.

        از اینکه راهنمایی میکنین ممنونم.
        خواهش میکنم
        اسمایل، تومورو ویل بی وُرس

        دیدگاه


          #19
          پاسخ : یک سوال در مورد vhdl

          با سلام مجدد

          سوالی که دارم اینه که چه طور میشه یک کلاک رو از یک ورودی گرفت و لبه های بالا رونده اونو شمرد؟

          با تشکر فراوان
          حضرت محمد (ص):بدانید،کسی که نمی داند نباید از آموختن شرم کند،که قیمت هر کس به قدر معلو مات اوست.

          دیدگاه


            #20
            پاسخ : یک سوال در مورد vhdl

            نوشته اصلی توسط electronics
            با سلام مجدد

            سوالی که دارم اینه که چه طور میشه یک کلاک رو از یک ورودی گرفت و لبه های بالا رونده اونو شمرد؟

            با تشکر فراوان
            process(CLOCK_IN)
            begin
            if rising_edge(CLOCK_IN) then
            --اینجا کدتون رو مینویسید--
            end if;
            end process;
            اسمایل، تومورو ویل بی وُرس

            دیدگاه


              #21
              پاسخ : یک سوال در مورد vhdl

              process (clk_in)

              variable count : integer := 1;

              begin

              if rising_edge(clk_in) then

              count := count + 1 ;

              if count := 40000000 then

              led : '1';

              count := 1 ;

              end if;

              end if;


              end process;

              من این کد ها رو نوشتم ولی از قسمت if count := 40000000 then ایراد میگیره چون فکر کنم اعلام شرایط

              در if باید بولی باشه.

              پس برای چک کردن اینکه شمارنده به اون مقدار رسیده یا نه باید از چه دستوری استفاده کرد؟

              با تشکر فراوان

              حضرت محمد (ص):بدانید،کسی که نمی داند نباید از آموختن شرم کند،که قیمت هر کس به قدر معلو مات اوست.

              دیدگاه


                #22
                پاسخ : یک سوال در مورد vhdl

                مشکل قبل حل شد

                فقط نمیدونم چرا کد های زیر فرکانس 1 Hz رو بهم نمیده؟

                process (clk_in)

                variable count : integer := 1;

                begin

                if rising_edge(clk_in) then

                count := count + 1 ;

                if count = 40000000 then

                led <= '1';

                count := count - 1 ;

                if count = 1 then

                led <= '0';

                end if;

                end if;

                end if;

                خیلی ممنون از لطف شما
                حضرت محمد (ص):بدانید،کسی که نمی داند نباید از آموختن شرم کند،که قیمت هر کس به قدر معلو مات اوست.

                دیدگاه


                  #23
                  پاسخ : یک سوال در مورد vhdl

                  با سلام به شما

                  من تونستن برنامه تبدیل 40mhz به 1hz رو به صورت زیر بنویسیم

                  process (clk_in)

                  variable count : integer := 0;

                  begin

                  if rising_edge(clk_in) then
                  if (count<40000000) then
                  led <= '1';
                  count := count + 1;

                  elsif (count>=40000000 and count<80000000) then
                  led<='0';
                  count := count + 1;
                  elsif (count=80000000) then
                  led<='1';
                  count := 1;
                  end if;
                  end if;

                  end process;

                  حالا می خوام بدونم

                  1- برای نوشتن یک حرف روی lcd چه کار باید بکنم

                  2- چه فرکانسی برای lcd لازمه؟

                  3- آیا برنامه کلاکی که نوشتم رو باید به صورت زیر برنامه استفاده کنم؟

                  با تشکر از راهنمایی شما
                  حضرت محمد (ص):بدانید،کسی که نمی داند نباید از آموختن شرم کند،که قیمت هر کس به قدر معلو مات اوست.

                  دیدگاه


                    #24
                    پاسخ : یک سوال در مورد vhdl

                    نوشته اصلی توسط electronics
                    با سلام به شما

                    من تونستن برنامه تبدیل 40mhz به 1hz رو به صورت زیر بنویسیم

                    process (clk_in)

                    variable count : integer := 0;

                    begin

                    if rising_edge(clk_in) then
                    if (count<40000000) then
                    led <= '1';
                    count := count + 1;

                    elsif (count>=40000000 and count<80000000) then
                    led<='0';
                    count := count + 1;
                    elsif (count=80000000) then
                    led<='1';
                    count := 1;
                    end if;
                    end if;

                    end process;

                    حالا می خوام بدونم

                    1- برای نوشتن یک حرف روی lcd چه کار باید بکنم

                    2- چه فرکانسی برای lcd لازمه؟

                    3- آیا برنامه کلاکی که نوشتم رو باید به صورت زیر برنامه استفاده کنم؟

                    با تشکر از راهنمایی شما
                    1- با پروتوکل lcd که حتما آشنایی دارین، کافیه براش ماژولی بنویسید که ورودی 8 بیتی ASCII بگیره و بر روی LCD چاپ کنه. کلاکش هم باید کلاکی باشه که در رنج کاری LCD هست، در Datasheet اون LCD حتما در این مورد توضیح داده.

                    2-از اونجایی که یک State machine باید براش بنویسید که در هر مرحله داده رو بگذاره روی پورت، Write و Chip select رو هم کلاک بزنه، کلاک باید به تعداد State ها بیشتر از کلاک لازم برای LCD باشه، البته اگه کمتر از کلاک LCD بهش کلاک بزنید مشکلی نیست و کندتر چاپ میکنه ولی اگه بیشتر بشه دیگه کار نمیکنه یا اشنباه کار میکنه.

                    3- بله، این کلاکی که ساختین میره به ماژول LCD
                    اسمایل، تومورو ویل بی وُرس

                    دیدگاه


                      #25
                      پاسخ : یک سوال در مورد vhdl

                      با پروتوکل lcd که حتما آشنایی دارین، کافیه براش ماژولی بنویسید که ورودی 8 بیتی ASCII بگیره و بر روی LCD چاپ کنه.
                      بله تا حدودی آشنایی دارم ولی توالی نوشتن کد های vhdl رو نمیدونم.

                      ساده ترش اینه که اصلا نمیدونم چه طوری باید بنویسم! :sad:

                      توی اینترنت هم هر چی جستجو کردم کد های مربوط به lcd رو پیدا نکردم!

                      روی بردی که من در اختیار دارم از 10 پایه lcd استفاده شده

                      8 تا مربوط به باس داده هستش

                      یکی مربوط به rs یا همون register select که باید در موقع نوشتن روی lcd در منطق 1 باشه(؟)

                      یکی هم پایه EN که کلاک به اون وارد میشه.

                      حالا چه طوری باید با این 10 تا پایه اطلاعات رو روی lcd نشون بدم؟

                      باز هم از راهنمایی شما دوست خوبم ممنونم.
                      حضرت محمد (ص):بدانید،کسی که نمی داند نباید از آموختن شرم کند،که قیمت هر کس به قدر معلو مات اوست.

                      دیدگاه


                        #26
                        پاسخ : یک سوال در مورد vhdl

                        نوشته اصلی توسط electronics
                        بله تا حدودی آشنایی دارم ولی توالی نوشتن کد های vhdl رو نمیدونم.

                        ساده ترش اینه که اصلا نمیدونم چه طوری باید بنویسم! :sad:

                        توی اینترنت هم هر چی جستجو کردم کد های مربوط به lcd رو پیدا نکردم!

                        روی بردی که من در اختیار دارم از 10 پایه lcd استفاده شده

                        8 تا مربوط به باس داده هستش

                        یکی مربوط به rs یا همون register select که باید در موقع نوشتن روی lcd در منطق 1 باشه(؟)

                        یکی هم پایه EN که کلاک به اون وارد میشه.

                        حالا چه طوری باید با این 10 تا پایه اطلاعات رو روی lcd نشون بدم؟

                        باز هم از راهنمایی شما دوست خوبم ممنونم.
                        خواهش میکنم،
                        این لینک بهتون ایده میده که State machine چگونه کار میکنه و از اون برای درایو LCD استفاده کنید:
                        http://www.swarthmore.edu/NatSci/ech...teMachines.pdf
                        اسمایل، تومورو ویل بی وُرس

                        دیدگاه


                          #27
                          پاسخ : یک سوال در مورد vhdl

                          سلام

                          من این ماشین حالت رو خوندم و اینطور متوجه شدم که بین rs , write مربوط به lcd انتخابهایی انجام میده

                          اما روی بردی که من دارم wr همواره زمین شده و فقط بین ده پایه lcd حق انتخاب دارم که هشت تا مربوط به دیتا هستش و دو تای دیگه

                          یکی rs یا همون رجیستر سلکت و یکی هم en که کلاک به این پایه میره.

                          اجازه بدین من کل کاری که باید انجام بدم رو بگم:

                          دو تا بردار داریم 1*3 که یکی از رو دیگری تخمین زده میشه مثلا x1 مقدار اصلی و xx1 مقدار تخمینی هست که کدهای اونو نوشتم

                          بعد باید این داده ها و تخمینشون با هم روی lcd نمایش داده بشن . همین .

                          ولی چون من تا به حال lcd رو با fpga انجام ندادم یه خورده برام نا مفهومه

                          با تشکر فراوان
                          حضرت محمد (ص):بدانید،کسی که نمی داند نباید از آموختن شرم کند،که قیمت هر کس به قدر معلو مات اوست.

                          دیدگاه


                            #28
                            پاسخ : یک سوال در مورد vhdl


                            اما روی بردی که من دارم wr همواره زمین شده
                            از اونجایی که بطور معمول پایه RD/~WR در اکثر LCD به یک صورت عمل میکنه، اون رو به زمین وصل کردن تا همیشه در حالت نوشتن روی LCD باشه.


                            PROCESS (Clk, WriteCharacter)
                            variable Counter: Integer range 0 to 10 := 0;
                            BEGIN
                            IF rising_edge(clk) THEN
                            CASE Counter IS
                            WHEN 0 =>
                            IF WriteCharacter = '1' THEN
                            Counter := 1;
                            END IF;
                            WHEN 1 =>
                            --DATAOUT <= CharacterData;
                            Counter := 2;
                            WHEN 2 =>
                            --Set/Reset Controller pins;
                            Counter := 3;
                            WHEN 3 =>
                            --Set/Reset Controller pins;
                            Counter := 4;
                            WHEN 4 =>
                            --Set/Reset Controller pins;
                            Counter := 5;
                            WHEN 5 =>
                            IF WriteCharacter = '0' THEN
                            Counter := 0;
                            END IF;
                            WHEN OTHERS => null;
                            END CASE;
                            END IF;
                            END PROCESS;
                            اسمایل، تومورو ویل بی وُرس

                            دیدگاه


                              #29
                              پاسخ : یک سوال در مورد vhdl

                              سلام

                              اول اینکه خیلی از شما ممنونم

                              و اگر اجازه بدین می خوام یک سوال دیگه بپرسم

                              میشه یک توضیح کوتاه در مورد این کد هایی که نوشتید بدید!
                              حضرت محمد (ص):بدانید،کسی که نمی داند نباید از آموختن شرم کند،که قیمت هر کس به قدر معلو مات اوست.

                              دیدگاه


                                #30
                                پاسخ : یک سوال در مورد vhdl

                                نوشته اصلی توسط electronics
                                سلام

                                اول اینکه خیلی از شما ممنونم

                                و اگر اجازه بدین می خوام یک سوال دیگه بپرسم

                                میشه یک توضیح کوتاه در مورد این کد هایی که نوشتید بدید!
                                سلام، خواهش میکنم،
                                اون کد یک State machine هست که با کلاک Clk کلاک میخوره و با فعال شدن سیگنال WriteCharacter (برابر با یک منطقی) شروع به کار میکنه و تا زمانی که سیگنال WriteCharacter به حالت اولیه اش برنگرده( صفر منطقی) منتظر میمونه. در هر مرحله شما میتونید دیتای هر کاراکتر رو روی پینهای دیتا بذارید و در مراحل بعدی rs و en رو اونطور که باید، فعال و غیر فعال کنید(صفر ویک منطقی). اون کلاک Clk میتونه تا بینهایت کلاک بخوره، یعنی میشه مستقیم وصلش کرد به یک سورس کلاک، مثلا 1 کیلوهرتز، هر بار که کاراکتری رو بخواید چاپ کنید باید دوکار بکنید، دیتای کاراکتر رو بدید و به WriteCharacter هم کلاک بزنید.
                                اسمایل، تومورو ویل بی وُرس

                                دیدگاه

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