برخی از نمونه کد های PIC که در کلاس PIC تدریس شده اند، در ادامه آمده اند. این کد ها با نرم افزار CCS نوشته شده اند.
کد PIC فرکانس متر
در این کد PIC با استفاده از تایمر 0 که پالس خود را از پایه ی T0CKI دریافت می کند، تعداد پالس های خارجی اعمال شده به این پایه در عرض یک ثانیه که توسط تایمر یک ایجاد می شود، اندازه گیری می کند.
کد PIC تقسیم کننده ی فرکانسی
در این برنامه یک فرکانس تا حداکثر 1KHz به میکروکنترلر اعمال می شود. میکروکنترلر با استفاده از CCP زمان دوره ی تناوب را اندازه می گیرد و بعد از اندازه گیری زمان دوره ی تناوب بستگی به میزان تنظیم تقسیم فرکانسی فرکانس به عددی بین 1 تا 11 تقسیم می شود. در شکل فوق فر کانس ورودی برابر 1KHz می باشد و تقسیم فرکانسی برابر 5 است در نتیجه فرکانس خروجی برابر 200Hz شده است. در شکل فوق آی سی U2 همان میکروکنترلر موجود در برنامه ی فر کانس متر می باشد که وظیفه ی نمایش فرکانس خروجی را بر عهده دارد. آی سی U1 نیز فرکانس ورودی را اندازه گرفته و خروجی را بر N تقسیم می کند.
کد PIC وقفه ی خارجی
این برنامه که در قسمتی از برنامه ی بالا نیز بکار رفته است با اعمال یک لبه ی پایین رونده به پایه ی INT0 شمارنده ای که مقدار آن روی پورت D نمایش می یابد و در حالت عادی شمارنده ای در داخل حلقه ی while شمارش می یابد و روی PORTB نشان داده می شود.
نمونه کد کنترل سروو موتور به صورت نرم افزاری با فرکانس متغیر
در این برنامه آی سی U2 با فشردن دو کلید متصل شده به آن می تواند فرکانسی بین 1500 تا 500 هرتز را تولید کند و زاویه ی چرخش موتور نیز با تغییر این فرکانس تغییر می کند. آی سی U1 نیز یک فرکانس متر می باشد که فرکانس رو پایه ی مرکزی سروو موتور را کنترل می کند.
کد PIC ارتباط چهار میکروکنترلر به صورت SPI
در این برنامه یک میکروکنترلر Master شماره ای را دائما می شمارد و این شماره را برای میکروکنترلر اول ارسال کرده، آن را بعلاوه یک کرده و برای میکرو دوم ارسال می کند و مجددا آن را بعلاوه یک کرده و برای میکروی سوم می فرستد.
کد PIC ارتباط دو میکروکنترلر به صورت USART
در این برنامه آی سی U2 یک عدد را به صورت صعودی شمارش کرده و آن را از طریق USART برای میکروکنترلر دوم ارسال می کند. میکروکنترلر دوم با دریافت اطلاعات، آنها را روی LCD نشان می دهد.
کد PIC راه اندازی آی سی زمان سنج DS1307 و نمایش آن روی LCD
در این برنامه از آی سی زمان سنج DS1307 استفاده شده است. برای بستن عملی مدار باید به پایه های 1 و 2 این آی سی کریستالی با فرکانس 32768 هرتز وصل شود و پایه ی شماره ی 3 به سر مثبت یک باتری 3 ولتی (که به عنوان باتری بک آپ است) وصل می شود و سر منفی باتری نیز زمین می شود. با اتصال باتری پشتیبان اطلاعات زمان می تواند تا 10 سال حفظ شوند.
کد PIC ساعت دیجیتالی و نمایش آن روی سون سگمنت
در این مدار ساعت، دقیقه و ثانیه بر روی یک سون سگمنت شش رقمی نشان داده می شود. با استفاده از سه کلید موجود در مدار می توان ساعت و دقیقه را تنظیم نمود.
کد PIC قفل رمزی
در این برنامه رمز پیش فرض 1234 می باشد. کاربر با وارد کردن رمز صحیح و سپس فشردن کلید مساوی می تواند خروجی را (در اینجا PORTA) فعال نماید. در صورتی که کاربر عدد 9999 را وارد کند، رمز قدیم، سپس رمز جدید و مجددا تکرار رمز جدید تقاضا می شود (یعنی وارد شدن عدد 9999 به عنوان تغییر رمز است).
کد PIC فلاشر 4 کانال با قابلیت انتخاب مد کاری و سرعت فلاش
در این فلاشر با فشردن کلید Mode می توان مد کاری فلاشر را تعویض نمود. با فشردن کلید های DEC Speed و INC Speed می توان سرعت فلاشر را تنظیم نمود.
کد PIC شمارنده صفر تا 99 روی دات ماتریس 8 در 16
در این برنامه با استفاده از دو آی سی لچ عدد صفر تا 99 روی ماتریس 8 در 16 نمایش داده شده است. برای ساخت اعداد متغیر از آرایه ی 16 عضوی در حافظه ی SRAM استفاده شده است به طوری که میکروکنترلر کد های دو عدد را که قرار است نمایش یابد (مثل 8 و 5) را از حافظه ی Flash خوانده و در درون این حافظه قرار می دهد و سپس آنها را نشان می دهد.
کد PIC تابلوی روان روی LCD کاراکتری
در این برنامه ابتدا طول متن نوشته شده مشخص می شود (با رسیدن به کاراکتر Null اسکی) و سپس متنی به طور متحرک روی LCD کاراکتری با حلقه ی for نمایش می یابد.
کد PIC راه اندازی LCD گرافیکی
در این برنامه عکس ثابتی بر روی LCD گرافیکی نمایش داده می شود. تمامی توابع این LCD توابع غیر آماده هستند و نوشته شده اند. این نوع نمایشگر به دو نیمه تقسیم می شود که برای کنترل این دو نیمه دو پایه به نام های CS1 و CS2 قرار داده اند. درایور بکار رفته در این نمایشگر KS108 بوده و ابعاد این نمایشگر 128 در 64 پیکسل می باشد. لازم به ذکر است که ترتیب پایه های این نمایشگر که در تصویر فوق می بینید با نمایشگر واقعی که از بازار خریداری می کنید تفاوت دارد.
پایه های این ال سی دی به صورت شکل زیر است:
کد PIC ارتباط با ماژول MSSP
ماژول MSSP هم برای ارتباط SPI و هم برای ارتباط I2C بکار می رود.
در شکل زیر ارتباط SPI را مشاهده می کنید که در آن یک میکروکنترلر Master قرار دارد. اگر این میکروکنترلر عدد 10 را برای میکروکنترلر Slave ارسال نماید، میکروکنترلر Slave دما را برای Master ارسال می کند. برای این منظور باید Logicstate را که نقش کلید را در شبیه سازی دارد، یک کنیم. اگر Logicstate صفر باشد، میکروکنترلر Master عدد 20 را ارسال می کند که گیرنده یا همان Slave همین عدد را به فرستنده می دهد.
دریافت دما از چندین میکروکنترلر
این برنامه نیز با ارتباط SPI می باشد که در آن دو میکروکنترلر AVR و دو میکروکنترلر PIC قرار دارند. در این برنامه میکروکنترلر PIC که در مد Master قرار دارد، داده ای را برای میکروکنترلر PIC اراسال می کند (از 0 تا 255 به صورت نمایشی) و میکروکنترلر PIC نیز آن را دریافت کرده و دما را برای میکروکنترلر Master ارسال می کند و این میکروکنترلر آن را نشان داده و به همین شکل دما را از دو میکروکنترلر AVR دریافت می کمد و آنها را هم نشان می دهد.
راه اندازی مبدل آنالوگ به دیجیتال 24 بیتی MCP3550
این آی سی یک آی سی خیلی دقیق است که معمولا در سنسور های وزن بکار می رود ارتباط این آی سی به صورت SPI است و دما را از ورودی خوانده و به صورت یک عدد 24 بیتی بر روی نمایشگر نمایش می دهد. این برنامه مکن است در نرم افزار پروتئوس با تغییر دما خوب عمل نکند.
ارتباط با تراشه ی EEPROM خارجی سری AT24Cxx
در این برنامه ابتدا توسط تابع eeprom_write در خانه ی دوم حافظه عدد 0x65 نوشته می شود عدد 0xA0 آدرس آی سی EEPROM است که توسط پایه های A0-A1-A2 تعیین می شود. و پس از آن توسط تابع eeprom_read_n_byte از خانه ی دهم حافظه 16 عدد خوانده شده و در آرایه ی data که در RAM قرار دارد ریخته می شود. این توابع به صورت خام هستند و شما باید آنها را در سایر برنامه ها استفاده نمایید (مانند برنامه ی قفل رمزی)
ارتباط با آی سی DS1307 از طریق ارتباط I2C سخت افزاری
در این برنامه زمان و تاریخ از DS1307 خوانده می شود و بر روی LCD نمایش داده می شود. توسط تابع i2c_init فرکانس I2C برابر 25 کیلو هرتز می شود و I2C در مد Master با فرکانس ورودی 4 مگاهرتز راه اندازی می شود. توسط تابع rtc_get_time زمان گرفته می شود و اگر زمان بیش از 59 باشد (یعنی اولین بار است که برق به DS1307 وصل می شود) زمان به صورت پیش فرض 12:00:00 تنظیم میشود. در نهایت مقدار زمان بر روی LCD نشان داده خواهد شد. شما می توانید به این برنامه کلید اضافه کنید تا بتوانید مقدار زمان را تنظیم نمایید
خیلی خوب بود
سلام
چرا زمان تاخیری که تابع Delay در میکروکنترلر pic18f4520 من ایجاد می کند خیلی بیشتر از زمان واقعی است؟ (مثلا بجای 500 میلی ثانیه، چند ثانیه می شود).
بستگی به فرکانس تنظیمی داره
سلام مجدد
مدار راه اندازی سون سگمنت 4دیجیت من با دو تا شیفت رجیستر سریال به موازی 74hc595 بصورت cascaded کار میکنه. این مدار فقط با سه پایه میکروکنترلر فرمان می گیره.
سوالم ابنه که، چرا مدار فوق با کدی که در آردوینو uno نوشتم کار میکنه ولی با همون کد که به دستورات c کامپایلر mikroC برای میکروی pic18f4520 تبدیل شده کار نمی کنه.
با احترام
مشکل از کدتونه یک چیزی رو ننوشتید یا اشتباه نوشتید
سلام با تشکر از آموزش های خودتون لطفا اگر امکانش هست پروژه ساعت دیجیتال با آی سی ds 1307 و نمایش ساعت روی ۷سگمنت رو آموزش بدین با میکرو pic
سلام نمونه کدهای سایت رو کمی تغییر بدید به این پروژه میرسید