اطلاعیه

Collapse
No announcement yet.

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

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

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

    با سلام

    دوستان یه مشکلی پیش اومده ظاهرا ساده به نظر میرسه ولی تو پرتیوس (عملا هم جواب نداد)جواب نداد چرا شو از دوستان گرامی میخوام بپرسم

    با یه دستور ساده میخوام یه کلاک روی یه پورت میکرو ایجاد میکنم بعد میخوام این کلاک رو به یکی از پین های میکرو که ورودی تعریفش کردم بدم بعد به ازای هر کلاک یه متغیر افزایش پیدا بکنه مقدارش .ولی کار نمیکنه وقتی این کلاک رو از ابزار ایجاد کلاک پرتیوس میدم درسته ولی وقتی از یه پورت میکرو میگیرم به یه پین دیگه میکرو برای کارم میدم اصلا فرقی نمیکنه

    یه دستور ساده

    do
    set porta.0
    waitus 500
    reset porta.0
    if pina.1=1 then
    incr a
    end if
    cls
    lcd a
    loop اینم بگم در تعریف پورت ها به عنوان داخلی واون یکی خارجی درست عمل کردم بالا عرض کردم با کلاک ابزار پرتیوس کار میکنه یا اگر خودمون به vccوصل بکنیم عمل میکنه مشکل کلاک از یه پورت میکرو بهیه پین میکرو هست .با بقیه پورت ها هم تست کردم با یه میکرو دیکه کلاک ایجاد کردم اونم تست کردم کارنکرد. اون مربع قرمز تو پرتیوس که یک منطقی رو نشون میده روشن خاموش میشه
    ولی وقتی به پین مربوطه میدیم کاری انجام نمیده عملا هم تست کردم بیرون هم همین طور هست
    چرا اینطوری میشه ممنون میشم راهنمایی بفرمایید
    معلوليت محدوديت نيست

    آنکس که عاجز از خلق لحظه هاست، معلول است. نه من...روح بلند آدمیت فراتر از هر معلولیتی است.

    #2
    پاسخ : یک مشکل با کلاک ایجاد شده با یک پورت میکرو واستفاده از ان کلاک تو خود میکرو

    با سلام
    دوست عزیز. اولا برای تولید کلاک با میکرو، بهتره زمانهای بالا و پائین بودن خروجی با هم مساوی باشن. یعنی هر قدر تاخیر برای 1 بودن خروجی گذاشتین همونقدر هم برای 0 بودنش بذارین. تو حلقه ای که شما نوشتین، زمان 1 بودن خروجی نیم ثانیه هست و زمان صفر بودنش، خیلی کم و فقط در حدود چند میکرو ثانیه هست.

    ثانیا اگه شما دارین بیت صفر رو به بیت یک وصل میکنین، برنامتون از نظر منطقی هم ایراد داره. چون زمانی که خروجی رو صفر میکنین، بعدش ورودی رو برای یک بودن چک میکنین، توی این حالت، وقتی میکرو به دستور IF میرسه، همیشه ورودی صفره و امکان نداره 1 بودنش رو ببینه. بنا براین درست کار میکنه.
    کمترین توقع از یک فرد تحصیلکرده، دانستن املای صحیح کلمات است.

    دیدگاه


      #3
      پاسخ : یک مشکل با کلاک ایجاد شده با یک پورت میکرو واستفاده از ان کلاک تو خود میکرو

      do
      set porta.0
      if pina.1=1 then
      incr a
      end if
      waitus 500
      reset porta.0
      waitus 500
      cls
      lcd a
      loop
      بازم جواب نمیده هر جوربگید تغییرش دادم . عملا این کارو که میکنم وقتی ولتاژ رو اندازه میگیرم دور ور 1.5 در حال تغییر هست
      میشه لطف بفرمایید تو پرتیوس یه تست بکنید منکه نتونستم چواب بگیرم
      معلوليت محدوديت نيست

      آنکس که عاجز از خلق لحظه هاست، معلول است. نه من...روح بلند آدمیت فراتر از هر معلولیتی است.

      دیدگاه


        #4
        پاسخ : یک مشکل با کلاک ایجاد شده با یک پورت میکرو واستفاده از ان کلاک تو خود میکرو

        دوستان آیا دامنه کلاک پالس کم وزیادش مهم هست ؟ ( من رشتم الکترونیک نیست ) چون تو مثال بالا کلاک که با ست رست کردن یک پورت به پین میکرو میدیم عمل نمیکنه . بیرون از محیط شبیه سازی هم عمل نمیکنه. ولی اگر خودم یه لحظه 5 ولت (1 منطقی) بهش بدم
        کاری که میخوام انجام میده. به نظرتون مشکل دامنه هست؟ حالا اگر جواب سوال بالا مثبت باشه و اندازه دامنه تو کار کلاک پالس تاثیر داره حالا برای ایجاد کلا ک با دامنه دلخواه چیکار باید بکنیم؟
        معلوليت محدوديت نيست

        آنکس که عاجز از خلق لحظه هاست، معلول است. نه من...روح بلند آدمیت فراتر از هر معلولیتی است.

        دیدگاه


          #5
          پاسخ : یک مشکل با کلاک ایجاد شده با یک پورت میکرو واستفاده از ان کلاک تو خود میکرو

          حتما مطمئن شین که همه مدار درست سیم بندی شده. پورت ها درست انتخاب شده هستن.(یه بار دیگه چک کنید)
          می تونید یه برنامه ساده Blink (چشمک زن) واسه همین پورت و پین بنویسین و ببینید که همه چیز Ok هستش یا نه؟
          نمی دونم دیتوی سایکل
          (duty cycle) که شما ازش حرف می زنید چقدر مهم هستش ولی شاید بحث Slew rate وجود داشته باشه. فرکانس کاری میکرو چقدره؟ با فرکانس خیلی پایین تر تست کنید ببینید چطوره. کار میکنه یا نه؟
          چرا این کار رو با وقفه خارجی انجام نمی دید؟ اصلا چرا اینجوری می خواید مدار رو ببندید؟ چه مشکلی شما دارید؟ می خوایید راجب پروژه تون با ما صحبت کنید و دقیق توضیح بدید که چیکار می خوایید بکنید تا کمکتون کنیم.

          دیدگاه


            #6
            پاسخ : یک مشکل با کلاک ایجاد شده با یک پورت میکرو واستفاده از ان کلاک تو خود میکرو

            ممنون از پاسخ دقیق شما

            میدونید چرا اینکارو کردم جناب Rohalamin میخواستم ماژول HX711رو راه اندازی بکنم .این یه ماژول برای راه اندازی لودسل هستش.

            حالا تو دیتا شیت اومده با دادن 25 کلاک به ورودی کلاک این ماپزول میتونید دیتا با گین 128 از خروجی دریافت کنید .2 نمونه کد خود دیتا شیت یکی اسمبلی ویکی با سی گذاشته .ولی متاسفانه بنده از بسکام در حد مبتدی سر درمیارم .اونجا با ست وریست کردن یه پورت که خروجی تعریف شده با گذاشتن توی یه حلقه 25 تا کلاک به روش بالا به این ماژول داده .من هر کاری کردم دیدم ماژول جواب نمیده خروجی فقط صفر هست همه اتصلات رو چک کردم وقتی دیدم مشکل از برنامه بنده هست گفتم شاید این کلاک پالسی که میدم زمانش خیلی ناچیز تاخیرم گذاشتم ولی درست نشد .گفتم ماژول رو بزارم کنار اصلا بببینم این کلاکی که میدم کارم درست هست یا نه.این شد با اون تیکه برنامه بالا شروع کردم به تست وکلاک تولیدی رو دادن به پین ورودی میکرو تا مثلا یه کاری در قبال کلاک ورودی انجام بده .دیدم بازم کاری انجام نداد . تو پرتیوس یه کلاک خارجی دادم دیدم کار میکنه
            (با تولید کننده کلاک) گفتم حتما از این هست . برا همین این سوال رو پرسیدم .از یک مگ 4مگ 8 مگ هم استفاده کردم فرقی نکرده .جناب Rohalamin رشتم الکترونیک نیستا .یه کاریم کردم فقط نخندینا دیدم وقتی دستی 5ولت (1منطقی) رو به پین ورودی
            دادم عمل کرد اومدم اون کلاک رو که با ست وریست کردن درست کرده بودم رو دادم به یه ترانزیستور از حالت سویچینگ ترانزیستور استفاده کردم تا اون توری عمل بکنه که کرد با یه ال ای دی تست کردم دیدم کار میکنه ولی سرعت خیلی پایین بود
            تو 8 مگ داخلی گذاشتم ولی سرعت پایین بود .ببخشید زیاد توضیح دادم فقط گفتم مفصل بگم بدونید چیکار خواستم بکنم . تو دیتاشیت گفته پهنای کلاک پالس نباید از 60میکرو ثانیه زیاد باشه اگر زیاد بشه چیپ پاوردان میشه .به نظر من شاید نهوه خوندن اطلاعات از این ماژول اشتباهه. من این کارو میکردم . خروجی ماژول رو میدادم به پین میکرو که ورودی تعریف کردم وبا این دستور میخواستم بخونم
            DO
            INCR I
            SET PORT A.0
            A.I = PINA.1
            RESET PORTA.0
            IF I=25 THEN
            I=0
            CLS
            LCD A
            LOOP
            تو ی کدی که دقت کردم دیدم یه خطش اینه ROTATE A,LEFT از بعضی دوستان راجب کد سی سوال کردم ولی انگار وقت نداشتن این شد خودم فکر کردم (اینو میدونم که یه بیت به سمت چپ میبره ) یه باره دیگه دیتا شیتو دیدم فهمیدم گفته اولین بیتی که ماژول میده بیرون MSB(بیت پر ارزش ) هست وباید شیفت بدیم تا اون بیت پر ارزش همیشه در سمت چپ باشه واگر این شیفته نباشه هرچی بیاد جواب یک هست
            خلاصه این شد زوم کردم به کلاک پالسه تا از اول ریز به ریز بیام جلو تا جواب بگیرم

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

            آنکس که عاجز از خلق لحظه هاست، معلول است. نه من...روح بلند آدمیت فراتر از هر معلولیتی است.

            دیدگاه


              #7
              پاسخ : یک مشکل با کلاک ایجاد شده با یک پورت میکرو واستفاده از ان کلاک تو خود میکرو

              نه با اون ماژوال کار کردم و نه بیسیک بلدم. من خودم C/C++ کار میکنم. کار با AVR رو هم گذاشتم کنار و فقط با STM32 کار میکنم. تا جایی که بتونم کمکت میکنم. بنظر 25 کلاک با AVR هیچ مشکلی نداره و بدون مشکل کار میکنه. ولی اینکه میگی سرعت چشمک زن خیلی پایین بوده شاید بخاطر تنظیم نادرست فیوزبیت ها باشه. مهم نیست رشته شما چیه. منم رشتم الکترونیک نبوده و نیست.
              فعلا مشکل برنامه چشمک زن رو درست کنید و بعد بیاید سراغ این برنامه تون. اون ولتاژ خروجی هم معلوم نیست چرا اینجوریه.

              دیدگاه


                #8
                پاسخ : یک مشکل با کلاک ایجاد شده با یک پورت میکرو واستفاده از ان کلاک تو خود میکرو

                تشکر میکنم بابت وقتی که گذاشتین یه خواهش داشتم این سورس به ربان c توی دیتا شیت هستش
                /-------------------------------------------------------------------
                sbit ADDO = P1^5;
                sbit ADSK = P0^0;
                unsigned long ReadCount(void){
                unsigned long Count;
                unsigned char i;
                ADDO=1;
                ADSK=0;
                Count=0;
                while(ADDO);
                for (i=0;i<24;i++){
                ADSK=1;
                Count=Count<<1;
                ADSK=0;
                if(ADDO) Count++;
                }
                ADSK=1;
                Count=Count^0x800000; <============
                ADSK=0;
                return(Count);
                }
                اون قسمت که علامت زدم چی میگه؟ یه سوال دیگه این سورس تو کدوم خط دیتای گرفته شده داخل متغییر ریخته میشه ؟

                یه جا هم هست اگر پین دیتا مخالف صفر شد یه واحد به متغییر اضافه کن این یعنی وقتی مازول بیت صفر ارسال میکنه؟ اون زمان؟
                ببخشید گفتین سی کار میکنین گفتم سوالاتی که داشتم بپرسم .بازم ممنون بابت صرف وقت طلاییتون برای راهنمایی
                معلوليت محدوديت نيست

                آنکس که عاجز از خلق لحظه هاست، معلول است. نه من...روح بلند آدمیت فراتر از هر معلولیتی است.

                دیدگاه


                  #9
                  پاسخ : یک مشکل با کلاک ایجاد شده با یک پورت میکرو واستفاده از ان کلاک تو خود میکرو

                  [code=c]Count=Count^0x800000;[/code]
                  "^" یه عملگر باینری هستش. بهش میگن XOR
                  توی این خط مقدار موجود توی متغیر Count با مقدار 0x800000 بوسیله عملگر "^" با هم XOR میشه و دوباره توی متغیر Count ریخته میشه(یعنی مقدار قبلی Count پاک میشه و مقدار جدید بدست اومده توی همین متغیر قرار میگیره).
                  منظور سوال دومتون رو نمی فهمم. گنگه.
                  سوال سوم رو هم چون با ماپول کار نکردم متاسفانه نمی دونم.
                  خواهش میکنم.
                  آها؛ تا یادم نرفته اینم جدول XOR:


                  دیدگاه

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