I²C Hardwire Operation Freezing Serial (и, вероятно, доска)

Нагисса
Пн, 04 мая 2015 г., 20:26
Привет,


Я переношу RTC в мини -библиотеку I²C от Arduino Nano в Maple Mini: https: // github.com/naguissa/rtclib

Я пытаюсь использовать аппаратные порты I²C и добавил вариант обработки частной переменной правильного провода:
#ifdef _VARIANT_ARDUINO_STM32_ HardWire RTCLIB_WIRE = HardWire(2); #else Wire RTCLIB_WIRE = Wire; #endif

Мадиас
Пн, 04 мая 2015 г., 21:09
HM, ОК, это мои строки кода I2C HW из моей адаптированной библиотеки SSD1306, может быть, вы что -то пропустили....
*.час: #define WIRE_WRITE HWIRE.write

Мадиас
Пн, 04 мая 2015 г., 21:28
Хорошо, я попробовал что -нибудь для вас (на моей доске Nucleo):
Настройка моего I2C OLED на i2C2
Настройка серийного (IS HW на Nucleo), Serial1 и Serial2
петля:
Нарисуйте некоторые вещи на OLED
сериал.Печать на всех трех портах.

Код работает и работает....
Результаты для Maple Mini:
Использование I2C1 (потому что I2C2 акции USART3)
Все работает так, как ожидалось, так что HW Wire и Serial (1-3) вместе работают для меня

Нагисса
Вторник 5 мая 2015 г., 3:21
Может быть, операция по выводу на объявлении, как объяснено здесь: ViewTopic.PHP?f = 15&t = 52&P = 222

Я проверю позже.

Rogerclark
Вторник 5 мая 2015 г., 3:30
Если проблема заключается в использовании GPIO в конструкторе, мы рассмотрим изменение, которое может исправить это, объявив PIN_MAP в __flash__ и const, чтобы компилятор переполнял массив, и он должен быть доступен для всех функций например. Pinmode и т.д

Однако нам нужно сначала провести некоторое тестирование, чтобы увидеть, есть ли это изменение каких -либо непреднамеренных побочных эффектов

Rogerclark
Чт, 7 мая 2015 г., 21:05
Надеемся, что это исправлено в филиале PIM_MAP-In-Flash Repo, которая, если я объединился с мастером после того, как у него было достаточное количество общественных испытаний

См. Раздел объявления

Нагисса
Чт, 7 мая 2015 г., 21:51
Я все еще изучаю в оригинальных заголовках клена. Похоже, что в чтении I2C Writes Writes не висит (чтобы проверить, работает ли это). Может быть, 400 кГц I2C не поддерживается моим RTC (400 кГц стандартный на Hardwire). Кроме того, я плохо программирую переменную провода, я должен изменить ее на указатель, указывая проволоку на AVR или New Hardwire (1 или 2) в STM32.

Rogerclark
Чт, 7 мая 2015 г., 21:53
Вы пробовали ветвь, которую я натолкнул вчера, с картой перехода на PIN?

Кстати, новый код также не мигает светодиода в утверждении
Однако количество мест, которые используют Assert, очень мало, поэтому кажется маловероятным, что код утверждается

Если это утверждение, попробуйте подключить USB к последовательному адаптеру к аппаратному сериалу, это может быть написано сообщение об ошибке

Нагисса
Пт, 8 мая 2015 г., 17:07
Код пересмотрен --> Не повезло
Сериал --> Ничего не показано. Это Rx & TX между Pins USB и SPI2, справа?

Нагисса
Пт, 8 мая 2015 г., 17:30
Просто следуя коду, я обнаружил, что ошибка здесь:

Файл: аппаратное обеспечение/arduino_stm32/stm32f1/cores/maple/libmaple/i2c.в
Функция: int32 i2c_master_xfer
Линия: Assert (Dev->state == i2c_state_idle);
Строка №: 228


Кажется, у меня есть последняя версия, так как светодиод Mini не мигает.

Нагисса
Пт, 8 мая 2015 г., 19:42
Я создал филиал и добавил текущие изменения, чтобы увидеть, сможете ли вы мне помочь: https: // github.com/naguissa/rtclib/tree/stm32-dev

Как тест, я использую это:
#include "Arduino.h" #ifdef _VARIANT_ARDUINO_STM32_ #include "HardWire.h" #else #include "Wire.h" #endif #include "RTCLib.h" RTCLib rtc; unsigned int pos; void setup() { delay (2000); Serial.begin(9600); Serial.println("Serial OK"); // Max position: 32767 for(pos = 0; pos < 100; pos++) { rtc.eeprom_write(pos, (unsigned char) pos % 256); } // Only used once, then disabled rtc.set(0, 42, 16, 6, 2, 5, 15); // RTCLib::set(byte second, byte minute, byte hour, byte dayOfWeek, byte dayOfMonth, byte month, byte year) pos = 0; #ifdef _VARIANT_ARDUINO_STM32_ Serial.println("Board: Maple"); #else Serial.println("Board: Other"); #endif } void loop() { Serial.println(); Serial.println("Loop!"); rtc.refresh(); Serial.print("RTC DateTime: "); Serial.print(rtc.year()); Serial.print('/'); Serial.print(rtc.month()); Serial.print('/'); Serial.print(rtc.day()); Serial.print(' '); Serial.print(rtc.hour()); Serial.print(':'); Serial.print(rtc.minute()); Serial.print(':'); Serial.print(rtc.second()); Serial.print(" DOW: "); Serial.print(rtc.dayOfWeek()); Serial.print(" ---- "); Serial.print(pos); Serial.print(": "); Serial.print(rtc.eeprom_read(pos)); Serial.println(); pos++; pos %= 1000; delay(99); }

Rogerclark
Пт 8 мая 2015 г. 22:10
Я уверен, почему вы используете аппаратное обеспечение вместо провода для i2c

Особенно для простого устройства, как RTC

Вы пробовали эскиз сканера I2C с сайта Arduino, он обычно работает и показывает, какие устройства подключены.

Вы можете попробовать это сначала и дайте мне знать, если он обнаружит ваши часы

Нагисса
Сб 9 мая 2015 г., 10:47
Я протестировал сканер I2C и хорошо работает.

После этого я изменил его, чтобы использовать «проволоку» или «Hardwire» в зависимости от определения (как моя библиотека, используя указатель). Проволока работает нормально, но Hardwire висит клен.

Насколько я понимаю, провод Maple был программным проводом, но я также думал, что он использовал другие контакты -19 и 20- (я проверил «как есть», без изменения соединений, и это сработало).


Я переоденусь, чтобы использовать проволоку, и это все....

Нагисса
Сб 9 мая 2015 г. 11:09
Спасибо всем.


Наконец я использовал стандартный провод, который работает на i2c1.

Он тестируется и объединено для Мастера: https: // github.com/naguissa/rtclib

Теперь давайте продолжим с Wi -Fi, SDCARD, датчиком почвы... Некоторые с общими либерациями, другие с самодельными. У меня был Wi -Fi и Sol -датчик, работавший в моем Nano (не в библиотеках) незадолго до смерти моего жесткого диска...

Rogerclark
Сб 09 мая 2015 г., 22:59
Могу ли я переупаковать репо и добавить его в раздел библиотеки ?

У вас есть пример кода, который мы могли бы включить в папку примеров

Спасибо

Нагисса
Солнце 10 мая 2015 г. 10:38
Нет проблем, это публика.

Например, это в основном тот, который опубликовал ранее:
#include "Arduino.h" #include "Wire.h" #include "RTCLib.h" RTCLib rtc; unsigned int pos; void setup() { delay (2000); Serial.begin(9600); Serial.println("Serial OK"); // Max position: 32767 for(pos = 0; pos < 1000; pos++) { rtc.eeprom_write(pos, (unsigned char) pos % 256); } // Only used once, then disabled // rtc.set(0, 42, 16, 6, 2, 5, 15); // RTCLib::set(byte second, byte minute, byte hour, byte dayOfWeek, byte dayOfMonth, byte month, byte year) pos = 0; #ifdef _VARIANT_ARDUINO_STM32_ Serial.println("Board: Maple"); #else Serial.println("Board: Other"); #endif } void loop() { rtc.refresh(); Serial.print("RTC DateTime: "); Serial.print(rtc.year()); Serial.print('/'); Serial.print(rtc.month()); Serial.print('/'); Serial.print(rtc.day()); Serial.print(' '); Serial.print(rtc.hour()); Serial.print(':'); Serial.print(rtc.minute()); Serial.print(':'); Serial.print(rtc.second()); Serial.print(" DOW: "); Serial.print(rtc.dayOfWeek()); Serial.print(" ---- "); Serial.print(pos); Serial.print(": "); Serial.print(rtc.eeprom_read(pos)); Serial.println(); pos++; pos %= 1000; delay(100); }

Rogerclark
Солнце 10 мая 2015 г., 10:48 утра
Спасибо

Я просто собирался войти в новую структуру библиотеки, где CPP и H находятся в подпапке, и есть файл описания и т. Д

Другое IDE начинает давать предупреждающие сообщения для некоторых людей (особенно Linux)

Спасибо

Роджер

Нагисса
Пн 11 мая 2015 г., 4:58 утра
Я переупаковал библиотеку с новым форматом библиотеки и добавленной программой примеров. В репо (мастер) и новой V2.0.1 релиз.

Rogerclark
Пн 11 мая 2015 г., 5:12
Спасибо

Я посмотрю, смогу ли я добавить его в качестве подмодуля GIT

Спасибо

Rogerclark
Пн 11 мая 2015 г., 10:37
Спасибо

Он был добавлен в виде подмодуля I.e Репо ссылается на ваше репо для файлов.