Работа с дисплеем PCD8544 (Nokia 5110) через SPI1

Тема в разделе "Iskra JS, Espruino, Йодо", создана пользователем priezz, 31 дек 2016.

  1. priezz

    priezz Нерд

    Доброго вечера, всех с наступающим Новым Годом!

    После удачного взаимодействия с дисплеем PCD8544 через SPI2 у меня возникла необходимость переключить модуль на SPI1 (+3.3 и землю беру с прежних контактов), однако никаких признаков жизни не наблюдаю. В чем может быть дело? Использую вот этот родной js модуль.

    работает:
    Код (Javascript):

    SPI2.setup({ sck: B13, mosi: B15, baud: 1048576 });
    display = NokiaDisplay(SPI2, P4 /*DC*/, P5 /*CE*/, B12 /*RST*/);
     
    не работает:
    Код (Javascript):

    SPI1.setup({ sck: A5, mosi: P3, baud: 1048576 });
    display = NokiaDisplay(SPI1, P4 /*DC*/, P5 /*CE*/, B12 /*RST*/);
     
    Причина перестановки - необходимость использования кардридера, который также подцеплен к SPI2. Тут, кстати, возникает еще один вопрос... Исходно я планировал подключить и дисплей, и кардридер через один и тот же интерфейс (разумеется, с разными пинами выбора устройства - SS). Однако, при таком подключении кардридер перестает читать файлы, хотя и успешно выводит содержимое директорий. С дисплеем при таком подключении проблем не возникает. Что это - баги в прошивке или все же неверное подключение?

    Код (Javascript):

    SPI2.setup({ sck: B13, miso: B14, mosi: B15, baud: 1048576 });
    display = NokiaDisplay(SPI2, P4 /*DC*/, P5 /*CE*/, B12 /*RST*/);
    E.connectSDCard(SPI2, P7 /*CS*/);
     
    P.S. Все выводы дисплея и кардридера (кроме +3.3/+5В) подключаю через резистор 220Ом.
    Для вывода содержимого директорий использую FS.readdirSync(), для чтения файлов - f.read(buffer.length), где f = E.openFile('filename', 'r')

    Буде рад получить любые советы и замечания.
     
  2. priezz

    priezz Нерд

    Неужто никаких предположений? Если не хватает вводных от меня, конечно же, их предоставлю.
    Вообще, форумчане, у кого-то был опыт подключения более, чем одного SPI устройства именно к Iskra JS (либо любому другому контроллеру на Espruino)?
     
  3. ИгорьК

    ИгорьК Оракул Модератор

    Это вряд ли. Для Вашего случая я бы начал с проверки качества питания: по отдельности все работает, вместе - нет. Что изменилось? Нагрузка на стабилизтор.
     
  4. priezz

    priezz Нерд

    Смущает то, что про одновременном подключении через один и тот же порт кардридер (вот такой) все же выполняет те операции, которые завязаны на модуль fs, но не методы объекта E.

    А по части работы дисплея через SPI1? Не работает ну прям совсем и не знаю, куда копать. Для проверки снимал всю прочую нагрузку с искры, менял пины земли и питания, пины DC/CS/RST - результат тот же. Саму искру и дисплей тоже пробовал другие :) Единственная общая составляющая - это пины SPI1 (их-то поменять не могу) и версия прошивки (1v89).

    Если это чем-то поможет, перемычка выставлена на VIN3-5V, но т.к. питание в данном случае идет через USB, это вряд ли имеет значение.

    Нагрузка на стабилизатор - подскажите, пж-та, что и как мерять :) Я в электричестве почти полный нуб. Можно даже без "почти" )))
     
  5. ИгорьК

    ИгорьК Оракул Модератор

    Мерять просадки стабилизатора непросто. Для особо тяжелых случаев подключенный параллельно нагрузке вольтметр может показать падение напряжения. Но если ток потребляется импульсно, вольтметр не поможет, поможет осциллограф.
    Его, ясный перец, нет.
    Что делать? Запитывать устройства с разных БП, не забывая при этом общую землю соединять.
     
  6. priezz

    priezz Нерд

    Угу, осцилографа под рукой нет, да и пользовался я им в последний раз лет 20 назад (хотя вспомнить/научиться - дело наживное)...

    С разных БП - спасибо за совет, попробую. Т.е. предположение в том, что при чтении файла нагрузка выше, чем при чтении содержимого директории, и при чтении файла на кардридере непозволительно низко проседает напряжение? По спеке кардридер питается от 4.5-5.5, т.е. падение должно быть более, чем на 10%, чтобы он совсем не работал.

    На баги в работе системных функций со SPI грешить глупо? Или все же стоит подебажить прошивку?

    Идиотский, наверное, вопрос. На контроллере по два вывода +3.3В и +5В - это просто параллельная разводка или они каждый на свой преобразователь завязаны? Из принципиальной схемы я этого не смог понять :(
     
  7. ИгорьК

    ИгорьК Оракул Модератор

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

    Там два отдельных стабилизатора.
     
  8. priezz

    priezz Нерд

    Разобрался таки, почему дисплей не работал через SPI1 (пины A5, P3). После инициализации SPI у меня шла инициализация Serial2 (пины A2, A3), из-за нее и не работало, хотя логически это объяснить не могу, пины-то не пересекаются. Перевесил коммуникацию между двумя искрами на Serial4 и теперь все в порядке. Пины A2 и A3 все равно задействую под вывод голоса, но это работе дисплея не мешает. Странно все это :)