برای مشاهده روند ساخت پروژه ها و محصولات به کانال تلگرام ما بپیوندید           
  خانه محصولات دانلود پروژه ها بحث و گفتگو وبلاگ آموزشها و مقالات تماس با ما  

  فروم khazama.com --> الکترونیک دیجیتال --> ساعت چرخون و ...

  سه‌شنبه 27 شهريور 86 , 11:40 AM


کاربر
amin_amin
تعداد پستها : 38
ساعت چرخون و ...

سلام
من می خواستم یه دونه از این ساعتهای گردون بسازم (کلیات طرح رو که آشنا هستین)

بعد مثلا برای زمان سنجی ، زمان یه دور چرخش موتور رو اندازه می گیریم . بعد چی کار کنیم ؟ کی به کی حالت led ها رو عوض کنم ؟


  سه‌شنبه 27 شهريور 86 , 12:56 PM


مدیر سایت
behzad
تعداد پستها : 905

درود .

مطمئن بشید که سرعت چرخش LED ها سی دور در ثانیه یا بیشتر هست . فرض میکنیم که شما تنها یک سنسور برای همزمانی یا تشخیش عبور دوران LED ها دارید پس یک کلاک سی هرتزی باید توی خروجی سنسور به میکرو داشته باشید . جدول فونتها رو هم بایستی تهیه کنید مثلا ماتریس حرف A (ارتفاع این ماتریس باید با تعداد LED های شما یکی باشه مثلا اگه 8 تا LED دارید این ماتریس 8*7 تعیین میشه) حالا فرض کنید که میخواهید کل محیط دایره ای که توسط دوران این مجموعه ایجاد میشه شامل 10 کاراکتر بشه که هر کاراکتر هم شامل 7 ردیف بود (همون 8*7) پس کل محیط میشه 70 ردیف (یا کمی بیشتر برای فاصله بین هر کاراکتر تا کاراکتر بعد) . با فرض سی دور در ثانیه بودن سرعت چرخش زمان هر دور میشه 33 میلی ثانیه . و چون 70 ردیف باید نمایش داده بشه زمان بین هر ردیف میشه حدود نیم میلی ثانیه (یعنی تاخیر مورد نیاز بین هر ردیف) .

_______________________________________________________________________
پروژه های حرفه ای الکترونیک و کامپیوتر در www.khazama.com
مجموعه متن باز نامهای اصیل ایرانی
وبلاگ نوشته های شخصی من


  يكشنبه 1 مهر 86 , 6:22 PM


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

 

//global :
unsigned long int n_ppr ;
unsigned long int o_ppr ;

interrupt [EXT_INT1] void ext_int1_isr(void)
{
n_ppr= n_ppr+TCNT1H*256+TCNT1L ;
o_ppr=n_ppr;
n_ppr=0;
}




interrupt [TIM1_OVF] void timer1_ovf_isr(void)
{
n_ppr = n_ppr+66536;
}


روش بالا درسته ؟
حالا سوال دومم :
گیریم که با این روش تعداد پالسها رو حساب کردم . می خام مثلا توی هر 1/100 یا1/200 یا هر کسری از اون یه کار خاص بکنم . چی کار کنم ؟ با یه تایمر دیگه اینکارو بکنم ؟ کامپیر کنم ؟

ممنون که جواب میدین

  يكشنبه 1 مهر 86 , 6:37 PM


مدیر سایت
behzad
تعداد پستها : 905

درود .

منظورتون رو از این کد متوجه نشدم ! برا چی باید پالسها رو بشمرید ؟ یکم توضیح بدید فلوچارت کارتون رو که اصلا چه روشی تو ذهنتونه ؟

_______________________________________________________________________
پروژه های حرفه ای الکترونیک و کامپیوتر در www.khazama.com
مجموعه متن باز نامهای اصیل ایرانی
وبلاگ نوشته های شخصی من


  يكشنبه 1 مهر 86 , 6:50 PM


کاربر
amin_amin
تعداد پستها : 38
اون کدها تعداد پالسهای هر دور موتور رو میشمرد .
بعد مثلا اگه  1000 پالس داشته باشیم توی هر دور ، توی دور بعدی می تونیم مثلا روی پالس 500 خروجی بدیم که بیفته روی ساعت 6  (اگه اینتراپت روی ساعت 12 باشه)

اگه که منظرتون تایمی کار کردن بهتره بگین چرا بهتره ؟ مگه این چشه ؟
ممنون

  دوشنبه 2 مهر 86 , 3:58 PM


مدیر سایت
behzad
تعداد پستها : 905

این ۱۰۰۰ رو از کجا میکیرید ؟ مطمئنا ۱۰۰۰ رو از روی سنسور ها نگرفتید (شاید منظورتون ۱۰۰۰ بار سرریز تایمر بوده) . این کارتون رو پیچیده میکنه و آخرشم باید با همون تاخیر کارتون رو ادامه بدید . تنها خوبی که این روش میتونه داشته باشه اینه که اگه سرعت موتور تغییر کنه بازم میتونید سنکرون بودن رو حفظ کنید .

روش پیشنهادی من همون استفاده از تاخیره ولی میتونید برای حفظ همزمانی با سرعت موتور (سنکرون بودن) سرعت موتور رو هم در محاسبات تاخیر لحاظ بکنید . کدتون رو کمی توضیح بدید لطفا . سعی میکنم یه کد و یه طرح ساده برای اینکار حاظر بکنم . مثلا یه طرح ساده که علامتی مثل ^ رو رسم کنه .

_______________________________________________________________________
پروژه های حرفه ای الکترونیک و کامپیوتر در www.khazama.com
مجموعه متن باز نامهای اصیل ایرانی
وبلاگ نوشته های شخصی من


  دوشنبه 2 مهر 86 , 5:56 PM


کاربر
amin_amin
تعداد پستها : 38
سلام
ممنون .
این شمردن پالسها در یک دور رو به این خاطر انجام دادم که اگه حتی موتور رو کلا عوض کردم بازم مشکلی پیش نیاد .مثلا به جای 3 دور موتور 30 دور بزارم !

اون 1000 که گفتم قبلش نوشتم مثلا" ! خوب عدد به دست اومده خیلی خیلی بزرگتر از این حرفهاست . اون عدد رو مثال زدم که بگم مثلا اگه بخایم یه خط راست روی ساعت 6 داشته باشیم چی کار کنیم . وگرنه عدد واقعی خیلی بزرگتره .

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

اما چون توی یک دورموتور چندین بار تایمر 16 بینی سرریز میشه توی اینتراپت سرریز تایمر ، به ازای هر سرریز 65536 تا به متغیر n_ppr  اضافه می کنم .
در پایان در وقفه ی سنسور (یعنی زمانی که یک دور تمام شد و دور بعدی خواست شروع بشه) مقدار n_ppr  رو با محتوای فعلی تایمر 16 بیتی 1 جمع می کنم .
این روش ایراد داره ؟


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

ممنون که کمکم می کنین


  پنج‌شنبه 5 مهر 86 , 9:36 PM


کاربر
amin_amin
تعداد پستها : 38

سلام آقا بهزاد خوبین ؟ من نوشتن کرکتر رو انجام دادم. با این کدها :

interrupt [EXT_INT1] void ext_int1_isr(void){
PORTA=127; delay_us(800);
PORTA=9; delay_us(800);
PORTA=9; delay_us(800);
PORTA=9; delay_us(800);
PORTA=127; delay_us(800);
PORTA=0; delay_us(1500); }

اما مشکلی که داره و نمی فهمم از کجا آب می خوره اینه که حرف A رو دوبار نمایش میده . چرا ؟ *********** ضمنا این روش تایم و delay اصلا جالب نیست . نیشمه جای یه کرکتر رو توی دایره ی نمایش مشخص کرد . مخصوصا" واسه دور موتور های متفاوت ساعت آنالوگ هم نمیشه راهاش نمایش داد . چه راه حلی پیشنهاد می کنین ؟ ممنون


  سه‌شنبه 10 مهر 86 , 8:57 AM


مدیر سایت
behzad
تعداد پستها : 905

اینکه دوبار مینویسه ممکنه در اثر تحریک شدن مجدد وقفه باشه (دقت کنید که وقفه در اثر یک لبه فعال بشه مثلا لبه رو به بالا) . اولی که روال وقفه شروع میشه بهتره وقفه رو غیر فعال کنید میتونید با این کد تمام وقفه ها رو قطع کنید

 #asm("cli");

 و موقع خروج از روال وقفه دوباره وقفه رو فعال کنید :

 #asm("sei");

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

_______________________________________________________________________
پروژه های حرفه ای الکترونیک و کامپیوتر در www.khazama.com
مجموعه متن باز نامهای اصیل ایرانی
وبلاگ نوشته های شخصی من


  جمعه 20 مهر 86 , 4:11 PM


کاربر
amin_amin
تعداد پستها : 38
سلام
ممنون آقا بهزاد
مشکل دوبار تحریک شدن رو اینجوری حل کردم که به جای لبه ی بالا رونده لبه ی پایین رونده رو به عنوان مولد تحریک قرار دادم . نمیدونم چرا مشکل حل شد و اصلا چش بود
شاید مشکل از سنسور و آمپ بوده .

مقاومتش 10 کیلو بوده و آپ امپ هم op07cp هست .
ممنون میشم راهنمایی کنین

  جمعه 20 مهر 86 , 4:19 PM


مدیر سایت
behzad
تعداد پستها : 905

درود .

نقشتون مشکلات اساسی داره . برای اینکار نیاز به یه مقایسه کننده دارید که ولتاژ خروجی سنسور رو با یه مقدار مرجع مقایسه کنه و خروجی رو صفر یا یک کنه . ساخت مقایسه کننده با opamp خیلی سادست میتونید از این طرح استفاده کنید .

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

_______________________________________________________________________
پروژه های حرفه ای الکترونیک و کامپیوتر در www.khazama.com
مجموعه متن باز نامهای اصیل ایرانی
وبلاگ نوشته های شخصی من


  صفحه : [1]  2    
 
 


Designer And Programmer : Behzad khazama
Coded With ASP.NET
تمامي حقوق مادي و معنوي مطالب متعلق به اين سايت ميباشد .
هر گونه استفاده از مطالب اين سايت تنها با ذکر منبع بلامانع ميباشد
.
www.khazama.com
Tel : 051-44641597 - 09363677001 - 09155714862
Support SMS Center: 09363677100