The SIRC protocol uses a pulse width encoding of the bits. The pulse representing a logical "1" is a 1.2ms long burst of the 40kHz carrier, while the burst width for a logical "0" is 0.6ms long. All bursts are separated by a 0.6ms long space interval. The recommended carrier duty-cycle is 1/4 or 1/3
The picture above shows a typical pulse train of the SIRC protocol. With this protocol the LSB is transmitted first. The start burst is always 2.4ms wide, followed by a standard space of 0.6ms. Apart from signalling the start of a SIRC message this start burst is also used to adjust the gain of the IR receiver. Then the 7-bit Command is transmitted, followed by the 5-bit Device address. In this case Address 1 and Command 19 is transmitted
Commands are repeated every 45ms(measured from start to start) for as long as the key on the remote control is held down
The table below lists some messages sent by Sony remote controls in the 12-bit protocol. This list is by no means meant to be complete, as the assignment of functions is probably quite dynamic
|
|
مرجع: http://www.sbprojects.com/knowledge/ir/sirc.php
دانلود برنامه نوشته شده برای atmel studio
برای پرینت گرفتن از کار تو نرم افزار EAGLE لایه هایی که لازم نیستند را از طریق پنجره تنظیمات غیر فعال نمایید.
و یا خروجی را به آلتیوم دیزاینر تبدیل کنید و از FILE--->FABRICATION OUTPUT----->FAINAL از فایل خروجی بگیرید.
شیربرقی
SRF05
سنسور سیستم یک ماژول آلتراسونیک میباشد. SRF05 که تا فاصله 5 متری را اندازه گیری مینماید. از طریق این سنسور ارتفاع آب داخل مخزن به دست می آید و اگر از ارتفاعی که برای سیستم تعریف شده است بیشتر شده باشد به شیر برقی فرمان باز شدن میدهد تا سطح آب به مقدار تنظیم شده برسد.
PCB با نرم افزار EAGLE طراحی شده است.
برنامه با نرم افزار ATMEL STUDIO و به زبان C نوشته شده است.
mcu: mega16
lcd2x16
keypad= 4X4
valve = 24V AC که من با 12V DC بوبینش را تحریک میکنم
ultrasonic module= SRF05
نمونه اولیه
یک ورودی با اپتوکوپلر داره.
و دوتا پورت rs485 برای شبکه شدن در تعداد بالا با PLC.
ارتباط نیمه دوطرفه
برنامه مدباس را دوستم روی برد پیاده کردند.
MCU: ATXMEGA32A4
RS485 IC: ISL83485IBZ
INPUT VOLTAG: 8V TO 30V
ابعاد 4.7 در 3.9 سانتی متر
واحد کپچر تایمر در ATXMEGA
در میکروهای ATX به لطف واحد EVENT SYSTEM ورودی تحریک کپچر کردن میتونه از هر پایه ای که لازم داشته باشیم گرفته بشه یا حتی از واحد های سخت افزاری داخل میکرو (ADC,AC,...) و یا به صورت نرم افزاری.
اگر میخواهید از یک پایه به عنوان ورودی تحریک کپچر کردن استفاده کنید:
1- باید حالت تشخیص لبه برای اون پایه تعریف بشه.
2- پایه مورد نظر به عنوان یکی از کانال های EVENT SYSTEM تعریف بشه.
3- تایمر مورد نظر در حالت NORMAL باشه و یکی از کانال های کپچر فعال بشه.
4- کانال EVENT SYSTEM برای ورودی تایمر و عملیاتی که باید انجام شود، تعریف شود.
5- فعال سازی وقفه کپچر
6- تنظیم پری اسکیلر تایمر
EXAMPLE:
PORTD.DIRCLR = PIN7_bm;
PORTD.PIN7CTRL = PORT_OPC_PULLDOWN_gc | PORT_ISC_BOTHEDGES_gc;
EVSYS.CH0MUX = EVSYS_CHMUX_PORTD_PIN7_gc;
EVSYS.CH0CTRL = EVSYS_DIGFILT_1SAMPLE_gc;
TCC0.CTRLB = TC_WGMODE_NORMAL_gc | TC0_CCAEN_bm;
TCC0.CTRLD = TC_EVACT_CAPT_gc | TC_EVSEL_CH0_gc;
TCC0.INTCTRLB = TC0_CCAINTLVL_gm;
TCC0.CTRLA = TC_CLKSEL_DIV64_gc;
مهمترین نکته در خواندن کدهای ریموت این است که ابتدای کد (شروع کد) را به درستی پیدا کنید که البته آن هم بستگی به روش خواندن بیت های خروجی گیرنده دارد.
اگر تو نت سرچ کرده باشید دوبرنامه برای خواندن کدهای خروجی پیدا میکنید. من که از هیچ کدوم جواب نگرفتم. یکی با دوتا تایمر و یک وقفه خارجی نوشته بود و یکی هم با یک تایمر و یک وقفه خارجی.
به نظر من بهترین روش برای خواندن بیتهای خروجی استفاده از تایمر در مد کپچر هستش، خودم برنامه را به این روش نوشتم و جواب هم گرفتم.
صفر یا یک بودن هر بیت از نسبت صفر به یک، بودن مدت زمان پایه خروجی گیرنده تعیین می شود.
یک کتابخانه عالی برای راه اندازی GLCD 240X128 - مدل TS240128D
رسم دایره و مستطیل و خط و ...
فارسی نویسی
کتابخانه را کمی تغییرات دادم تا در Atmel studio بتوان از آن استفاده کرد.
اول برنامه و قبل از اضافه کردن کتابخانه GLCD حتما تعریف و کتابخانه استفاده از حافظه فلش را قرار دهید.
#define __PROG_TYPES_COMPAT__ prog_char
#include <avr/pgmspace.h>
نکته دیگه این که برای نوشتن حرف "ی" از "SHIFT + X" استفاده کنید.
این کتابخانه توسط آقای نوربخش آماده شده است.
کتابخانه string.h:
1- char *strcat(char *str1,char *str2):
رشته str2 را به انتهای str1 وصل میکند.
2- char *strcatf(char *str1,char flash *str2):
رشته str2 را که در حافظه فلش قرار دارد به انتهای رشته str1 وصل میکند.
3- char *strncat(char *str1,char *str2, unsigned char n):
رشته str2 را به طول n کارکتر به انتهای رشته str1 وصل میکند.
4- char *strncatf(char *str1,char flash *str2, unsigned char n):
رشته str2 را که در حافظه فلش قرار دارد به طول n کارکتر به انتهای رشته str1 وصل میکند.
5- char *strchr(char *str,char c):
موقعیت اولین کارکتر برابر با c را که در رشته str قرار داشته باشد برمیگرداند.
6- char *strrchr(char *str,char c):
موقعیت آخرین کارکتر برابر با c را که در رشته str قرار داشته باشد برمیگرداند.
7- signed char strcmp(char *str1,char *str2):
دو رشته str1 با str2 را مقایسه میکند و اگر دو رشته با هم برابر باشند خروجی تابع صفر خواهد بود و در غیر این صورت غیر صفر.
8- signed char strcmpf(char *str1,char flash *str2):
دورشته str1 را که در حافظه فلش قرار دارد را با رشته str2 مقایسه میکند، در صورتی که دو رشته با هم برابر باشند خروجی تابع صفر خواهد بود و در غیر این صورت غیر صفر.
9- signed char strncmp(char *str1,char *str2, unsigned char n):
دورشته str1 را با رشته str2 به تعداد n کارکتر مقایسه میکند، در صورتی که دو رشته با هم برابر باشند خروجی تابع صفر خواهد بود و در غیر این صورت غیر صفر.
کتابخانه stdlib.h :
1- int atoi(char *STR):
تبدیل رشته str به عدد اینتجر
2- long int atol (char *STR):
تبدیل رشته str به عدد لانگ اینتجر
3- void itoa (int n,char *STR):
تبدیل عدد اینتجر(n) به رشته عددی
4- void ltoa (long int n,char *STR):
تبدیل عدد لانگ اینتجر (n) به رشته عددی
5- int rand (void)
تولید عدد رندم بین 0 تا 32767
کتابخانه math.h :
1- unsigned char cabs(signed char x):
برگرداندن قدر مطلق عدد از نوع بایت
2- unsigned int abs(int x):
برگرداندن قدر مطلق عدد از نوع اینتجر
3- float fabs(float x):
برگرداندن قدر مطلق عدد از نوع اعشاری
4- signed char cmax(signed char a, signed char b):
برگرداندن بزرگترین عدد بین a و b - عدد از نوع بایت
5- int max(int a,int b):
برگرداندن بزرگتزین عدد بین a و b - عدد از نوع اینتجر
6- long int lmax(long int a,long int b):
برگرداندن بزرگتزین عدد بین a و b - عدد از نوع لانگ اینتجر
7- float fmax(float a,float b):
برگرداندن بزرگتزین عدد بین a و b - عدد از نوع اعشاری
8- signed char cmin(signed char a,signed char b):
برگرداندن کوچکترین عدد بین a و b - عدد از نوع بایت
8- int min(int a,int b):
برگرداندن کوچکترین عدد بین a و b - عدد از نوع اینتجر
9- float fmin(float a,float b):
برگرداندن کوچکترین عدد بین a و b - عدد از نوع اعشاری
ابوالفضل شاکری
نوع ارتباط با میکرو: سریال - 57600bps
تغذیه: 4.3v - 6v
قادر به ذخیره 768 اثر انگشت.
این سنسور از طریق ارسال داده های دستوری در یک پاکت دیتا به فرم هگز با میکرو ارتباط برقرار میکند.
برنامه نمونه ای برای راه اندازی و استفاده از این سنسور برای Mega AVR و Xmega AVR نوشته شده است. برای تهیه آن تماس بگیرید.(09398931522 - شاکری)
سورس برنامه به زبان C و کامپایلر(Atmel Studio) میباشد.
نرم افزار دمو برای خواندن سنسور با کامپیوتر:
ابوالفضل شاکری
روش تبدیل خروجی GPS از DM به DD
تو یک سایت که اطلاعات مربوط به یک ماژول GPS را زده بود در رابطه با زمان بدست آوردن اطلاعات GPS نوشته بود:
- راه اندازی در هوای سرد 35 ثانیه
- راه اندازی در هوای گرم 1 ثانیه
متاسفانه ترجمه مستقیم متن انگلیسی را نوشته بود.
در حالی که زمان راه اندازی GPS اصلا ربطی به دمای هوا ندارد.
سوال: پس منظور از راه اندازی COLD و HOT در ماژول GPS چیست؟
جواب: هر بار که ماژول GPS کاملا خاموش شود در راه اندازی مجدد باید به صورت COLD راه اندازی شود. و این حدودا 1 دقیقه تا 5 دقیقه بسته به محل قرار گیری زمان می برد. در زمان راه اندازی COLD یک سری اطلاعات نجومی از ماهواره توسط ماژول دریافت میشود و در حافظه ماژول به همراه آخرین موقعیت جغرافیایی ذخیره میگردد. در صورت خاموش کردن ماژول بدون قطع تغذیه، در راه اندازی بعدی میتوان ماژول را به صورت HOT راه اندازی کرد. در این حالت ماژول با استفاده از اطلاعات قبلی بسیار سریع تر موقعیت را شناسایی میکند.
ابوالفضل شاکری
کتابخانه استفاده از 74HC166
با استفاده از این کتابخانه و شیفت رجیستر 74HC166 می توانید با 4 پایه از میکرو وضعیت 8 پین ورودی را بخوانید
ابوالفضل شاکری
کتابخانه راه اندازی ال سی دی کارکتری با سه پایه میکروکنترلر - (74hc164)
سلام
با این کتابخانه میتونید فقط با سه تا از پایه های میکروکنترلر، ال سی دی کارکتری را راه اندازی کنید.
1- تابع LCDinit: این تابع رو که همه میدونن چی هست.
2- تابع LCDclr: تابع پاک کردن LCD
3- LCDGotoXY: تابع تعیین موقعیت اشاره گر LCD
4- تابع(LCDstring(uint8_t*, uint8_t: تابع نمایش یک رشته روی LCD به طول آرگومان ورودی دوم LCD
EX: LCDstring("HELLO",5)
در این صورت تمام حروف رشته مورد نظر روی ال سی دی نشان داده میشوند
EX: LCDstring("HELLO",2)
در این صورت فقط دو حرف اول رشته مورد نظر نشان داده میشود
5- تابع(LCDshiftRight(n: تابع شیفت دادن تمام LCD به سمت راست به تعداد n کارکتر.
سایر توابع هم به همین راحتی میباشند.
فقط در فایل هدر پایه های ال سی دی رو مشخص کنید.
ابوالفضل شاکری
ماژول سیم 900 در دو مدل بفروش میرسه یکی با راه انداز و دیگری بدون راه انداز !
میشه بفرمایید فرقشون دقیقا چیه ؟ چون اختلاف قیمتیشون هم زیاده.
سلام
باید توجه بشود که وقتی میگوییم ماژول SIM900 منظور خود ماژول بدون هیچ برد دیگری میباشد. و باید ماژول مستقیم روی برد توسط خودمان لحیم شود(کار ساده ای هست).
زمانی که ماژول به صورت مونتاژ شده روی برد بفروش برسد حالت های زیر را دارد:
به عنوان نمونه بردهای ECA را بررسی میکنیم:
1- هدر برد SIM900 :
همانطور که در عکس کاملا مشخص هست یک ماژول به همراه آنتن، نگه دارنده سیم کارت، خازن های تغذیه و LED های نشانگر شبکه بر روی یک برد قرار گرفته اند و بیشتر پایه های ماژول SIM900 از طریق پین هدر قابل دسترسی هستند. این نوع بردها مناسب کسانی است که امکان مونتاژ ماژول را ندارند (به دلیل نوع بسته بندی ماژول). تغذیه مناسب برای این برد باید از طریق یک رگولاتور در برد پایه تامین شود. پورت سریال ماژول هم مستقیما به میکرو متصل میشود و برای استفاده با میکرو مناسب است.
2- برد کاربردی SIM900 :
همانطور که در عکس مشخص است همان هدر برد ماژول SIM900 روی یک برد پایه قرار گرفته است که در برد پایه تغذیه ماژول فراهم میشود و امکان برقراری ارتباط با ماژول از طریق پورت سریال کامپیوتر(منطق CMOS) نیز فراهم میباشد. این برد برای ارتباط با PLC و یا کامپیوتر مناسب میباشد و برای برقراری ارتباط با میکرو باید از MAX232 استفاده شود.
حالت دیگری که میباشد این است که هم میکرو و هم ماژول روی برد موجود باشد و در واقع قسمت های اصلی مورد نیاز روی برد قرار داشته باشند و امکان افزودن سایر مدارات نیز میسر باشد. مانند بردی که بنده در وبلاگ قرار داده ام:
شاکری
در حالت پیشفرض اگر با سیم کارت ماژول تماس بگیرید، ماژول فقط عبارت "RING" را ارسال میکند. برای فعال سازی نمایش شماره تماس گیرنده باید دستور زیر به ماژول ارسال کنید.
AT+CLIP=1
با این دستور بعد از عبارت "RING" عبارت "CLIP: 0939XXX1522+" ظاهر میشود.
RING
+CLIP:0939XXX1522,132
OK
شاکری