Что-бы понять "почему так происходит" советую посмотреть на содержимое функции setup и попытася понять что делает каждая строчка. Особенно строчки начинающиеся на RTS.
Можно взять словарик и перевести значение слов stop, set, start. И попытатся догадатся что делает каждая строчка и зачем.
Посмореть не напоминают ли что-то числа в этих строчках.
Кстати, возможно, стоит еще почитать arduino.ru/Reference особенно "операторы setup() и loop()" что-бы понимать чем они отличаются и "в чем их магия".
OneWire ds(3); // on pin 3
byte Tdata[12];
int rtc[7];
//int deviceaddress = 0x50;
int deviceaddress = 0x52;
int addr=0; //first address
int lastTime;
byte saveDate[6];
boolean full=false;
int ledPin = 13;
int outpin=3;
int val = 0; // variable to store the read value
void writeByte(unsigned int eeaddress, byte data ) {
int rdata = data;
Wire.beginTransmission(deviceaddress);
Wire.send((byte)(eeaddress >> 8)); // MSB
Wire.send((byte)(eeaddress & 0xFF)); // LSB
Wire.send(rdata);
Wire.endTransmission();
}
// WARNING: address is a page address, 6-bit end will wrap around
// also, data can be maximum of about 30 bytes, because the Wire library has a buffer of 32 bytes
void writePage(unsigned int eeaddresspage, byte* data, byte length ) {
Wire.beginTransmission(deviceaddress);
Wire.send((byte)(eeaddresspage >> 8)); // MSB
Wire.send((byte)(eeaddresspage & 0xFF)); // LSB
byte c;
for ( c = 0; c < length; c++)
Wire.send(data[c]);
Wire.endTransmission();
}
// maybe let's not read more than 30 or 32 bytes at a time!
void readBuffer(unsigned int eeaddress, byte *buffer, int length ) {
Wire.beginTransmission(deviceaddress);
Wire.send((byte)(eeaddress >> 8)); // MSB
Wire.send((byte)(eeaddress & 0xFF)); // LSB
Wire.endTransmission();
Wire.requestFrom(deviceaddress,length);
int c = 0;
for ( c = 0; c < length; c++ )
if (Wire.available()) buffer[c] = Wire.receive();
}
Ну и к чему этот кусок кода? Что-бы было побольше постов? Или решили собрать в этой ветке все примеры использования DS1307 которые можно нагуглить?
Кстати при вставке сюда кода очень желательно пользоватеся функцией "Вставить код" (вторая иконка на тулбаре-редактора, когда ответ набираете), а не втыкать его простым текстом. Сравните как выглядит ваш код, и как он должен выглядить (чуть ниже пример)
>я какта понимю
ну а нужно не "как-то", а нормально . Для чего предназначена и когда вызывается функция setup() разобрались? Доку почитали?
>но кто поможит понимать
словарик поможет. Англо-русский. Слова stop,set,start перевели? Тогда еще подскажу что SEC это сокращение от слова "second" (посмотрете все значения слова), MIN -> minute, HR -> hour, DOW -> "Day of Week", MTH -> month, YR -> Year, RTC -> "Real Time Clock"
Ну и сделав все это, попробуйте сами объянснить что делает каждая строчка в этом куске кода:
Ну и где в приведенный строчках есть цифра 2012? Или хотя-бы 12? Где ты " ставлю = 2012" во сне? А нужно в коде.
garmoska89 пишет:
ставится моя время
Тоже где-то в мыслях ставится?
garmoska89 пишет:
потом ставлю < 2012 и ето не делается
А вот это единственное, что действительно видно в коде.
Что значит "ето не делается"?
0 57 17 2 18 1 2010 - а это что? Или у вас 2010 больше 2012?
Вообщем давай, разбирайся когда вызывается setup(), сколько раз, что ты сейчас делаешь в ней делаешь с часами, и что ты не хочешь в ней делать, если верить твоему "1 раз настроить". Найди где ты сейчас делаешь "1 раз настроить" и почему ты его вызываешь раз за разом.
P.S. Ну и разберись таки с форматированием кода, когда вставляешь сюда. А то ни на строчку сослатся, ни читать нормально невозможно. По крайней мере я, не знаю как другие, буду дальше игнорировать такие посты.
RTC.stop();
RTC.set(DS1307_SEC,0); //время секунды 0
RTC.set(DS1307_MIN,38); // время минуты 38
RTC.set(DS1307_HR,11); // время часы 11
RTC.set(DS1307_DOW,3); // день недели 3(среда)
RTC.set(DS1307_DATE,29); //дата 29
RTC.set(DS1307_MTH,1); // месяц 1 (январь)
RTC.set(DS1307_YR,14); // год 2014
RTC.start();
После первой закрузки нужно данный код сделать комментарием
/*
http://www.ebay.com/itm/New-Arduino-I2C-RTC-DS1307-AT24C32-Real-Time-Clock-Module-AVR-ARM-PIC-/270849749804?pt=LH_DefaultDomain_0&hash=item3f0fe7332c#ht_2528wt_1397
#include <WProgram.h>
#include <Wire.h>
#include <DS1307.h>
int rtc[7];
int ledPin = 13;
void setup()
{
DDRC|=_BV(2) |_BV(3); // POWER:Vcc Gnd
PORTC |=_BV(3); // VCC PINC3
pinMode(ledPin, OUTPUT);
Serial.begin(9600);
RTC.stop();
RTC.set(DS1307_SEC,1);
RTC.set(DS1307_MIN,57);
RTC.set(DS1307_HR,17);
RTC.set(DS1307_DOW,2);
RTC.set(DS1307_DATE,18);
RTC.set(DS1307_MTH,1);
RTC.set(DS1307_YR,10);
RTC.start();
}
void loop()
{
RTC.get(rtc,true);
for(int i=0; i<7; i++)
{
Serial.print(rtc[i]);
Serial.print(" ");
}
Serial.println();
digitalWrite(ledPin, HIGH);
delay(500);
digitalWrite(ledPin, LOW);
delay(500);
}
резултат такой
0 57 17 2 18 1 2010
1 57 17 2 18 1 2010
2 57 17 2 18 1 2010
3 57 17 2 18 1 2010
4 57 17 2 18 1 2010
5 57 17 2 18 1 2010
6 57 17 2 18 1 2010
7 57 17 2 18 1 2010
8 57 17 2 18 1 2010
9 57 17 2 18 1 2010
10 57 17 2 18 1 2010
11 57 17 2 18 1 2010
12 57 17 2 18 1 2010
13 57 17 2 18 1 2010
14 57 17 2 18 1 2010
15 57 17 2 18 1 2010
после закрытия и снова открыть мониторинг сериял
0 57 17 2 18 1 2010
1 57 17 2 18 1 2010
2 57 17 2 18 1 2010
3 57 17 2 18 1 2010
4 57 17 2 18 1 2010
5 57 17 2 18 1 2010
6 57 17 2 18 1 2010
7 57 17 2 18 1 2010
8 57 17 2 18 1 2010
9 57 17 2 18 1 2010
10 57 17 2 18 1 2010
11 57 17 2 18 1 2010
12 57 17 2 18 1 2010
13 57 17 2 18 1 2010
14 57 17 2 18 1 2010
15 57 17 2 18 1 2010
как мне почитать время ?
1 раз настроить и после
мне нада опридилионое время или после ресета давал далше нужное время
помогите пожалуста разбираца
после ресета такуижую инф
0 57 17 2 18 1 2010
1 57 17 2 18 1 2010
2 57 17 2 18 1 2010
3 57 17 2 18 1 2010
4 57 17 2 18 1 2010
5 57 17 2 18 1 2010
6 57 17 2 18 1 2010
7 57 17 2 18 1 2010
8 57 17 2 18 1 2010
9 57 17 2 18 1 2010
10 57 17 2 18 1 2010
11 57 17 2 18 1 2010
12 57 17 2 18 1 2010
13 57 17 2 18 1 2010
14 57 17 2 18 1 2010
15 57 17 2 18 1 2010
http://www.radioddity.com/ebay/tool_nerd/20-019-108/nps3FD1.pdf
Что-бы понять "почему так происходит" советую посмотреть на содержимое функции setup и попытася понять что делает каждая строчка. Особенно строчки начинающиеся на RTS.
Можно взять словарик и перевести значение слов stop, set, start. И попытатся догадатся что делает каждая строчка и зачем.
Посмореть не напоминают ли что-то числа в этих строчках.
Кстати, возможно, стоит еще почитать arduino.ru/Reference особенно "операторы setup() и loop()" что-бы понимать чем они отличаются и "в чем их магия".
я какта понимю но кто поможит понимать ету устроиство пример
......................так инициализируца часы
..................... так делает то
#include <OneWire.h>
#include <WProgram.h>
/* DS18S20 Temperature chip i/o */
#include <Wire.h>
#include <DS1307.h>
OneWire ds(3); // on pin 3
byte Tdata[12];
int rtc[7];
//int deviceaddress = 0x50;
int deviceaddress = 0x52;
int addr=0; //first address
int lastTime;
byte saveDate[6];
boolean full=false;
int ledPin = 13;
int outpin=3;
int val = 0; // variable to store the read value
void writeByte(unsigned int eeaddress, byte data ) {
int rdata = data;
Wire.beginTransmission(deviceaddress);
Wire.send((byte)(eeaddress >> 8)); // MSB
Wire.send((byte)(eeaddress & 0xFF)); // LSB
Wire.send(rdata);
Wire.endTransmission();
}
// WARNING: address is a page address, 6-bit end will wrap around
// also, data can be maximum of about 30 bytes, because the Wire library has a buffer of 32 bytes
void writePage(unsigned int eeaddresspage, byte* data, byte length ) {
Wire.beginTransmission(deviceaddress);
Wire.send((byte)(eeaddresspage >> 8)); // MSB
Wire.send((byte)(eeaddresspage & 0xFF)); // LSB
byte c;
for ( c = 0; c < length; c++)
Wire.send(data[c]);
Wire.endTransmission();
}
byte readByte(unsigned int eeaddress ) {
byte rdata = 0xFF;
Wire.beginTransmission(deviceaddress);
Wire.send((byte)(eeaddress >> 8)); // MSB
Wire.send((byte)(eeaddress & 0xFF)); // LSB
Wire.endTransmission();
Wire.requestFrom(deviceaddress,1);
if (Wire.available()) rdata = Wire.receive();
return rdata;
}
// maybe let's not read more than 30 or 32 bytes at a time!
void readBuffer(unsigned int eeaddress, byte *buffer, int length ) {
Wire.beginTransmission(deviceaddress);
Wire.send((byte)(eeaddress >> 8)); // MSB
Wire.send((byte)(eeaddress & 0xFF)); // LSB
Wire.endTransmission();
Wire.requestFrom(deviceaddress,length);
int c = 0;
for ( c = 0; c < length; c++ )
if (Wire.available()) buffer[c] = Wire.receive();
}
void showRecord(void){
byte i=0;
byte Date[30];
Serial.print("Show Record:");
readBuffer(0, (byte *)Date, 30);
for(i=0;i<30;i++){
Serial.println(Date[i],DEC);
Serial.print(" ");
}
}
void showStr(void){
byte i=0;
byte Date[30];
Serial.print("Show Record: ");
readBuffer(0, (byte *)Date, 30);
for(i=0;i<30;i++){
Serial.print(Date[i],HEX);
}
Serial.println(" ");
}
void DS1302_SetOut(byte data ) {
Wire.beginTransmission(B1101000);
Wire.send(7); // LSB
Wire.send(data);
Wire.endTransmission();
}
byte DS1302_GetOut(void) {
byte rdata = 0xFF;
Wire.beginTransmission(B1101000);
Wire.send(7); // LSB
Wire.endTransmission();
Wire.requestFrom(B1101000,1);
if (Wire.available()) {
rdata = Wire.receive();
Serial.println(rdata,HEX);
}
return rdata;
}
void setup()
{
Serial.begin(9600);
DDRC|=_BV(2) |_BV(3);
PORTC |=_BV(3);
DS1302_SetOut(0x00);
RTC.get(rtc,true);
if(rtc[6]<2011 ){
RTC.stop();
RTC.set(DS1307_SEC,1);
RTC.set(DS1307_MIN,41);
RTC.set(DS1307_HR,11);
RTC.set(DS1307_DOW,7);
RTC.set(DS1307_DATE,26);
RTC.set(DS1307_MTH,2);
RTC.set(DS1307_YR,12);
RTC.start();
}
// writePage(0, (byte *)somedata, sizeof(somedata)); // write to EEPROM
pinMode(ledPin,OUTPUT);
pinMode(outpin,INPUT);
pinMode(4,OUTPUT);
digitalWrite(4, LOW);
byte testStr[]={1,2,3,4,5,6,7,8,9,10,11};
writePage(0, (byte *)testStr, sizeof(testStr));
//delay(100);
showStr();
}
void loop()
{
byte i;
byte present = 0;
unsigned int Temper=0;
float TT=0.0;
byte incomingByte =0;
if (Serial.available() > 0) {
incomingByte = Serial.read();
if(incomingByte==0xff){
DS1302_GetOut();
}else{
DS1302_SetOut(incomingByte);
DS1302_GetOut();
}
}
ds.reset();
ds.write(0xCC,1);
ds.write(0x44,1); // start conversion, with parasite power on at the end
RTC.get(rtc,true);
if(rtc[6]<2011){
RTC.stop();
RTC.set(DS1307_SEC,1);
RTC.set(DS1307_MIN,41);
RTC.set(DS1307_HR,11);
RTC.set(DS1307_DOW,7);
RTC.set(DS1307_DATE,26);
RTC.set(DS1307_MTH,2);
RTC.set(DS1307_YR,12);
RTC.start();
DS1302_SetOut(0x00);
}
for(int i=0; i<7; i++)
{
Serial.print(rtc[i]);
Serial.print(" ");
}
Serial.println();
digitalWrite(ledPin, HIGH);
digitalWrite(ledPin, HIGH); // sets the LED on
delay(500);
if(!full) digitalWrite(ledPin, LOW);
delay(500);
}
так разбирался работает
но есть ктота кто паможет по кокретнее с меня пиво
Ну и к чему этот кусок кода? Что-бы было побольше постов? Или решили собрать в этой ветке все примеры использования DS1307 которые можно нагуглить?
Кстати при вставке сюда кода очень желательно пользоватеся функцией "Вставить код" (вторая иконка на тулбаре-редактора, когда ответ набираете), а не втыкать его простым текстом. Сравните как выглядит ваш код, и как он должен выглядить (чуть ниже пример)
>я какта понимю
ну а нужно не "как-то", а нормально . Для чего предназначена и когда вызывается функция setup() разобрались? Доку почитали?
>но кто поможит понимать
словарик поможет. Англо-русский. Слова stop,set,start перевели? Тогда еще подскажу что SEC это сокращение от слова "second" (посмотрете все значения слова), MIN -> minute, HR -> hour, DOW -> "Day of Week", MTH -> month, YR -> Year, RTC -> "Real Time Clock"
Ну и сделав все это, попробуйте сами объянснить что делает каждая строчка в этом куске кода:
И объяснить когда вызывается этот кусок.
когда 1 раз запускаешь ставлю = 2012
RTC.stop();
RTC.set(DS1307_SEC,1);
RTC.set(DS1307_MIN,57);
RTC.set(DS1307_HR,17);
RTC.set(DS1307_DOW,2);
RTC.set(DS1307_DATE,18);
RTC.set(DS1307_MTH,1);
RTC.set(DS1307_YR,10);
RTC.start();
ставится моя время потом ставлю < 2012 и ето не делается
когда 1 раз запускаешь ставлю = 2012
Ну и где в приведенный строчках есть цифра 2012? Или хотя-бы 12? Где ты " ставлю = 2012" во сне? А нужно в коде.
ставится моя время
Тоже где-то в мыслях ставится?
потом ставлю < 2012 и ето не делается
А вот это единственное, что действительно видно в коде.
Что значит "ето не делается"?
0 57 17 2 18 1 2010 - а это что? Или у вас 2010 больше 2012?
Вообщем давай, разбирайся когда вызывается setup(), сколько раз, что ты сейчас делаешь в ней делаешь с часами, и что ты не хочешь в ней делать, если верить твоему "1 раз настроить". Найди где ты сейчас делаешь "1 раз настроить" и почему ты его вызываешь раз за разом.
P.S. Ну и разберись таки с форматированием кода, когда вставляешь сюда. А то ни на строчку сослатся, ни читать нормально невозможно. По крайней мере я, не знаю как другие, буду дальше игнорировать такие посты.
лучше помогите как взять даные с моего часа
http://nnm.ru/blogs/pencraft/arduino-i-chasy-na-mikrosheme-dallas-ds1307/
Вот здесь подробно рассмотрена работа с часами на Dallas DS1307.
Удачи!...
ППЦ.....
После первой закрузки нужно данный код сделать комментарием
/*
код
*/
потом загрузить по новой и работает
то есть никого не смутило как ТС каверкает слова? или он специально
Ну почему сразу специально?... Может русский для него не родной язык... тоже может быть.