اطلاعیه

Collapse
No announcement yet.

راه انداز ic ds1307

Collapse
X
 
  • فیلتر
  • زمان
  • Show
Clear All
new posts

    #16
    پاسخ : راه انداز ic ds1307

    نوشته اصلی توسط دیجت
    خب به احتمال خراب یا سوخته

    شایدم برنامه ت مشکل داره !! تو پروتیئوس جواب میده ؟
    این تابع دیگه چیه ؟ rtc_get_data(&W,&D,&P,&Y);
    بله جواب میده این تابع تاریخ میخونه که حرف اخرش e هست که دوستمون a نوشتن
    سقراط : دانش من بدانجایی رسید که فهمیدم هیچ نمیدانم.

    دیدگاه


      #17
      پاسخ : راه انداز ic ds1307

      نوشته اصلی توسط دیجت
      خب به احتمال خراب یا سوخته

      شایدم برنامه ت مشکل داره !! تو پروتیئوس جواب میده ؟
      این تابع دیگه چیه ؟ rtc_get_data(&W,&D,&P,&Y);

      W روز هفته رو میخونه از رو ic
      D تعداد روز های گذشته از ماه
      P ماه های گذشته از سال
      Yهم سال,البته به میلادی
      در ضمن برای اینکه رو پایه شماره هفت خروجی داشته باشیم باید rtcرو اینجوری پیکره بندی کنیم
      [code=c]rtc_init(0,1,0);[/code]
      اون قضیه data هم چون تو گوشی نوشتن کد یکم مشکل هستش اشتباه چاپی بود,شرمنده به date تصحیح شد

      دیدگاه


        #18
        پاسخ : راه انداز ic ds1307

        توی برنامه دوستمون من مواردی دیدم
        چرا پایه های i2c تعریف نشده ؟
        و همچنین توی حلقه اصلی برنامه چرا ال سی دی رو پاک نمیکنی ؟



        دیدگاه


          #19
          پاسخ : راه انداز ic ds1307

          تو این برنامه ساده نیازی به پاک کردن lcdنمیبینم ,مشکلی هم پیش نمیاد ,با پاک کردن lcd فقط باعث چشمک زدن ساعت میشیم که زیاد جالب نیست
          پایه های i2cرو هم پایین برنامه ای که گذاشتم رو نگاه بندازی گفتم از کجا تنظیم میشه برا همین تو خود برنامه نیاز نداشت تعریف بشه

          دیدگاه


            #20
            پاسخ : پاسخ : راه انداز ic ds1307

            نوشته اصلی توسط دیجت
            توی برنامه دوستمون من مواردی دیدم
            چرا پایه های i2c تعریف نشده ؟
            و همچنین توی حلقه اصلی برنامه چرا ال سی دی رو پاک نمیکنی ؟
            موارد پاک کردن lcd رو قبلا به برنامه اضافه کردم پایه های i2c هم یا باید تو اول برنامه توسط دستور
            کد:
            #asm
              .equ __i2c_port=0x15
              .equ __scl_bit=5
              .equ __sda_bit=4
            #endasm
            مشخص بشن یا تو قسمت پیکربندی پروژه در کدویژن مشخص بشه در این صورت نیاز به تعریف کردن در برنامه نداره اگه هیچ کدوم از اینا تعریف یا مقدار دهی نشن قسمت اسمبلر کدویژن ارور میگیره و برنامه کمپایل نمیشه
            سقراط : دانش من بدانجایی رسید که فهمیدم هیچ نمیدانم.

            دیدگاه


              #21
              پاسخ : راه انداز ic ds1307

              ببینید همیشه پای یک زن در میان است
              یه جای کار مشکل داره
              اگه برنامه توی پروتیوس جواب میده پس مشکل سخت افزاریه
              مقاومت های پول اپ
              وصل کردن باتری
              تغذیه مناسب

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

              دیگه در غیر این صورت یا ایسی خراب یا کریستال و غیره
              موفق باشید

              دیدگاه


                #22
                پاسخ : راه انداز ic ds1307

                نوشته اصلی توسط MeysaM M32
                سلام
                این کد ها چیه گذاشتی هفتاد درصدش اضافه هستش,برا یه ساعت و تاریخ ساده با ds1307 که تاریخش به میلادی باشه,این همه محاسبات نمیخواد که همه اینا تو ای سی محاسبه میشه و فقط شما باید با i2cبخونی و رو lcd نمایش بدی,اتفاقا من خودم اینو دو سه روز پیش راه انداختم خیلی هم ساده بود اگه به تاریخ میلادی بخوای,برنامه رو پیدا کنم قرار بدم اینجا ببین شاید به کارت اومد

                اضافه شده در تاریخ :
                [code=c]
                #include<mega32.h>
                #include<lcd.h>
                #include<stdio.h>
                #include<i2c.h>
                #include<ds1307.h>
                #asm
                .equ __lcd_PORT=0x18;//PORTB
                #endasm
                void main(void)
                {
                unsigned char H,M,S,Y,P,D,W;
                char A[25];
                char B[25];
                i2c_init();
                rtc_init(0,0,0);
                lcd_init(16);
                rtc_set_time(20,30,0);
                rtc_set_date(4,24,2,16);

                while(1)
                {
                rtc_get_time(&H,&M,&S);
                rtc_get_date(&W,&D,&P,&Y);
                sprintf(A,"time:%02d,%02d,%02d",H,M,S);
                sprintf(B,"Date:%02d/%02d/%02d",Y,P,D);
                lcd_gotoxy(0,0);
                lcd_puts(A);
                lcd_gotoxy(0,1);
                lcd_puts(B);
                }
                }

                [/code]
                البته باید پس از نوشتن برنامه تو قسمتproject,configure,c compile,libraries,i2c /i2cرو فعال کنی و پورت و پین هاش رو مشخص کنی و تمام,این ساده ترین برنامه هستش که خود منم ازش استفاده کردم و جواب داد,باز اگه مشکلی بود تو برنامه و سوالی داشتی تا حد اطلاعاتی که دارم در خدمتم ,البته حجم برنامه خیلی هم کم نشد ها :mrgreen: ولی قابل فهم هستش چیز خاصی نداره
                مچکرم خیلی کارم رو را انداخت.


                اضافه شده در تاریخ :
                نوشته اصلی توسط MeysaM M32
                سلام
                این کد ها چیه گذاشتی هفتاد درصدش اضافه هستش,برا یه ساعت و تاریخ ساده با ds1307 که تاریخش به میلادی باشه,این همه محاسبات نمیخواد که همه اینا تو ای سی محاسبه میشه و فقط شما باید با i2cبخونی و رو lcd نمایش بدی,اتفاقا من خودم اینو دو سه روز پیش راه انداختم خیلی هم ساده بود اگه به تاریخ میلادی بخوای,برنامه رو پیدا کنم قرار بدم اینجا ببین شاید به کارت اومد

                اضافه شده در تاریخ :
                [code=c]
                #include<mega32.h>
                #include<lcd.h>
                #include<stdio.h>
                #include<i2c.h>
                #include<ds1307.h>
                #asm
                .equ __lcd_PORT=0x18;//PORTB
                #endasm
                void main(void)
                {
                unsigned char H,M,S,Y,P,D,W;
                char A[25];
                char B[25];
                i2c_init();
                rtc_init(0,0,0);
                lcd_init(16);
                rtc_set_time(20,30,0);
                rtc_set_date(4,24,2,16);

                while(1)
                {
                rtc_get_time(&H,&M,&S);
                rtc_get_date(&W,&D,&P,&Y);
                sprintf(A,"time:%02d,%02d,%02d",H,M,S);
                sprintf(B,"Date:%02d/%02d/%02d",Y,P,D);
                lcd_gotoxy(0,0);
                lcd_puts(A);
                lcd_gotoxy(0,1);
                lcd_puts(B);
                }
                }

                [/code]
                البته باید پس از نوشتن برنامه تو قسمتproject,configure,c compile,libraries,i2c /i2cرو فعال کنی و پورت و پین هاش رو مشخص کنی و تمام,این ساده ترین برنامه هستش که خود منم ازش استفاده کردم و جواب داد,باز اگه مشکلی بود تو برنامه و سوالی داشتی تا حد اطلاعاتی که دارم در خدمتم ,البته حجم برنامه خیلی هم کم نشد ها :mrgreen: ولی قابل فهم هستش چیز خاصی نداره
                نوشته اصلی توسط nvea
                مچکرم خیلی کارم رو را انداخت.
                میشه بگید این سه خط چیکار میکنه جایی پیدا نکردم چی میشن.
                #asm
                .equ __lcd_PORT=0x18;//PORTB
                #endasm

                اضافه شده در تاریخ :
                نوشته اصلی توسط MeysaM M32
                سلام
                این کد ها چیه گذاشتی هفتاد درصدش اضافه هستش,برا یه ساعت و تاریخ ساده با ds1307 که تاریخش به میلادی باشه,این همه محاسبات نمیخواد که همه اینا تو ای سی محاسبه میشه و فقط شما باید با i2cبخونی و رو lcd نمایش بدی,اتفاقا من خودم اینو دو سه روز پیش راه انداختم خیلی هم ساده بود اگه به تاریخ میلادی بخوای,برنامه رو پیدا کنم قرار بدم اینجا ببین شاید به کارت اومد

                اضافه شده در تاریخ :
                [code=c]
                #include<mega32.h>
                #include<lcd.h>
                #include<stdio.h>
                #include<i2c.h>
                #include<ds1307.h>
                #asm
                .equ __lcd_PORT=0x18;//PORTB
                #endasm
                void main(void)
                {
                unsigned char H,M,S,Y,P,D,W;
                char A[25];
                char B[25];
                i2c_init();
                rtc_init(0,0,0);
                lcd_init(16);
                rtc_set_time(20,30,0);
                rtc_set_date(4,24,2,16);

                while(1)
                {
                rtc_get_time(&H,&M,&S);
                rtc_get_date(&W,&D,&P,&Y);
                sprintf(A,"time:%02d,%02d,%02d",H,M,S);
                sprintf(B,"Date:%02d/%02d/%02d",Y,P,D);
                lcd_gotoxy(0,0);
                lcd_puts(A);
                lcd_gotoxy(0,1);
                lcd_puts(B);
                }
                }

                [/code]
                البته باید پس از نوشتن برنامه تو قسمتproject,configure,c compile,libraries,i2c /i2cرو فعال کنی و پورت و پین هاش رو مشخص کنی و تمام,این ساده ترین برنامه هستش که خود منم ازش استفاده کردم و جواب داد,باز اگه مشکلی بود تو برنامه و سوالی داشتی تا حد اطلاعاتی که دارم در خدمتم ,البته حجم برنامه خیلی هم کم نشد ها :mrgreen: ولی قابل فهم هستش چیز خاصی نداره

                پروژه رو برای دانشگام میخوام
                استاد گفته تا حد امکان دقیق باشه برای همین هم از این ic استفاده میخوام بکنم
                از راه اندازی که قرار دادین خیلی استفاده کردم یه مقدار هم تغییرش دادم از تابع itoa هم استفاده کردم فقط من زیاد از timer/counter چیزی نمیدونم میشه به این سوالا هم جواب بدید.
                این کد ها چی هستن البته فقط قسمت timer هاشونو توضیح بدید، مخصوصا اون if آخر.
                مرسی
                #asm
                .equ __lcd_port=0x1b //PORTA
                #endasm


                long int i=0;


                // Timer2 overflow interrupt service routine
                interrupt [TIM2_OVF] void timer2_ovf_isr(void)
                {
                i++;
                }


                void main(void)
                {
                // Timer/Counter 2 initialization
                // Clock source: TOSC1 pin
                // Clock value: PCK2
                ASSR=0x08;
                TCCR2=0x01;
                // Timer(s)/Counter(s) Interrupt(s) initialization
                TIMSK=0x40;


                lcd_init(16);
                #asm("sei&quot


                while (1)
                {
                if(i*256 + TCNT0 >= 32767)
                {
                second++; i=0; TCNT0=0;

                دیدگاه


                  #23
                  پاسخ : راه انداز ic ds1307

                  اون خط اول به اسمبلی و پایه های مربوط به lcd مشخص میکنه کل برنامه هم یه ساعت با کریستال خارجی روی تایمر دو راه اندازی کرده اون if اخر هم دقیقه و ساعت به تناسب شمارش افزایش میده فقط نفهمیدم حکمت اون TCNT0 تو if چیه :question: چون غیر فعاله و ریجستری هاش مقدار دهی نشدن.
                  در ضمن این ایسی نیازی به استفاده از تایمر نداره و فقط باید یه مقدار اولیه بهش بدی بعد شروع به کار کردن میکنه و فقط باید ازش بخونی
                  سقراط : دانش من بدانجایی رسید که فهمیدم هیچ نمیدانم.

                  دیدگاه

                  لطفا صبر کنید...
                  X