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:
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.
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:
zeile auskommentieren und schon passiert das nicht mehr
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
Post a Comment