stm32f103 + display 1602 + bmp280 + Arduino IDE

alexogeo03
Offline
Зарегистрирован: 30.01.2019

Дисплей подружился сразу (LiquidCrystall.h), а вот барометр - ну, никак не хочет ни с какими библиотеками. Что делать? Ставить Keil?...

DetSimen
DetSimen аватар
Offline
Зарегистрирован: 25.01.2017

alexogeo03 пишет:

Дисплей подружился сразу (LiquidCrystall.h), а вот барометр - ну, никак не хочет ни с какими библиотеками

да ты гонишь.  На шине барометр виден?

alexogeo03
Offline
Зарегистрирован: 30.01.2019

DetSimen пишет:

 На шине барометр виден?

Нет. Подключен по i2c, пины В6, В7. На ардуинке дуе работает "на ура" адафрутовской библио bmp280.

А тут - затык. С адафрутовской компиллится, ошибок не выдает, но не работает. Ещё там с каких-то с гитхаба - с одной тоже компиллится, тоже не работает, но выдает предупреждение, что эта библа только для авр, ещё с одной с гитхаба (вроде как в библиотечной сборке для stm32f1) - не компиллится, начинает собирать кучу ошибок с инклудовских библиотек - видимо, не совместимы (например, стандартные wire и i2c). Думаю, дело в хреновенькой аппаратной поддержке stm от ардуиновской среды...

Вобщем, "говорила мне мама" - ставь сразу кейл и не мучайся. Нет же, - надо потерять пару дней непонятно на что!...  

b707
Offline
Зарегистрирован: 26.05.2017

alexogeo03 пишет:

Нет. Подключен по i2c, пины В6, В7.

i2c на bluepill - это пины В8 В9

b707
Offline
Зарегистрирован: 26.05.2017

alexogeo03 пишет:

. Думаю, дело в хреновенькой аппаратной поддержке stm от ардуиновской среды...

простите, но дело не в этом.

Классика - "дело было не в бобине"

Вообще, хорошая привычка - в первую очередь искать проблемы в своей криворукости и бестолковости, а не окружающих, хреновых библиотеках или несовместимых платах :) прошу не обижаться

alexogeo03
Offline
Зарегистрирован: 30.01.2019

b707 пишет:

alexogeo03 пишет:

. Думаю, дело в хреновенькой аппаратной поддержке stm от ардуиновской среды...

простите, но дело не в этом.

Классика - "дело было не в бобине"

Вообще, хорошая привычка - в первую очередь искать проблемы в своей криворукости и бестолковости, а не окружающих, хреновых библиотеках или несовместимых платах :) прошу не обижаться

Да не - я не обижаюсь, пины по памяти писал (не уверен, что у вас тоже верные, но если 8,9 - значит, они и были - взято из распиновки даташита).

А поддержка меж тем так и осталась "хреновенькая".. 

b707
Offline
Зарегистрирован: 26.05.2017

alexogeo03 пишет:

пины по памяти писал (не уверен, что у вас тоже верные, но если 8,9 - значит, они и были - взято из распиновки даташита).

Вообще, по даташиту первый I2C может быть и на 6 и 7, и на 8-9. Но в СТМ-дуино используются только 8 и 9. Так что все-таки проверьте, запросто может быть именно в этом дело.

dimax
dimax аватар
Offline
Зарегистрирован: 25.12.2013

Стало любопытно. Взял первый попавшийся датчик давления (попался bmp180) , первую попавшуюся библу, подсоединил к пилюле, залил пример из библиотеки  и.....  всё работает.

 

xDriver
xDriver аватар
Offline
Зарегистрирован: 14.08.2015

alexogeo03
Offline
Зарегистрирован: 30.01.2019

ладно, никак не получается, ни на 76 ни на 77 адресе, ни на пинах 6,7 ни на пинах 8,9.. Некогда уже время гробить. :-)

Понесу прототип на дуе (сказали, правда, что на ардуине "несолидно", но, думаю переживут). Тем более, реальное устройство вообще на микрокомпе будет - там ещё и акселератор сверточных нейросетей, видеокамеры, вобщем, та ещё ботва..

b707
Offline
Зарегистрирован: 26.05.2017

alexogeo03 пишет:

Понесу прототип на дуе (сказали, правда, что на ардуине "несолидно", но, думаю переживут). Тем более, реальное устройство вообще на микрокомпе будет - там ещё и акселератор сверточных нейросетей, видеокамеры, вобщем, та ещё ботва..

пипец блин... Почему прототипы проектирует человек, не понимающий в этом ? - а потом спутники падают...

alexogeo03
Offline
Зарегистрирован: 30.01.2019

b707 пишет:

Почему прототипы проектирует человек, не понимающий в этом ? - а потом спутники падают...

Думаю, потому же, почему и любят вопросы задавать громкие, но риторические, ничего не зная о сути..:-)

sadman41
Offline
Зарегистрирован: 19.10.2016

b707 пишет:

пипец блин... Почему прототипы проектирует человек, не понимающий в этом ? - а потом спутники падают...

Потому что это бизнес. Бизнесу (в известно какой стране) нужен быстрый оборот вложений. Это влечет за собой рисковые операции. А так, как особых материальных и иных видов ответственности не возникает в данной ситуации, то...

R4FBL
Offline
Зарегистрирован: 02.02.2021

Дружище привет,подскажи если сможешь, почему при попытке поставить какую то картинку на дисплей он рисует одни точки картинку похожую на qr-код.Связка arduino ide, stm32f103c8,st7920 dysplay, LCD7920_STM ?

Только начинаю изучать STM,так что не пинайте сильно!!!

andriano
andriano аватар
Offline
Зарегистрирован: 20.06.2015

R4FBL пишет:

Дружище привет,подскажи если сможешь, почему при попытке поставить какую то картинку на дисплей он рисует одни точки картинку похожую на qr-код.Связка arduino ide, stm32f103c8,st7920 dysplay, LCD7920_STM ?

Только начинаю изучать STM,так что не пинайте сильно!!!

Вы ошиблись: сам дисплейц ничего не рисует. А отображает он только то, что его "попросили".

Т.е. что Вы на него выводите, то он и отображает.

R4FBL
Offline
Зарегистрирован: 02.02.2021

Привет, может быть вот код которым я пытаюсь вывести картинку


// ST7920-based 128x64 pixel graphic LCD demo program
// Written by D. Crocker, Escher Technologies Ltd.
// adapted for STM32-arduino by Matthias Diro and added some fonts and new commands (box, fillbox, fastVline, fastHline)
// library doesn't use SPI or some low level pin toggles --> too fast for the display
// setup Display:
// PSB must be set to ground for serial mode: maybe you must unsolder a resistor!
// only two lines are needed: R/W = Mosi, E=SCK, just solder RS (Slave select) to +5V, it isn't needed!
// maple mini user: you must set VCC to +5V, but you don't have it onboard!
#include "lcd7920_STM.h"
#define LCD_USE_SPI   (false) // no SPI yet for STM32
const int MOSIpin = 7;
const int SCLKpin = 5;
static Lcd7920 lcd(SCLKpin, MOSIpin, LCD_USE_SPI);// LCD
// some fonts
extern const PROGMEM LcdFont font10x10_STM;    // in glcd10x10.cpp
extern const PROGMEM LcdFont font5x7_STM;    // in glcd10x10.cpp
extern const PROGMEM LcdFont font16x16_STM;    // in glcs16x16.cpp

const uint8_t image[] PROGMEM ={0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x80,0x03,0x07,0x0C,0x38,0x70,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x80,0x03,0x07,0x1E,0x38,0x70,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x80,0x03,0x0F,0x1E,0x38,0x70,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x80,0x07,0x0F,0x1E,0x3C,0x70,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x80,0x07,0x0F,0x1E,0x3C,0x70,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x80,0x07,0x0F,0x1E,0x3C,0x78,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x80,0x07,0x0F,0x1E,0x3C,0xF8,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x80,0x07,0x0F,0x1E,0x3C,0x70,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0xF8,0xFF,0xFF,0xFF,0xFF,0xFF,0x07,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0xFE,0xFF,0x9F,0xFF,0xFF,0xFF,0x1F,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0xFE,0xFF,0x9F,0xFF,0xFF,0xFF,0x1F,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0xFF,0xFF,0x9F,0xFF,0xFF,0xFF,0x3F,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0xFF,0xFF,0x9F,0xFF,0xFF,0xFF,0x3F,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x80,0xFF,0xFF,0x9F,0xFF,0xFF,0xFF,0x7F,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x80,0xFF,0xFF,0x9F,0xFF,0xFF,0xFF,0x7F,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0xBC,0xCF,0xFF,0x9F,0xFF,0xFF,0xFF,0xFF,0x0F,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0xBF,0xCF,0xFF,0x9F,0xFF,0xFF,0xFF,0xFF,0x3F,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0xBF,0xCF,0xFF,0x9F,0xFF,0xFF,0xFF,0xFF,0x3F,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0xBF,0xCF,0xFF,0x9F,0xFF,0xFF,0xFF,0xFF,0x3F,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0xBF,0xCF,0xFF,0x9F,0xFF,0xFF,0xFF,0xFF,0x1F,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x80,0x03,0x06,0x1C,0xE0,0x00,0x07,0x7C,0x80,0x3F,0xFC,0xE1,0x8F,0x3F,0x00,0x00,
0x80,0x03,0x06,0x1C,0xE0,0x00,0x07,0x78,0x80,0x3F,0xFC,0xE1,0x8F,0x3F,0x00,0x00,
0x80,0xCF,0xE7,0x9C,0xE7,0x3C,0xE7,0x78,0x80,0x61,0x84,0x31,0x8C,0x31,0x00,0x00,
0x80,0xCF,0xE7,0x9C,0xE7,0x3C,0xE7,0x78,0x80,0x61,0x84,0x31,0x8C,0x31,0x00,0x00,
0x80,0xCF,0xE7,0x9C,0xE7,0x3C,0xE7,0x78,0x80,0x61,0x84,0x31,0x8C,0x31,0x00,0x00,
0x80,0xCF,0xE7,0x9C,0xE7,0x3C,0xE7,0x78,0x80,0x61,0x80,0x31,0x8C,0x31,0x00,0x00,
0xB0,0xCF,0xE7,0x9C,0xE7,0x3C,0xE7,0x78,0x83,0x61,0x80,0x31,0x8C,0x31,0x00,0x00,
0xBF,0xCF,0x07,0x9C,0xE7,0x3C,0xE7,0xF8,0xBF,0x61,0xFC,0x31,0x8C,0x3F,0x00,0x00,
0xBF,0xCF,0x07,0x9C,0xE7,0x3C,0xE7,0xF8,0xBF,0x61,0xFE,0x31,0x8C,0x3F,0x00,0x00,
0xBF,0xCF,0xE7,0x9F,0xE7,0x3C,0xE7,0xF8,0xBF,0x61,0x86,0x31,0x8C,0x01,0x00,0x00,
0xBF,0xCF,0xE7,0x9F,0xE7,0x3C,0xE7,0xF8,0xBF,0x61,0x86,0x31,0x8C,0x01,0x00,0x00,
0xB8,0xCF,0xE7,0x9F,0xE7,0x3C,0xE7,0x78,0x87,0x61,0x86,0x31,0x8C,0x01,0x00,0x00,
0x80,0xCF,0xE7,0x9C,0xE7,0x3C,0xE7,0x78,0x80,0x61,0x86,0x31,0x8C,0x31,0x00,0x00,
0x80,0xCF,0xE7,0x9C,0xE7,0x3C,0xE7,0x78,0x80,0x61,0x86,0x31,0x8C,0x31,0x00,0x00,
0x80,0xCF,0xE7,0x9C,0xE7,0x3C,0xE7,0x78,0x80,0x7D,0x9E,0xF1,0x8D,0x3F,0x00,0x00,
0x80,0x0F,0x06,0x9C,0xE7,0x3C,0x07,0x78,0x80,0x3F,0xFE,0xF1,0x8F,0x3F,0x00,0x00,
0x00,0x1F,0x06,0x9C,0xE7,0x3C,0x07,0x3C,0x80,0x1F,0xFC,0xE1,0x8F,0x3F,0x00,0x00,
0x00,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0x3F,0x80,0x01,0x00,0x00,0x0C,0x00,0x00,0x00,
0x00,0xFE,0xFF,0xFF,0xFF,0xFF,0xFF,0x1F,0x80,0x01,0x00,0x00,0x0C,0x00,0x00,0x00,
0x00,0xFE,0xFF,0xFF,0xFF,0xFF,0xFF,0x0F,0x80,0x01,0x00,0x30,0x0C,0x00,0x00,0x00,
0x00,0xF0,0xFF,0xFF,0xFF,0xFF,0xFF,0x03,0x80,0x01,0x00,0x30,0x0C,0x00,0x00,0x00,
0x00,0xC0,0x07,0x0F,0x1E,0x3C,0x78,0x00,0x80,0x01,0x00,0xF0,0x0F,0x00,0x00,0x00,
0x00,0xC0,0x87,0x0F,0x1E,0x3C,0xF8,0x00,0x80,0x01,0x00,0xF0,0x0F,0x00,0x00,0x00,
0x00,0xC0,0x07,0x0F,0x1E,0x3C,0x78,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0xC0,0x07,0x0F,0x1E,0x3C,0x78,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x80,0x07,0x0F,0x1E,0x3C,0x78,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x80,0x03,0x0F,0x1E,0x3C,0x78,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x80,0x03,0x07,0x1E,0x3C,0x70,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x80,0x03,0x07,0x1E,0x38,0x70,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x80,0x03,0x07,0x0E,0x38,0x70,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00};

void draw(void){
 lcd.bitmap(0,0,128,64,image);
  };
// Initialization
void setup()
{
    lcd.begin(true);          // init lcd in graphics mode
    lcd.setFont(&font5x7_STM);
    lcd.setCursor(35, 0);
    lcd.textInvert(1);
    lcd.print("Counter: ");
    lcd.textInvert(0);
}

void loop()
{
  draw();
    static byte counter = 0;
    //
    counter++;
    if (counter > 128)
    {
        counter = 0;
        delay(1000);
        lcd.clear();
        lcd.setCursor(35, 0);
        lcd.print("Counter: ");
    }
    
    lcd.box(0, 0, counter - 1, 5, PixelClear);
    lcd.box(0, 0, counter, 5, PixelSet);
    lcd.fillbox(0, 55, counter, 10, PixelSet);
    lcd.circle(100, 31, counter / 8, PixelSet);
    lcd.flush();
    lcd.setCursor(35, 55);
    lcd.print(counter);
    lcd.print(" ");
    
}

 

alexogeo03
Offline
Зарегистрирован: 30.01.2019

R4FBL пишет:

Дружище привет,подскажи если сможешь, почему при попытке поставить какую то картинку на дисплей он рисует одни точки картинку похожую на qr-код.Связка arduino ide, stm32f103c8,st7920 dysplay, LCD7920_STM ?

Только начинаю изучать STM,так что не пинайте сильно!!!

Добрый день! Давно это было, поискал в старых проектах. По-моему вот этот был рабочим по дисплею Уже не помню, что он там должен был отображать, но он делал то что задумано - надо было некую картинку из подряд идущих символов. Только в строчках, соответственно с давлением (высотой).. (сейчас, кстати, далеко уже ушли с проектом. Вот здесь наш автономный дрон мельком проскакивает: https://youtu.be/uKNTRrhyVEI?t=613)

Вот сам код:

//#include <Adafruit_BMP280.h>

/*
Program to test 16*2 Alaphanumeric LCD with STM32 (Blue Pill) 
For: www.circuitdigest.com

  The circuit:
 * LCD RS pin to digital pin PB11
 * LCD Enable pin to digital pin PB10
 * LCD D4 pin to digital pin PB0
 * LCD D5 pin to digital pin PB1
 * LCD D6 pin to digital pin PC13
 * LCD D7 pin to digital pin PC14
 * LCD R/W pin to ground
 * LCD VSS pin to ground
 * LCD VCC pin to 5V
*/

#include <LiquidCrystal.h> // include the LCD library

#include <Wire.h>
//#include <SPI.h>

#include "Adafruit_BMP280.h"

//#define BMP_SCK  (13)
//#define BMP_MISO (12)
//#define BMP_MOSI (11)
//#define BMP_CS   (10)

Adafruit_BMP280 bmp; // I2C


const int rs = PB11, en = PB10, d4 = PB0, d5 = PB1, d6 = PC13, d7 = PC14; //mention the pin names to with LCD is connected to 
LiquidCrystal lcd(rs, en, d4, d5, d6, d7); //Initialize the LCD

byte norm[8] = {B10101,B10101,B10101,B10101,B10101,B10101,B10101,B10101}; 
byte razg[8] = {B01001,B01001,B01001,B01001,B01001,B01001,B01001,B01001};
byte sgat[8] = {B11111,B11111,B11111,B11111,B11111,B11111,B11111,B11111};

int count = 0;

void setup() {
    ///bmp.setSampling(Adafruit_BMP280::MODE_NORMAL,     /* Operating Mode. */
       ///           Adafruit_BMP280::SAMPLING_X2,     /* Temp. oversampling */
       ///           Adafruit_BMP280::SAMPLING_X16,    /* Pressure oversampling */
        ///          Adafruit_BMP280::FILTER_X16,      /* Filtering. */
       ///           Adafruit_BMP280::STANDBY_MS_500); /* Standby time. */
  lcd.begin(16, 2);//We are using a 16*2 LCD
  lcd.createChar(1, norm);
  lcd.createChar(2, razg);
  lcd.createChar(3, sgat);
  lcd.setCursor(0, 0);
  lcd.write(byte(1));
  lcd.setCursor(1, 0);
  lcd.write(byte(1));   
  lcd.setCursor(2, 0);
  lcd.write(byte(1));
  lcd.setCursor(3, 0);
  lcd.write(byte(1));
  lcd.setCursor(4, 0);
  lcd.write(byte(1));
  lcd.setCursor(5, 0);
  lcd.write(byte(1));
  lcd.setCursor(6, 0);
  lcd.write(byte(1));
  lcd.setCursor(7, 0);
  lcd.write(byte(1));
  lcd.setCursor(8, 0);
  lcd.write(byte(1));
  lcd.setCursor(9, 0);
  lcd.write(byte(1));   
  lcd.setCursor(10, 0);
  lcd.write(byte(1));
  lcd.setCursor(11, 0);
  lcd.write(byte(1));
  lcd.setCursor(12, 0);
  lcd.write(byte(1));
  lcd.setCursor(13, 0);
  lcd.write(byte(1));
  lcd.setCursor(14, 0);
  lcd.write(byte(1));
  lcd.setCursor(15, 0);
  lcd.write(byte(1));



 if (bmp.begin(BMP280_ADDRESS_ALT))
 { 
  lcd.setCursor(0,1);
  lcd.write(byte(1));
}
  delay(3000); //wait for 5 seconds 
 // lcd.clear(); //Clear the screen
}

void loop() {
  lcd.setCursor(0,1);
//lcd.print(bmp.readAltitude());
  if (count == 16) 
  {
    count = 0;
    lcd.setCursor(15, 0);
    lcd.write(byte(1));
   // lcd.setCursor(15, 1);
   // lcd.write(byte(1));
  }

  lcd.setCursor(count, 0); //At first row first column   
  lcd.write(byte(2));
  //lcd.setCursor(count, 1); //At secound row first column 
  //lcd.write(byte(3));
    if (count > 0)
    {
      lcd.setCursor(count - 1, 0);
      lcd.write(byte(1));
     // lcd.setCursor(count - 1, 1);
     // lcd.write(byte(1));
    }
  count++;
 delay(500);
 // lcd.print(millis() / 1000); //Print the value of secounds
}

 

R4FBL
Offline
Зарегистрирован: 02.02.2021

Вот благодарю, а из-за объёма картинки могут быть проблемы ? image buffer, 1K in size, а у меня она 1075 ? 

alexogeo03
Offline
Зарегистрирован: 30.01.2019

R4FBL пишет:

Вот благодарю, а из-за объёма картинки могут быть проблемы ? image buffer, 1K in size, а у меня она 1075 ? 

Ой, я уже и не помню.. По идее, если размер буфера в STM, самом дисплее и библиотеке согласованы, то всё должно быть норм..

R4FBL
Offline
Зарегистрирован: 02.02.2021

Благодарю,буду пытать,вопрос еще, в этой библиотеке дисплей подключается трея проводами к stm,на при чтении даташита на микросхему не пойму как инициализировать hwspi,не поможете ? или как это сделать в stmcube?

ну что бы он тоже в кубе подключался тремя выходами

b707
Offline
Зарегистрирован: 26.05.2017

R4FBL пишет:

Привет, может быть вот код которым я пытаюсь вывести картинку



void loop()
{
  draw();
    static byte counter = 0;
    //
    counter++;
    if (counter > 128)
    {
        counter = 0;
        delay(1000);
        lcd.clear();
        lcd.setCursor(35, 0);
        lcd.print("Counter: ");
    }
    
    lcd.box(0, 0, counter - 1, 5, PixelClear);
    lcd.box(0, 0, counter, 5, PixelSet);
    lcd.fillbox(0, 55, counter, 10, PixelSet);
    lcd.circle(100, 31, counter / 8, PixelSet);
    lcd.flush();
    lcd.setCursor(35, 55);
    lcd.print(counter);
    lcd.print(" ");
    
}

 

при таком коде абсолютно неудивительно. что картинка не выводится. Смотрите - вы сначала рисуете картинку методом draw() и спустя буквально микросекунду после этого начинаете рисовать поверх нее боксы. круги. выводить счетчик... и так в цикле 128 раз...

b707
Offline
Зарегистрирован: 26.05.2017

R4FBL пишет:

вопрос еще, в этой библиотеке дисплей подключается трея проводами к stm,на при чтении даташита на микросхему не пойму как инициализировать hwspi,не поможете ? или как это сделать в stmcube?

у вас же есть библиотека для ардуино, где это уже сделано. Смотрите в исходник и повторяйте его для куба... Синтаксис инструкций СТМ в ардуино очень похож на HAL

R4FBL
Offline
Зарегистрирован: 02.02.2021
// ST7920-based 128x64 pixel graphic LCD demo program
// Written by D. Crocker, Escher Technologies Ltd.
// adapted for STM32-arduino by Matthias Diro and added some fonts and new commands (box, fillbox, fastVline, fastHline)
// library doesn't use SPI or some low level pin toggles --> too fast for the display
// setup Display:
// PSB must be set to ground for serial mode: maybe you must unsolder a resistor!
// only two lines are needed: R/W = Mosi, E=SCK, just solder RS (Slave select) to +5V, it isn't needed!
// maple mini user: you must set VCC to +5V, but you don't have it onboard!
#include "lcd7920_STM.h"
#define LCD_USE_SPI   (false) // no SPI yet for STM32
const int MOSIpin = 7;
const int SCLKpin = 5;
static Lcd7920 lcd(SCLKpin, MOSIpin, LCD_USE_SPI);// LCD
// some fonts
extern const PROGMEM LcdFont font10x10_STM;    // in glcd10x10.cpp
extern const PROGMEM LcdFont font5x7_STM;    // in glcd10x10.cpp
extern const PROGMEM LcdFont font16x16_STM;    // in glcs16x16.cpp

const uint8_t data[] PROGMEM ={0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x80,0x07,0x0F,0x1E,0x3C,0xF8,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x80,0x07,0x0F,0x1E,0x3C,0xF8,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x80,0x07,0x0F,0x1E,0x3C,0xF8,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x80,0x07,0x0F,0x1E,0x3C,0xF8,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0xF8,0xFF,0xFF,0xFF,0xFF,0xFF,0x07,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0xFE,0xFF,0x9F,0xFF,0xFF,0xFF,0x1F,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0xFE,0xFF,0x9F,0xFF,0xFF,0xFF,0x1F,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0xFF,0xFF,0x9F,0xFF,0xFF,0xFF,0x3F,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0xFF,0xFF,0x9F,0xFF,0xFF,0xFF,0x3F,0x00,0x00,0x00,0x00,0x00,0x00,
0x80,0xFF,0xFF,0x9F,0xFF,0xFF,0xFF,0x7F,0x00,0x00,0x00,0x00,0x00,0x00,
0x80,0xFF,0xFF,0x9F,0xFF,0xFF,0xFF,0x7F,0x00,0x00,0x00,0x00,0x00,0x00,
0xBF,0xCF,0xFF,0x9F,0xFF,0xFF,0xFF,0xFF,0x7F,0x00,0x00,0x00,0x00,0x00,
0xBF,0xCF,0xFF,0x9F,0xFF,0xFF,0xFF,0xFF,0x7F,0x00,0x00,0x00,0x00,0x00,
0xBF,0xCF,0xFF,0x9F,0xFF,0xFF,0xFF,0xFF,0x7F,0x00,0x00,0x00,0x00,0x00,
0xBF,0xCF,0xFF,0x9F,0xFF,0xFF,0xFF,0xFF,0x7F,0x00,0x00,0x00,0x00,0x00,
0xBF,0xCF,0xFF,0x9F,0xFF,0xFF,0xFF,0xFF,0x7F,0x00,0x00,0x00,0x00,0x00,
0x80,0x03,0x06,0x1C,0xE0,0x00,0x07,0x7C,0x80,0x3F,0xFC,0xE1,0x8F,0x3F,
0x80,0x03,0x06,0x1C,0xE0,0x00,0x07,0x78,0x80,0x3F,0xFC,0xE1,0x8F,0x3F,
0x80,0xCF,0xE7,0x9C,0xE7,0x3C,0xE7,0x78,0x80,0x61,0x84,0x31,0x8C,0x31,
0x80,0xCF,0xE7,0x9C,0xE7,0x3C,0xE7,0x78,0x80,0x61,0x84,0x31,0x8C,0x31,
0x80,0xCF,0xE7,0x9C,0xE7,0x3C,0xE7,0x78,0x80,0x61,0x84,0x31,0x8C,0x31,
0x80,0xCF,0xE7,0x9C,0xE7,0x3C,0xE7,0x78,0x98,0x61,0x80,0x31,0x8C,0x31,
0xF0,0xCF,0xE7,0x9C,0xE7,0x3C,0xE7,0xF8,0xBF,0x61,0x80,0x31,0x8C,0x31,
0xBF,0xCF,0x07,0x9C,0xE7,0x3C,0xE7,0xF8,0xBF,0x61,0xFC,0x31,0x8C,0x3F,
0xBF,0xCF,0x07,0x9C,0xE7,0x3C,0xE7,0xF8,0xBF,0x61,0xFE,0x31,0x8C,0x3F,
0xBF,0xCF,0xE7,0x9F,0xE7,0x3C,0xE7,0xF8,0xBF,0x61,0x86,0x31,0x8C,0x01,
0xBF,0xCF,0xE7,0x9F,0xE7,0x3C,0xE7,0xF8,0xBF,0x61,0x86,0x31,0x8C,0x01,
0xB8,0xCF,0xE7,0x9F,0xE7,0x3C,0xE7,0xF8,0xBF,0x61,0x86,0x31,0x8C,0x01,
0x80,0xCF,0xE7,0x9C,0xE7,0x3C,0xE7,0x78,0x80,0x61,0x86,0x31,0x8C,0x31,
0x80,0xCF,0xE7,0x9C,0xE7,0x3C,0xE7,0x78,0x80,0x61,0x86,0x31,0x8C,0x31,
0x80,0xCF,0xE7,0x9C,0xE7,0x3C,0xE7,0x78,0x80,0x7D,0x9E,0xF1,0x8D,0x3F,
0x80,0x0F,0x06,0x9C,0xE7,0x3C,0x07,0x78,0x80,0x3F,0xFE,0xF1,0x8F,0x3F,
0x00,0x1F,0x06,0x9C,0xE7,0x3C,0x07,0x3C,0x80,0x1F,0xFC,0xE1,0x8F,0x3F,
0x00,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0x3F,0x80,0x01,0x00,0x00,0x0C,0x00,
0x00,0xFE,0xFF,0xFF,0xFF,0xFF,0xFF,0x1F,0x80,0x01,0x00,0x00,0x0C,0x00,
0x00,0xFE,0xFF,0xFF,0xFF,0xFF,0xFF,0x0F,0x80,0x01,0x00,0x30,0x0C,0x00,
0x00,0xF0,0xFF,0xFF,0xFF,0xFF,0xFF,0x03,0x80,0x01,0x00,0x30,0x0C,0x00,
0x00,0xC0,0x07,0x0F,0x1E,0x3C,0x78,0x00,0x80,0x01,0x00,0xF0,0x0F,0x00,
0x00,0xC0,0x87,0x0F,0x1E,0x3C,0xF8,0x00,0x80,0x01,0x00,0xF0,0x0F,0x00,
0x00,0xC0,0x07,0x0F,0x1E,0x3C,0x78,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0xC0,0x07,0x0F,0x1E,0x3C,0x78,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x0F,0x1E,0x3C,0x78,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00
};

void draw(void){
 lcd.bitmap(15,5,111,51,data);
  };
// Initialization
void setup()
{
    lcd.begin(true);// init lcd in graphics mode
}

void loop()
{
  
  lcd.flush();
  draw();
      
}

 

Благодарю за ответ

Короче вот так как то, непонятка полная !

b707
Offline
Зарегистрирован: 26.05.2017

а текст выводится? прямоугольники рисуются?

R4FBL
Offline
Зарегистрирован: 02.02.2021

И текст.и данные с датчиков меняются , и круги рисуются, но картинки как не было так инет, грешу на саму функцию bitmap

b707
Offline
Зарегистрирован: 26.05.2017

R4FBL пишет:

грешу на саму функцию bitmap

или на формат файла картинки.

R4FBL
Offline
Зарегистрирован: 02.02.2021

b707 пишет:

R4FBL пишет:

грешу на саму функцию bitmap

или на формат файла картинки.

Формат файла bmp, при редактировании в paint , сохранить как монохромный рисунок(bmp,dib)

Так как то

b707
Offline
Зарегистрирован: 26.05.2017

R4FBL пишет:

Формат файла bmp, при редактировании в paint , сохранить как монохромный рисунок(bmp,dib)

Так как то

это не гарантия.  Битмап и файл bmp - это далеко не одно и то же. Нужно читать описание функции drawbitmap. чтобы разобраться, какой формат ей нужен.

R4FBL
Offline
Зарегистрирован: 02.02.2021

b707 пишет:

R4FBL пишет:

Формат файла bmp, при редактировании в paint , сохранить как монохромный рисунок(bmp,dib)

Так как то

это не гарантия.  Битмап и файл bmp - это далеко не одно и то же. Нужно читать описание функции drawbitmap. чтобы разобраться, какой формат ей нужен.

/ Draw a bitmap
void Lcd7920::bitmap(uint8_t x0, uint8_t y0, uint8_t width, uint8_t height, PROGMEM const uint8_t data[])
{
  for (uint8_t r = 0; r < height && r + y0 < numRows; ++r)
  {
    uint8_t *p = image + (((r + y0) * (numCols/8)) + (x0/8));
    uint16_t bitMapOffset = r * (width/8);
    for (uint8_t c = 0; c < (width/8) && c + (x0/8) < numCols/8; ++c)
    {
      *p++ = pgm_read_byte_near(bitMapOffset++);
    }
  }
  if (x0 < startCol) startCol = x0;
  if (x0 + width > endCol) endCol = x0 + width;
  if (y0 < startRow) startRow = y0;
  if (y0 + height > endRow) endRow = y0 + height;
} 

вот эта функция, что в ней нужно не понятно

// Draw a bitmap
  //  x0 = x-coordinate of the top left, measured from left hand edge of the display. Currently, must be a multiple of 8.
  //  y0 = y-coordinate of the top left, measured down from the top of the display
  // width = width of bitmap in pixels. Currently, must be a multiple of 8.
  // rows = height of bitmap in pixels
  // data = bitmap image in PROGMEM, must be ((width/8) * rows) bytes long
  void bitmap(uint8_t x0, uint8_t y0, uint8_t width, uint8_t height, PROGMEM const uint8_t data[]);

а это ее инициализация, может что то все таки я делаю не так

 

b707
Offline
Зарегистрирован: 26.05.2017

R4FBL пишет:
а это ее инициализация, может что то все таки я делаю не так

ну вот, так и есть - форматы совсем разные

Та битмап, что нужна вашей библиотеке - это просто закодированная по горизонтали матрица пикселей (пиксельный массив)

Формат bmp файла. генеримого пайнтом - много сложнее. Начать с того, что этот файл содержит заголовок, то есть первые несколько десятков байт служебные и не содержат картинки. В этих байтах закодировано. как именно обработана картинка в файле. Ваша библиотека не умеет читать такие файлы.

В гугле много материала на тему "как преобразовать картинку в пиксельный массив" или ...для дисплея ардуино" и тд

Поэкспериментируйте с таким конвертером, например:

http://javl.github.io/image2cpp/

 

ZAZ-965
Offline
Зарегистрирован: 19.06.2016

2 R4FBL, в комментарии к  функции data = bitmap image in PROGMEM, must be ((width/8) * rows) bytes long,  получается (111/8)*51=663, а вы передаете массив размером data=714.

R4FBL
Offline
Зарегистрирован: 02.02.2021

Парни всем огромная благодарность, буду тестить !!!!!

R4FBL
Offline
Зарегистрирован: 02.02.2021

b707 пишет:

R4FBL пишет:
а это ее инициализация, может что то все таки я делаю не так

ну вот, так и есть - форматы совсем разные

Та битмап, что нужна вашей библиотеке - это просто закодированная по горизонтали матрица пикселей (пиксельный массив)

Формат bmp файла. генеримого пайнтом - много сложнее. Начать с того, что этот файл содержит заголовок, то есть первые несколько десятков байт служебные и не содержат картинки. В этих байтах закодировано. как именно обработана картинка в файле. Ваша библиотека не умеет читать такие файлы.

В гугле много материала на тему "как преобразовать картинку в пиксельный массив" или ...для дисплея ардуино" и тд

Поэкспериментируйте с таким конвертером, например:

http://javl.github.io/image2cpp/

 

 

Вся суть в том, что перевод картинки на пиксельный массив я веду в LCD Assistent, весь массив беру оттуда

R4FBL
Offline
Зарегистрирован: 02.02.2021

Парни огромное всем спасибо, а особенно за последнюю ссылку,БлагоДарность моя не знает границ !!!! И да, не всегда паинт лучшая вещь для обработки изо