کار باماژول ساعت در atmel studio با هدرهای اکسپلور امبدد

saalek110

Well-Known Member
کار باماژول ساعت در atmel studio با هدرهای اکسپلور امبدد



در مورد سیم هایش و توضیحات ، به تاپیک زیر مراجعه کنید ، من قبلا با کدویژن ماژول ساعت را راه انداخته بودم و در این تاپیک ففط کامپایلر و کدها فرق داره:



 
آخرین ویرایش:

saalek110

Well-Known Member
کد هم از اون بسته است.
می بینید rtc.h در بالای کد اینکلود شده.
در اون تاپیک گفتیم چطور فایل به پروژه ادد کنید.
در سولوشن اکسپلور روی پوشه پروژه کلیک راست کرده و ادد را زده و اگزیستینگ آیتم را می زنیم.
فایلهای rtc.h و rtc.c
و i2c.h و i2c.c
را ادد کنید.

PHP:
#include "rtc.h"
#include "lcd.h"


int main()
{
    rtc_t rtc;

    /*Connect RS->PB0, RW->PB1, EN->PB2 and data bus to PORTB.4 to PORTB.7*/
    LCD_SetUp(PB_0,PB_1,PB_2,P_NC,P_NC,P_NC,P_NC,PB_4,PB_5,PB_6,PB_7);
    LCD_Init(2,16);
 
    /*Connect SCL->PC0, SDA->PC1*/
    RTC_Init();
    rtc.hour = 0x10; //  10:40:20 am
    rtc.min =  0x40;
    rtc.sec =  0x00;

    rtc.date = 0x01; //1st Jan 2016
    rtc.month = 0x01;
    rtc.year = 0x16;
    rtc.weekDay = 5; // Friday: 5th day of week considering monday as first day.




    /*##### Set the time and Date only once. Once the Time and Date is set, comment these lines
         and reflash the code. Else the time will be set every time the controller is reset*/
    RTC_SetDateTime(&rtc);  //  10:40:20 am, 1st Jan 2016


    /* Display the Time and Date continuously */
    while(1)
    {
        RTC_GetDateTime(&rtc);
        LCD_GoToLine(0);
        LCD_Printf("time:%2x:%2x:%2x  \nDate:%2x/%2x/%2x",(uint16_t)rtc.hour,(uint16_t)rtc.min,(uint16_t)rtc.sec,(uint16_t)rtc.date,(uint16_t)rtc.month,(uint16_t)rtc.year);
    }

    return (0);
}

سالک: کد بالا را در اتمگا ۳۲ و اتمگا ۱۶ و اتگا ۸ من استفاده کردم. در اتمل استودیو موقع ساختن پروژه ، نوع میکروکنترلر را انتخاب می کنیم. و کد همان کد است.... البته پایه های ‌lcd و i2c یعنی SDA و SCL را باید با توجه به میکروکنترلر خود انتخاب کنید. پایه های lcd دلخواه است ، و هر کدام که انتخاب کردید را در کد بالا وارد کنید و در میکروکنترلر خود بگردید ببینید sda و sdl کدوم پایه هاست. در تاپیکهای مربوطه اش شکلش را من زدم.
 
آخرین ویرایش:

saalek110

Well-Known Member
در شکل زیر 4 فلش قرمز این 4 فایلی بود که در پست قبل گفتم ادد کنید.

یک سری فایل هم برای lcd ادد شده قبلا تا ساعت را در lcd نمایش دهیم.


1.png

دو فایل rtc و دو فایل i2c ادد شده. منظورم از دو فایل فایلهای با پسوند h و پسوند c است.
 
آخرین ویرایش:

saalek110

Well-Known Member
خط زیر کد تنظیم ساعت است.
ساعت چون باطری داره ساعت را نگه می داره
پس یک بار که ساعت و تاریخ تنظیم شد خط زیر را بردارید...یا به شکل کامنت کنید.

PHP:
RTC_SetDateTime(&rtc);

تصویر از اجرا:

۲۰۲۳۱۱۱۲_۰۳۳۷۲۵.jpg

من تاریخ را شمسی دادم ، امروز ۲۱ آبان ۱۴۰۲ است. ساعت ۴ و ۶ دقیقه صبح.
برای من اتمل استودیو خوب کار نمی کرد. فکر کردم از ویندوزم است. تا ویندوز بریزم و اتمل استودیو و باقی چیزها را بریزم ۴ صبح شد. و حالا اتمل استودیو خوب کار می کنه.دیشب کامپایل می زدم ولی فایل هگز همون قبلی بود ، یعنی انگار کد جدید را نمی دید و از یک کدی که معلوم نبود کجا بود فایل هگز را می ساخت.
اولش فکر کردم من اشتباه می کنم یا پروگرمرم خرابه یا میکروکنترلر خرابه ، همه را چک کردم تا فهمیدم از ویندورز است.
 
آخرین ویرایش:

saalek110

Well-Known Member
برای نمایش هم یک سری به تاپیک کار با lcd با توابع اکسپلور امبدد بزنید...اونجا شیوه های نمایش گفته شده...تاپیک زیر:




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


تاپیک کار با رله با میکروکنترلر:

 
آخرین ویرایش:

saalek110

Well-Known Member
PHP:
// including libraries:
#include <avr/io.h>
#include <util/delay.h>
int main(void) // Start main program
{
  DDRB = (1<<PB4); // Pin 4 set as output
 
    while (1) // Corresponds to the main loop at Arduino
    {
    PORTB |= (1<<PB4); // PB4 set HIGH
    _delay_ms(1000); // wait 1000 ms
    PORTB &= ~(1<<PB4); // PB4 set LOW
    _delay_ms(1000); // wait 1000 ms
    }
}


برنامه بالا ، یک پین خروجی ایجاد کرده
و بعد در قسمت while اون پین را خاموش و روشن کرده...

سالک: من برنامه بالا را تست نکردم...
هدفم از پست این برنامه اینه که ، اگر کسی بخواد با نگاه کردن به ساعت یک وسیله را خاموش و روشن کند ، نیاز به یک پین خروجی داره تا روشن و خاموشش کند...
برنامه بالا فقط نگاه کردن به ساعت را کم داره .....مثلا بگه در فلان ساعت اون پین را روشن و در فلان ساعت خاموش کن.
 
آخرین ویرایش:

saalek110

Well-Known Member
PHP:
#include <avr/io.h>
#include <util/delay.h>

int main(void)
{
  DDRC |= (1<<PC0); //Nakes first pin of PORTC as Output
  // OR DDRC = 0x01;
  DDRD &= ~(1<<PD0);//Makes firs pin of PORTD as Input
  // OR DDRD = 0x00; //Makes all pins of PORTD input
  while(1) //infinite loop
  {
    if(PIND & (1<<PD0) == 1) //If switch is pressed
    {
      PORTC |= (1<<PC0); //Turns ON LED
      _delay_ms(3000); //3 second delay
      PORTC &= ~(1<<PC0); //Turns OFF LED
    }
  }
}


برنامه بالا برای تعبیه یک کلید بر میکروکنترلر است...
با اون کلید یا چند کلید... می توانید مثلا ساعت را دستکاری کنید.
سالک: کد بالا را من تست نکردم.

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

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

saalek110

Well-Known Member
یک سری کد نوشتم اشتباه بود پاک کردم.
 
آخرین ویرایش:

جدیدترین ارسال ها

بالا