Пять
Ср 13 декабря 2017 г. 10:46 утра
Привет,
У меня проблемы с несколькими библиотеками I2C в одном эскизе на STM32F103
Отдельно они работают:
Adafruit SSD1306
Adarfuit Vl6180
I2c все что -нибудь
Они работают вместе в Arduino Nano или Mega.
Почему это? Как это можно сделать?
У меня проблемы с несколькими библиотеками I2C в одном эскизе на STM32F103
Отдельно они работают:
Adafruit SSD1306
Adarfuit Vl6180
I2c все что -нибудь
Они работают вместе в Arduino Nano или Mega.
Почему это? Как это можно сделать?
Rogerclark
Ср 13 декабря 2017 г. 10:51
Какое ядро вы используете ?
Пять
Ср 13 декабря 2017 г. 13:12
Последнее ядро arduino_stm32
OLED начинается с логотипа Adafruit и остается там, после этого ничего не работает.
SSD1306 с кодом VL6180 здесь:
OLED начинается с логотипа Adafruit и остается там, после этого ничего не работает.
SSD1306 с кодом VL6180 здесь:
#include
#include
#include
#include
#define OLED_RESET 4
Adafruit_SSD1306 display(OLED_RESET);
#if (SSD1306_LCDHEIGHT != 64)
#error("Height incorrect, please fix Adafruit_SSD1306.h!");
#endif
#include "Adafruit_VL6180X.h"
Adafruit_VL6180X vl = Adafruit_VL6180X();
void setup() {
Serial.begin(115200);
display.begin(SSD1306_SWITCHCAPVCC, 0x3C);
display.display();
delay(2000);
vl.begin();
Serial.println("Sensor found!");
}
void loop() {
display.clearDisplay();
display.setTextSize(2);
display.setTextColor(WHITE);
display.setCursor(0, 0);
display.println(vl.readRange());
display.display();
}
Стивестронг
Ср 13 декабря 2017 г. 13:18
Поместите несколько серийных выходных линий, чтобы обнаружить, что является линией, где висит эскиз.
Mrburnette
Ср 13 декабря 2017 г. 14:42
[Пять - Ср 13 декабря 2017 г. 10:46] - Привет, у меня проблемы с несколькими библиотеками I2C в одном эскизе на STM32F103Ядро STM32Duino не совпадает с официальным ядром AVR. Еще в прошлом году AVR Core все еще не выполняла программное обеспечение I2C, если моя память служит мне правильно. Таким образом, реализация I2C «блокирует» реализацией.
Отдельно они работают:
Adafruit SSD1306
Adarfuit Vl6180
I2c все что -нибудь
Они работают вместе в Arduino Nano или Mega. Почему это? Как это можно сделать?
Реализация Leaflabs была также программным обеспечением i2c (блокировка), даже если в STM32F1XX есть выделенная периферийная машина I2C. Мне пришлось использовать Google, чтобы добраться до следующего уровня, но кажется, что ядро STM32Duino F1 было изменено прошлым летом, а по умолчанию теперь есть оборудование i2c, то есть не блокировка.
Ссылка: ViewTopic.PHP?t = 2408
- Поэтому вы можете настроить самое последнее ядро для использования программного обеспечения I2C.
- Или вы можете «регрессировать» код на GitHub, чтобы доставить изображение загрузки до изменения.
Для будущего справки, пожалуйста Не предполагайте, что ядро STM32F1XX STM32DUINO будет работать так же, как и официальное ядро (ы) Arduino Core (ы) ... Некоторые серьезные усилия поступили в то, чтобы переносить оригинальное ядро Leaflabs, чтобы быть совместимым с нынешним ардуиноидом, и некоторые серьезные усилия пришли к манипулированию ядром STM32F1XX, чтобы соответствовать официальной совместимости Arduino. Тем не менее, два ядра очень разные в базовой кодовой базе. И этот форум оставляет за собой возможность изменить основную функциональность, чтобы лучше всего использовать более предварительный архитектурный дизайн устройств STM32FXXX.
Луча
Пять
Чт 14 декабря 2017 г. 9:22 утра
[Стивестронг - Ср 13 декабря 2017 г. 13:18] - Поместите несколько серийных выходных линий, чтобы обнаружить, что является линией, где висит эскиз.Хорошо, я сделал это. Он не печатает в настройке или петле.
И миррнетте. Спасибо за ваш ответ, кодирование для меня вроде нового, и я постараюсь прочитать эту ветку.
Rogerclark
Чт 14 декабря 2017 г. 9:54 утра
Похоже, что код может сбояться перед настройкой ().
Это обычно вызвано конструкторами в библиотеках, пытающихся использовать GPIO или I2C или SPI и т. Д.
Это обычно вызвано конструкторами в библиотеках, пытающихся использовать GPIO или I2C или SPI и т. Д.
Стивестронг
Чт 14 декабря 2017 г. 12:25
Вы можете попробовать добавить аналогичные контрольные точки:
void setup() {
Serial.begin(115200);
while (!Serial) ; // wait for a serial connection via USB
delay(1000);
Serial.println("SSD1306 begin"); // check point
display.begin(SSD1306_SWITCHCAPVCC, 0x3C);
display.display();
delay(2000);
Serial.println("VL begin"); // check point
vl.begin();
Serial.println("Sensor found!");
}
Пять
Пт 15 декабря 2017 г. 8:40
При этом () он теперь печатает только «SSD1306 начинается» и «VL Begin». Не печатает датчик!"Или любые другие маркеры, которые я добавил в Loop.
Стивестронг
Пт 15 декабря 2017 г. 22:38
Таким образом, кажется, что он висит в функции vl6180 begin ().
Где ты взял библиотеку? Любая ссылка?
Где ты взял библиотеку? Любая ссылка?
Пять
Сб 16 декабря 2017 г. 9:01
Adafruit Vl6180 - https: // github.com/adafruit/adafruit_vl6180x
Adafruit SSD1306 STM32 - https: // github.com/rogerclarkmelbourne/ ... it_ssd1306
и i2c все что -нибудь. Та же проблема. Повешивает с SSD1306 или VL6180
http: // www.Гаммон.компонент.Au/Forum/?ID = 10896&Ответить = 8#Ответ8
Каждый из них работает в одиночку.
Adafruit SSD1306 STM32 - https: // github.com/rogerclarkmelbourne/ ... it_ssd1306
и i2c все что -нибудь. Та же проблема. Повешивает с SSD1306 или VL6180
http: // www.Гаммон.компонент.Au/Forum/?ID = 10896&Ответить = 8#Ответ8
Каждый из них работает в одиночку.
Стивестронг
Сб, 16 декабря 2017 г. 9:23
Вы пробовали пример i2c_scanner, когда оба подключены?
Они связаны с теми же линиями I2C?
Вы протестировали пример Adafruit OLED? https: // github.com/adafruit/adafruit_vl ... x_oled.Ино
Кажется, что он использует те же ICS, что и вы.
Они связаны с теми же линиями I2C?
Вы протестировали пример Adafruit OLED? https: // github.com/adafruit/adafruit_vl ... x_oled.Ино
Кажется, что он использует те же ICS, что и вы.
Пять
Сб 16 декабря 2017 г. 13:06
Да. Сканер I2C находит 0x29 и 0x3c.
Да. Те же дорожки B6 и B7 на STM32F103 "Bluebill"
Да. Не работать с оригинальным SSD1306 или с той версией STM32.
Да. Те же дорожки B6 и B7 на STM32F103 "Bluebill"
Да. Не работать с оригинальным SSD1306 или с той версией STM32.
Стивестронг
Сб 16 декабря 2017 г. 16:29
У вас есть 4K7 подтягивающие резисторы, подключенные к линиям I2C и 3.3В?
Эскиз примера Adafruit отличается от вашего, экземпляр VL объявляется перед OLED: https: // github.com/adafruit/adafruit_vl ... редакция.Ино#L16
Так что попробуйте этот пример и сообщите нам, где он висит.
Эскиз примера Adafruit отличается от вашего, экземпляр VL объявляется перед OLED: https: // github.com/adafruit/adafruit_vl ... редакция.Ино#L16
Так что попробуйте этот пример и сообщите нам, где он висит.
Пять
Солнце 17 декабря 2017 г. 10:27 утра
Да, я попробовал. Но я попробовал еще раз, теперь с подтягивающими резисторами.
Оригинальный VL6180X_OLED.Ино:
Не было 4K7
Без - вешать после «Адафрут VL6180X тест!"
2K - висеть после "Adafruit Vl6180x теста!"
4K - висеть после "Adafruit Vl6180x теста!"
10K - висеть после "Adafruit Vl6180x теста!"
Модифицированный VL6180X_OLED.ino с adafruit_ssd1306_stm32.H (adafruit_ssd1306.H не работает):
С этим кодом:
Оригинальный VL6180X_OLED.Ино:
Не было 4K7
Без - вешать после «Адафрут VL6180X тест!"
2K - висеть после "Adafruit Vl6180x теста!"
4K - висеть после "Adafruit Vl6180x теста!"
10K - висеть после "Adafruit Vl6180x теста!"
Модифицированный VL6180X_OLED.ino с adafruit_ssd1306_stm32.H (adafruit_ssd1306.H не работает):
С этим кодом:
#include
#include
#include
#include
#include
#include "Adafruit_VL6180X.h"
Adafruit_VL6180X vl = Adafruit_VL6180X();
#define OLED_RESET 4
Adafruit_SSD1306 display(OLED_RESET);
#if (SSD1306_LCDHEIGHT != 64)
#error("Height incorrect, please fix Adafruit_SSD1306.h!");
#endif
void setup()
{
Serial.begin(115200);
while (!Serial) ; // wait for a serial connection via USB
delay(1000);
Serial.println("SSD1306 begin"); // check point
display.begin(SSD1306_SWITCHCAPVCC, 0x3C); // initialize with the I2C addr 0x3C (for the 128x32)
// init done
display.display();
delay(1000);
Serial.println("Adafruit VL6180x test!");
if (! vl.begin()) {
Serial.println("Failed to find sensor");
while (1);
}
Serial.println("Sensor found!");
// text display big!
display.setTextSize(4);
display.setTextColor(WHITE);
}
void loop()
{
Serial.println("In loop"); // check point
float lux = vl.readLux(VL6180X_ALS_GAIN_5);
Serial.print("Lux: "); Serial.println(lux);
uint8_t range = vl.readRange();
uint8_t status = vl.readRangeStatus();
if (status == VL6180X_ERROR_NONE) {
Serial.print("Range: "); Serial.println(range);
display.clearDisplay();
display.setCursor(0, 0);
display.print(range);
display.print("mm");
display.display();
Serial.println();
} else {
display.display();
display.clearDisplay();
return;
}
// Some error occurred, print it out!
if ((status >= VL6180X_ERROR_SYSERR_1) && (status <= VL6180X_ERROR_SYSERR_5)) {
Serial.println("System error");
}
else if (status == VL6180X_ERROR_ECEFAIL) {
Serial.println("ECE failure");
}
else if (status == VL6180X_ERROR_NOCONVERGE) {
Serial.println("No convergence");
}
else if (status == VL6180X_ERROR_RANGEIGNORE) {
Serial.println("Ignoring range");
}
else if (status == VL6180X_ERROR_SNR) {
Serial.println("Signal/Noise error");
}
else if (status == VL6180X_ERROR_RAWUFLOW) {
Serial.println("Raw reading underflow");
}
else if (status == VL6180X_ERROR_RAWOFLOW) {
Serial.println("Raw reading overflow");
}
else if (status == VL6180X_ERROR_RANGEUFLOW) {
Serial.println("Range reading underflow");
}
else if (status == VL6180X_ERROR_RANGEOFLOW) {
Serial.println("Range reading overflow");
}
delay(10);
}
ZMEMW16
Солнце 17 декабря 2017 г. 13:17
это проволока.H охраняется для нескольких включает ?
Что такое такта I2C ?
Есть ли у любого из оборудования регуляторы, вы кормите их 5 В или 3V3 ?
У вас есть автобусный анализатор ?
Стивен
Что такое такта I2C ?
Есть ли у любого из оборудования регуляторы, вы кормите их 5 В или 3V3 ?
У вас есть автобусный анализатор ?
Стивен
Пять
Пн, 18 декабря 2017 г., 11:45
к ZMEMW16
1. Можно ли быть немного более конкретным?
2. Я ничего не менял. В каком файле я могу его посмотреть?
3. Да, у обоих есть 3.3 В до 5 В. Я использую 3.3V дополнительный источник питания с подключенными землями.
4. Нет, я не делаю.
1. Можно ли быть немного более конкретным?
2. Я ничего не менял. В каком файле я могу его посмотреть?
3. Да, у обоих есть 3.3 В до 5 В. Я использую 3.3V дополнительный источник питания с подключенными землями.
4. Нет, я не делаю.
ZMEMW16
Пн, 18 декабря 2017 г. 16:16
Обычно обернуть содержимое файла включения в IF-NDEF, чтобы предотвратить двойное включение
#ifndef _TWOWIRE_H_
#define _TWOWIRE_H_
#include "utility/WireBase.h"
#include "wirish.h"
#include
class TwoWire : public WireBase {
private:
i2c_dev* sel_hard;
uint8 dev_flags;
protected:
/*
* Processes the incoming I2C message defined by WireBase to the
* hardware. If an error occured, restart the I2C device.
*/
uint8 process(uint8);
uint8 process();
public:
/*
* Check if devsel is within range and enable selected I2C interface with
* passed flags
*/
TwoWire(uint8, uint8 = 0);
// blah blah blah rest of file etc
#endif
Пять
Вторник 19 декабря 2017 г. 10:20 утра
Датчик и OLED до 5 В толерантны. Я использую 3.3 В постоянного питания на них. STM32F103 Bluebill использует USB -напряжение и основания между STM32F103 и 3.3V внешний источник питания.
Да, они работают вместе. Я проверил их вместе с Arduino Nano и Mega, без резисторов.
Да, они также работают отдельно на Nano и Mega, без резисторов.
Да, они работают отдельно на STM32F103, без резисторов.
Да, они работают вместе. Я проверил их вместе с Arduino Nano и Mega, без резисторов.
Да, они также работают отдельно на Nano и Mega, без резисторов.
Да, они работают отдельно на STM32F103, без резисторов.
Стивестронг
Вт 19 декабря 2017 г. 11:52 утра
Я думаю, что вам понадобится осциллограф или логический анализатор, чтобы узнать основную причину.
Вы должны удалить
Вы должны удалить
#include
ZMEMW16
Ср 20 декабря 2017 г. 16:05
Определенно Daft Medy Mode
Насколько медленно мы можем часы i2c ? Установить тайм -ауты за секунды?
Замените резисторы светодиодом и резистором, действительно, действительно замедляйте часы.
Записать видео, а затем воспроизводить кадр за кадром
Недостаточно на самом деле в этой линии
Может быть, попробовать немного разбрызгивания i2c поможет замедлить его
Кевин у кого -то есть прекрасное видео на YouTube управления шаговым двигателем с переключателями.
Стивен
Насколько медленно мы можем часы i2c ? Установить тайм -ауты за секунды?
Замените резисторы светодиодом и резистором, действительно, действительно замедляйте часы.
Записать видео, а затем воспроизводить кадр за кадром
Недостаточно на самом деле в этой линии
Может быть, попробовать немного разбрызгивания i2c поможет замедлить его
Кевин у кого -то есть прекрасное видео на YouTube управления шаговым двигателем с переключателями.
Стивен
Tfried
Ср 20 декабря 2017 г., 21:39
Похватывает соломку, но...
Что происходит, если вы двигаетесь »VL.begin (); "(и связанные с ними линии отладки) выше" дисплей.начинать()"?
Что происходит, если вы двигаетесь »VL.begin (); "(и связанные с ними линии отладки) выше" дисплей.начинать()"?
Стивестронг
Сб 23 декабря 2017 г., 17:29
Просто думать...
Вы начинаете первую библиотеку (скажем так) сначала.begin (), который будет вызывать проволоку.начинать().
Вы называете другие функции «первые»:
Первый.отображать();
Первый.blabla ();
Затем вы начинаете библиотеку «второй» (скажем так): второе.begin (), который также вызывает То же самое по умолчанию (!) Объектный провод.начинать();
Может ли это очистить (или конфликт) предыдущие переменные/экземпляры библиотеки и сбросить объект провода по умолчанию?
Вы начинаете первую библиотеку (скажем так) сначала.begin (), который будет вызывать проволоку.начинать().
Вы называете другие функции «первые»:
Первый.отображать();
Первый.blabla ();
Затем вы начинаете библиотеку «второй» (скажем так): второе.begin (), который также вызывает То же самое по умолчанию (!) Объектный провод.начинать();
Может ли это очистить (или конфликт) предыдущие переменные/экземпляры библиотеки и сбросить объект провода по умолчанию?