این پروژه تنها یک ساعت و تقویم معمولی نیست. این ساعت امکان نمایش تاریخ به میلادی و شمسی، نمایش روز هفته، دما و ساعت را داراست. از ویژگی های اصلی این ساعت می توان به دقیق بودن آن اشاره کرد که به دلیل استفاده از آی سی RTC به شماره DS1307 می باشد؛ در نتیجه، شما دیگر نگران حذف شدن اطلاعات ثبت شده در ساعت نخواهید بود. در این پروژه آموزشی، شما با نحوه راه اندازی LCD گرافیکی، آی سی DS1307، استفاده از حافظه EEPROM را در نرم افزار کدویژن CodeVision AVR خواهید آموخت.
شرح مدار
در این مدار از میکروکنترلر ATMEGA32 از خانواده میکروکنترلرهای AVR استفاده شده است. نمایش ساعت، تاریخ، دما و … بر روی یک عدد LCD کاراکتری 16 در 2 صورت می گیرد. از سه عدد کلید فشاری جهت تنظیم ساعت و تاریخ تشکیل می شود. دمای محیط با استفاده از سنسور DS18B20 اندازه گیری می شود و در بازه دمایی 55- الی 125 و با دقت 0.1 درجه سانتی گراد بر روی LCD نمایش داده می شود.
خصوصیات مدار
این مدار از خصوصیات و امکانات متنوعی برخوردار است که در زیر به این موارد اشاره شده است:
- نمایش ساعت به صورت 24 ساعته و به همراه ثانیه شمار
- نمایش تاریخ به صورت میلادی و شمسی
- نمایش دمای محیط از 55- الی 125 درجه سانتی گراد با دقت 0.1 درجه
- نمایش روز هفته
- دقت بسیار بالا
- عدم پاک شدن تنظیمات ساعت به هنگام برق رفتگی
شماتیک مدار
بخش دانلود
شامل موارد زیر:
- فایل شبیه سازی Proteus 8.8
- سورس کد کامل برنامه به زبان سی (کدویژن CodeVision)
- کد هگز مخصوص پروگرام کردن میکروکنترلر
توجهات:
سلام خسته نباشید
برای مونتاژ مدار بجای آی سی ATMEGA32 از ATMEGA32A استفاده کنیم فرقی داره ؟
سلام خسته نباشید
چرا سنسور دما با وجود اینکه وصله در داخل lcd -999.0 نشون میده.
ممنون میشم راهنمایی بفرمایید
سلام فایلی که در بخش دانلود قرار داده اید نه در کدویژن نسخه3.14باز میشع نه پروتوس ان
لطفا بازبیبی دیگری فرمایید
سلام من این مدار رو عملی بستم و کلید هاش کار نمیکنن و هنگام قطع برق ساعت از اول باز شروع به کار میکنه
سلام
LCD ها دارای دو پایه K و A هستند آیا این دو پایه را باید به VSS و VDD خود LCD که به منبع تغذیه متصل هست وصل کرد؟
با درود؛
بله، هم میتوان به VSS و VDD خودِ LCD متصل کرد، و هم به GND و VCC منبع. بایستی توجه شود که ولتاژ VCC از 5 ولت نمیبایست تجاوز کند.
سلام
باتری بک آپ میشه باتری سکه ای 3 ولتی باشه؟
LCD ارتباط I2c می خواد؟ اگه LCD این امکان را نداشت با مبدل میشه؟
با درود؛
سلام
پایه های VCC و AVCC و AREF باید به مثبت و دو پایه GND به منفی تغذیه باشه؟
درسته؟
چون در عمل دو پایه GND و یک پایه VCC علاوه بر AVCC داره
و پایه VO در LCD همان VEEهست؟
با درود؛
پایه AREF در شماتیک به 5 ولت متصل شده یعنی من وصل نکنم؟
با درود؛
چنانچه لازم باشد از ADC میکروکنترلر استفاده کنید (که در این مدار استفاده نشدهاست)، میبایست به آن پایه ولتاژی دهید که قرار است بهعنوان ولتاژ مرجع استفاده شود؛ در غیر اینصورت، وصلبودن یا نبودن آن اهمیتی ندارد؛ در هر صورت، معمولا آن را به VCC متصل میکنند تا چنانچه در آینده قرار بود به پروژه قابلیت ADC نیز اضافه شود، نیازی به تغییر مدار نباشد.
در پروتیوس، بههنگام ایجاد یک پروژه جدید، این پایه بهطور پیشفرض به VCC متصل میشود و کاربر در آن نقشی ندارد.
ببخشید سوالم زیاد شد در عمل هم باید پایه ریست به 5 ولت متصل بشه؟
با درود؛
نیاز ضروری به اینکار نمیباشد؛ ولی معمولا وصل میکنند تا از ریستشدن ناخواسته میکروکنترلر جلوگیری کنند.
سلام
سورس کدی که دیباگ شده رو بفرستید لطفا چون کد مشکل داره
ولی توی فایل دانلود فقط فایل هگز دیباگ شده وجود داره فایل سورس دیباگ شده نیست
با درود؛
سلام
میشه با اتمگا 8 هم این پروژه رو اجرا کرد فقط باید اتمگا 8 فراخوانی بشه؟
با درود؛
بله، میتوان. چنانچه در تعداد پورتها و حافظه میکروکنترلر به محدودیت برخورد نکنید، میتوانید از هر میکروکنترلر دیگری نیز استفاده کنید.
سلام خسته نباشید
ممنون بابت پروژه ای که در اختیار ما گذاشتید
وقتی کد های پروژه رو کپی کردم برای LCD ارور داد
کجای برنامه مشکل داره؟
و اگر بخوام از یک LCD 4*20 استفاده کنم و خط آخر LCD(خط 4) متنی رو نمایش بده(20 حرف باشه) ضمن اینکه ;lcd_init(16) رو به ;lcd_init(20) تغییر بدم باید چه کار کنم؟
با درود؛
صرفا با کپی-پیستکردن کدها به نتیجه نخواهید رسید.
میبایست یا توسط CodeWizard، یا توسط Project > Configure > Libraries، این قابلیت را در پروژه خود تنظیم نمایید.
چطور باید تنظیم کرد
لطفا قسمت دوم سوالم رو هم پاسخ بدین ممنون
توضیحات رو هم بیشتر توضیح بدین ممنون چون برنامه نویسی بلد نیستم
با درود؛
سوالات شما پاسخ مشابهی داشت؛ از این لحاظ پاسخ، به یک بند خلاصه شد.
برای بهرهبرداری از پروژههای موجود در وبسایت میبایست حداقل پیشنیازها را داشته باشید که یکی از آنها دانش برنامهنویسی و آشنایی با نرمافزارهای تخصصی است.
در غیر اینصورت، ساخت آن پروژه پیشنهاد نمیشود (طبق بند 6 قوانین وبسایت)؛ کما اینکه از لحاظ زمانی/مالی متضرر خواهید شد.
سلام مطمئن هستید کریستال رو باید به پورت c وصل کرد؟
با درود؛
کریستال با فرکانس 32.768MHz صرفا برای ایجاد یک ثانیه بهصورت دقیق بوده و بایستی به پینهای TOSC1 و TOSC2 متصل شود؛ توسط این کریستال، فرکانس تایمر شماره دو میکروکنترلر تنظیم شده و باعث میشود توسط Prescaler با مقیاس 1/128، دقیقا هر یک ثانیه Overflow کند.
سلام من این برنامه را روی پوروتئوس انجام دادم اما دما را 999 نشان میدهد مشکل از کجاست
سلام یه سری مشکلات ک تو کامتا گذاسه شده بود برطرف شده و این فایل نهایی هست یا باید ویرایش کنیم ؟؟؟
با درود؛
بله، Debug انجام شده است.
سلام .
ممنون میشم اگه لیست قطعات مورد نیاز برای این پروژه رو بنویسید.
با درود؛
چنانچه هدف، ساخت مدار است، بایستی یک مدار منبعتغذیه نیز برای مدار تعبیه کنید و قطعات مربوط به آنرا نیز لحاظ کنید؛ یا اینکه صرفا از یک آداپتور 5 ولت با جریان 1 الی 2 آمپر استفاده کنید.
سلام وقتتون بخیر. ببخشید وقتی پروژه رو توی پروتئوس ران میکنم زمان ساعت خیلی کنده یعنی هر چند ثانیه یکبار شمارش ثانیه انجام میشه و ساعت عقب میمونه. من تنظیمات میکرو رو هم انجام دادم توی پروتئوس و روی 8 مگاهرتز قرار داره. ممنون میشم راهنمایی بفرمایید برای حل مشکل.
با درود؛
این مورد در شبیهسازی پروتیوس امری طبیعی است. شبیهسازی در پروتیوس بهصورت Real-time نمیباشد و بستگی به قدرت سیستم شما از لحاظ سختافزاری دارد؛ ولی چنانچه مدار را در عمل ببندید، این موضوع برطرف خواهد شد. البته میتوانید سرعت را تنظیم کنید (از سربرگ System > Set Animation Options)؛ ولی بهصورت دقیق نمیباشد.
ممنون از پاسختون. برای من بیشتر شبیه سازی مهمه. در این قسمت چه تغییراتی باید انجام بدم؟
درود مجدد؛
در بخش ذکر شده، با تنظیم نمودن پارامتر Frames per Second میتوانید این کار را انجام دهید. در حالت پیشفرض این مقدار بر روی 20 تنظیم شده است. با افزایش یا کاهش آن، مقدار مطلوب را یافت کنید.
سلام میشه پروژه ی ساعت و تقویم و آلارم رو قرار بدید لطفا؟
با درود؛
متاسفانه در حال حاضر موجود نمیباشد و در آینده نزدیک قرار خواهد گرفت. ضمنا، با اضافهنمودن چند خط کد، میتوان آلارم را نیز برای این مدار تعبیه نمود.
سلام جناب مهندس سپاس بیکران از زحماتتون
ارور بنده چطور رفع میشه؟
با درود؛
این خطا مربوط به این است که شما ارتباط I2C یا TWI (برای راه اندازی DS1307) و ارتباط 1Wire (برای راه اندازی سنسور دمای DS18B20) را در Config پروژه پیکره بندی نکرده اید. از منوی Project > Configure، اقدام به پیکره بندی موارد ذکر شده فرمایید. (البته ظاهرا فایل time.asm مربوط به پروژه این سایت نمی باشد و کدی خارج از آن است.)
سلام مجدد جناب مهندس
خیلی خیلی ممنونم
من چون برای اوقاتی که خانه نیستم مداری بسازم لحظه به لحظه چک میکردم جوابتونو ببینم و انقدر غرق شدم فراموش کردم قدردانی کنم
فقط الان که مدار رو بستم
منو و تنظیم تاریخ و ساعت همگی به درستی کار میکنه
اما ثانیه اول روی 80 بود و هنگام تغییرش 00 میمونه
و بعد از تنظیم منو ثانیه شمار رقم نمیندازه
سوال من مبتدی اینه که مشکل از برنامه نیست؟ چک شد ساختش؟
و سوال دوم اینکه از کریستال داخلی برای میکرو نمیشه کمک گرفت؟
چون من ماژول ds1307 گرفتم و خودش کریستال ساعت داره و برای میکرو ندارم فعلا
ممنونم از محبت راهنماییتون
سلام مجدد قربان
پیام قبلی که دادم مشکل از باتری ماژول بودو سالم که انداختم درست شد
اما مشکل نهاییم اینه که تاریخ و ساعت انلاین روی ال سی دی نمیاد
هر بار که ریست میکنم میکرو رو اطلاعات صحیح اپدیت میشه روی ال سی دی
مشکل از کجاست
از کلاک هست؟
من ماژولم کریستال ساعت داره
و میکرو هم کلاک داخلی
با درود؛
بین دو دستور rtc_get_date و rtc_get_time، یک تاخیر 10 الی 100 میلی ثانیه ای قرار دهید: (ظاهرا در کد از قلم افتاد است.)
بالاخره مشکل برنامه رو متوجه شدم
داخل حلقه(1) while
دو خط زیر اضافه شود
rtc_get_date(&Weekday, &Day, &Month, &Year);
rtc_get_time(&Hour, &Minute, &Second);
تا تاریخ و ساعت انلاین ودقیق دیده بشه روی ال سی دی
واقعا ممنون از سایت و زحماتتون
با درود؛
– بسیار خوب.
– روشی که شما فرمودید صحیح است ولی اصولی نمی باشد. به این کار اصطلاحا Pooling گفته می شود و در برنامه نویسی پیشنهاد نمی شود. اصولش این است که به هنگام راه اندازی مدار، تاریخ و زمان به صورت یکبار از DS1307 فراخوانی شود و سپس عملیات اصلی شمارش توسط میکروکنترلر انجام گیرد. البته می توان برای Sync بودن ساعت با آی سی RTC، برای مثال در هر 5 ثانیه یا 10 ثانیه مقادیر زمان مجددا فراخوانی شود. ولی به این صورت که در هر Cycle فراخوانی شود، باعث می شود عملیات فراخوانی در هر ثانیه صدها هزار بار تکرار شود.
– بزرگوارید، موفق باشید.
خیلی محبت کردید ممنونم
فقط من متوجه نمیشم که وقتی توی حلقه while میفته کجای برنامه داره زمان حساب میشه
بنظرم نیاز به همون فراخوانی هر از گاهی باشه
– خواهش می کنم.
– محاسبات زمان در ISR مربوط به تایمر شماره 2 انجام می شود. به طور واضح تر: زمانی که تایمر شماره 2 سرریز یا به اصطلاح Overflow می شود.
سلام، وقتی کامپایل میکنم با این خطاها مواجه میشم. 🙁
درود؛
در ابتدا عرض شود: این برنامه با استفاده از CodeVision ورژن 3.14 توسعه داده شده است.
چنانچه ورژن نرم افزار شما نیز مطابقت دارد، مراحل زیر را انجام دهید:
سلام
خیلی خیلی ممنونم حل شد
یه مشکل دیگه هم هست. با اینکه خط دوم ال سی دی سالمه و تو بخش عدد دهی کار میکنه، موقع نمایش تقویم و ساعت دیگه عدد نشون نمیده. خط اول رو نشون میده ولی.
ممنونم
درود مجدد؛
بررسی شد، مشکلی یافت نشد.
ظاهرا ورژن پروتیوس شما مشکل دارد.
سلام
حل شد
خیلی از پاسخگویی سریع و راهنمایی های بجاتون ممنونم.
با سلام و خسته نباشید ممنون از سایت خوبتون
ببخشید برنامه نویسی موضوع ساعت، تقویم و دماسنج با LCD کاراکتری به زبان سی C با کدویژن CodeVision AVR هم موجود؟
ممنون میشم راهنمایی کنید
درود؛
بله، چنانچه منظور شما سورس کد مدار همین صفحه است، در بخش دانلود قرار داده شده است.
سلام
من مدار رو بستم ثانیه شمارش کار نمیکنه ic ds1307 و باتری رو هم دوبار تعویض کردم فرکانس رو هم روی 8mhz داخلی تنظیم کردم اما مشکلم حل نشده میشه راهنمایی کنید
درود؛
از طریق پشتیبانی در ارتباط باشید.
سلامی دوباره
من مدار روبستم فقط مشکلی که دارم اینه که ساعت کار نمی کنه اول مدار رو به تغذیه وصل میکنم ثانیه رو 80 نمایش میده و ثابت هستش تنظیمات رو هم که تغییر میدم فقط ثانیه شمار تغییر نمیکنه از 80 به 0 فقط تغییر میکنه
به نظرشما مسکل از کجاست
define ها رو خودم اضافه کردم ولی باز هم Error وجود دارد
Error: C:\Users\hossein\Desktop\LCD Clock Calendar\CodeVision\LCD Clock Calendar.c(124): invalid expression
Error: C:\Users\hossein\Desktop\LCD Clock Calendar\CodeVision\LCD Clock Calendar.c(139): invalid expression
Error: C:\Users\hossein\Desktop\LCD Clock Calendar\CodeVision\LCD Clock Calendar.c(177): undefined symbol ‘OCIE0’
Error: C:\Users\hossein\Desktop\LCD Clock Calendar\CodeVision\LCD Clock Calendar.c(184): invalid expression
Error: C:\Users\hossein\Desktop\LCD Clock Calendar\CodeVision\LCD Clock Calendar.c(201): invalid expression
طبق تصویر پیوست:
ممنون درست شد
بله
<include <mega32a.h# شده حتی فایل رو دوباره دانلود کردم اما مشکلم حل نشد
ممنون از جواب دادن سریعتون
درود مجدد؛
به جای فایل های mega32.h و mega32_bits.h فایل های
mega32.hو maga8_bits.h هست و خطاها define نشدن
بله؛ مشکل از همین قسمت است.
سلام خسته نباشید خدمت اعضای سایت
فایل ارسال شده مشکل دارد موقع کامپایل
Error: D:\project melec.ir\saat-tem-day\LCD.Clock_.Calendar\LCD Clock Calendar\CodeVision\LCD Clock Calendar.c(109): undefined symbol ‘DDA7’
Error: D:\project melec.ir\saat-tem-day\LCD.Clock_.Calendar\LCD Clock Calendar\CodeVision\LCD Clock Calendar.c(111): undefined symbol ‘PORTA7’
Error: D:\project melec.ir\saat-tem-day\LCD.Clock_.Calendar\LCD Clock Calendar\CodeVision\LCD Clock Calendar.c(121): undefined symbol ‘DDC7’
Error: D:\project melec.ir\saat-tem-day\LCD.Clock_.Calendar\LCD Clock Calendar\CodeVision\LCD Clock Calendar.c(123): undefined symbol ‘PORTC7’
Error: D:\project melec.ir\saat-tem-day\LCD.Clock_.Calendar\LCD Clock Calendar\CodeVision\LCD Clock Calendar.c(136): undefined symbol ‘WGM00’
Error: D:\project melec.ir\saat-tem-day\LCD.Clock_.Calendar\LCD Clock Calendar\CodeVision\LCD Clock Calendar.c(174): undefined symbol ‘OCIE0’
Error: D:\project melec.ir\saat-tem-day\LCD.Clock_.Calendar\LCD Clock Calendar\CodeVision\LCD Clock Calendar.c(181): undefined symbol ‘ISC2’
Error: D:\project melec.ir\saat-tem-day\LCD.Clock_.Calendar\LCD Clock Calendar\CodeVision\LCD Clock Calendar.c(198): undefined symbol ‘ADATE’
ممنون میشم بررسی کنین
با تشکر از سایت خوبتون
درود؛
سلام و خسته نباشید وقتی کد رو می نویسم دچار خطا میشه لطفا راهنمایی کنید ممنونinclude Converter.lib#
درود؛
لطفا متن خطا را ارسال فرمایید.
سلام
پروتئوس من ورژنش پایینه خودم پروتئوس رو بستم همه چیز اکی بود به جز دما
عینا مثل خود مدار بستم ولی دما رو -9999 نشون میده . یک مشکل دیگهای که باهاش روبرو شدم این بود که وقتی باتن ها رو میزدم خیلی خیلی با تاخیر عمل میکرد.
یک سوال دیگه هم داشتم اینکه خواستم از کد سردر بیارم ولی خیلی از دستوراتش رو ندیده بودم فرمتش یکم فرق داشت مثلا void loop رو توی آردوینو دیده بودم ولی تاحالا توی کدویژن ندیده بودم.
با درود؛
– آیا مقاومت Pull-Up با مقدار 10k اهم را به سنسور اضافه کرده اید؟
– فیوزبیت های میکروکنترلر در Proteus به درستی تنظیم شده است؟ برای تنظیم بر روی میکروکنترلر Double-Click کنید و فیوزبیت ها را بر روی Int.RC 8MHz تنظیم کرده و پارامتر Clock Frequency را بر روی 8000000 هرتز قرار دهید.
سلام وقتتون بخیر
سپاس بابت پروژه های جالبتوت
اگه ممکنه تابع تبدیل تاریخ رو هم ب صورت کتابخانه قرار بدید
تشکر…
با درود؛
در آینده نزدیک قرار خواهد گرفت.
موفق باشید
با درود مجدد؛
تابع درخواستی شما برنامه نویسی و در لینک زیر قرار گرفت:
کتابخانه تابع تبدیل تاریخ میلادی، شمسی و قمری برای کدویژن CodeVision AVR و بسکام Bascom
ایام هفته را درست نشان نمی دهد
همش در شنبه(sat) می ماند
با درود؛
ضمن سپاس بابت گزارش خطا؛
– مشکل برطرف گردید.
– فایل را دوباره دانلود و بررسی فرمایید.