08-09-2019, 14:00
Jeśli chodzi o podtrzymanie czasu to najpierw ustal jaki masz moduł, ewentualnie miernik w rączki, wyjmij baterię i sprawdź połączenia:
VCC1 i VCC2 nie powinno być połączone, nawet jeśli zasilisz moduł do pinu VCC na pinach baterii nie powinno być napięcia, jeśli jest napięcie bateria zostanie zniszczona. Dla akumulatorka powinien być układ ładowania zapewniający napięcie nie wyższe niż 4.2V.
Z kolei z włożoną baterią bez zasilania modułu na pinie VCC2 powinno być napięcie powyżej 2V podawane z baterii.
Ten sposób ustawienia czasu nie będzie dokładny, opóźnienia w czasie wgrywania są różne za każdym razem, najlepiej zrobić to używając UART. Przykład masz w bibliotece do DS3231 w szkicu rtc_ds3231.ino, kawałek funkcji:
Wysyłasz z monitora linijkę z czasem w formacie podanym w szkicu: "// TssmmhhWDDMMYYYY aka set time" i ustawisz czas z dokładnością poniżej 1s. W funkcji trzeba podmienić zmienne na format używany w tej innej bibliotece - trzeba rozgryźć co do czego.
A używając ustawienia czasu w setup pamiętaj, że za każdym razem szkic uruchamiając się od nowa ustawi czas zapisany we flash, w kodzie Arduino. Trzeba wgrać raz, ustawić czas, po czym od razu wgrać szkic kolejny, który korzysta tylko z odczytu czasu. Inaczej po każdym resecie czas również się zresetuje gdy uruchomisz szkic od nowa odłączając zasilanie czy robiąc reset przyciskiem.
No i jednak polecam moduł DS3231, wszystko masz na płytce i czas znacznie dokładniej jest odmierzany.
Jeśli oczywiście problemem nie jest to, że ten jest na I2C.
VCC1 i VCC2 nie powinno być połączone, nawet jeśli zasilisz moduł do pinu VCC na pinach baterii nie powinno być napięcia, jeśli jest napięcie bateria zostanie zniszczona. Dla akumulatorka powinien być układ ładowania zapewniający napięcie nie wyższe niż 4.2V.
Z kolei z włożoną baterią bez zasilania modułu na pinie VCC2 powinno być napięcie powyżej 2V podawane z baterii.
Ten sposób ustawienia czasu nie będzie dokładny, opóźnienia w czasie wgrywania są różne za każdym razem, najlepiej zrobić to używając UART. Przykład masz w bibliotece do DS3231 w szkicu rtc_ds3231.ino, kawałek funkcji:
Kod:
void parse_cmd(char *cmd, int cmdsize)
{
uint8_t i;
uint8_t reg_val;
char buff[BUFF_MAX];
struct ts t;
//snprintf(buff, BUFF_MAX, "cmd was '%s' %d\n", cmd, cmdsize);
//Serial.print(buff);
void parse_cmd(char *cmd, int cmdsize)
{
uint8_t i;
uint8_t reg_val;
char buff[BUFF_MAX];
struct ts t;
//snprintf(buff, BUFF_MAX, "cmd was '%s' %d\n", cmd, cmdsize);
//Serial.print(buff);
// TssmmhhWDDMMYYYY aka set time
if (cmd[0] == 84 && cmdsize == 16) {
//T355720619112011
t.sec = inp2toi(cmd, 1);
t.min = inp2toi(cmd, 3);
if (cmd[0] == 84 && cmdsize == 16) {
//T355720619112011
t.sec = inp2toi(cmd, 1);
t.min = inp2toi(cmd, 3);
...
A używając ustawienia czasu w setup pamiętaj, że za każdym razem szkic uruchamiając się od nowa ustawi czas zapisany we flash, w kodzie Arduino. Trzeba wgrać raz, ustawić czas, po czym od razu wgrać szkic kolejny, który korzysta tylko z odczytu czasu. Inaczej po każdym resecie czas również się zresetuje gdy uruchomisz szkic od nowa odłączając zasilanie czy robiąc reset przyciskiem.
No i jednak polecam moduł DS3231, wszystko masz na płytce i czas znacznie dokładniej jest odmierzany.
Jeśli oczywiście problemem nie jest to, że ten jest na I2C.
Miło być decenianym https://buycoffee.to/kaczakat