سلام
ممکنه اساتید من رو راهنمایی کنند. هیچ دیتایی از DS1307 نمی گیرم :cry2:
پین های ارتباطی رو هم با 10 کیلو به 3.3 ولت وصل کردم، به 5 ولت هم وصل کردم فرقی نکرد.
اینم کل برنامه
ممکنه اساتید من رو راهنمایی کنند. هیچ دیتایی از DS1307 نمی گیرم :cry2:
پین های ارتباطی رو هم با 10 کیلو به 3.3 ولت وصل کردم، به 5 ولت هم وصل کردم فرقی نکرد.
اینم کل برنامه
کد:
/***************************************************** Chip type : ATxmega32A4 Program type : Application AVR Core Clock frequency: 32.000000 MHz Memory model : Small Data Stack size : 1024 *****************************************************/ #include <io.h> #include <twix.h> #include <alcd.h> #include <delay.h> #include <bcd.h> #include <stdio.h> #define byte unsigned char // Declare your global variables here struct { byte sec; byte minute; byte hour; byte day_week; byte day; byte month; byte year; }t_d; // System Clocks initialization void system_clocks_init(void) { unsigned char n,s; // Optimize for speed #pragma optsize- // Save interrupts enabled/disabled state s=SREG; // Disable interrupts #asm("cli") // Internal 32 kHz RC oscillator initialization // Enable the internal 32 kHz RC oscillator OSC.CTRL|=OSC_RC32KEN_bm; // Wait for the internal 32 kHz RC oscillator to stabilize while ((OSC.STATUS & OSC_RC32KRDY_bm)==0); // Internal 32 MHz RC oscillator initialization // Enable the internal 32 MHz RC oscillator OSC.CTRL|=OSC_RC32MEN_bm; // System Clock prescaler A division factor: 1 // System Clock prescalers B & C division factors: B:1, C:1 // ClkPer4: 32000.000 kHz // ClkPer2: 32000.000 kHz // ClkPer: 32000.000 kHz // ClkCPU: 32000.000 kHz n=(CLK.PSCTRL & (~(CLK_PSADIV_gm | CLK_PSBCDIV1_bm | CLK_PSBCDIV0_bm))) | CLK_PSADIV_1_gc | CLK_PSBCDIV_1_1_gc; CCP=CCP_IOREG_gc; CLK.PSCTRL=n; // Internal 32 MHz RC osc. calibration reference clock source: 32.768 kHz Internal Osc. OSC.DFLLCTRL&= ~(OSC_RC32MCREF_bm | OSC_RC2MCREF_bm); // Enable the autocalibration of the internal 32 MHz RC oscillator DFLLRC32M.CTRL|=DFLL_ENABLE_bm; // Wait for the internal 32 MHz RC oscillator to stabilize while ((OSC.STATUS & OSC_RC32MRDY_bm)==0); // Select the system clock source: 32 MHz Internal RC Osc. n=(CLK.CTRL & (~CLK_SCLKSEL_gm)) | CLK_SCLKSEL_RC32M_gc; CCP=CCP_IOREG_gc; CLK.CTRL=n; // Disable the unused oscillators: 2 MHz, external clock/crystal oscillator, PLL OSC.CTRL&= ~(OSC_RC2MEN_bm | OSC_XOSCEN_bm | OSC_PLLEN_bm); // Peripheral Clock output: Disabled PORTCFG.CLKEVOUT=(PORTCFG.CLKEVOUT & (~PORTCFG_CLKOUT_gm)) | PORTCFG_CLKOUT_OFF_gc; // Restore interrupts enabled/disabled state SREG=s; // Restore optimization for size if needed #pragma optsize_default } TWI_MASTER_INFO_t twie_master; void twie_init(void) { // General TWIE initialization // External Driver Interface: Off // SDA Hold: Off twi_init(&TWIE,false,false); // TWIE Master initialization // Master interrupt: Low Level // System Clock frequency: 32000000 Hz // SCL Rate: 100000 bps // Real SCL Rate: 100000 bps, Error: 0.0 % twi_master_init(&twie_master,&TWIE,TWI_MASTER_INTLVL_LO_gc, TWI_BAUD_REG(32000000,100000)); // TWIE Slave is disabled TWIE.SLAVE.CTRLA=0; } // TWIE Master interrupt service routine #pragma optsize- // optimize for speed interrupt [TWIE_TWIM_vect] void twie_master_isr(void) { twi_master_int_handler(&twie_master); } #pragma optsize_default void main(void) { unsigned char n; #pragma optsize- #asm("cli") // Low level interrupt: On // Round-robin scheduling for low level interrupt: On // Medium level interrupt: Off // High level interrupt: Off // The interrupt vectors will be placed at the start of the Application FLASH section n=(PMIC.CTRL & (~(PMIC_RREN_bm | PMIC_IVSEL_bm | PMIC_HILVLEN_bm | PMIC_MEDLVLEN_bm | PMIC_LOLVLEN_bm))) | PMIC_LOLVLEN_bm | PMIC_RREN_bm; CCP=CCP_IOREG_gc; PMIC.CTRL=n; // Set the default priority for round-robin scheduling PMIC.INTPRI=0x00; // Restore optimization for size if needed #pragma optsize_default system_clocks_init(); twie_init(); lcd_init(20); #asm("sei") PORTD.DIRSET=(1<<2); // led out lcd_putsf(" Microware\nThis is DS1307 Test"); while (1) { char buf[100],res; res=twi_master_trans(&twie_master,0xd0,0,0,(byte*)&t_d,7); sprintf(buf," %02u/%02u/%02u %02u:%02u:%02u\n%p ",bcd2bin(t_d.year),bcd2bin(t_d.month) ,bcd2bin(t_d.day),bcd2bin(t_d.hour),bcd2bin(t_d.minute),bcd2bin(t_d.sec),(res)?"ok":"error"); lcd_gotoxy(0,2); lcd_puts(buf); PORTD.OUTTGL=(1<<2); //led blinking delay_ms(300); } }
دیدگاه