Странное поведение RTC DS1302

satway
Offline
Зарегистрирован: 06.12.2014

Всем привет!

Первый вопрос по поводу подключения. В примере библиотеки для DS1302 указано, что подключать необходимо так:

CE pin    -> Arduino Digital 2

 I/O pin   -> Arduino Digital 3

 SCLK pin  -> Arduino Digital 4

Ну ок, попробовал - работает, установил время, все вроде бы гуд. Но когда возникла необходимость подключить часы к другим пинам (2,3,4 были заняты LCD), начались проблемы.Подключил к 10,11,12 - заработало с горем пополам. Оказываеться, есть разница к какому входу, какой выход часов подключать и в каком порядке в скетче указывать пины. Пропишешь DS1302 rtc(11,10,12) и уже не работает. Я так и не понял от чего это зависит. По аналогии с 2,3,4 где 3 это ШИМ, пробовал I/O pin на 9 и 10 подключать. Заработало только на 11. В итоге подключил так:

CE pin    -> Arduino Digital 10

 I/O pin   -> Arduino Digital 11

 SCLK pin  -> Arduino Digital 12

При таком подключении время выводиться и на серил и на LDC, но перепрошить время и дату не получаеться - просто никак не реагирует - сохраняет старые паарметры. 

Вопрос второй. Подключал RTC DS1302 к LCD 5110. Скетч ниже. Все заработало как нужно. Оставил на пару часов включенным. Питалось все от USB компа. Через некоторое время комп перешел в спящий режим и видимо это как-то повлияло на питание USB. В общем, часы зависли - время застыло на экране 5110. После выкл-вкл все вновь заработало, но время отставала на 20 мин (видимо, то время когда комп был в спящем режиме или с момента "зависания" часов). Батарейка в модуле новая, ранее часы подключал к 1602 время точно показывали недели 2. Правда все это было подключено к nano, а теперь подключено к UNO. Что это? программная ошибка? некорректное подключение ?

 

/*
 Vcc +3.3V порт на arduino
Pin 2 (SCLK) Arduino цифровой порт D3
Pin 3 (SDIN/MOSI) Arduino цифровой порт D4
Pin 4 (D/C) Arduino цифровой порт D5
Pin 5 (SCE) Arduino цифровой порт D7
Bl подсветка На землю arduino
Gnd На землю arduino
Pin 8 (RST) Arduino цифровой порт D6
 
 */
 
#include <PCD8544.h>
#include <DHT11.h>
#include <DS1302.h>
#include <Wire.h> 
int pin=11;
//RST - 10pin, DAT - 11pin, CLK - 12pin
DS1302 rtc(10, 11, 12);
//1 пин ICSP = 12 пин, 2 - 5В,6 - GND, 4 - 11 пин
DHT11 dht11(pin); 
 
static PCD8544 lcd;
 
 
void setup() {
  // запускаем дисплей и указываем его разрешение
  lcd.begin(84, 48);
  lcd.clear ();  
  rtc.halt(false);
  rtc.writeProtect(false);
}
 
void loop() {
  
  int err;
  float temp, humi;
  if((err=dht11.read(humi, temp))==0)
  
  lcd.setCursor(0, 0);
  lcd.print("Temp:");
  lcd.print(temp);
  
  lcd.setCursor(0, 1);
  lcd.print("Hum: ");
  lcd.print (humi);
  
  lcd.setCursor(0, 3);
  lcd.print(rtc.getTimeStr());
  
  lcd.setCursor(0, 4);
  lcd.print(rtc.getDOWStr(FORMAT_LONG));
  
  lcd.setCursor(0, 5);
  lcd.print(rtc.getDateStr());
  
  delay(1000);  
  
}
 
emc-problem.net
Offline
Зарегистрирован: 10.03.2015

satway пишет:
... Оказываеться, есть разница к какому входу, какой выход часов подключать и в каком порядке в скетче указывать пины. Пропишешь DS1302 rtc(11,10,12) и уже не работает. Я так и не понял от чего это зависит... 

Конечно есть разница. При инициализации DS1302 в скобках вы сообщаете библиотеке какому выводу Ардуино соответствует вывод модуля DS1302, причем в строгой очередности. Т.е. первое место для вывода соединенного с CLK, второе для DAT и третье для RST. Очевидно, что если заработало (10, 11, 12), то чтобы заработало (11, 10, 12) необходимо физически поменять местами проводники CLK и DAT.

satway пишет:
По аналогии с 2,3,4 где 3 это ШИМ, пробовал I/O pin на 9 и 10 подключать. Заработало только на 11.

ШИМ тут вообще не причем. Правильно надо указать библиотеке куда подключены выводы