Когда телефоны были большими, а экранчики в них маленькие, протоколы общения между ними были очень просты. Учитывая цену на них сейчас, использовать такие дисплеи в своих проектах одно удовольствие. Например, у себя в городе приобрел дисплей от 3310 всего за 55 руб.
Это монохромный дисплей разрешением 48х84 пикселя, с контроллером PCD8544 поддерживающий последовательный интерфейс связи. Для работы дисплея требуется напряжение питания 3,3В и конденсатор 4,7мкФ. Распиновка контактов:
Дисплей идет в сборе с клавиатурой и динамиком, поэтому для универсальности отрезал все лишнее и собрал вот такой модуль:
Библиотеку для работы с дисплеем в Bascom-AVR взял отсюда. Эта библиотека позволяет выводить цифровую, текстовую и графическую информацию. Для подготовки картинок нашел замечательную программу FastLCD, которая шла под компилятор FastAVR, но после небольшой доработки выходного файла изображения, можно использовать с этой библиотекой. Для примера подготовил картинку в формате BMP разрешением 48 на 84 пикселя, картинка должна быть монохромной:
В программе создаем или загружаем уже подготовленный BMP-файл. Главное сначала создать новое изображение с нужным разрешением, так как по дефолту загружается поле 128х64 пикселей.
После создания изображения, перегоняем его в массив данных для библиотеки, кнопкой BAS. Получаем следующий код:
Который необходимо привести к такому виду (перед каждой строчкой ставим Data):
data &h00,&h00,&h00,&h00,&h00,&h00,&h00,&h00 data &h00,&h00,&h00,&h00,&h00,&h00,&h00,&h80 data &hE0,&hF8,&hF8,&hF8,&hF0,&hC0,&h00,&h00 data &h08,&h08,&h18,&h38,&hF8,&hF8,&hF8,&hF8 data &hF8,&h08,&h08,&h00,&h00,&h00,&h00,&h00 data &h00,&h08,&h08,&hF8,&hF8,&h78,&h18,&h08 data &h08,&h00,&h08,&h08,&hD8,&hF8,&hF8,&hF8 data &hF8,&h78,&h08,&h08,&h08,&h08,&h18,&hF8 data &hF8,&hF0,&hF0,&hE0,&h00,&h00,&h00,&h00 data &h88,&h88,&h88,&h88,&h88,&h88,&h88,&h88 data &hF8,&h00,&h00,&h00 data &h00,&h00,&h00,&h00,&h00,&h00,&h00,&h00 data &h00,&h00,&h00,&h00,&hC0,&hF0,&h3E,&h0F data &h01,&h03,&h0F,&h3F,&hFF,&hFF,&hFE,&hF8 data &hE0,&h00,&h00,&h00,&h01,&h07,&h1F,&hFF data &hFF,&hFF,&hFC,&hF0,&h80,&h00,&h00,&h00 data &hC0,&hF8,&h1F,&h07,&h01,&h00,&h00,&h00 data &h00,&h00,&h80,&hF8,&hFF,&hFF,&hFF,&h7F data &h27,&h60,&hE0,&hE0,&hF0,&hF8,&hDC,&h1F data &h0F,&h0F,&h07,&h01,&h00,&h00,&h00,&h00 data &h78,&h44,&h44,&h44,&h44,&h78,&h50,&h48 data &h44,&h00,&h00,&h00 data &h00,&h00,&h00,&h00,&h00,&h00,&h80,&h80 data &hC0,&hE0,&hF8,&hFE,&hC7,&h81,&h81,&h01 data &h01,&h01,&h01,&h01,&h81,&h87,&hFF,&hFF data &hFF,&hFF,&hFC,&hE0,&hC0,&h80,&h80,&h00 data &h03,&h1F,&h7F,&hFF,&hFF,&hFE,&h7C,&h0F data &h03,&h00,&h00,&h00,&h00,&h80,&h80,&h80 data &hC0,&hF8,&hFF,&hFF,&hFF,&hFF,&hCF,&h80 data &h80,&h00,&h01,&h07,&h1F,&h7F,&hFF,&hFF data &hFC,&hF0,&hC0,&h80,&h80,&h00,&h00,&h00 data &h7C,&h04,&h08,&h08,&h10,&h20,&h20,&h40 data &h7D,&h00,&h00,&h00 data &h00,&h00,&h00,&h00,&h00,&h00,&h00,&h00 data &h00,&h00,&h00,&h00,&h08,&h08,&hF8,&hF8 data &hF8,&h08,&h00,&h00,&h00,&h00,&h00,&h00 data &h00,&h00,&h00,&h00,&h00,&h00,&h00,&h00 data &h00,&h00,&h00,&h00,&h00,&h00,&h00,&h18 data &h18,&h18,&h00,&h00,&h00,&h00,&h00,&h00 data &h00,&h00,&h00,&h00,&h00,&h00,&h00,&h00 data &h00,&h00,&h00,&h00,&h00,&h00,&h00,&h00 data &h00,&h00,&h00,&h00,&h00,&h00,&h00,&h00 data &h3E,&h22,&h22,&h22,&h22,&h22,&h22,&h22 data &h3E,&h00,&h00,&h00 data &h00,&h00,&h00,&h00,&h00,&h00,&hF8,&hFC data &hFE,&h07,&h01,&h81,&hF1,&hFF,&hFF,&h1F data &h00,&h00,&h78,&hFC,&hFE,&h93,&h11,&h19 data &h0F,&h8F,&h46,&h80,&h8E,&h9E,&h1F,&h39 data &hF9,&hF3,&hE3,&h03,&h01,&hE1,&hFF,&hFF data &h1F,&h00,&h00,&h00,&hF8,&hFC,&hFE,&h07 data &h03,&h01,&hE1,&hFE,&hFF,&h1F,&h01,&h01 data &h81,&hFF,&hFF,&h7F,&h06,&h02,&hF1,&hFF data &hFF,&h1E,&h00,&h00,&h00,&h00,&h00,&h00 data &h9F,&h90,&h90,&h90,&h90,&h90,&h90,&h90 data &h9F,&h00,&h00,&h00 data &h00,&h00,&h00,&h00,&h00,&h00,&h00,&h01 data &h01,&h01,&h01,&h00,&h00,&h01,&h01,&h01 data &h01,&h00,&h00,&h00,&h01,&h01,&h01,&h01 data &h01,&h00,&h00,&h00,&h01,&h01,&h01,&h01 data &h01,&h00,&h00,&h00,&h00,&h00,&h01,&h01 data &h01,&h01,&h00,&h00,&h0C,&h1D,&h19,&h11 data &h19,&h1F,&h0F,&h07,&h01,&h00,&h00,&h00 data &h01,&h01,&h01,&h00,&h00,&h00,&h00,&h01 data &h01,&h01,&h01,&h00,&h00,&h00,&h00,&h00 data &h10,&h10,&h10,&h10,&h10,&h10,&h10,&h10 data &h1F,&h00,&h00,&h00
Теперь копируем подготовленный массив в файл 3310bmp1.bas Компилируем и наблюдаем следующую картину:
А вот как это выглядит вживую:
Дисплей позволяет выводить информацию как в нормальном отображении:
Так и в инверсном:
Исходники хорошо комментированы, поэтому проблем с выводом информации на дисплей возникнуть не должно. Файлы проекта можно скачать ниже:
фак йех! глянул у себя, аналогично! Вплоть до 13Мгц показывает как надо, дальше теряет сигнал. Причем такое наблюдается по всему диапазону частот, ставил в программе 2,5 Мгц в симуляторе 2 Мгц, показывает правильно.
...заметил странную особенность : при работе программы с частотой 10 МГц а в протеусе в опциях контроллера выставлено 8 МГц - температура датчика отображается корректно во всем диапазоне температур! Картинки тоже ок. Это только у меня так?
Жаль, конечно. Но спасибо и за это! Вопрос немножко не по теме, думаю будет интерестен не только мне - а есть наработки с дисплеем на контроллере LS020 от Siemens CX65?
Отлично! Заметил что протеус хреново работает с датчиком 18b20, иногда нормально показываем, иногда чёрти-что. С данной библиотекой никак( выше я описал принцип вывода информации на дисплей, она происходит побайтно и поэтому максимумальная высота знакоместа 8 точек. Придется придумывать свой алгоритм работы с контроллером дисплея.
Проверил все в железе, делал на Меге8, все работает. Спасибо за консультацию. Есть еще вопросик: как создать свой шрифт? Мне нужны цифры почти на весь размер дисплея.
присвоение надо делать наоборот: Y=T1 да и от самой переменной Y можно избавиться, сразу делать преобразование переменной T1: Temp_d=Str(T1) а так вроде все верно, должно работать. К сожалению нет возможности проверить в железе, а протеус показывает ерунду, так что попробуйте прошить микроконтроллер.Удачи!
...код тоже остался на работе. Проблема в отображении температуры. При подключении (в протеусе пока) индикатора 2х16 - все нормально. А при использовании дисплея от Нокии - какие-то случайные цифры. После выходных выложу наброски программы.
Без проблем, но только после 6 июля, когда из отпуска выйду - я этим на работе занимался, все там кроме собственно девайса - он на выявлении глюков дома.
привет всем! А можно взглянуть на исходник термометра? Сейчас занимаюся тем же, только для бойлера. Не получается выводить на индикатор цифровые значения. Хотелось бы взглянуть как это реализовано у вас
Поздравляю ! Теперь сможете фиксировать аномальную летнюю жару, это скоро будет актуально Просмотрел тему на радиокоте с вашим термометром, зачетно получилось =)
Доброго времени суток ! Спасибо, символ градуса получился. Сделал на основе ваших примеров термометр с выводом на этот экран, только добавил отображение десятых долей градуса и максимум/минимум за время измерения. На меге8, работает !"
Высота фиксирована 7 пикселей на шрифт +1 пиксель на межстрочное расстояние, итого 8 пикселей на одну строку. Связано с тем, что запись в контроллер дисплея идет побайтно - отправили один байт, закрасили один столбик, и так 6 раз (5 на символ +1 на отступ). Поэтому надо будет выводить как картинку или рисовать свои символы, разбивать на части и эти части выводить в разных строках. Другого пока придумать не смог