طراح

طراح

زندگی یعنی پژوهش و فهمیدن چیز جدید ( پروفسور حسابی)
طراح

طراح

زندگی یعنی پژوهش و فهمیدن چیز جدید ( پروفسور حسابی)

کتابخانه DS3231 برای ATXMEGA

راه اندازی آی سی ساعت DS3231 با استفاده از ATXMEGA
مشخصات DS3231:
Accuracy ±2ppm from 0°C to +40°C
Battery Backup Input for Continuous Timekeeping
Low-Power Consumption
Real-Time Clock Counts Seconds, Minutes, Hours, Day, Date, Month, and Year with Leap Year
Compensation Valid Up to 2100
Two Time-of-Day Alarms
Programmable Square-Wave Output
Fast (400kHz) I2C Interface
3.3V Operation
Digital Temp Sensor Output: ±3°C Accuracy


لایه های EAGLE



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

و یا خروجی را به آلتیوم دیزاینر تبدیل کنید و از FILE--->FABRICATION OUTPUT----->FAINAL از فایل خروجی بگیرید.

WATER LEVEL CONTROL


شیربرقی




SRF05


سنسور سیستم یک ماژول آلتراسونیک میباشد. SRF05 که تا فاصله 5 متری را اندازه گیری مینماید. از طریق این سنسور ارتفاع آب داخل مخزن به دست می آید و اگر از ارتفاعی که برای سیستم تعریف شده است بیشتر شده باشد به شیر برقی فرمان باز شدن میدهد تا سطح آب به مقدار تنظیم شده برسد.

PCB با نرم افزار EAGLE  طراحی شده است.

برنامه با نرم افزار ATMEL STUDIO و به زبان C نوشته شده است.

mcu: mega16

lcd2x16

keypad= 4X4

valve = 24V AC که من با 12V DC بوبینش را تحریک میکنم

ultrasonic module= SRF05


AVR

RS485


نمونه اولیه

یک ورودی با اپتوکوپلر داره.

و دوتا پورت rs485 برای شبکه شدن در تعداد بالا با PLC.

ارتباط  نیمه دوطرفه

برنامه مدباس را دوستم روی برد پیاده کردند.

MCU: ATXMEGA32A4

RS485 IC:  ISL83485IBZ

INPUT VOLTAG: 8V TO 30V

ابعاد 4.7 در 3.9 سانتی متر


واحد کپچر تایمر در ATXMEGA

واحد کپچر تایمر در 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;



ریموت کد لرنینگ



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

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

به نظر من بهترین روش برای خواندن بیتهای خروجی استفاده از تایمر در مد کپچر هستش، خودم برنامه را به این روش نوشتم و جواب هم گرفتم.


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


SRF05

برنامه استفاده از ماژول فاصله سنج SRF05




دانلود فایل


مودم کوچک GSM





ATXMEGA32A4

SIM900 GSM

کتابخانه ال سی دی گرافیکی TS240128D

یک کتابخانه عالی برای راه اندازی GLCD 240X128  - مدل TS240128D

رسم دایره و مستطیل و خط و ...

فارسی نویسی 


کتابخانه را کمی تغییرات دادم تا در Atmel studio بتوان از آن استفاده کرد.


اول برنامه و قبل از اضافه کردن کتابخانه GLCD حتما تعریف و  کتابخانه استفاده از حافظه فلش را قرار دهید.


#define  __PROG_TYPES_COMPAT__ prog_char

#include <avr/pgmspace.h>


نکته دیگه این که برای نوشتن حرف   "ی"   از   "SHIFT + X"   استفاده کنید.


این کتابخانه توسط آقای نوربخش آماده شده است.





دانلود پروتئوس و برنامه



توابع کتابخانه ای استاندارد 2

کتابخانه 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 به تعداد کارکتر مقایسه میکند، در صورتی که دو رشته با هم برابر باشند خروجی تابع صفر خواهد بود و در غیر این صورت غیر صفر.

10- char *strcpy(char *dest,char *src):
رشته src را در رشته dest کپی میکند.
11- char *strcpyf(char *dest,char *src):
رشته src را که در حافظه فلش قرار دارد را در رشته dest کپی میکند.
12- char *strncpy(char *dest,char *src):
رشته src را به طول کارکتر در رشته dest کپی میکند.

ابوالفضل شاکری

جستجوگر کتاب

حتما یه سر بزنید


                       http://www.nebeek.com   




توابه کتابخانه ای استاندارد

کتابخانه 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 - عدد از نوع اعشاری


ابوالفضل شاکری

سنسور اثر انگشت sm630


نوع ارتباط با میکرو: سریال - 57600bps

تغذیه: 4.3v - 6v

قادر به ذخیره 768 اثر انگشت.

این سنسور از طریق ارسال داده های دستوری در یک پاکت دیتا به فرم هگز با میکرو ارتباط برقرار میکند.

برنامه نمونه ای برای راه اندازی و استفاده از این سنسور برای Mega AVR و Xmega AVR نوشته شده است. برای تهیه آن تماس بگیرید.(09398931522 - شاکری)

سورس برنامه به زبان C و کامپایلر(Atmel Studio) میباشد.


نرم افزار دمو برای خواندن سنسور با کامپیوتر:


لینک دانلود

ابوالفضل شاکری

تبدیل خروجی GPS از DM به DD

روش تبدیل خروجی GPS از DM به DD




قالب دیتا خروجی ماژول GPS  از نوع DDMM.MMMMMM میباشد که برای نمایش آن در گوگل مپ:

1-روش اول: باید دیتا را به فرم زیر وارد کنید:

3621.737076,5929.229825 -->>>  36°21.737076'N,59°29.229825'E


یا

2-روش دوم: باید دیتا را از قالب DDMM.MMMMMM به قالب DD تبدیل کنید و سپس وارد گوگل مپ کنید.


روش تبدیل قالب دیتا از DDMM.MMMMMM به DD:

DD = DD + (MM.MMMMMM/60);
DD = 36 + (21.737076/60) = 36.3622846
DD = 59 + (29.229825/60) = 59.48716375
------------------------>>>36.3622846,59.48716375
به همین راحتی.

ابوالفضل شاکری

AUTO TRACKER

AUTO TRACKER ما هم آماده شد.




ابوالفضل شاکری

Elevator


ابوالفضل شاکری

تفاوت بین cold start و hot start در GPS

تو یک سایت که اطلاعات مربوط به یک ماژول GPS را زده بود در رابطه با زمان بدست آوردن اطلاعات GPS نوشته بود:

- راه اندازی در هوای سرد 35 ثانیه

- راه اندازی در هوای گرم 1 ثانیه

متاسفانه ترجمه مستقیم متن انگلیسی را نوشته بود.

در حالی که زمان راه اندازی GPS اصلا ربطی به دمای هوا ندارد.

سوال: پس منظور از راه اندازی COLD و HOT در ماژول GPS چیست؟

جواب: هر بار که ماژول GPS  کاملا خاموش شود در  راه اندازی مجدد باید به صورت COLD راه اندازی شود. و این حدودا 1 دقیقه تا 5 دقیقه بسته به محل قرار گیری زمان می برد. در زمان راه اندازی COLD یک سری اطلاعات نجومی از ماهواره توسط ماژول دریافت میشود و در حافظه ماژول به همراه آخرین موقعیت جغرافیایی ذخیره میگردد. در صورت خاموش کردن ماژول بدون قطع تغذیه، در راه اندازی بعدی میتوان ماژول را به صورت HOT راه اندازی کرد. در این حالت ماژول با استفاده از اطلاعات قبلی بسیار سریع تر موقعیت را شناسایی میکند.


ابوالفضل شاکری

GPS

کتابخانه استفاده از 74HC595

کتابخانه استفاده از 74HC595





نسخه ATMEGA


نسخه ATXMEGA


ابوالفضل شاکری

کتابخانه استفاده از 74HC166

کتابخانه استفاده از 74HC166


با استفاده از این کتابخانه و شیفت رجیستر 74HC166 می توانید با 4 پایه از میکرو وضعیت 8 پین ورودی را بخوانید



نسخه ATMEGA


نسخه ATXMEGA

ابوالفضل شاکری

کتابخانه راه اندازی ال سی دی کارکتری با سه پایه میکروکنترلر - (74hc164)

کتابخانه راه اندازی ال سی دی کارکتری با سه پایه میکروکنترلر - (74hc164)

سلام

با این کتابخانه میتونید فقط با سه تا از پایه های میکروکنترلر، ال سی دی کارکتری را راه اندازی کنید.


نسخه ATMEGA 


نسخه ATXMEGA



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 استفاده شود.


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


       شاکری

نمایش شماره ی تماس گیرنده در GSM

در حالت پیشفرض اگر با سیم کارت ماژول تماس بگیرید، ماژول فقط عبارت "RING" را ارسال میکند. برای فعال سازی نمایش شماره تماس گیرنده باید دستور زیر به ماژول ارسال کنید.


AT+CLIP=1


با این دستور بعد از عبارت "RING" عبارت "CLIP: 0939XXX1522+"  ظاهر میشود. 


RING

+CLIP:0939XXX1522,132

OK


شاکری