سلام.من تصمیم گرفتم برای یادگیری بهتر avr شروع به یادگیری اتمل استودیوکنم ولی الان در راه اندازی ds1307 به مشکل برخوردم.
اینم کد پروژه:
تنها چیزی که روی صفحه ی lcd می بینیم اینه:"0:0:80"
از سخت افزار مطمئنم چون برنامه ی بسکام و کدویژن به درستی روش کار می کنه.
به نظرتون مشکل از کجاست؟
با تشکر :angry: :angry:
اینم کد پروژه:
کد:
#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)); }
از سخت افزار مطمئنم چون برنامه ی بسکام و کدویژن به درستی روش کار می کنه.
به نظرتون مشکل از کجاست؟
با تشکر :angry: :angry:
دیدگاه