При работе по SPI SD карта «мусорит» дисплей ST7920_128X64. Как побороть?
- Войдите на сайт для отправки комментариев
Сб, 06/02/2016 - 13:58
При работе по 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.
Как побороть?
Где искать?
1. Неисправный LCD.
2. Ошибки в библиотеке U8GLIB.
3. Помеха.
4. Ошибка в программе.