DS1302 Co zekunde pokazuje 00:00:00

Masz problem, z którym nie możesz sobie poradzić? Pisz śmiało!
ODPOWIEDZ
damian1538
Młodszy majsterkowicz
Posty: 7
Rejestracja: 10 mar 2016, 22:40

DS1302 Co zekunde pokazuje 00:00:00

Post autor: damian1538 » 10 mar 2016, 22:44

Witajcie.
W swojego arduino podłączyłem DS1302 niby godzinę wskazuje ale....


Sob 06.08.2010 -- 12:00:49
xxxxxxxxx 00.00.2000 -- 00:00:00
Sob 06.08.2010 -- 12:00:51
xxxxxxxxx 00.00.2000 -- 00:00:00
Sob 06.08.2010 -- 12:00:53
xxxxxxxxx 00.00.2000 -- 00:00:00
Sob 06.08.2010 -- 12:00:55
xxxxxxxxx 00.00.2000 -- 00:00:00
Sob 06.08.2010 -- 12:00:57
xxxxxxxxx 00.00.2000 -- 00:00:00
Sob 06.08.2010 -- 12:00:59
xxxxxxxxx 00.00.2000 -- 00:00:00

Sekundę wskazuje dobrze a w następnej sekundzie wskazuje zera. Co z tym zrobić?

Macie jakąś inną bibliotekę lub pomysł?

Co miesiąc do wygrania nagrody o wartości ponad 1600 zł!


mgreta36
Majsterkowicz
Posty: 115
Rejestracja: 11 mar 2014, 22:20

Re: DS1302 Co zekunde pokazuje 00:00:00

Post autor: mgreta36 » 11 mar 2016, 00:04

Jasne, że mamy.
Awatar użytkownika
Marhef
Złota rączka
Posty: 1189
Rejestracja: 18 lis 2011, 02:18

Re: DS1302 Co zekunde pokazuje 00:00:00

Post autor: Marhef » 11 mar 2016, 09:40

@damian1538, wstaw kod. W szklanej kuli nie pokazuje mi, co masz w procku. Chyba muszę ją oddać do naprawy.
Zna ktoś dobry serwis kul szklanych? P.S. Próbowałem u szklarza, nie potrafił mi pomóc
damian1538
Młodszy majsterkowicz
Posty: 7
Rejestracja: 10 mar 2016, 22:40

Re: DS1302 Co zekunde pokazuje 00:00:00

Post autor: damian1538 » 11 mar 2016, 10:10

Ironia pierwsza klasa :P

Kod:

Kod: Zaznacz cały

// DS1302_Serial_Easy (C)2010 Henning Karlsen
// web: 
//
// A quick demo of how to use my DS1302-library to 
// quickly send time and date information over a serial link
//
// I assume you know how to connect the DS1302.
// DS1302:  CE pin    -> Arduino Digital 2
//          I/O pin   -> Arduino Digital 3
//          SCLK pin  -> Arduino Digital 4

#include <DS1302.h>

// Init the DS1302
DS1302 rtc(5, 6, 7);

void setup()
{
  // Set the clock to run-mode, and disable the write protection
  rtc.halt(false);
  rtc.writeProtect(false);
  
  // Setup Serial connection
  Serial.begin(9600);

  // The following lines can be commented out to use the values already stored in the DS1302
  rtc.setDOW(FRIDAY);        // Set Day-of-Week to FRIDAY
  rtc.setTime(12, 0, 0);     // Set the time to 12:00:00 (24hr format)
  rtc.setDate(6, 8, 2010);   // Set the date to August 6th, 2010
}

void loop()
{
  // Send Day-of-Week
  Serial.print(rtc.getDOWStr());
  Serial.print(" ");
  
  // Send date
  Serial.print(rtc.getDateStr());
  Serial.print(" -- ");

  // Send time
  Serial.println(rtc.getTimeStr());
  
  // Wait one second before repeating :)
  delay (1000);
}
Jak widać na załączonym obrazku to zwykły kod z przykładu.
Widać też że nie pokazuje tylko godzin w których sekundy to liczba parzysta.

Dodaje też kod biblioteki:

Kod: Zaznacz cały

/*
  DS1302.cpp - Arduino library support for the DS1302 Trickle Charge Timekeeping Chip
  Copyright (C)2015 Rinky-Dink Electronics, Henning Karlsen. All right reserved
  
  This library has been made to easily interface and use the DS1302 RTC with
  the Arduino.

  
  This library is free software; you can redistribute it and/or
  modify it under the terms of the CC BY-NC-SA 3.0 license.
  Please see the included documents for further information.

  Commercial use of this library requires you to buy a license that
  will allow commercial use. This includes using the library,
  modified or not, as a tool to sell products.

  The license applies to all part of the library including the 
  examples and tools supplied with the library.
*/
#include "DS1302.h"

#define REG_SEC		0
#define REG_MIN		1
#define REG_HOUR	2
#define REG_DATE	3
#define REG_MON		4
#define REG_DOW		5
#define REG_YEAR	6
#define REG_WP		7
#define REG_TCR		8

/* Public */

Time::Time()
{
	this->year = 2010;
	this->mon  = 1;
	this->date = 1;
	this->hour = 0;
	this->min  = 0;
	this->sec  = 0;
	this->dow  = 5;
}

DS1302_RAM::DS1302_RAM()
{
	for (int i=0; i<31; i++)
		cell[i]=0;
}

DS1302::DS1302(uint8_t ce_pin, uint8_t data_pin, uint8_t sclk_pin)
{
	_ce_pin = ce_pin;
	_data_pin = data_pin;
	_sclk_pin = sclk_pin;

	pinMode(_ce_pin, OUTPUT);
	pinMode(_sclk_pin, OUTPUT);
}

Time DS1302::getTime()
{
	Time t;
	_burstRead();
	t.sec	= _decode(_burstArray[0]);
	t.min	= _decode(_burstArray[1]);
	t.hour	= _decodeH(_burstArray[2]);
	t.date	= _decode(_burstArray[3]);
	t.mon	= _decode(_burstArray[4]);
	t.dow	= _burstArray[5];
	t.year	= _decodeY(_burstArray[6])+2000;
	return t;
}

void DS1302::setTime(uint8_t hour, uint8_t min, uint8_t sec)
{
	if (((hour>=0) && (hour<24)) && ((min>=0) && (min<60)) && ((sec>=0) && (sec<60)))
	{
		_writeRegister(REG_HOUR, _encode(hour));
		_writeRegister(REG_MIN, _encode(min));
		_writeRegister(REG_SEC, _encode(sec));
	}
}

void DS1302::setDate(uint8_t date, uint8_t mon, uint16_t year)
{
	if (((date>0) && (date<=31)) && ((mon>0) && (mon<=12)) && ((year>=2000) && (year<3000)))
	{
		year -= 2000;
		_writeRegister(REG_YEAR, _encode(year));
		_writeRegister(REG_MON, _encode(mon));
		_writeRegister(REG_DATE, _encode(date));
	}
}

void DS1302::setDOW(uint8_t dow)
{
	if ((dow>0) && (dow<8))
		_writeRegister(REG_DOW, dow);
}

char *DS1302::getTimeStr(uint8_t format)
{
	char *output= "xxxxxxxx";
	Time t;
	t=getTime();
	if (t.hour<10)
		output[0]=48;
	else
		output[0]=char((t.hour / 10)+48);
	output[1]=char((t.hour % 10)+48);
	output[2]=58;
	if (t.min<10)
		output[3]=48;
	else
		output[3]=char((t.min / 10)+48);
	output[4]=char((t.min % 10)+48);
	output[5]=58;
	if (format==FORMAT_SHORT)
		output[5]=0;
	else
	{
	if (t.sec<10)
		output[6]=48;
	else
		output[6]=char((t.sec / 10)+48);
	output[7]=char((t.sec % 10)+48);
	output[8]=0;
	}
	return output;
}

char *DS1302::getDateStr(uint8_t slformat, uint8_t eformat, char divider)
{
	char *output= "xxxxxxxxxx";
	int yr, offset;
	Time t;
	t=getTime();
	switch (eformat)
	{
		case FORMAT_LITTLEENDIAN:
			if (t.date<10)
				output[0]=48;
			else
				output[0]=char((t.date / 10)+48);
			output[1]=char((t.date % 10)+48);
			output[2]=divider;
			if (t.mon<10)
				output[3]=48;
			else
				output[3]=char((t.mon / 10)+48);
			output[4]=char((t.mon % 10)+48);
			output[5]=divider;
			if (slformat==FORMAT_SHORT)
			{
				yr=t.year-2000;
				if (yr<10)
					output[6]=48;
				else
					output[6]=char((yr / 10)+48);
				output[7]=char((yr % 10)+48);
				output[8]=0;
			}
			else
			{
				yr=t.year;
				output[6]=char((yr / 1000)+48);
				output[7]=char(((yr % 1000) / 100)+48);
				output[8]=char(((yr % 100) / 10)+48);
				output[9]=char((yr % 10)+48);
				output[10]=0;
			}
			break;
		case FORMAT_BIGENDIAN:
			if (slformat==FORMAT_SHORT)
				offset=0;
			else
				offset=2;
			if (slformat==FORMAT_SHORT)
			{
				yr=t.year-2000;
				if (yr<10)
					output[0]=48;
				else
					output[0]=char((yr / 10)+48);
				output[1]=char((yr % 10)+48);
				output[2]=divider;
			}
			else
			{
				yr=t.year;
				output[0]=char((yr / 1000)+48);
				output[1]=char(((yr % 1000) / 100)+48);
				output[2]=char(((yr % 100) / 10)+48);
				output[3]=char((yr % 10)+48);
				output[4]=divider;
			}
			if (t.mon<10)
				output[3+offset]=48;
			else
				output[3+offset]=char((t.mon / 10)+48);
			output[4+offset]=char((t.mon % 10)+48);
			output[5+offset]=divider;
			if (t.date<10)
				output[6+offset]=48;
			else
				output[6+offset]=char((t.date / 10)+48);
			output[7+offset]=char((t.date % 10)+48);
			output[8+offset]=0;
			break;
		case FORMAT_MIDDLEENDIAN:
			if (t.mon<10)
				output[0]=48;
			else
				output[0]=char((t.mon / 10)+48);
			output[1]=char((t.mon % 10)+48);
			output[2]=divider;
			if (t.date<10)
				output[3]=48;
			else
				output[3]=char((t.date / 10)+48);
			output[4]=char((t.date % 10)+48);
			output[5]=divider;
			if (slformat==FORMAT_SHORT)
			{
				yr=t.year-2000;
				if (yr<10)
					output[6]=48;
				else
					output[6]=char((yr / 10)+48);
				output[7]=char((yr % 10)+48);
				output[8]=0;
			}
			else
			{
				yr=t.year;
				output[6]=char((yr / 1000)+48);
				output[7]=char(((yr % 1000) / 100)+48);
				output[8]=char(((yr % 100) / 10)+48);
				output[9]=char((yr % 10)+48);
				output[10]=0;
			}
			break;
	}
	return output;
}

char *DS1302::getDOWStr(uint8_t format)
{
	char *output= "xxxxxxxxxx";
	Time t;
	t=getTime();
	switch (t.dow)
	{
		case MONDAY:
			output="Monday";
			break;
		case TUESDAY:
			output="Tuesday";
			break;
		case WEDNESDAY:
			output="Wednesday";
			break;
		case THURSDAY:
			output="Thursday";
			break;
		case FRIDAY:
			output="Friday";
			break;
		case SATURDAY:
			output="Saturday";
			break;
		case SUNDAY:
			output="Sunday";
			break;
	}     
	if (format==FORMAT_SHORT)
		output[3]=0;
	return output;
}

char *DS1302::getMonthStr(uint8_t format)
{
	char *output= "xxxxxxxxx";
	Time t;
	t=getTime();
	switch (t.mon)
	{
		case 1:
			output="January";
			break;
		case 2:
			output="February";
			break;
		case 3:
			output="March";
			break;
		case 4:
			output="April";
			break;
		case 5:
			output="May";
			break;
		case 6:
			output="June";
			break;
		case 7:
			output="July";
			break;
		case 8:
			output="August";
			break;
		case 9:
			output="September";
			break;
		case 10:
			output="October";
			break;
		case 11:
			output="November";
			break;
		case 12:
			output="December";
			break;
	}     
	if (format==FORMAT_SHORT)
		output[3]=0;
	return output;
}

void DS1302::halt(bool enable)
{
  uint8_t _reg = _readRegister(REG_SEC);
  _reg &= ~(1 << 7);
  _reg |= (enable << 7);
  _writeRegister(REG_SEC, _reg);
}

void DS1302::writeProtect(bool enable)
{
  uint8_t _reg = (enable << 7);
  _writeRegister(REG_WP, _reg);
}

void DS1302::setTCR(uint8_t value)
{
	_writeRegister(REG_TCR, value);
}

/* Private */

uint8_t DS1302::_readByte()
{
	pinMode(_data_pin, INPUT);

	uint8_t value = 0;
	uint8_t currentBit = 0;

	for (int i = 0; i < 8; ++i)
	{
		currentBit = digitalRead(_data_pin);
		value |= (currentBit << i);
		digitalWrite(_sclk_pin, HIGH);
		delayMicroseconds(1);
		digitalWrite(_sclk_pin, LOW);
	}
	return value;
}

void DS1302::_writeByte(uint8_t value)
{
	pinMode(_data_pin, OUTPUT);
	shiftOut(_data_pin, _sclk_pin, LSBFIRST, value);
}

uint8_t DS1302::_readRegister(uint8_t reg)
{
	uint8_t cmdByte = 129;
	cmdByte |= (reg << 1);

	uint8_t readValue;

	digitalWrite(_sclk_pin, LOW);
	digitalWrite(_ce_pin, HIGH);

	_writeByte(cmdByte);
	readValue = _readByte();
	
	digitalWrite(_ce_pin, LOW);

	return readValue;
}

void DS1302::_writeRegister(uint8_t reg, uint8_t value)
{
	uint8_t cmdByte = (128 | (reg << 1));

	digitalWrite(_sclk_pin, LOW);
	digitalWrite(_ce_pin, HIGH);

	_writeByte(cmdByte);
	_writeByte(value);

	digitalWrite(_ce_pin, LOW);
}

void DS1302::_burstRead()
{
	digitalWrite(_sclk_pin, LOW);
	digitalWrite(_ce_pin, HIGH);

	_writeByte(191);
	for (int i=0; i<8; i++)
	{
		_burstArray[i] = _readByte();
	}
	digitalWrite(_ce_pin, LOW);
}

uint8_t	DS1302::_decode(uint8_t value)
{
	uint8_t decoded = value & 127;
	decoded = (decoded & 15) + 10 * ((decoded & (15 << 4)) >> 4);
	return decoded;
}

uint8_t DS1302::_decodeH(uint8_t value)
{
  if (value & 128)
    value = (value & 15) + (12 * ((value & 32) >> 5));
  else
    value = (value & 15) + (10 * ((value & 48) >> 4));
  return value;
}

uint8_t	DS1302::_decodeY(uint8_t value)
{
	uint8_t decoded = (value & 15) + 10 * ((value & (15 << 4)) >> 4);
	return decoded;
}

uint8_t DS1302::_encode(uint8_t value)
{
	uint8_t encoded = ((value / 10) << 4) + (value % 10);
	return encoded;
}

void DS1302::writeBuffer(DS1302_RAM r)
{
	digitalWrite(_sclk_pin, LOW);
	digitalWrite(_ce_pin, HIGH);

	_writeByte(254);
	for (int i=0; i<31; i++)
	{
		_writeByte(r.cell[i]);
	}
	digitalWrite(_ce_pin, LOW);
}

DS1302_RAM DS1302::readBuffer()
{
	DS1302_RAM r;

	digitalWrite(_sclk_pin, LOW);
	digitalWrite(_ce_pin, HIGH);

	_writeByte(255);
	for (int i=0; i<31; i++)
	{
		r.cell[i] = _readByte();
	}
	digitalWrite(_ce_pin, LOW);

	return r;
}

void DS1302::poke(uint8_t addr, uint8_t value)
{
	if ((addr >=0) && (addr<=30))
	{
		addr = (addr * 2) + 192;

		digitalWrite(_sclk_pin, LOW);
		digitalWrite(_ce_pin, HIGH);

		_writeByte(addr);
		_writeByte(value);

		digitalWrite(_ce_pin, LOW);
	}
}

uint8_t DS1302::peek(uint8_t addr)
{
	if ((addr >=0) && (addr<=30))
	{
		addr = (addr * 2) + 193;

		uint8_t readValue;

		digitalWrite(_sclk_pin, LOW);
		digitalWrite(_ce_pin, HIGH);

		_writeByte(addr);
		readValue = _readByte();
		
		digitalWrite(_ce_pin, LOW);

		return readValue;
	}
	else
		return 0;
}

Awatar użytkownika
Marhef
Złota rączka
Posty: 1189
Rejestracja: 18 lis 2011, 02:18

Re: DS1302 Co zekunde pokazuje 00:00:00

Post autor: Marhef » 11 mar 2016, 11:10

Nie mogłem się powstrzymać xD nowy jesteś, dlatego tak łagodnie
To chyba nie jest ten kod. Wyświetla Ci "Sob", a takiej możliwości w kodzie programu nie ma. Powinno wyświetlić "Saturday" lub "Sat"
damian1538
Młodszy majsterkowicz
Posty: 7
Rejestracja: 10 mar 2016, 22:40

Re: DS1302 Co zekunde pokazuje 00:00:00

Post autor: damian1538 » 11 mar 2016, 11:21

Masz racje to jest moja mała edycja biblioteki. Poza zmianą nazw tygodnia nic nie edytowałem. Dodam też że problem występował od samego początku, nawet na bibliotece bez mojej ingerencji.
damian1538
Młodszy majsterkowicz
Posty: 7
Rejestracja: 10 mar 2016, 22:40

Re: DS1302 Co zekunde pokazuje 00:00:00

Post autor: damian1538 » 11 mar 2016, 18:55

Ale skoro w programie testowym na koncu programu jest funkcja "delay(1000)".
Wnioskuje wiec że odczyt jest tylko co około sekundę.
stiven
Złota rączka
Posty: 1596
Rejestracja: 13 maja 2014, 08:47
Lokalizacja: Zielona Góra

Re: DS1302 Co zekunde pokazuje 00:00:00

Post autor: stiven » 11 mar 2016, 19:42

No dziwna sprawa. Znalazłem na forum arduino po angielsku ten sam problem, ale nie ma rozwiązania http://forum.arduino.cc/index.php?topic=168361.0
Ktoś tam napisał, że po zmniejszeniu delaya 10 razy, 10 wyświetleń jest prawidłowa, a następne 10 nie. Czyli to ma jednak coś wspólnego z tym czy jest parzysta czy nieparzysta sekunda.
Tu jest inna biblioteka do tego układu https://github.com/msparks/arduino-ds1302 chyba trochę trudniejsza w użyciu, ale może będzie działać prawidłowo. Na tamtym forum nikt nie pisze o innej bibliotece, więc może się uda, że będzie dobrze.
stiven
Złota rączka
Posty: 1596
Rejestracja: 13 maja 2014, 08:47
Lokalizacja: Zielona Góra

Re: DS1302 Co zekunde pokazuje 00:00:00

Post autor: stiven » 12 mar 2016, 10:15

Argumentem jednej funkcji jest wynik działania innej funkcji (zwracana wartość). Teoretycznie, nawet jakby ta wywoływana funkcja w funkcji miała trwać 10 dni, to i tak musi się najpierw wykonać od początku do końca, żeby mogła ta pierwsza funkcja. Dlatego zapisywanie najpierw do zmiennej nie powinno mieć żadnego wpływu na działanie, ale w takich nietypowych sytuacjach warto sprawdzić każdą rzecz, przy okazji czasami można się czegoś nowego nauczyć. Pierwszą rzeczą, którą ja bym zrobił w takiej sytuacji, to właśnie zapisanie zwracanych wartości do zmiennych przed ich wyświetleniem ;)
damian1538
Młodszy majsterkowicz
Posty: 7
Rejestracja: 10 mar 2016, 22:40

Re: DS1302 Co zekunde pokazuje 00:00:00

Post autor: damian1538 » 12 mar 2016, 11:00

Biblioteka stivena tak samo dziala.
Sunday 2013-09-22 01:38:51
(unknown day) 2000-00-00 00:00:00
Sunday 2013-09-22 01:38:53
(unknown day) 2000-00-00 00:00:00
Sunday 2013-09-22 01:38:55
(unknown day) 2000-00-00 00:00:00
Sunday 2013-09-22 01:38:57
(unknown day) 2000-00-00 00:00:00
Sunday 2013-09-22 01:38:59
(unknown day) 2000-00-00 00:00:00
Sunday 2013-09-22 01:39:01
(unknown day) 2000-00-00 00:00:00
Sunday 2013-09-22 01:39:03
(unknown day) 2000-00-00 00:00:00
Sunday 2013-09-22 01:39:05


Może to problem z uszkodzonym zegarem?
Odczyt ze zmiennej to samo
stiven
Złota rączka
Posty: 1596
Rejestracja: 13 maja 2014, 08:47
Lokalizacja: Zielona Góra

Re: DS1302 Co zekunde pokazuje 00:00:00

Post autor: stiven » 12 mar 2016, 11:39

Spróbuj zasilanie 3,3V zamiast 5V.
damian1538
Młodszy majsterkowicz
Posty: 7
Rejestracja: 10 mar 2016, 22:40

Re: DS1302 Co zekunde pokazuje 00:00:00

Post autor: damian1538 » 12 mar 2016, 14:12

Sprawdziłem na samym początku ;/ Chciałem zbudować sterownik do mojego akwarium. Może macie pomysł jak programowo wybrnąć z problemu?
razorxx100
Starszy majsterkowicz
Posty: 329
Rejestracja: 1 sie 2014, 22:57

Re: DS1302 Co zekunde pokazuje 00:00:00

Post autor: razorxx100 » 12 mar 2016, 15:13

Zwykly warunek if ;)
przypisujesz np do zmiennej time odczytanie daty, nastepnie robisz if gdzie sprawdzasz czy pierwszy znak to (, jezeli nie to wyswietlasz date.
if(time[0] != "(") {
//wyswietlenie czasu.
}
damian1538
Młodszy majsterkowicz
Posty: 7
Rejestracja: 10 mar 2016, 22:40

Re: DS1302 Co zekunde pokazuje 00:00:00

Post autor: damian1538 » 12 mar 2016, 19:02

Zmienna z dniem tygodnia zaczytuje sie do test[1] ale nie porównuje do test[0].

Więc ludziska co źle zrobiłem w kodzie poniżej:


#include <DS1302.h>
DS1302 rtc(2, 3, 4);
const char* test[] =
{"xxxxxxxxx", ""};
void setup()
{
// Set the clock to run-mode, and disable the write protection
rtc.halt(false);
rtc.writeProtect(false);

// Setup Serial connection
Serial.begin(9600);

// The following lines can be commented out to use the values already stored in the DS1302
rtc.setDOW(FRIDAY); // Set Day-of-Week to FRIDAY
rtc.setTime(12, 0, 0); // Set the time to 12:00:00 (24hr format)
rtc.setDate(6, 8, 2010); // Set the date to August 6th, 2010
}

void loop()
{
test[1]=rtc.getDOWStr();
if(test[1] != test[0]) {

Serial.print(rtc.getDateStr());
Serial.print(" -- ");
Serial.println(rtc.getTimeStr());
}
// Wait one second before repeating :)
delay (10000);
}
stiven
Złota rączka
Posty: 1596
Rejestracja: 13 maja 2014, 08:47
Lokalizacja: Zielona Góra

Re: DS1302 Co zekunde pokazuje 00:00:00

Post autor: stiven » 12 mar 2016, 19:05

Tak się nie deklaruje tablicy znaków. Skorzystaj ze Stringa zamiast z tablicy znaków, dwóch osobnych.
stiven
Złota rączka
Posty: 1596
Rejestracja: 13 maja 2014, 08:47
Lokalizacja: Zielona Góra

Re: DS1302 Co zekunde pokazuje 00:00:00

Post autor: stiven » 12 mar 2016, 20:14

Możesz coś takiego zrobić, 1 string

Kod: Zaznacz cały

#include <DS1302.h>

// Init the DS1302
DS1302 rtc(5, 6, 7);

String dzien;

void setup()
{
  // Set the clock to run-mode, and disable the write protection
  rtc.halt(false);
  rtc.writeProtect(false);
  
  // Setup Serial connection
  Serial.begin(9600);

  // The following lines can be commented out to use the values already stored in the DS1302
  rtc.setDOW(FRIDAY);        // Set Day-of-Week to FRIDAY
  rtc.setTime(12, 0, 0);     // Set the time to 12:00:00 (24hr format)
  rtc.setDate(6, 8, 2010);   // Set the date to August 6th, 2010
}

void loop()
{
  dzien = rtc.getDOWStr();

  if(dzien != "xxxxxxxxx")
  {
    // Send Day-of-Week
    Serial.print(dzien);
    Serial.print(" ");
  
    // Send date
    Serial.print(rtc.getDateStr());
    Serial.print(" -- ");

    // Send time
    Serial.println(rtc.getTimeStr());
  
    // Wait one second before repeating :)
  }
  delay (1000);
}
razorxx100
Starszy majsterkowicz
Posty: 329
Rejestracja: 1 sie 2014, 22:57

Re: DS1302 Co zekunde pokazuje 00:00:00

Post autor: razorxx100 » 12 mar 2016, 20:33

nie wiem co ty kombinujesz bo podalem ci dokladny przyklad..

Kod: Zaznacz cały

#include <DS1302.h>
DS1302 rtc(2, 3, 4);
const char* test[] =
{"xxxxxxxxx", ""};
void setup()
{
// Set the clock to run-mode, and disable the write protection
rtc.halt(false);
rtc.writeProtect(false);

// Setup Serial connection
Serial.begin(9600);

// The following lines can be commented out to use the values already stored in the DS1302
rtc.setDOW(FRIDAY); // Set Day-of-Week to FRIDAY
rtc.setTime(12, 0, 0); // Set the time to 12:00:00 (24hr format)
rtc.setDate(6, 8, 2010); // Set the date to August 6th, 2010
}

void loop()
{
test=rtc.getDOWStr();
if(test[0] != "(") {

Serial.print(rtc.getDateStr());
Serial.print(" -- ");
Serial.println(rtc.getTimeStr());
}
// Wait one second before repeating :)
delay (10000);
}
stiven
Złota rączka
Posty: 1596
Rejestracja: 13 maja 2014, 08:47
Lokalizacja: Zielona Góra

Re: DS1302 Co zekunde pokazuje 00:00:00

Post autor: stiven » 12 mar 2016, 21:01

razorxx100 tak by musiał wyglądać ten kod, żeby był prawidłowy

Kod: Zaznacz cały

#include <DS1302.h>
DS1302 rtc(2, 3, 4);

char* test;
void setup()
{
// Set the clock to run-mode, and disable the write protection
rtc.halt(false);
rtc.writeProtect(false);

// Setup Serial connection
Serial.begin(9600);

// The following lines can be commented out to use the values already stored in the DS1302
rtc.setDOW(FRIDAY); // Set Day-of-Week to FRIDAY
rtc.setTime(12, 0, 0); // Set the time to 12:00:00 (24hr format)
rtc.setDate(6, 8, 2010); // Set the date to August 6th, 2010
}

void loop()
{
test=rtc.getDOWStr();
if(test[0] != 'x') {

Serial.print(rtc.getDateStr());
Serial.print(" -- ");
Serial.println(rtc.getTimeStr());
}
// Wait one second before repeating :)
delay (10000);
}
razorxx100
Starszy majsterkowicz
Posty: 329
Rejestracja: 1 sie 2014, 22:57

Re: DS1302 Co zekunde pokazuje 00:00:00

Post autor: razorxx100 » 12 mar 2016, 21:54

Ostatni z jego przykladow przy bledzie wysylal
(unknown day) 2000-00-00 00:00:00
Wiec to co wyslalem powinno dzialac.
stiven
Złota rączka
Posty: 1596
Rejestracja: 13 maja 2014, 08:47
Lokalizacja: Zielona Góra

Re: DS1302 Co zekunde pokazuje 00:00:00

Post autor: stiven » 12 mar 2016, 22:14

No tak, zmieniłem ( na x, ale też zmieniłem inne rzeczy, które były źle i kod by się nie skompilował.
ODPOWIEDZ

Strony partnerskie: