PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : TWI Echtzeituhr DS1307 ansteuern



BurningWave
13.02.2009, 19:10
Hallo,

ich versuche hier gerade in der Echtzeituhr DS1307 ein Datum mit Zeit zu speichern (1.1.09 0:0:0), das ich dann erstmal zum testen mit dem Terminalprogramm von myAVR auslesen möchte. Doch leider funktionier das nicht ganz, da das Datum und die Zeit nicht in ihr gespeichert werden (es wird noch das zuvor gespeicherte Datum mit der zuvor gespeicherten Zeit angezeigt).

Hier ist mal mein Code. Es würde mich freuen, wenn mir jemand bei der Fehlersuche helfen könnte.



#define _C_

#define LCD_PORT PORTD
#define LCD_PORT_DDR DDRD
#define LCD_LIGHT
#define LCD_LIGHT_PORT PORTB
#define LCD_LIGHT_PORT_DDR DDRB
#define LCD_LIGHT_PORT_PIN 1

#define TWI_FAKTOR 10

unsigned char text[7];

#include <avr/io.h>
#include "D:\Eigene Programme und Dateien\ATMEL\Eigene Projekte\def.h"
#include "D:\Eigene Programme und Dateien\ATMEL\Eigene Projekte\lcd.h"

typedef struct
{
int Sekunde,Minute,Stunde,Tag,Monat,Jahr;
}time;

void twi_init()
{
TWSR=0;
TWBR=TWI_FAKTOR;
TWAR=0;
}

void rtc_init(time x)
{
TWCR |= (1 << TWSTA) | (1 << TWEN) | (1 << TWINT);
loop_until_bit_is_set(TWCR,TWINT);
cbi(TWCR,TWSTA);
TWDR=0b11010000;
TWCR |= (1 << TWEA) | (1 << TWEN) | (1 << TWINT);
loop_until_bit_is_set(TWCR,TWINT);
TWDR=0;
TWCR |= (1 << TWEN) | (1 << TWINT);
loop_until_bit_is_set(TWCR,TWINT);
TWDR=(x.Sekunde);
cbi(TWDR,7);
TWCR |= (1 << TWEN) | (1 << TWINT);
loop_until_bit_is_set(TWCR,TWINT);
TWDR=x.Minute;
TWCR |= (1 << TWEN) | (1 << TWINT);
loop_until_bit_is_set(TWCR,TWINT);
TWDR=x.Stunde;
TWCR |= (1 << TWEN) | (1 << TWINT);
loop_until_bit_is_set(TWCR,TWINT);
TWDR=x.Tag;
TWCR |= (1 << TWEN) | (1 << TWINT);
loop_until_bit_is_set(TWCR,TWINT);
TWDR=x.Monat;
TWCR |= (1 << TWEN) | (1 << TWINT);
loop_until_bit_is_set(TWCR,TWINT);
TWDR=x.Jahr;
TWCR |= (1 << TWEN) | (1 << TWINT);
loop_until_bit_is_set(TWCR,TWINT);
cbi(TWCR,TWEA);
TWCR |= (1 << TWSTO) | (1 << TWEN) | (1 << TWINT);
loop_until_bit_is_set(TWCR,TWINT);
cbi(TWCR,TWEN);
}

void main()
{
time t={0,0,0,1,1,9};
twi_init();
rtc_init(t);
}


mfg
_R2D2