اطلاعیه

Collapse
No announcement yet.

مشکل در کد نویسی DS1307

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

    مشکل در کد نویسی DS1307

    سلام.من تصمیم گرفتم برای یادگیری بهتر avr شروع به یادگیری اتمل استودیوکنم ولی الان در راه اندازی ds1307 به مشکل برخوردم.
    اینم کد پروژه:
    کد:
    #ifndef F_CPU
    #define F_CPU 8000000UL
    #endif
    #define SCL_CLOCK 100000
    #include <avr/io.h>
    #include <util/delay.h>
    #include <stdio.h>
    #include <stdlib.h>
    #include "lcd.h"
    //
    void twi_init(void);
    void twi_start(void);
    void twi_stop(void);
    void twi_write(unsigned char data);
    unsigned char twi_read_ack(void);
    unsigned char twi_read_nack(void);
    void rtc_get_time(unsigned char *hour,unsigned char *min,unsigned char *sec);
    void DS1307_SetTime(unsigned char hh, unsigned char mm, unsigned char ss);
    char bcd2dec(char num);
    //
    int main(void)
    {
      lcdInit();
    	twi_init();
    	unsigned char
    	
    	 h,m,s;
    	char buffer[16];
    	//DS1307_SetTime(0,0,0);
      while (1) 
      {
    		rtc_get_time(&h,&m,&s);
    		lcdClear();
    		lcdGotoxy(0,0);
    		sprintf(buffer,"%c:%c:%c",h,m,s);
    		sprintf(buffer,"%02X:%02X:%02X",h,m,s);
    		lcdPuts(buffer);
    		lcdGotoxy(0,1);
    		lcdPuts("ali");
    		_delay_ms(400);
      }
    }
    //
    void twi_init(void)
    {
    	TWSR=0x00;//100KHZ
    	TWBR = ((F_CPU/SCL_CLOCK)-16)/2;
    	TWCR=(1<<TWINT)|(1<<TWEN);
    }
    //
    void twi_start(void)
    {
    	TWCR=(1<<TWINT)|(1<<TWSTA)|(1<<TWEN);
    	while(!(TWCR & (1<<TWINT)));//till start has been transmitted
    }
    //
    void twi_stop()
    {
    	TWCR=(1<<TWINT)|(1<<TWEN)|(TWSTO);
    }
    //
    void twi_write(unsigned char data)
    {
    	TWDR=data;
    	TWCR=(1<<TWINT)|(1<<TWEN);
    	while(!(TWCR & (1<<TWINT)));
    }
    //
    unsigned char twi_read_ack(void)
    {
    	TWCR= (1<<TWINT)|(1<<TWEN)|(1<<TWEA);
    	while(!(TWCR & (1<<TWINT)));
    	return TWDR;
    }
    //
    unsigned char twi_read_nack(void)
    {
    	TWCR= (1<<TWINT)|(1<<TWEN);
    	while(!(TWCR & (1<<TWINT)));
    	return TWDR;
    }
    //
    void rtc_get_time(unsigned char *hour,unsigned char *min,unsigned char *sec)
    {
    	twi_start();
    	twi_write(0xd0);
    	twi_write(0);
    	twi_start();
    	twi_write(0xd1);
    	*sec=twi_read_ack();
    	*min=twi_read_ack();
    	*hour=twi_read_nack();
    	twi_stop();
    }
    //
    char bcd2dec(char num)
    {
    	return ((num/16 * 10) + (num % 16));
    }
    تنها چیزی که روی صفحه ی lcd می بینیم اینه:"0:0:80"
    از سخت افزار مطمئنم چون برنامه ی بسکام و کدویژن به درستی روش کار می کنه.
    به نظرتون مشکل از کجاست؟
    با تشکر :angry: :angry:
    همیشه در حال یادگیری.سعی می کنم موانع سر راهم را بردارم.

    #2
    پاسخ : مشکل در کد نویسی DS1307

    یک بیت بنام CH در رجیستر به ادرس صفرموجوده در ایسی ساعت
    تا زمانی که اون بیت 1 باشه نوسان سازش کار نمیکنه
    شما باید اون بیت رو صفر کنید برای بار اول
    یا یه شرط بزارید اگه اون بیت یک بود صفر شه
    زمانی اون بیت یکه که ایسی خاموش روشن شه
    کد:
    The contents of the time and calendar registers are in the BCD format. Bit 7 of register 0
    is the clock halt (CH) bit. When this bit is set to a 1, the oscillator is disabled. When cleared to a 0, the
    oscillator is enabled.
    .The best question deserves a better answer
    =-=-=-=-=-=-=-=-=-==-=-=-=-=-=-=-=-=
    «پناه»می برم «به خدا»
    از عـیبی که ، «امروز» در خود می بینم، و «دیروز» «دیگران را» به خاطر، «هـمان عیـب» ملامت کرده ام.
    محتاط باشیم، در «سرزنش» و «قضاوت کردن دیگران». وقتی نه از «دیروز او» خبر داریم و نه از "فردای خودمان" .

    دیدگاه


      #3
      پاسخ : مشکل در کد نویسی DS1307

      نوشته اصلی توسط •.´™ مَسِِــــح`.•
      یک بیت بنام CH در رجیستر به ادرس صفرموجوده در ایسی ساعت
      تا زمانی که اون بیت 1 باشه نوسان سازش کار نمیکنه
      شما باید اون بیت رو صفر کنید برای بار اول
      یا یه شرط بزارید اگه اون بیت یک بود صفر شه
      زمانی اون بیت یکه که ایسی خاموش روشن شه
      کد:
      The contents of the time and calendar registers are in the BCD format. Bit 7 of register 0
      is the clock halt (CH) bit. When this bit is set to a 1, the oscillator is disabled. When cleared to a 0, the
      oscillator is enabled.
      سلام چه جوری این بیتو صفر کنم؟
      میشه راهنمایی کنید؟
      با تشکر :angry:
      همیشه در حال یادگیری.سعی می کنم موانع سر راهم را بردارم.

      دیدگاه


        #4
        پاسخ : مشکل در کد نویسی DS1307

        از این مثال بهره بگیرید.
        http://s7.picofile.com/file/82344508...timer.rar.html
        .The best question deserves a better answer
        =-=-=-=-=-=-=-=-=-==-=-=-=-=-=-=-=-=
        «پناه»می برم «به خدا»
        از عـیبی که ، «امروز» در خود می بینم، و «دیروز» «دیگران را» به خاطر، «هـمان عیـب» ملامت کرده ام.
        محتاط باشیم، در «سرزنش» و «قضاوت کردن دیگران». وقتی نه از «دیروز او» خبر داریم و نه از "فردای خودمان" .

        دیدگاه

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