اطلاعیه

Collapse
No announcement yet.

ساعت با ds1307

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

    ساعت با ds1307

    سلام دوستان
    من میخام با mega32 و ds1307 و کریستال ساعت یه ساعت دقیق درست کنم که روی lcd 2*16 نشون بده و دکمه برای تنظیم ساعت داشته باشه و به زبان c هم باشه
    من چندتا مشکل دارم اول خودم سعی کردم فقط با استفاده از میکرو و کریستال ساعت یه ساعت درست کنم ولی نمیدونم ایراد کارم کجاست که در پروگرام کردن با کریستال خارجی مشکل دارم و میکرو قفل میشه و نتونستم برشگردونم (لطفا این قسمت با جزئیات کامل بفرمایید) راستی پروگرامر هم دست ساز هست و از نوع stk 200/300 هست مشکل دوم تا حالا کار با پروتکل i2c bus بلد نیستم به خاطر همینم قسمت نشده تا الان با ds1307 کار کنم
    از وراجیم عذر خواهی می کنم و پیشاپیش از جواب شما دوستان متشکرم..............
    دوستان من ماهی نمیخام لطفا ماهی گیری یادم بدید (اگه امکانش هست کامل و با جزئیات ریز برنام توضیح بدید باید چی کار کنم)

    #2
    پاسخ : ساعت با ds1307

    ارتباط با 1307 بسیار آسونه. اگه بگی با کدوم نرم افزار برنامه نویسی میکنی میشه کمکت کرد.
    پیروز باشید

    دیدگاه


      #3
      پاسخ : ساعت با ds1307

      دوست عزیز گفتم که به زبان c و با کامپایلر codevision
      منتظر کمکتون هستم (جزئیات فراموش نشه)........

      دیدگاه


        #4
        پاسخ : ساعت با ds1307

        یه c کوچولو نوشتی اون وسط خب ندیدم ببخشید چرا میزنی؟!
        توی codewizard یه تب هست به نام i2c وارد تب میشی، یکی از پورتها رو انتخاب میکنی و شماره پایه های sda و scl رو انتخاب میکنی و از قسمت پایین اونها ds1307 رو انتخاب میکنی. enabled رو فعال میکنی و تمام.
        سوالی بود در خدمتم.
        پیروز باشید

        دیدگاه


          #5
          پاسخ : ساعت با ds1307

          یه قسمت برنامه نویسی هم باید داشته باشه ها؟
          چجوری مثلا ساعت و دقیقه و ثانیه رو بخونه؟
          این ای سی هر یک ثانیه به مقدار عدد ثانیه اضافه میشه؟ برنامه لازم نداره؟

          دیدگاه


            #6
            پاسخ : ساعت با ds1307

            نوشته اصلی توسط mmahdi302
            یه قسمت برنامه نویسی هم باید داشته باشه ها؟
            چجوری مثلا ساعت و دقیقه و ثانیه رو بخونه؟
            این ای سی هر یک ثانیه به مقدار عدد ثانیه اضافه میشه؟ برنامه لازم نداره؟
            سلام من با RTC کار کردم . یه سری رجیستر داره که برای کار کردن اون ها رو باید مقدار دهی کنی بر اساس دیتا شیت . بقیه اشم که خوندن رجیستر های مربوط به ساعت و دقیقه و ثانیه است . کلا وقتی تغذیه ش وصل باشه البته رجیستر هاشم درست مقدار دهی بشه خودش میشموره و نیاز به کار خاصی نیست فقط باید ساعت بخونی و روی LCD نمایش بدی و تمام.

            دیدگاه


              #7
              پاسخ : ساعت با ds1307

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

              دیدگاه


                #8
                پاسخ : ساعت با ds1307

                دوستان من با استفاده از help کدویژن تونستم یه جوری این راه بندازم ولی یه مشکل داره میشه به برنامم یه نگاه بندازید
                http://mmahdi302.persiangig.com/New%20Folder.rar

                دیدگاه


                  #9
                  پاسخ : ساعت با ds1307

                  سلام
                  این برنامه را یک نگاه بنداز و چکش کن ببین مشکلت رو حل میکنه ؟
                  کد:
                  #include <mega16.h>
                  #include <stdio.h>
                  #include <delay.h>
                  #include <stdlib.h>
                  #include <string.h>
                  // I2C Bus functions
                  #asm
                    .equ __i2c_port=0x12 ;PORTD
                    .equ __sda_bit=0
                    .equ __scl_bit=1
                  #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>
                  
                  // Declare your global variables here
                  
                  
                  void main(void)
                  {
                  // Declare your local variables here
                   unsigned char h,m,s;
                   unsigned char d,mo,y;
                   char lcda[16],lcdb[16]; 
                   
                  // 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=T State3=T State2=T State1=T State0=T 
                  PORTA=0x00;
                  DDRA=0x00;
                  
                  // Port B initialization
                  // Func7=In Func6=In Func5=In Func4=In Func3=In Func2=In Func1=In Func0=out 
                  // State7=T State6=T State5=T State4=T State3=T State2=T State1=T State0=0 
                  PORTB=0x00;
                  DDRB=0x01;
                  
                  // Port C initialization
                  // Func7=In Func6=In Func5=In Func4=In Func3=In Func2=In Func1=In Func0=In 
                  // State7=T State6=T State5=T State4=T State3=T State2=T State1=T State0=T 
                  PORTC=0x00;
                  DDRC=0x00;
                  
                  // Port D initialization
                  // Func7=In Func6=In Func5=In Func4=In Func3=In Func2=In Func1=In Func0=In 
                  // State7=T State6=T State5=T State4=T State3=T State2=T State1=T State0=T 
                  PORTD=0x00;
                  DDRD=0x03;
                  
                  // Timer/Counter 0 initialization
                  // Clock source: System Clock
                  // Clock value: Timer 0 Stopped
                  // Mode: Normal top=FFh
                  // OC0 output: Disconnected
                  TCCR0=0x00;
                  TCNT0=0x00;
                  OCR0=0x00;
                  
                  // Timer/Counter 1 initialization
                  // Clock source: System Clock
                  // Clock value: Timer 1 Stopped
                  // Mode: Normal top=FFFFh
                  // OC1A output: Discon.
                  // OC1B output: Discon.
                  // Noise Canceler: Off
                  // Input Capture on Falling Edge
                  TCCR1A=0x00;
                  TCCR1B=0x00;
                  TCNT1H=0x00;
                  TCNT1L=0x00;
                  ICR1H=0x00;
                  ICR1L=0x00;
                  OCR1AH=0x00;
                  OCR1AL=0x00;
                  OCR1BH=0x00;
                  OCR1BL=0x00;
                  
                  // Timer/Counter 2 initialization
                  // Clock source: System Clock
                  // Clock value: Timer 2 Stopped
                  // Mode: Normal top=FFh
                  // OC2 output: Disconnected
                  ASSR=0x00;
                  TCCR2=0x00;
                  TCNT2=0x00;
                  OCR2=0x00;
                  
                  // External Interrupt(s) initialization
                  // INT0: Off
                  // INT1: Off
                  // INT2: Off
                  MCUCR=0x00;
                  MCUCSR=0x00;
                  
                  // Timer(s)/Counter(s) Interrupt(s) initialization
                  TIMSK=0x00;
                  
                  // Analog Comparator initialization
                  // Analog Comparator: Off
                  // Analog Comparator Input Capture by Timer/Counter 1: Off
                  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: 1Hz
                  rtc_init(0,1,0);
                  
                  // LCD module initialization
                  lcd_init(16);
                  
                  
                  while (1)
                     { 
                     // Place your code here
                      i2c_start();
                      rtc_get_time(&h,&m,&s);
                      rtc_get_date(&d,&mo,&y);
                      i2c_stop();
                      sprintf(lcda,"Time:%02u:%02u:%02u",h,m,s);
                      sprintf(lcdb,"Date:%02u/%02u/%02u",d,mo,y);
                      lcd_clear();
                      lcd_gotoxy(0,0);
                      
                      lcd_puts(lcda); 
                      
                      lcd_gotoxy(0,1);  
                      lcd_puts(lcdb);
                      delay_ms(1000);
                     };
                  }
                  موفق باشید
                  امام علي (عليه السلام) : الزکات العلم نشرهُ/ زکات علم نشر آن است

                  دیدگاه


                    #10
                    پاسخ : ساعت با ds1307

                    از همه دوستان تشکر می کنم به ویژه عباس آقا
                    به چیزی که می خواستم رسیدم
                    ----------------------------------------------
                    ختم تاپیک

                    دیدگاه


                      #11
                      پاسخ : ساعت با ds1307

                      نوشته اصلی توسط mmahdi302
                      سلام دوستان
                      من میخام با mega32 و ds1307 و کریستال ساعت یه ساعت دقیق درست کنم که روی lcd 2*16 نشون بده و دکمه برای تنظیم ساعت داشته باشه و به زبان c هم باشه
                      من چندتا مشکل دارم اول خودم سعی کردم فقط با استفاده از میکرو و کریستال ساعت یه ساعت درست کنم ولی نمیدونم ایراد کارم کجاست که در پروگرام کردن با کریستال خارجی مشکل دارم و میکرو قفل میشه و نتونستم برشگردونم (لطفا این قسمت با جزئیات کامل بفرمایید) راستی پروگرامر هم دست ساز هست و از نوع stk 200/300 هست مشکل دوم تا حالا کار با پروتکل i2c bus بلد نیستم به خاطر همینم قسمت نشده تا الان با ds1307 کار کنم
                      از وراجیم عذر خواهی می کنم و پیشاپیش از جواب شما دوستان متشکرم..............
                      دوستان من ماهی نمیخام لطفا ماهی گیری یادم بدید (اگه امکانش هست کامل و با جزئیات ریز برنام توضیح بدید باید چی کار کنم)

                      این برنامه کارتو راه میندازه شک نکن البته با ای سی ساعت PCF8385
                      کد:
                      /**************************************************
                      
                      This program was produced by the
                      CodeWizardAVR V1.24.4 Standard
                      Automatic Program Generator
                      © Copyright 1998-2004 Pavel Haiduc, HP InfoTech s.r.l.
                      http://www.hpinfotech.com
                      e-mail:office@hpinfotech.com
                      
                      Project : 
                      Version : 
                      Date  : 2009/03/14
                      Author : gfthy              
                      Company : cgfdg              
                      Comments: 
                      
                      
                      Chip type      : ATmega8
                      Program type    : Application
                      Clock frequency   : 8.000000 MHz
                      Memory model    : Small
                      External SRAM size : 0
                      Data Stack size   : 256
                      *****************************************************/
                      
                      #include <mega8.h>
                      
                      #include <stdio.h>
                      #include <delay.h>
                      // I2C Bus functions
                      #asm
                        .equ __i2c_port=0x15 ;PORTC
                        .equ __sda_bit=4
                        .equ __scl_bit=5
                      #endasm
                      #include <i2c.h>
                      
                      // PCF8583 Real Time Clock functions
                      #include <pcf8583.h>
                      
                      // Alphanumeric LCD Module functions
                      #asm
                        .equ __lcd_port=0x12 ;PORTD
                      #endasm
                      #include <lcd.h>
                      
                      // Declare your global variables here
                      void scan_key(void);
                      void showlcd(char *strline1,char a,char b,char c);
                      void blink(char x,char y);
                      void seting_time(char i,char key);
                      void seting_date(char i,char key);
                      void seting_time_alarm(char i,char key);
                      void seting_date_alarm(char i,char key);
                      
                      char j=0,k=0;
                      char buffer[50]; 
                      char str1[]="Set(Time)";
                      char str2[]="Set(Date)";
                      char str3[]="Set(Alarm Time)";
                      char str4[]="Set(Alarm Date)";
                      unsigned char second,minute,hours,hsecond;
                      unsigned char year,month,day; 
                      unsigned char day_alarm,month_alarm;
                      unsigned char hours_alarm,minute_alarm,second_alarm,hsecond_alarm;
                      void main(void)
                      {
                      // Declare your local variables here
                      
                      // Input/Output Ports initialization
                      // Port B initialization
                      // Func7=In Func6=In Func5=In Func4=In Func3=In Func2=In Func1=In Func0=In 
                      // State7=T State6=T State5=T State4=T State3=T State2=T State1=T State0=T 
                      PORTB=0x02;
                      DDRB=0x02;
                      
                      // Port C initialization
                      // Func6=In Func5=In Func4=In Func3=In Func2=In Func1=In Func0=In 
                      // State6=T State5=T State4=T State3=T State2=T State1=T State0=T 
                      PORTC=0x07;
                      DDRC=0xF8; 
                      
                      // Port D initialization
                      // Func7=In Func6=In Func5=In Func4=In Func3=In Func2=In Func1=In Func0=In 
                      // State7=T State6=T State5=T State4=T State3=T State2=T State1=T State0=T 
                      PORTD=0x00;
                      DDRD=0x00;
                      
                      // Timer/Counter 0 initialization
                      // Clock source: System Clock
                      // Clock value: Timer 0 Stopped
                      TCCR0=0x00;
                      TCNT0=0x00;
                      
                      // Timer/Counter 1 initialization
                      // Clock source: System Clock
                      // Clock value: Timer 1 Stopped
                      // Mode: Normal top=FFFFh
                      // OC1A output: Discon.
                      // OC1B output: Discon.
                      // Noise Canceler: Off
                      // Input Capture on Falling Edge
                      TCCR1A=0x00;
                      TCCR1B=0x00;
                      TCNT1H=0x00;
                      TCNT1L=0x00;
                      ICR1H=0x00;
                      ICR1L=0x00;
                      OCR1AH=0x00;
                      OCR1AL=0x00;
                      OCR1BH=0x00;
                      OCR1BL=0x00;
                      
                      // Timer/Counter 2 initialization
                      // Clock source: System Clock
                      // Clock value: Timer 2 Stopped
                      // Mode: Normal top=FFh
                      // OC2 output: Disconnected
                      ASSR=0x00;
                      TCCR2=0x00;
                      TCNT2=0x00;
                      OCR2=0x00;
                      
                      // External Interrupt(s) initialization
                      // INT0: Off
                      // INT1: Off
                      MCUCR=0x00;
                      
                      // Timer(s)/Counter(s) Interrupt(s) initialization
                      TIMSK=0x00;
                      
                      // Analog Comparator initialization
                      // Analog Comparator: Off
                      // Analog Comparator Input Capture by Timer/Counter 1: Off
                      ACSR=0x80;
                      SFIOR=0x00;
                      
                      // I2C Bus initialization
                      i2c_init();
                      
                      // PCF8583 Real Time Clock initialization
                      rtc_init(0,0);
                      rtc_alarm_on(0); 
                      // LCD module initialization
                      lcd_init(16);
                      
                      	
                      	
                      while (1)
                         {
                         // Place your code here
                         rtc_get_time(0,&hours,&minute,&second,&hsecond);
                         rtc_get_date(0,&year,&month,&day);	 
                         rtc_get_alarm_time(0,&hours_alarm,&minute_alarm,&second_alarm,&hsecond_alarm);
                         rtc_get_alarm_date(0,&day_alarm,&month_alarm);	  
                         lcd_clear();
                         lcd_gotoxy(0,0);
                         sprintf(buffer,"TIME=%02d:%02d:%02d",hours,minute,second);
                         lcd_puts(buffer);
                         lcd_gotoxy(0,1);
                         sprintf(buffer,"DATE=20%02d:%02d:%02d",year,month,day);
                         lcd_puts(buffer);
                         scan_key();
                         delay_ms(50);
                      ///////////
                      if(k==0){
                      if(PINC.2==0){
                      PORTB.1=0;
                      j++;
                      if(j==250){
                      PORTB.1=1;
                      DDRC.2=1;
                      PORTC.2=1;
                      j=0;
                      k=1;
                      }
                      }
                      }
                      
                         };
                      }
                      
                      
                      void scan_key(void)
                      {     
                      	char key,b,i;
                       	key=PINC & 0x03; 
                        if(key==0x01){
                       		i=0;  
                       		b=0;
                       	 	while(i<=12){ 
                       	 		key=PINC & 0x03 ;
                       	 		if(key==0x01){
                       	 		 	i++;
                       	 	  	b++;     
                       	 		} 	 					   		
                       	 		if(b>3)b=1;
                       	 		blink(9-3*b,1);          	 		
                      			if(4>i && i>0)				
                      				seting_time(i,key);
                      	   if(7>i && i>3)					     
                      				seting_date(i,key);	 	
                      			if(10>i && i>6)				
                      				seting_time_alarm(i,key);
                      	   if(13>i && i>9)				
                      				seting_date_alarm(i,key);       		
                        	}
                        }
                      } 
                      //--------------------------
                      void seting_time(char i,char key)
                      {          
                        if(i==1 && key==0x02){          
                       		second++;
                       	 	if(second>59)second=0; 	 					
                       	}
                       	if(i==2 && key==0x02){          
                       		minute++;
                       	 	if(minute>59)minute=0; 	 		
                       	}
                       	if(i==3 && key==0x02){
                       		hours++;
                       		if(hours>23)hours=0;       
                       	} 
                      	rtc_set_time(0,hours,minute,second,0); 	   	 	
                       	showlcd(str1,hours,minute,second);
                      }
                       //--------------------------
                      void seting_date(char i,char key)
                      {
                        if(i==4 && key==0x02){
                       		day++;
                       		if(day>31)day=1;       
                       	} 
                        if(i==6 && key==0x02){          
                       		year++;
                       	 	if(year>99)year=0; 	 					
                       	}
                       	if(i==5 && key==0x02){          
                       		month++;
                       	 	if(month>12)month=1; 	 		
                       	}  
                      	rtc_set_date(0,year,month,day);
                       	showlcd(str2,year,month,day);
                      }
                      //--------------------------
                      void seting_time_alarm(char i,char key)
                      {          
                        if(i==7 && key==0x02){          
                       		second_alarm++;
                       	 	if(second_alarm>59)second_alarm=0; 	 					
                       	}
                       	if(i==8 && key==0x02){          
                       		minute_alarm++;
                       	 	if(minute_alarm>59)minute_alarm=0; 	 		
                       	}
                       	if(i==9 && key==0x02){
                       		hours_alarm++;
                       		if(hours_alarm>23)hours_alarm=0;       
                       	} 
                      	rtc_set_alarm_time(0,hours_alarm,minute_alarm,second_alarm,0);
                       	showlcd(str3,hours_alarm,minute_alarm,second_alarm);                         	
                      }
                       //--------------------------
                      void seting_date_alarm(char i,char key)
                      {
                       	if(i==10 && key==0x02){
                       		day_alarm++;
                       		if(day_alarm>31)day_alarm=0;       
                       	}
                       	if(i==11 && key==0x02){          
                       		month_alarm++;
                       	 	if(month_alarm>12)month_alarm=0; 	 		
                       	} 	 
                        rtc_set_alarm_date(0,day_alarm,month_alarm);
                       	showlcd(str4,year,month_alarm,day_alarm);
                      }
                      
                      //--------------------------
                      void showlcd(char *strline1,char a,char b,char c)
                      {
                        lcd_clear();
                        lcd_gotoxy(0,0);
                        lcd_puts (strline1); 	 
                        lcd_gotoxy(0,1);
                        sprintf(buffer,"%02d:%02d:%02d",a,b,c);
                        lcd_puts(buffer);
                      }
                      //------------------------
                      void blink(char x,char y)
                      {
                       	delay_ms(200); 
                       	lcd_gotoxy(x,y); 	 		
                       	lcd_putchar(' ');
                       	lcd_gotoxy(x+1,y); 	 		
                       	lcd_putchar(' '); 	
                          delay_ms(200); 		  
                       
                       
                      }
                      http://ne-led.ir
                      http://tabloravan3.blogfa.com

                      دیدگاه

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