اطلاعیه

Collapse
No announcement yet.

برنامه باds1307

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

    #16
    پاسخ : برنامه باds1307

    نوشته اصلی توسط سید مهدی
    سلام
    هر بار که تغذیه رو به آی سی متصل میکنی حتما باید init بشه و حتما هم ساعت رو بهش بگی (اگه نگی وقتی ازش میخونی بهت 80 رو نشون میده)(جواب سوال اول و یکی به آخر مونده :mrgreen.
    که برای رفع این مشکل حتما باتری پشتیبان رو باید بزاری.
    برای رفع مشکل با vcc حتما یه خازن بزرگ با کل تغذیت موازی من و یه خازن104 هم با دو سر تغذیه هر دو آی سیت موازی کن.
    جواب آخر هم نمیدونم اما اگه با صفر کار نمیکنه خوب 1 بزار!(این تنظیمات ماله پایه ی 7 هست که ازش استفاده نمیکنید.)
    در ضمن کریستالتون درست و حسابیه؟!
    موفق باشید :smile:
    اول در مورد کریستال که من نمیدونم درست و حسابی یعنی چی ؟؟؟ من از فروشنده کریستال توی دیتا شیت رو خواستمو اونم داد !!!آ‌ چطور خوبیشو تست کنم ؟؟
    در مورد init شدن هم بگم که می دونم باید init بشه . منظور من مقداردهی اولیه بود. . فرض کنید یه میکرو به این RTC متصله که دائم نمیتونه روشن باشه . می خوام باتری بگذارم به RTC و هر موقع نیاز به نمونه برداری از RTC شد میکرو به برق متصل بشه و ... اما اگه RTC توی برنامه میکرو مقداردهی اولیه بشه هر بار که میکرو روشن بشه خوب RTC از اول شروع به شمارش می کنه . این مقداردهی رو خواستم با یه کلید متصل به یه پورت بدم اما نشد.میشه منو راهنمایی کنید که مثلا وقتی فلان کلید متصل به فلان پورت میکرو زده شد مقدار RTا¾ا¾C برابر یه مقدار تعیین شده بشه .
    سوال آخر اینکه اگه فقط باتری به RTC وصل باشه خروجی نمیده ؟ یعنی حتما باید VCC اون وصل باشه ؟؟ از من که اینطوره !!!

    دیدگاه


      #17
      پاسخ : برنامه باds1307

      راستی یه سوال دیگه . RTC ای سراغ ندارید که بتونه دقت میلی و یا حتی میکرو ثانیه داشته باشه ؟ واسه لاگ کردن اطلاعات در زمانهای خیلی کوتاه ؟ این RTC که این امکان رو نداره ؟؟؟

      دیدگاه


        #18
        پاسخ : برنامه باds1307

        کسی جواب سوالای منو نمیده ؟؟!!! :cry:

        دیدگاه


          #19
          پاسخ : برنامه باds1307

          نوشته اصلی توسط majidmajid
          کسی جواب سوالای منو نمیده ؟؟!!! :cry:
          خوب حتما کسی سراغ نداره :mrgreen:

          دیدگاه


            #20
            پاسخ : برنامه باds1307

            نوشته اصلی توسط سید مهدی

            خوب حتما کسی سراغ نداره :mrgreen:
            WOW چقدر فلسفی :biggrin: . حالا این هیچی . جواب پست قبلش چی :

            اول در مورد کریستال که من نمیدونم درست و حسابی یعنی چی ؟؟؟ من از فروشنده کریستال توی دیتا شیت رو خواستمو اونم داد !!!آ‌ چطور خوبیشو تست کنم ؟؟
            در مورد init شدن هم بگم که می دونم باید init بشه . منظور من مقداردهی اولیه بود. . فرض کنید یه میکرو به این RTC متصله که دائم نمیتونه روشن باشه . می خوام باتری بگذارم به RTC و هر موقع نیاز به نمونه برداری از RTC شد میکرو به برق متصل بشه و ... اما اگه RTC توی برنامه میکرو مقداردهی اولیه بشه هر بار که میکرو روشن بشه خوب RTC از اول شروع به شمارش می کنه . این مقداردهی رو خواستم با یه کلید متصل به یه پورت بدم اما نشد.میشه منو راهنمایی کنید که مثلا وقتی فلان کلید متصل به فلان پورت میکرو زده شد مقدار RTا¾ا¾C برابر یه مقدار تعیین شده بشه .
            سوال آخر اینکه اگه فقط باتری به RTC وصل باشه خروجی نمیده ؟ یعنی حتما باید VCC اون وصل باشه ؟؟ از من که اینطوره !!!

            دیدگاه


              #21
              پاسخ : برنامه باds1307

              اول در مورد کریستال که من نمیدونم درست و حسابی یعنی چی ؟؟؟ من از فروشنده کریستال توی دیتا شیت رو خواستمو اونم داد !!!آ‌ چطور خوبیشو تست کنم ؟؟
              منظورم این بود که احتمالا کریستال رو از یه مداری باز نکرده باشی. که نکردی!
              قسمت دومت هم در مورد کلید و تنظیم دوباره خوب کاری نداره مثلا از اینتراپت خارجی استفاده کن و داخل روتینش هم بنویس که rtc_set_time(0,0,0);
              همین.
              بازم سوالی بود در خدمتیم :redface:
              موفق باشید :smile:

              دیدگاه


                #22
                پاسخ : برنامه باds1307

                نوشته اصلی توسط سید مهدی
                اول در مورد کریستال که من نمیدونم درست و حسابی یعنی چی ؟؟؟ من از فروشنده کریستال توی دیتا شیت رو خواستمو اونم داد !!!آ‌ چطور خوبیشو تست کنم ؟؟
                منظورم این بود که احتمالا کریستال رو از یه مداری باز نکرده باشی. که نکردی!
                قسمت دومت هم در مورد کلید و تنظیم دوباره خوب کاری نداره مثلا از اینتراپت خارجی استفاده کن و داخل روتینش هم بنویس که rtc_set_time(0,0,0);
                همین.
                بازم سوالی بود در خدمتیم :redface:
                موفق باشید :smile:
                آقا میشه یه تیکه برنامه به من بدی که وقتی میکرو بالا میادو روشن میشه RTC رو init کنه اما مقداردهی اولیه نکنه و بعد با زدن مثلا یه کلید متصل به مثلا PORTB.0 مقداردهی اولیه بشه ؟
                مثل :

                /************************************************** ***
                Chip type : ATmega16
                Program type : Application
                Clock frequency : 8.000000 MHz
                Memory model : Small
                External SRAM size : 0
                Data Stack size : 256
                ************************************************** ***/

                #include <mega16.h>
                #include <delay.h>
                #include <stdio.h>

                // I2C Bus functions
                #asm
                .equ __i2c_port=0x1B ;PORTA
                .equ __sda_bit=4
                .equ __scl_bit=3
                #endasm
                #include <i2c.h>

                // DS1307 Real Time Clock functions
                #include <ds1307.h>

                // Alphanumeric LCD Module functions
                #asm
                .equ __lcd_port=0x15 ;PORTC
                #endasm
                #include <lcd.h>

                void clock(void);

                // Declare your global variables here

                // unsigned char sec,min,hour,day,month,year;
                // char lcd1[20],lcd2[20];

                void main(void)
                {
                // Declare your local variables here

                unsigned int h=23;
                unsigned int m=59;
                unsigned int s=58;
                unsigned int d=31;
                unsigned int mo=12;
                unsigned int y=8;


                // Input/Output Ports initialization
                // Port A initialization
                // Func7=In Func6=In Func5=In Func4=In Func3=In Func2=In Func1=In Func0=In
                // State7=T State6=T State5=T State4=P State3=P State2=T State1=T State0=T
                PORTA=0x18;
                DDRA=0x00;

                PORTB=0x01;
                DDRB=0x00;

                PORTC=0x00;
                DDRC=0x00;

                PORTD=0x00;
                DDRD=0x00;

                // Timer/Counter 0 initialization
                // Clock source: T0 pin Falling Edge
                // Mode: Normal top=FFh
                // OC0 output: Disconnected
                TCCR0=0x00;
                TCNT0=0x00;
                OCR0=0x00;

                TCCR1A=0x00;
                TCCR1B=0x00;
                TCNT1H=0x00;
                TCNT1L=0x00;
                ICR1H=0x00;
                ICR1L=0x00;
                OCR1AH=0x00;
                OCR1AL=0x00;
                OCR1BH=0x00;
                OCR1BL=0x00;

                ASSR=0x00;
                TCCR2=0x00;
                TCNT2=0x00;
                OCR2=0x00;

                MCUCR=0x00;
                MCUCSR=0x00;

                TIMSK=0x00;

                ACSR=0x80;
                SFIOR=0x00;

                // I2C Bus initialization
                i2c_init();

                // DS1307 Real Time Clock initialization
                // Square wave output on pin SQW/OUT: on
                // Square wave frequency: 32768
                rtc_init(3,1,0);

                // LCD module initialization
                lcd_init(20);


                while (1)
                {
                // Place your code here
                clock();
                delay_ms(300);
                if (PINB.0==0)
                {
                rtc_set_time(h,m,s);
                rtc_set_date(d,mo,y);
                }
                };
                }

                ///////////////////////////////////////

                void clock(void)
                {
                unsigned char sec,min,hour,day,month,year;
                char lcd1[20],lcd2[20];
                while(1)
                {
                rtc_get_time(&hour,&min,&sec);
                rtc_get_date(&day,&month,&year);
                sprintf(lcd1,"20%02u/%02u/%02u",year,month,day);
                sprintf(lcd2,"%02u:%02u:%02u",hour,min,s ec);
                lcd_clear();
                lcd_gotoxy(5,0);
                lcd_puts(lcd1);
                lcd_gotoxy(6,1);
                lcd_puts(lcd2);
                delay_ms(100);
                }
                }

                که البته کار نکرد ولی با این تغییر و تعریف یه پرچم درست شد :


                while (1)
                {
                // Place your code here

                if (PINB.0==0)
                {
                rtc_set_time(h,m,s);
                rtc_set_date(d,mo,y);
                flag = 1;
                }
                if (flag ==1)
                clock();

                };
                }

                میشه بگید چرا ؟!!! یعنی تا RTC مقداردهی اولیه نشه نباید ازش خوند ؟؟؟ چون به محض اینکه یه بار خونده میشه دیگه مقداردهی نمیشه !!! یعنی ما یه بار بیشتر نمی تونیم ساعتو تنظیم کنیم . مسخرست !!!

                دیدگاه


                  #23
                  پاسخ : برنامه باds1307

                  میشه بگید چرا ؟!!! یعنی تا RTC مقداردهی اولیه نشه نباید ازش خوند ؟؟؟ چون به محض اینکه یه بار خونده میشه دیگه مقداردهی نمیشه !!! یعنی ما یه بار بیشتر نمی تونیم ساعتو تنظیم کنیم . مسخرست !!!
                  نه!!!
                  ds1307 اینطوریه که بهش میگی الان ساعت اینه شروع کن به شمردن.
                  بعدش هر وقت خواستی میتونی ازش ساعت رو بخونی ، البته میشه وسط کار هم بهش بگی الان ساعت عوض شد و ساعت اصلی اینه.
                  اما یادتون باشه حتما باید بگی ساعت چنده وگر نه قاطی میکنه.(بیچاره خیلی کند ذهنه :mrgreen
                  .
                  البته در مورد اون حلقه while که نوشتید نمیدونم چرا؟!!!!
                  شاید نمیتونه پس از اینکه ساعت رو بهش گفتی دوباره بهت بگه.شاید باید یکم صبر کنی.
                  موفق باشید.

                  دیدگاه


                    #24
                    پاسخ : برنامه باds1307

                    آقا فایده نداره . حتی با proteus هم جواب نمیده . اشکال از جای دیگست . از دوستان دیگه ی فروم هیچکدوم نظری ندارند ؟!!! بابا یه راهنمایی ای چیزی . :angry:

                    دیدگاه

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