Перестает работать дисплей при подключении библиотеки RTC
- Войдите на сайт для отправки комментариев
Чт, 09/07/2015 - 20:41
Сделал на базе Leonardo проветривание теплицы. Датчик температуры, три релюхи и актуатор. Пытаюсь теперь докрутить полив. Так вот при подключении библиотеки DS1307RTC перестает работать экран ЖК. Причем сама система работать продолжает. На температуру реагирует и форточку открывает-закрывает. Вот набор библиотек которые подключаю и использую.
#include <OneWire.h> #include <DallasTemperature.h> #include <LiquidCrystal.h> #include <Wire.h> #include <Time.h> //#include <DS1307RTC.h>
Если раскоментирую библиотеку RTC, то ЖК перестает показывать то что нужно. Модуль времени работает нормально при этом. Подскажите в чем проблема. Я уже сломался искать ответ.
А библа часом не с програмным SPI? RTC на каких пинах вешаете?
rtc вешаю на sda и на scl. Сначала тестировал на nano, там вешал на a4 a5. Про программный SPI я не в курсе к сожалению.
Если проверишь тестером, то эти пины будут звониться. У чипа один TWI-интерфейс, а развести его можно на много пинов.
а что делать то?
и при чем тут ЖК?
Ты кода больше давай. В хрустальный шар видно хреново, что ты там куда написал и натыкал.
Да мне не жалко)
#include <OneWire.h> #include <DallasTemperature.h> #include <LiquidCrystal.h> #include <Wire.h> #include <Time.h> //#include <DS1307RTC.h> // Data wire is plugged into port 2 on the Arduino #define ONE_WIRE_BUS 10 // Пины управления актуатором int actuatorPower = 7; int actuatorPlus = 8; int actuatorMinus = 9; int actuatorState = 0; int atxPower = 13; // Setup a oneWire instance to communicate with any OneWire devices (not just Maxim/Dallas temperature ICs) OneWire oneWire(ONE_WIRE_BUS); // Pass our oneWire reference to Dallas Temperature. DallasTemperature sensors(&oneWire); // initialize the library with the numbers of the interface pins LiquidCrystal lcd(12, 11, 5, 4, 3, 2); void setup(void) { // start serial port Serial.begin(9600); Serial.println("Dallas Temperature IC Control Library Demo"); // Start up the library sensors.begin(); //Выход реле питания pinMode(atxPower, OUTPUT); digitalWrite(atxPower,LOW); // set up the LCD's number of columns and rows: lcd.begin(8, 2); // Print a message to the LCD. //lcd.print("Привет!"); //Пробуем работать с актуатором pinMode(actuatorPower, OUTPUT); pinMode(actuatorPlus, OUTPUT); pinMode(actuatorMinus, OUTPUT); digitalWrite(actuatorPower,HIGH); calibrate(); // atuatorMoveForward(); // atuatorMoveBack(); //Выход реле питания digitalWrite(atxPower,HIGH); } void loop(void) { // call sensors.requestTemperatures() to issue a global temperature // request to all devices on the bus Serial.print("Requesting temperatures..."); sensors.requestTemperatures(); // Send the command to get temperatures Serial.println("DONE"); Serial.print("Temperature for the device 1 (index 0) is: "); Serial.println(sensors.getTempCByIndex(0)); if (sensors.getTempCByIndex(0)>30){ if (actuatorState!=1){ atuatorMoveForward(); } } else{ if (actuatorState!=0){ atuatorMoveBack(); } } lcd.setCursor(0, 0); lcd.print("T:"); lcd.setCursor(2, 0); lcd.print(sensors.getTempCByIndex(0)); delay(500); // tmElements_t tm; // // if (RTC.read(tm)) { // Serial.print("Ok, Time = "); // print2digits(tm.Hour); // Serial.write(':'); // print2digits(tm.Minute); // Serial.write(':'); // print2digits(tm.Second); // Serial.print(", Date (D/M/Y) = "); // Serial.print(tm.Day); // Serial.write('/'); // Serial.print(tm.Month); // Serial.write('/'); // Serial.print(tmYearToCalendar(tm.Year)); // Serial.println(); // } else { // if (RTC.chipPresent()) { // Serial.println("The DS1307 is stopped. Please run the SetTime"); // Serial.println("example to initialize the time and begin running."); // Serial.println(); // } else { // Serial.println("DS1307 read error! Please check the circuitry."); // Serial.println(); // } // delay(9000); // } } void actuatorPowerON(){ delay (100); digitalWrite(actuatorPower,LOW); delay (100); } void actuatorPowerOFF(){ delay (100); digitalWrite(actuatorPower,HIGH); delay (100); } void atuatorMoveBack(){ actuatorPowerON(); delay(4000); actuatorPowerOFF(); actuatorState = 0; } void atuatorMoveForward(){ digitalWrite(actuatorPlus,HIGH); digitalWrite(actuatorMinus,HIGH); delay(100); actuatorPowerON(); delay(4000); actuatorPowerOFF(); delay(100); digitalWrite(actuatorPlus,LOW); digitalWrite(actuatorMinus,LOW); actuatorState = 1; } void calibrate(){ delay(100); actuatorPowerON(); atuatorMoveBack(); } void print2digits(int number) { if (number >= 0 && number < 10) { Serial.write('0'); } Serial.print(number); }Я собственно и боялся код выкладывать) Не хотел пугать народ.
А в чем выражается неверная работа дисплея? Перестает работать после снятия комментария с 8 строки или всего кода?
Про программный SPI забейте, у вас дисплей напрямую разведен.
Ну вот и я подумал, что на SPI у меня одино устройство. Дисплей просто ничего не показывает в основном. Иногда на нем зависает последняя температура с последнего удачного запуска. Иногда все знакогенерирующие ячейки просто черным закрашиваются. Я так понял когда я перепрошиваю плату без снятия питания в памяти дисплея что-то остается и поэтому есть какие-то реакции. Если отключить питание и включить плохой вариант кода дисплей просто ничего не показывает.
Так у тебя и на SPI что-то висит?
Тогда зачем дергаешь пины с 11 по 13? Их как раз шина SPI использует.
13 - SCK
12 - MISO
11 - MOSI
Нельзя atxPower = 13; это клок SPI
И здесь LiquidCrystal lcd (12, 11, 5, 4, 3, 2)
На леонардо есть отдельные выходы scl sda и я к ним подключил. Получается, что если я подключаю что-то на них то 11,12 и 13 должны быть свободны?
Прозвоните тестером вашего леопарда.
У вас исчезнут все вопросы
Нельзя atxPower = 13; это клок SPI
И здесь LiquidCrystal lcd (12, 11, 5, 4, 3, 2)
Я вообще уже косею. Какой нафиг SPI? Откуда он тут вообще? Нафиг вы его сюда плетете?
Часы висят на i2c. Это 2 и 3 пин у леонардо.
и дисплей на них же болтается.
ПС смотришь вроде умные люди, что то понимают, собирают, и даже работает у них что то. А потом бац, порют чушь и даже не знаешь что им сказать.
В #10 он сам сказал, что у него что-то на SPI висит.
В #10 он сам сказал, что у него что-то на SPI висит.
А попробовать прочитать с 1 поста? Не?
Если у тебя хрустальный шар круче, то сам и помогай.
Если у тебя хрустальный шар круче, то сам и помогай.
А в чём тут помогать то? Человек на 2 и 3 пин вешает пачку проводов и это не вызывает у него никакого диссонанса. Ну тык флаг ему красный. И барабан.
Вы толпой заместо того что бы написать что подмоедини экран с 2 и 3 пина куда нибуть на свободные и в инициализации замени 2 и 3 на те пины. Читаете ему лекцию про spi.
Все гармонично.
Большое всем спасибо. Я как-то не подумал, что если выводы есть отдельными пинами, то они могут параллельно выведены на обычные цифровые. Теперь буду внимательнее читать описание выводов для каждой платы.