SSD1306 OLED Проблемы

Gigabyte091
Сб 18 марта 2017 г. 6:48
Привет,

Вчера я установил STM32 для Arduino после этого видео на YouTube:

[YouTube]https: // www.YouTube.com/watch?v = 1zvglyucejm[/youtube]

Я бегу Arduino 1.8.1 IDE и я использую библиотеку OLED_I2C, найденную на этом форуме.

Проблема заключается в том, что я написал простой тестовый код, а кодовые компиляции и загрузку в MCU через интерфейс ST-Link V2 (MCU IS STM32F103C8T6, стандартная синяя таблетки eBay с 20K ОЗУ и 128K ROM).

Я пробовал каждый выход I2C от MCU и ничего... пустой экран. Проверенный пример кода, ничего, пустой экран.
Попробовал Arduino Uno, чтобы проверить OLED и работает по -прежнему.

Пример моего тестового кода:
const int domofonPin = 3; int state = 0; void setup() { Serial.begin(250000); pinMode(domofonPin, OUTPUT); analogWrite(domofonPin, LOW); } void loop() { String strser = ""; if (Serial.available () > 0) { strser = Serial.readStringUntil('\n'); } if (strser != ""){ if (strser.startsWith("start")){ Serial.println("Starting"); callDomofon(61, 0); } else if (strser.startsWith("stop")){ Serial.println("Stopping"); endDomofon(); } else { Serial.println("ERR"); } } } void callDomofon(int nrLok, int ileDzwonkow){ digitalWrite(domofonPin, HIGH); delay(257); digitalWrite(domofonPin, LOW); delay(200); for(int i = 1; i <= nrLok; i++){ digitalWrite(domofonPin, HIGH); delayMicroseconds(12); digitalWrite(domofonPin, LOW); delayMicroseconds(170); } for(int i = 1; i <= ileDzwonkow; i++){ digitalWrite(domofonPin, LOW); delay(96); for(int x = 1; x <= 14; x++){ for(int y = 1; y <= 185; y++){ digitalWrite(domofonPin, HIGH); delayMicroseconds(172); digitalWrite(domofonPin, LOW); delayMicroseconds(146); } for(int z = 1; z <= 78; z++){ digitalWrite(domofonPin, HIGH); delayMicroseconds(370); digitalWrite(domofonPin, LOW); delayMicroseconds(396); } digitalWrite(domofonPin, HIGH); delayMicroseconds(370); digitalWrite(domofonPin, LOW); delayMicroseconds(172); } digitalWrite(domofonPin, LOW); delay(1780); } } void endDomofon(){ digitalWrite(domofonPin, HIGH); delay(268); digitalWrite(domofonPin, LOW); }

Пито
Сб 18 марта 2017 г. 10:37 утра
Дважды проверьте SDA SCL -контакты. Вам тоже нужны подтягивания на этих булавках.

Беннебой
Сб 18 марта 2017 г. 11:47
Что такое OLED Library, это то, что мне кажется, что она битбан в I2C, не может понять, зачем ему нужно знать булавки иначе, в противном случае.

Если он битбанг, то это, вероятно, проблема реализации.

Возможно, попробуйте библиотеку Adafruit SSD1306.

Gigabyte091
Сб 18 марта 2017 г. 12:09
Ничего не происходит, я попробовал все три i2c и ничего...

Gigabyte091
Сб 18 марта 2017 г. 12:17
Я нашел пример Adafruit STM32 I2C, вот выход компилятора
257005 13 13 12 12 13 13 13 13 1013 13 10 12 13 13 13 12 13 13 13 13 12 13 13 12 13 13 13 11 12 13 12 16 13 13 13 12 12 13 13 13 13 13 13 12 12 13 13 13 12 12 13 13 13 13 13 13 12 13 13 13 13 257005 12 13 12 13 13 13 13 12 13 13 13 13 13 13 13 12 13 13 13 12 12 13 13 11 13 12 13 12 12 13 13 13 12 12 13 12 12 13 13 13 13 13 13 12 12 13 13 13 12 12 13 12 14 13 13 13 12 13 13 13 13

Беннебой
Сб 18 марта 2017 г. 12:40
Используйте библиотеку Adafruit, а не вариант STM32 в ядре.

Gigabyte091
Сб 18 марта 2017 г., 17:24
Теперь это работает, но скорость обновления очень медленная... Как каждые 500 мс, без каких -либо задержек в коде...

Беннебой
Сб 18 марта 2017 г., 17:54
Можете ли вы поделиться своим кодом.

Gigabyte091
Сб 18 марта 2017 г. 18:38
Это пример кода из библиотеки Adafruit, единственное, что я изменил, это адрес отображения, от 0 × 3D до 0 × 3C
#include void setup() { // Setup SPI 1 SPI.begin(); //Initialize the SPI_1 port. SPI.setBitOrder(MSBFIRST); // Set the SPI_1 bit order SPI.setDataMode(SPI_MODE0); //Set the SPI_2 data mode 0 SPI.setClockDivider(SPI_CLOCK_DIV128); // 72/128 = 562.5khz Serial.begin(115200); } uint8_t last_data = 0; uint32_t repeat = 0; void loop() { uint8_t data; data = SPI.transfer(0); if(data != last_data) { Serial.print(repeat); Serial.print(" "); Serial.println(last_data); last_data = data; repeat = 1; } else { repeat++; } }

Беннебой
Сб 18 марта 2017 г. 18:58
Не чтобы указать на очевидное, но вы понимаете, что в этом коде есть много задержек MS в 2000 году?

Другая вещь, которую нужно помнить, это то, что библиотека работает на I2C при 400 кГц. Каждый раз, когда звонит LIB .Показать он пишет 1KB Framebuffer на автобусе 400 кГц I2C...

SPI с радостью будет работать на 18 МГц... Так немного быстрее.

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

Gigabyte091
Солнце 19 марта 2017 г. 5:16 утра
Я знаю, что есть 2 задержки, я попробовал тот же код на UNO, и он работает намного быстрее. Также я попробовал свой простой код, просто отображая значение АЦП, без задержек в коде, а экран обновляется каждые от 300 до 400 мс.

У меня нет логического анализатора, всего 2 канала DSO

Manand59
Солнце 25 июня 2017 13:57
Эй, ты можешь сказать мне, что на каком булавом вы соединили SDA и SCL OLED с STM32.
Я попытался использовать пример примера библиотеки Adafruit с моим STM32, но ничего не отображается....

Пито
Солнце 25 июня 2017 г. 14:10
http: // wiki.STM32duino.com/index.PHP?title = blue_pill

C8 Доски с 128K Flash ?