При работе по 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. Ошибка в программе.