Протеус не запускает вместе <SD.h> и <Adafruit_SSD1306.h> библеотеки

Today_Nikolay
Today_Nikolay аватар
Offline
Зарегистрирован: 04.01.2022

НЕ могу разобраться конфликт интерфейсов?  
Почему то как подключаю <SD.h>  то экран не включается, При том конфликтов в программе нет, скетч компилируется
    

#include <SPI.h>
#include <Wire.h>
#include <Adafruit_GFX.h>
#include <Adafruit_SSD1306.h>
#include <SD.h>
File SDr;

#define SCREEN_WIDTH 128 // OLED display width, in pixels
#define SCREEN_HEIGHT 64 // OLED display height, in pixels


#define OLED_RESET     4 // Reset pin # (or -1 if sharing Arduino reset pin)
#define SCREEN_ADDRESS 0x3D ///< See datasheet for Address; 0x3D for 128x64, 0x3C for 128x32
Adafruit_SSD1306 display(SCREEN_WIDTH, SCREEN_HEIGHT, &Wire,OLED_RESET);

int NUM = 0; // Number of snowflakes in the animation example

void setup() {
  
  display.begin(SSD1306_SWITCHCAPVCC);
  // к библеотеке русских символов
  display.cp437(true);
  
 // назначение ввода Button
  pinMode(A0, INPUT_PULLUP );
  pinMode(A1, INPUT_PULLUP );
  pinMode(A2, INPUT_PULLUP );


 //назначение SD
 pinMode(10, OUTPUT);
   if (!SD.begin(10)) {
    Serial.println("fallo en conexion!");
    return;
  }
  Serial.println("initialization done.");
   SDr = SD.open("test.txt", FILE_WRITE);
   if (SDr) {
    Serial.print("escribiendo test.txt...");
    SDr.println("testing 1, 2, 3.");
    // cerrar archivo:
    SDr.close();
    Serial.println("done.");
  } else {
    // errror
    Serial.println("error abriendo test.txt");
  }

  SDr = SD.open("test.txt");
  if (SDr) {
    Serial.println("test.txt:");

    // read from the file until there's nothing else in it:
    while (SDr.available()) {
      Serial.write(SDr.read());
    }
    // close the file:
    SDr.close();
  } else {
    // if the file didn't open, print an error:
    Serial.println("error abriendo test.txt");
  }
}

 

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

скорее всего памяти не хватает. ОЛЕД берет на экранный буфер 1 кб, SD еще как минимум 500 байт, а у Нано всего 2К

Today_Nikolay
Today_Nikolay аватар
Offline
Зарегистрирован: 04.01.2022

b707 пишет:

скорее всего памяти не хватает. ОЛЕД берет на экранный буфер 1 кб, SD еще как минимум 500 байт, а у Нано всего 2К

Sketch uses 14998 bytes (48%) of program storage space. Maximum is 30720 bytes.
Global variables use 407 bytes (19%) of dynamic memory, leaving 1641 bytes for local variables. Maximum is 2048 bytes.
 
В принципе же собирали на одной ардуинке будильник попустим(дисплей, TFplayer) 
BOOM
BOOM аватар
Offline
Зарегистрирован: 14.11.2018

А что там включаться должно (я про дисплей)? Я вижу в коде вывод только в сериал)

Today_Nikolay
Today_Nikolay аватар
Offline
Зарегистрирован: 04.01.2022

BOOM пишет:

А что там включаться должно (я про дисплей)? Я вижу в коде вывод только в сериал)

Тут просто переключение текста с помощью кнопок, и "русификатор" utf8rus

void loop() {
  
testscrolltext();
  
  if(digitalRead(A0) == 0)      
      { 
       NUM++;
      } 
      
       if(digitalRead(A1) == 0)      
      { 
      NUM--;
      } 
    if(digitalRead(A2)== 0){

    }
  }
  



void testscrolltext() {
  display.clearDisplay();
  display.setTextSize(1,1); // Draw 2X-scale text
  display.setTextColor(SSD1306_WHITE);
  display.setCursor(0, 0);

  if(NUM==0){
  display.println(utf8rus("МЕНЮ"));
 
  display.startscrollright(0, 0);
  }
  else if(NUM==1){
  display.println(utf8rus("Два абобуса"));
  }else if(NUM==2){
  display.println(utf8rus("пять абобусов"));
  }

  display.display();      // Show initial text
  delay(100);
}
String utf8rus(String source)
{
  int i,k;
  String target;
  unsigned char n;
  char m[2] = { '0', '\0' };

  k = source.length(); i = 0;
  while (i < k) {
    n = source[i]; i++;
    if (n >= 0xC0) {
      switch (n) {
        case 0xD0: {
          n = source[i]; i++;
          if (n == 0x81) { n = 0xA8; break; }
          if (n >= 0x90 && n <= 0xBF) n = n + 0x30;
          break;
        }
        case 0xD1: {
          n = source[i]; i++;
          if (n == 0x91) { n = 0xB8; break; }
          if (n >= 0x80 && n <= 0x8F) n = n + 0x70;
          break;
        }
      }
    }
    m[0] = n; target = target + String(m);
  }
return target;
}

 

BOOM
BOOM аватар
Offline
Зарегистрирован: 14.11.2018

А ты скетч с полным выводом сообщений компилятора собираешь или нет?

Today_Nikolay
Today_Nikolay аватар
Offline
Зарегистрирован: 04.01.2022

BOOM пишет:

А ты скетч с полным выводом сообщений компилятора собираешь или нет?

BOOM
BOOM аватар
Offline
Зарегистрирован: 14.11.2018

И как я по этой картинке ответ должен понять? Не проще написать просто «Да» или «Нет?

Today_Nikolay
Today_Nikolay аватар
Offline
Зарегистрирован: 04.01.2022

BOOM пишет:

И как я по этой картинке ответ должен понять? Не проще написать просто «Да» или «Нет?

Сорян, просто же не ругается, так что наверно да...
И скетч вполне полный компелируется

BOOM
BOOM аватар
Offline
Зарегистрирован: 14.11.2018

Сделай так же и перекомпилируй:

Если в выводе что-то изменится скинь сюда ТЕКСТОМ.

Upper
Offline
Зарегистрирован: 23.06.2020

Вам написали в #1, что скорее всего памяти не хватает.

Возможно Proteus при выполнении, пишет про это в в диагностических сообщениях.

BOOM
BOOM аватар
Offline
Зарегистрирован: 14.11.2018

Upper пишет:

Вам написали в #1, что скорее всего памяти не хватает.

Возможно Proteus при выполнении, пишет про это в в диагностических сообщениях.

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

-NMi-
Offline
Зарегистрирован: 20.08.2018

Это он светодиодами пыталсо маргать в проте или нет? Янипомню. Напомните пжлст.

Today_Nikolay
Today_Nikolay аватар
Offline
Зарегистрирован: 04.01.2022

BOOM пишет:

Upper пишет:

Вам написали в #1, что скорее всего памяти не хватает.

Возможно Proteus при выполнении, пишет про это в в диагностических сообщениях.

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

Нет, кроме Simulation is not running real time и тд, все норм
Не знаю почему конкретно из-за библиотеки SD.h не хочет дальше, наверно все таки этот виртуальный ардуино по памяти не хочет 
 

Today_Nikolay
Today_Nikolay аватар
Offline
Зарегистрирован: 04.01.2022

-NMi- пишет:

Это он светодиодами пыталсо маргать в проте или нет? Янипомню. Напомните пжлст.

ДА

-NMi-
Offline
Зарегистрирован: 20.08.2018

Помому мой был совет по поводу аналог\дигитал в свойствах компонентофф, и вроде я говорил, когда будешь работать с ШД на@@сси с симуляццией... вот те и результат.

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

b707 пишет:

скорее всего памяти не хватает. ОЛЕД берет на экранный буфер 1 кб, SD еще как минимум 500 байт, а у Нано всего 2К

Today_Nikolay пишет:

Global variables use 407 bytes (19%) of dynamic memory, leaving 1641 bytes for local variables. Maximum is 2048 bytes.

Что и требовалось доказать.
Дисплею нужно 1024 байта на буфер, а буфер для SD - 512 байт. Очевидно, как одно, так и другое больше указанных 407 байтов. Т.е. эта память выделяется уже только в процессе инициализации соответствующих устройств. Итого, занято оказывается 407+512+1024=1943 байта. Т.е. почти вся имеющаяся память. По крайней мере, использовать что-то вроде String в коде уже явно не получится.
Попытайтесь реализовать проект на Меге, и только если пойдет, можно будет попытаться как-то адаптировать его к Уно/Нано, да и то вряд ли.
-NMi-
Offline
Зарегистрирован: 20.08.2018

замени прям в пр 328 мегу на 128 и попробуй, там пямяти больше. или 2560 вааще.

mykaida
mykaida аватар
Offline
Зарегистрирован: 12.07.2018

Адафруит замени на другую библиотеку.

Кстати - а в железе работает?

Upper
Offline
Зарегистрирован: 23.06.2020

Today_Nikolay пишет:

Нет, кроме Simulation is not running real time и тд, все норм

Проверил у себя на Proteus8.

Для 328 выводит кучу однотипных предупреждений для памяти (под катом только начало).

PROSPICE 8.04.00 (Build 21720) (C) Labcenter Electronics 1993-2017.
Loaded netlist 'C:\Users\upper\AppData\Local\Temp\LISA1822.SDF' for design 'Arduino SSD1306 Breakboard Display 128x64 I2C'
AVR Release 8.3SP0 build 22019 for ATMEGA328P. [U1]
[ELF] Loading AVR ELF file 'E:\PROJECTS\PROTEUS_Project\ATMEGA328\LSD-128-64_and_SD\ATmega328P\Debug\Debug.elf'. [U1]
[SSD1306] Controller Interface selected to: I2C interface. [LCD1_U1_U1]
PC=0x0608. [AVR MEMORY] Writing to memory location 0x0900 outside of memory size 0x0900. [U1]
PC=0x0608. [AVR MEMORY] Writing to memory location 0x0901 outside of memory size 0x0900. [U1]
PC=0x0608. [AVR MEMORY] Writing to memory location 0x0902 outside of memory size 0x0900. [U1]
PC=0x0608. [AVR MEMORY] Writing to memory location 0x0903 outside of memory size 0x0900. [U1]
PC=0x0608. [AVR MEMORY] Writing to memory location 0x0904 outside of memory size 0x0900. [U1]
PC=0x0608. [AVR MEMORY] Writing to memory location 0x0905 outside of memory size 0x0900. [U1]
PC=0x0608. [AVR MEMORY] Writing to memory location 0x0906 outside of memory size 0x0900. [U1]
PC=0x0608. [AVR MEMORY] Writing to memory location 0x0907 outside of memory size 0x0900. [U1]
PC=0x0608. [AVR MEMORY] Writing to memory location 0x0908 outside of memory size 0x0900. [U1]
PC=0x0608. [AVR MEMORY] Writing to memory location 0x0909 outside of memory size 0x0900. [U1]
PC=0x0608. [AVR MEMORY] Writing to memory location 0x090A outside of memory size 0x0900. [U1]

Для 2560 работает нормально и без предупреждений по памяти.

PROSPICE 8.04.00 (Build 21720) (C) Labcenter Electronics 1993-2017.
Loaded netlist 'C:\Users\upper\AppData\Local\Temp\LISA2076.SDF' for design 'Arduino Mega 2560'
AVR Release 8.3SP0 build 22019 for ATMEGA2560. [U1]
[ELF] Loading AVR ELF file 'E:\PROJECTS\PROTEUS_Project\ATMEGA-2560\TMP_PROJ\Arduino Mega 2560\ATmega2560\Debug\Debug.elf'. [U1]
[SSD1306] Controller Interface selected to: I2C interface. [LCD1_U1_U1]
PC=0x556A. [AVR SPI] Clock frequency changed while in the Master mode. [U1]
PC=0x556C. [AVR SPI] Clock frequency changed while in the Master mode. [U1]
PC=0x556A. [AVR SPI] Clock frequency changed while in the Master mode. [U1]
[SSD1306] Reset of Controller. [LCD1_U1_U1]