Всем привет, я начинающий в электронике и программировании. Так получилось, что насмотревшись видео Алекса, и повторив парочку его проектов, я решил сделать что то своё. Выбор пал на контроллер для управления аквариумом, устройство состоит из двух частей, в каждой установлена Atmega328p. Первая половина уже собрана и протестирована, по факту это самостоятельный модуль, но без возможности внести изменения в настройки. Вторая часть призвана отобразить текущие параметры работы, дать возможность изменять настройки первого модуля. Так вот, для того, что бы не грузить шрифт (сделаю свой, только на цифры) и с экономить память контроллера, я решил нарисовать экраны меню, загрузить их на CD-карту, и оттуда выводить их по мере необходимости. Собственно написал тестовый скетч, загрузил его на китайскую Nano, собрал макет, но вроде бы простая программа подкинула сюрприз.
В общем, если залить скетч на плату, потом выключить питание, потом снова включить, то в монитор порта выводится вот это:

При этом на дисплей выводиться вот это:
Получается, дисплей инициализировался, вывел изображение, а вот дальше карта якобы прошла инициализацию, и перешла в петлю, но при этом программа начисто игнорирует команды вывода на дисплей. Не только не выводит содержимое файлов, но и не рисует программную графику.
Если нажать "Сброс" на контроллере, то ситуация меняется:
Тут карта не инициализируется, но по прежнему игнорируется вывод программной графики. Карта отформатирована в FAT32, если прочитать ее при помощи скетчей CardInfo или SDInfo, то всё читается, файлы содержащиеся на карте распознаются. Собственно картинки преобразованы в *.raw. Если кто сталкивался с подобным, или знает как решить проблему, буду благодарен за совет или направляющий пендель.
#include <SPI.h>
#include <SdFat.h>
#include <UTFT.h>
#include <UTFT_SdRaw.h>
#define SD_CHIP_SELECT 7
UTFT myGLCD(TFT01_24SP,11,13,10,9,8); // тип дисплея 2,8 TFT (320×240 chip ILI9341)
SdFat mySD;
UTFT_SdRaw myFiles(&myGLCD);
void setup() {
Serial.begin(9600);
Serial.print("Initializing SD card...");
myGLCD.InitLCD();
myGLCD.clrScr();
myGLCD.setColor( VGA_WHITE );
myGLCD.fillCircle( 160 , 120 , 30 );
while(!mySD.begin(SD_CHIP_SELECT,1)){
Serial.print("\nInitialization failed");
myGLCD.setColor( VGA_RED );
myGLCD.fillCircle( 160 , 120 , 30 );
delay(1000);}
Serial.print("\nInitialization OK");
myGLCD.setColor( VGA_YELLOW );
myGLCD.fillCircle( 160 , 120 , 30 );
delay(1000);
}
void loop() {
myFiles.load(0,0,193,179,"MenuStart.raw");
Serial.print("\nFile_1_Load");
delay(250);
myGLCD.clrScr();
myGLCD.setColor( VGA_GREEN);
myGLCD.fillCircle( 160 , 120 , 10 );
myFiles.load(0,0,320,240,"MenuMain.raw");
Serial.print("\nFile_2_Load");
delay(250);
myGLCD.clrScr();
myGLCD.setColor( VGA_OLIVE);
myGLCD.fillCircle( 160 , 120 , 10 );
}
#include <SdFat.h>
#include <UTFT.h>
#include <UTFT_SdRaw.h>
#define SD_CHIP_SELECT 7
UTFT myGLCD(TFT01_24SP,11,13,10,9,8); // тип дисплея 2,8 TFT (320×240 chip ILI9341)
SdFat mySD;
UTFT_SdRaw myFiles(&myGLCD);
void setup() {
Serial.begin(9600);
Serial.print("Initializing SD card...");
myGLCD.InitLCD();
myGLCD.clrScr();
myGLCD.setColor( VGA_WHITE );
myGLCD.fillCircle( 160 , 120 , 30 );
while(!mySD.begin(SD_CHIP_SELECT,1)){
Serial.print("\nInitialization failed");
myGLCD.setColor( VGA_RED );
myGLCD.fillCircle( 160 , 120 , 30 );
delay(1000);}
Serial.print("\nInitialization OK");
myGLCD.setColor( VGA_YELLOW );
myGLCD.fillCircle( 160 , 120 , 30 );
delay(1000);
}
void loop() {
myFiles.load(0,0,193,179,"MenuStart.raw");
Serial.print("\nFile_1_Load");
delay(250);
myGLCD.clrScr();
myGLCD.setColor( VGA_GREEN);
myGLCD.fillCircle( 160 , 120 , 10 );
myFiles.load(0,0,320,240,"MenuMain.raw");
Serial.print("\nFile_2_Load");
delay(250);
myGLCD.clrScr();
myGLCD.setColor( VGA_OLIVE);
myGLCD.fillCircle( 160 , 120 , 10 );
}
В общем, если залить скетч на плату, потом выключить питание, потом снова включить, то в монитор порта выводится вот это:

При этом на дисплей выводиться вот это:

Получается, дисплей инициализировался, вывел изображение, а вот дальше карта якобы прошла инициализацию, и перешла в петлю, но при этом программа начисто игнорирует команды вывода на дисплей. Не только не выводит содержимое файлов, но и не рисует программную графику.
Если нажать "Сброс" на контроллере, то ситуация меняется:

Тут карта не инициализируется, но по прежнему игнорируется вывод программной графики. Карта отформатирована в FAT32, если прочитать ее при помощи скетчей CardInfo или SDInfo, то всё читается, файлы содержащиеся на карте распознаются. Собственно картинки преобразованы в *.raw. Если кто сталкивался с подобным, или знает как решить проблему, буду благодарен за совет или направляющий пендель.