Перейти к содержанию

Конфликт Экрана N5110 И Sd Карты


Рекомендуемые сообщения

Подключил экран и карту памяти на SPI.

Экран работает, карта определяется.

Но если попробовать что-то вывести на экран после работы с картой, то ничего не будет, экран даже не очистится.

В чем проблема?

ATmega328

Вот скетч:

/*
 SD card test

This example shows how use the utility libraries on which the'
SD library is based in order to get info about your SD card.
Very useful for testing a card when you're not sure whether its working or not.

The circuit:
 * SD card attached to SPI bus as follows:
** MOSI - pin 11 on Arduino Uno/Duemilanove/Diecimila
** MISO - pin 12 on Arduino Uno/Duemilanove/Diecimila
** CLK - pin 13 on Arduino Uno/Duemilanove/Diecimila
** CS - depends on your SD card shield or module.
    Pin 4 used here for consistency with other Arduino examples


created  28 Mar 2011
by Limor Fried
modified 9 Apr 2012
by Tom Igoe
*/
// include the SD library:
#include <SPI.h>
#include <SD.h>

// set up variables using the SD utility library functions:
Sd2Card card;
SdVolume volume;
SdFile root;

#define PIN_RESET_ 9
#define PIN_SCE_   10
#define PIN_DC_    12
#define PIN_SDIN_  11
#define PIN_SCLK_  13

#define LCD_C_	 LOW
#define LCD_D_	 HIGH

#define LCD_X_	 84
#define LCD_Y_	 48

static const byte ASCII[][5] =
{
{0x00, 0x00, 0x00, 0x00, 0x00} // 20 
,{0x00, 0x00, 0x5f, 0x00, 0x00} // 21 !
,{0x00, 0x07, 0x00, 0x07, 0x00} // 22 "
,{0x14, 0x7f, 0x14, 0x7f, 0x14} // 23 #
,{0x24, 0x2a, 0x7f, 0x2a, 0x12} // 24 $
,{0x23, 0x13, 0x08, 0x64, 0x62} // 25 %
,{0x36, 0x49, 0x55, 0x22, 0x50} // 26 &
,{0x00, 0x05, 0x03, 0x00, 0x00} // 27 '
,{0x00, 0x1c, 0x22, 0x41, 0x00} // 28 (
,{0x00, 0x41, 0x22, 0x1c, 0x00} // 29 )
,{0x14, 0x08, 0x3e, 0x08, 0x14} // 2a *
,{0x08, 0x08, 0x3e, 0x08, 0x08} // 2b +
,{0x00, 0x50, 0x30, 0x00, 0x00} // 2c ,
,{0x08, 0x08, 0x08, 0x08, 0x08} // 2d -
,{0x00, 0x60, 0x60, 0x00, 0x00} // 2e .
,{0x20, 0x10, 0x08, 0x04, 0x02} // 2f /
,{0x3e, 0x51, 0x49, 0x45, 0x3e} // 30 0
,{0x00, 0x42, 0x7f, 0x40, 0x00} // 31 1
,{0x42, 0x61, 0x51, 0x49, 0x46} // 32 2
,{0x21, 0x41, 0x45, 0x4b, 0x31} // 33 3
,{0x18, 0x14, 0x12, 0x7f, 0x10} // 34 4
,{0x27, 0x45, 0x45, 0x45, 0x39} // 35 5
,{0x3c, 0x4a, 0x49, 0x49, 0x30} // 36 6
,{0x01, 0x71, 0x09, 0x05, 0x03} // 37 7
,{0x36, 0x49, 0x49, 0x49, 0x36} // 38 8
,{0x06, 0x49, 0x49, 0x29, 0x1e} // 39 9
,{0x00, 0x36, 0x36, 0x00, 0x00} // 3a :
,{0x00, 0x56, 0x36, 0x00, 0x00} // 3b ;
,{0x08, 0x14, 0x22, 0x41, 0x00} // 3c <
,{0x14, 0x14, 0x14, 0x14, 0x14} // 3d =
,{0x00, 0x41, 0x22, 0x14, 0x08} // 3e >
,{0x02, 0x01, 0x51, 0x09, 0x06} // 3f ?
,{0x32, 0x49, 0x79, 0x41, 0x3e} // 40 @
,{0x7e, 0x11, 0x11, 0x11, 0x7e} // 41 A
,{0x7f, 0x49, 0x49, 0x49, 0x36} // 42 B
,{0x3e, 0x41, 0x41, 0x41, 0x22} // 43 C
,{0x7f, 0x41, 0x41, 0x22, 0x1c} // 44 D
,{0x7f, 0x49, 0x49, 0x49, 0x41} // 45 E
,{0x7f, 0x09, 0x09, 0x09, 0x01} // 46 F
,{0x3e, 0x41, 0x49, 0x49, 0x7a} // 47 G
,{0x7f, 0x08, 0x08, 0x08, 0x7f} // 48 H
,{0x00, 0x41, 0x7f, 0x41, 0x00} // 49 I
,{0x20, 0x40, 0x41, 0x3f, 0x01} // 4a J
,{0x7f, 0x08, 0x14, 0x22, 0x41} // 4b K
,{0x7f, 0x40, 0x40, 0x40, 0x40} // 4c L
,{0x7f, 0x02, 0x0c, 0x02, 0x7f} // 4d M
,{0x7f, 0x04, 0x08, 0x10, 0x7f} // 4e N
,{0x3e, 0x41, 0x41, 0x41, 0x3e} // 4f O
,{0x7f, 0x09, 0x09, 0x09, 0x06} // 50 P
,{0x3e, 0x41, 0x51, 0x21, 0x5e} // 51 Q
,{0x7f, 0x09, 0x19, 0x29, 0x46} // 52 R
,{0x46, 0x49, 0x49, 0x49, 0x31} // 53 S
,{0x01, 0x01, 0x7f, 0x01, 0x01} // 54 T
,{0x3f, 0x40, 0x40, 0x40, 0x3f} // 55 U
,{0x1f, 0x20, 0x40, 0x20, 0x1f} // 56 V
,{0x3f, 0x40, 0x38, 0x40, 0x3f} // 57 W
,{0x63, 0x14, 0x08, 0x14, 0x63} // 58 X
,{0x07, 0x08, 0x70, 0x08, 0x07} // 59 Y
,{0x61, 0x51, 0x49, 0x45, 0x43} // 5a Z
,{0x00, 0x7f, 0x41, 0x41, 0x00} // 5b [
,{0x02, 0x04, 0x08, 0x10, 0x20} // 5c ВҐ
,{0x00, 0x41, 0x41, 0x7f, 0x00} // 5d ]
,{0x04, 0x02, 0x01, 0x02, 0x04} // 5e ^
,{0x40, 0x40, 0x40, 0x40, 0x40} // 5f _
,{0x00, 0x01, 0x02, 0x04, 0x00} // 60 `
,{0x20, 0x54, 0x54, 0x54, 0x78} // 61 a
,{0x7f, 0x48, 0x44, 0x44, 0x38} // 62 b
,{0x38, 0x44, 0x44, 0x44, 0x20} // 63 c
,{0x38, 0x44, 0x44, 0x48, 0x7f} // 64 d
,{0x38, 0x54, 0x54, 0x54, 0x18} // 65 e
,{0x08, 0x7e, 0x09, 0x01, 0x02} // 66 f
,{0x0c, 0x52, 0x52, 0x52, 0x3e} // 67 g
,{0x7f, 0x08, 0x04, 0x04, 0x78} // 68 h
,{0x00, 0x44, 0x7d, 0x40, 0x00} // 69 i
,{0x20, 0x40, 0x44, 0x3d, 0x00} // 6a j
,{0x7f, 0x10, 0x28, 0x44, 0x00} // 6b k
,{0x00, 0x41, 0x7f, 0x40, 0x00} // 6c l
,{0x7c, 0x04, 0x18, 0x04, 0x78} // 6d m
,{0x7c, 0x08, 0x04, 0x04, 0x78} // 6e n
,{0x38, 0x44, 0x44, 0x44, 0x38} // 6f o
,{0x7c, 0x14, 0x14, 0x14, 0x08} // 70 p
,{0x08, 0x14, 0x14, 0x18, 0x7c} // 71 q
,{0x7c, 0x08, 0x04, 0x04, 0x08} // 72 r
,{0x48, 0x54, 0x54, 0x54, 0x20} // 73 s
,{0x04, 0x3f, 0x44, 0x40, 0x20} // 74 t
,{0x3c, 0x40, 0x40, 0x20, 0x7c} // 75 u
,{0x1c, 0x20, 0x40, 0x20, 0x1c} // 76 v
,{0x3c, 0x40, 0x30, 0x40, 0x3c} // 77 w
,{0x44, 0x28, 0x10, 0x28, 0x44} // 78 x
,{0x0c, 0x50, 0x50, 0x50, 0x3c} // 79 y
,{0x44, 0x64, 0x54, 0x4c, 0x44} // 7a z
,{0x00, 0x08, 0x36, 0x41, 0x00} // 7b {
,{0x00, 0x00, 0x7f, 0x00, 0x00} // 7c |
,{0x00, 0x41, 0x36, 0x08, 0x00} // 7d }
,{0x10, 0x08, 0x08, 0x10, 0x08} // 7e в†ђ
,{0x78, 0x46, 0x41, 0x46, 0x78} // 7f в†’
};

void LcdCharacter(char character)
{
 LcdWrite(LCD_D_, 0x00);
 for (int index = 0; index < 5; index++)
 {
   LcdWrite(LCD_D_, ASCII[character - 0x20][index]);
 }
 LcdWrite(LCD_D_, 0x00);
}

void LcdClear(void)
{
 for (int index = 0; index < LCD_X_ * LCD_Y_ / 8; index++)
 {
   LcdWrite(LCD_D_, 0x00);
 }
}

void LcdInitialise(void)
{
 pinMode(PIN_SCE_, OUTPUT);
 pinMode(PIN_RESET_, OUTPUT);
 pinMode(PIN_DC_, OUTPUT);
 pinMode(PIN_SDIN_, OUTPUT);
 pinMode(PIN_SCLK_, OUTPUT);
 digitalWrite(PIN_RESET_, LOW);
 digitalWrite(PIN_RESET_, HIGH);
 LcdWrite(LCD_C_, 0x21 );  // LCD Extended Commands.
 LcdWrite(LCD_C_, 0xB1 );  // Set LCD Vop (Contrast).
 LcdWrite(LCD_C_, 0x04 );  // Set Temp coefficent. //0x04
 LcdWrite(LCD_C_, 0x14 );  // LCD bias mode 1:48. //0x13
 LcdWrite(LCD_C_, 0x20 );  // LCD Basic Commands
 LcdWrite(LCD_C_, 0x0C );  // LCD in normal mode.
}

void LcdString(char *characters)
{
 while (*characters)
 {
   LcdCharacter(*characters++);
 }
}

void LcdWrite(byte dc, byte data)
{
 digitalWrite(PIN_DC_, dc);
 digitalWrite(PIN_SCE_, LOW);
 shiftOut(PIN_SDIN_, PIN_SCLK_, MSBFIRST, data);
 digitalWrite(PIN_SCE_, HIGH);
}

void gotoXY(int x, int y)
{
 LcdWrite(0, 0x80 | x);  // Column.
 LcdWrite(0, 0x40 | y);  // Row. 
}

// change this to match your SD shield or module;
// Arduino Ethernet shield: pin 4
// Adafruit SD shields and modules: pin 10
// Sparkfun SD shield: pin 8
const int chipSelect = 8;

void setup() {
 LcdInitialise();

 LcdClear();
 gotoXY(0,0);
 LcdString("Test!");

 // Open serial communications and wait for port to open:
 pinMode(16, OUTPUT); digitalWrite(16, LOW);
 while (!Serial) {
   ; // wait for serial port to connect. Needed for native USB port only
 }

 LcdClear();
 gotoXY(0,0);
 LcdString("Initializing SD card...");

 //Serial.print("\nInitializing SD card...");

 // we'll use the initialization code from the utility libraries
 // since we're just testing if the card is working!
 if (!card.init(SPI_HALF_SPEED, chipSelect)) { digitalWrite(16, HIGH);

 LcdClear();
 gotoXY(0,0);
 LcdString("Initialization failed.");

   //Serial.println("initialization failed. Things to check:");
   //Serial.println("* is a card inserted?");
   //Serial.println("* is your wiring correct?");
   //Serial.println("* did you change the chipSelect pin to match your shield or module?");
   return;
 } else {

 LcdClear();
 gotoXY(0,0);
 LcdString("Wiring is correct and a card is present.");

   //Serial.println("Wiring is correct and a card is present.");
 }

 // print the type of card
 //Serial.print("\nCard type: ");
 switch (card.type()) {
   case SD_CARD_TYPE_SD1:

 LcdClear();
 gotoXY(0,0);
 LcdString("Card type: SD1");

  //Serial.println("SD1");
  break;
   case SD_CARD_TYPE_SD2:

 LcdClear();
 gotoXY(0,0);
 LcdString("Card type: SD2");

  //Serial.println("SD2");
  break;
   case SD_CARD_TYPE_SDHC:

 LcdClear();
 gotoXY(0,0);
 LcdString("Card type: SDHC");

  //Serial.println("SDHC");
  break;
   default:

 LcdClear();
 gotoXY(0,0);
 LcdString("Card type: Unknown");

  //Serial.println("Unknown");
  break;
 }

 // Now we will try to open the 'volume'/'partition' - it should be FAT16 or FAT32
 if (!volume.init(card)) { digitalWrite(16, HIGH);

 LcdClear();
 gotoXY(0,0);
 LcdString("Could not find FAT16/FAT32 partition.");

   //Serial.println("Could not find FAT16/FAT32 partition.\nMake sure you've formatted the card");
   return;
 }

 // print the type and size of the first FAT-type volume
 uint32_t volumesize;

 LcdClear();
 gotoXY(0,0);
 LcdString("Volume type is FAT.");

 //Serial.print("\nVolume type is FAT");
 //Serial.println(volume.fatType(), DEC);
 //Serial.println();

 volumesize = volume.blocksPerCluster();    // clusters are collections of blocks
 volumesize *= volume.clusterCount();	   // we'll have a lot of clusters
 volumesize *= 512;						    // SD card blocks are always 512 bytes
 //Serial.print("Volume size (bytes): ");
 //Serial.println(volumesize);
 //Serial.print("Volume size (Kbytes): ");
 volumesize /= 1024;
 //Serial.println(volumesize);
 //Serial.print("Volume size (Mbytes): ");
 volumesize /= 1024;
 //Serial.println(volumesize);


 //Serial.println("\nFiles found on the card (name, date and size in bytes): ");
 root.openRoot(volume);

 // list all files in the card with date and size
 root.ls(LS_R | LS_DATE | LS_SIZE);

 LcdClear();
 gotoXY(0,0);
 LcdString("Test!");
}


void loop(void)
{

}

Очень прошу, помогите!

Нужно сделать до понедельника.

Спросить больше не у кого.

Ссылка на комментарий
Поделиться на другие сайты

Реклама: ООО ТД Промэлектроника, ИНН: 6659197470, Тел: 8 (800) 1000-321

20% скидка на весь каталог электронных компонентов в ТМ Электроникс!

Акция "Лето ближе - цены ниже", успей сделать выгодные покупки!

Плюс весь апрель действует скидка 10% по промокоду APREL24 + 15% кэшбэк и бесплатная доставка!

Перейти на страницу акции

Реклама: ООО ТМ ЭЛЕКТРОНИКС, ИНН: 7806548420, info@tmelectronics.ru, +7(812)4094849

Выбираем схему BMS для корректной работы литий-железофосфатных (LiFePO4) аккумуляторов

 Обязательным условием долгой и стабильной работы Li-FePO4-аккумуляторов, в том числе и производства EVE Energy, является применение специализированных BMS-микросхем. Литий-железофосфатные АКБ отличаются такими характеристиками, как высокая многократность циклов заряда-разряда, безопасность, возможность быстрой зарядки, устойчивость к буферному режиму работы и приемлемая стоимость. Но для этих АКБ, также как и для других, очень важен контроль процесса заряда и разряда, а специализированных микросхем для этого вида аккумуляторов не так много. Инженеры КОМПЭЛ подготовили список имеющихся микросхем и возможных решений от разных производителей. Подробнее>>

Реклама: АО КОМПЭЛ, ИНН: 7713005406, ОГРН: 1027700032161

Не вижу кнопки ответить.

Только ответить с цитатой.

В общем на аппаратный SPI просто не нужно ничего больше вешать.

Изменено пользователем Pin
Ссылка на комментарий
Поделиться на другие сайты

На самом деле на аппаратный SPI можно повесить сколько угодно устройств, для их выбора предназначены линии CS. Нормальные устройства при неактивном уровне отключаются от шины и не мешают остальным. Разумеется, у каждого устройства линия CS своя. И что-то я не вижу где вы включаете-выключаете соответствующий вывод дисплея. Кстати, в моей версии (правда, только софтовой) работы с этим дисплеем это, оказывается, реализовано.

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

Ну и, кстати, исправили бы форматирование кода. Стоит расставить отступы и осмысленные комментарии, убрать простыню с внешним видом символов в отдельный файл.

Ругался на отсутствие форматирования исходного кода (включая отсутствие осмысленных комментариев и наличие неубранного после конфигуратора мусора) не менее 15 раз.

Часть моих наработок.

Ссылка на комментарий
Поделиться на другие сайты

На самом деле на аппаратный SPI можно повесить сколько угодно устройств, для их выбора предназначены линии CS.

Вы правы, но это работает только если код обоих устройств не лежит в таймере.

Если же один из них лежит в таймере (куда ардуино иде заводит стандартные коды для работы с устройствами), будет такая же фигня как у меня сейчас.

Вообще обычно пишу в чистом AVR-GCC, но сейчас совсем нет времени.

Если не жалко, подкиньте хорошую библиотеку СД карт для AVR-GCC.

И желательно еще поясните как выставлять в ней подключения, а то, на пример в библиотеке чана, я так и не разобрался.

В основном мне нужно построчно считывать файл, это пока.

Потом нужны будут - запись в файл, удаление, создание, список файлов и папок (желательно не весь в выделив определенную папку увидеть что в ней лежит, у чана такое кажись было), и другое, и прочее...

Изменено пользователем Pin
Ссылка на комментарий
Поделиться на другие сайты

Тут помочь не могу, готовые не использовал, а самописная умеет работать только на самом низком уровне.

Ругался на отсутствие форматирования исходного кода (включая отсутствие осмысленных комментариев и наличие неубранного после конфигуратора мусора) не менее 15 раз.

Часть моих наработок.

Ссылка на комментарий
Поделиться на другие сайты

Присоединяйтесь к обсуждению

Вы публикуете как гость. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.
Примечание: Ваш пост будет проверен модератором, прежде чем станет видимым.

Гость
Unfortunately, your content contains terms that we do not allow. Please edit your content to remove the highlighted words below.
Ответить в этой теме...

×   Вставлено с форматированием.   Восстановить форматирование

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

Загрузка...
  • Последние посетители   0 пользователей онлайн

    • Ни одного зарегистрированного пользователя не просматривает данную страницу
  • Сообщения

    • @Gomerchik а вы контролировали как меняется уровень сигнала на А1 ардуины?
    • Спасибо за совет. Автором данного проекта я не являюсь, мне нужно было воссоздать уличный датчик для метеостанции взамен пропавшего(( Из разного найденного в интернете этот проект работает с моей станцией Орегон (спасибо автору). В понедельник попробую последовать Вашему совету. Но все равно куча непоняток  как блин это работает)) Если дело в неправильной отправки команды, то как на это влияет подключение датчика температуры? Если совсем не подключать таймер, то передача идет один раз (как и прописано в программе), станция принимает и отображает, но минут через сколько-то естественно станция уже ни чего не показывает, но с таймером питание полностью не пропадает с ардуинки, но передача сигнала каким-то образом работает по таймеру.  В моем понимании данная команда подается один раз потому, что таймер должен отключать питание МК после передачи сигнала и каждые 43 сек снова подавать питание (так того требует станция).  Ардуино передает показания температуры отключается полностью и 43 секунды мк не работает.  Сейчас у меня питание пока сделано на подпитке от солнечной батареи, но пару пасмурных дней и аккумулятор съедается до отключения(
    • thickman Так и сделаю. Вытащу из бу БП.  Буду знать, как отличить. Благодарю. Заменил транзисторы на IRFB20N50K. Картина стала, совсем другой.  Похоже трудность не в драйвере, на момент подвозбуда, переходные процессы, в нем, завершены. Увеличил затворные резисторы до 50ом, стало немного лучше.  Не понятно, почему верхний ключ греется несколько сильнее. Возможно, стоит посмотреть ток в коллекторе.  Снабберные емкости временно удалил, изменений не произошло.  Замена ТГР на другой, на кольце MSTN-16A-TH, так же, результата не принесла.   irfb20n50k.pdf
    • А что нить из ассортимента активных щупов производства СССР..))
    • Типа такого: https://aliexpress.ru/item/2044864227.html?sku_id=58855020183
    • поняли неправильно. У ТЛ494 никакой защиты нет, усилители ошибки не защита, они не должны приводить к ложным импульсам. Причем тут "микруха" ?  надо нагружать ВСЁ. До сих пор вообще непонятно о каком ИИП идет речь и сколько у него каналов. Бесполезно схему рисовать? - Помогать так бесполезно. Картина кривая по самое "немогу" продолжаются картинки, снятые через ногу и без цены деления.
×
×
  • Создать...