DSR323 permanenter neustart


hallo zusammen ,

ich verzweifle zurzeit komplett muss auch sagn das ich keine großen erfahrungen habe.

ich habe mit der arduino eine terra steuerung zusammen geschustert doch die rtc1307 ging mir zu ungenau jetzt habe ich mir die dsr 3234 zugelegt mein problem ist das sich die zeit nach jedem öffnen des seriellen monitors zurückstellt auf die eingespeicherte anfangszeit. mache ich falsch ???


arduinio atmega2560

sketch:
code: [select]
#include <spi.h>
const int  cs=8; //chip select

void setup() {
 serial.begin(9600);
 rtc_init();
 //day(1-31), month(1-12), year(0-99), hour(0-23), minute(0-59), second(0-59)
 settimedate(11,12,13,14,15,16);
}

void loop() {
 serial.println(readtimedate());
 delay(1000);
}
//=====================================
int rtc_init(){
 pinmode(cs,output); // chip select
 // start spi library:
 spi.begin();
 spi.setbitorder(msbfirst);
 spi.setdatamode(spi_mode3); // both mode 1 & 3 should work
 //set control register
 digitalwrite(cs, low);  
 spi.transfer(0x8e);
 spi.transfer(0x60); //60= disable osciallator , battery sq wave @1hz, temp compensation, alarms disabled
 digitalwrite(cs, high);
 delay(10);
}
//=====================================
int settimedate(int d, int mo, int y, int h, int mi, int s){
int timedate [7]={s,mi,h,0,d,mo,y};
for(int i=0; i<=6;i++){
if(i==3)
i++;
int b= timedate[i]/10;
int a= timedate[i]-b*10;
if(i==2){
if (b==2)
b=b00000010;
else if (b==1)
b=b00000001;
}
timedate[i]= a+(b<<4);
 
digitalwrite(cs, low);
spi.transfer(i+0x80);
spi.transfer(timedate[i]);        
digitalwrite(cs, high);
 }
}
//=====================================
string readtimedate(){
string temp;
int timedate [7]; //second,minute,hour,null,day,month,year
for(int i=0; i<=6;i++){
if(i==3)
i++;
digitalwrite(cs, low);
spi.transfer(i+0x00);
unsigned int n = spi.transfer(0x00);        
digitalwrite(cs, high);
int a=n & b00001111;    
if(i==2){
int b=(n & b00110000)>>4; //24 hour mode
if(b==b00000010)
b=20;        
else if(b==b00000001)
b=10;
timedate[i]=a+b;
}
else if(i==4){
int b=(n & b00110000)>>4;
timedate[i]=a+b*10;
}
else if(i==5){
int b=(n & b00010000)>>4;
timedate[i]=a+b*10;
}
else if(i==6){
int b=(n & b11110000)>>4;
timedate[i]=a+b*10;
}
else{
int b=(n & b01110000)>>4;
timedate[i]=a+b*10;
}
}
temp.concat(timedate[4]);
temp.concat("/") ;
temp.concat(timedate[5]);
temp.concat("/") ;
temp.concat(timedate[6]);
temp.concat("     ") ;
temp.concat(timedate[2]);
temp.concat(":") ;
temp.concat(timedate[1]);
temp.concat(":") ;
temp.concat(timedate[0]);
 return(temp);
}


pin belegung:
gnd - gnd
vcc - 3.3v
sqw - gnd
clk - 52
miso - 50
mosi - 51
ss - 8

batterie hab ich eingelegt.

vielen dank im voraus für eure hilfe.

der serielle monitor macht einen reset des controllers. das ist normal.

und in setup() machst du das:
code: [select]

settimedate(11,12,13,14,15,16);

zeile auskommentieren und schon passiert das nicht mehr


Arduino Forum > International > Deutsch (Moderator: uwefed) > DSR323 permanenter neustart


arduino

Comments

Popular posts from this blog

invalid use of void expresion in FlexiTimer2 library

error: a function-definition is not allowed here before '{' token

LED Strip Code