При работе по SPI SD карта «мусорит» дисплей ST7920_128X64. Как побороть?

AmateurFF
Offline
Зарегистрирован: 02.02.2015

При работе по SPI SD карта «мусорит» дисплей ST7920_128X64. Как побороть?

Плата MEGA 2560. Подключаю дисплей 12862B V2.0 и считыватель SD карт от LC STUDIO по SPI.

/*****************************************************************************/
// SD Card
const int csSD = 48;
boolean errSD;
void initSD(void) {	
	Serial.println("Init");
	pinMode(SS, OUTPUT);
	pinMode(csSD, OUTPUT);
	pinMode(csLCD, OUTPUT);
	digitalWrite(SS, HIGH);
	digitalWrite(csSD, HIGH);
	digitalWrite(csLCD, HIGH);
	errSD = !SD.begin(csSD);
	Serial.print("errSD=");
	Serial.println(errSD);
	if (errSD)
		return;
	printTime();
	char fname[10];
	snprintf(fname, sizeof(fname), "%02d_%02d.txt",
		csd.dd, csd.hh);
	uint16_t tmp = millis();
	File dataFile = SD.open(fname, FILE_WRITE);
	if (dataFile) {
		dataFile.println("Begin ---------------------------------------------------------------");
		dataFile.close();
	}
	else
	{
		errSD = true;
	}
	csd.dtSDwr = (uint16_t)millis() - tmp;
return;
}
/*****************************************************************************/
// Запись в SD карту
void writeLog(void) {
	uint16_t tmp = millis();
	Serial.println("writeLog");
	Serial.print("errSD=");
	Serial.println(errSD);
	if (errSD) {
		initSD(); 
		Serial.println("ReInit");
		Serial.print("errSD=");
		Serial.println(errSD);
	}
		if(errSD) return;
	char fname[10];
	snprintf(fname, sizeof(fname), "%02d_%02d.txt",
		csd.dd, csd.hh);
	File logFile = SD.open(fname, FILE_WRITE);
	int num;
	// if the file is available, write to it:
	if (logFile) {
		char dstr[200];
		snprintf(dstr, sizeof(dstr), "%02d:%02d:%02d %s %s %s %s %04d %04d %04d %04d %04d",
			csd.hh, csd.nn, csd.ss, 
			csd.temp1, csd.temp2, csd.temp3, csd.temp4, 
			csd.dtBegn, csd.dtTemp, csd.dtDisp, csd.dtKeyp, csd.dtSDwr);
		num = logFile.println(dstr);
		Serial.print("NumWrite=");
		Serial.println(num);
		logFile.close();
		}
		else
			errSD = true;
	if(num == 0)
		errSD = true;
	csd.dtSDwr = (uint16_t)millis() - tmp;
}
/*****************************************************************************/
// Подключаем LCD
//const int csLCD = A7;
//const int enLCD = A6;
const int rwLCD = A5;
U8GLIB_ST7920_128X64_4X u8g(csLCD);
/*****************************************************************************/
// Обновление LCD
void draw(void){
	csd.dtDisp = -(uint16_t)millis();
	u8g.firstPage();
	do {
		printTime();
		printErrors();
	} while (u8g.nextPage());
	pinMode(csLCD, OUTPUT);
	digitalWrite(csLCD, HIGH);
	csd.dtDisp += (uint16_t)millis();
}
/*****************************************************************************/

Цикл записи SD создает помеху на LCD. Когда подключаю LCD по soft SPI – помехи нет. Думал виновата неправильная схемотехника LC STUDIO, но даже при отключении платы  LC STUDIO на экран выводится мусор при выполнении цикла записи в SD.

Как побороть?

AmateurFF
Offline
Зарегистрирован: 02.02.2015

Вот "муссор" при отсутствии платы LC STUDIO

AmateurFF
Offline
Зарегистрирован: 02.02.2015

Где искать?

1. Неисправный LCD.

2. Ошибки в библиотеке U8GLIB.

3. Помеха.

4. Ошибка в программе.