Как подключить LCD экран от кассового аппарата ЭКР-2102 к Ардуино
Как-то просматривая объявления на OLX, я наткнулся на распродажу старой электроники по очень низким ценам, в итоге было куплено три кассовых аппарата и один модем (на разбор с целью пополнения запасов). Цена вопроса 1500 тенге — примерно 250 рублей.
Разобрав это добро я стал обладателем трех ЖК дисплеев и трех чековых принтеров.
Как подключить дисплей к Ардуино? На плате ЖК дисплея было обнаружено несколько надписей. 5104219-01, 251 12, 251-Т2. Использована микросхема Holtek HT1621B, datasheet был скачан и изучен. К сожалению, тип используемого ЖКИ так и не был опознан.
Прозвонив тестером выводы (6 выводов) я определил их назначение:
1) Data
2) WR
3) CS
4) неизвестно*
5) Gnd
6) Vdd (+5 v)
* — подключены резисторы, конденсаторы, поскольку мне нужно было, я и не разбирался глубоко.
Я использовал готовые процедуры для работы с портами HT1621 из Ардуино.
Микросхема HT1621 128 ячеек для ЖКИ, которые организованы следующим образом 32×4 bits, в памяти это 16 байт. В моем ЖКИ были подключены выводы Com0, Com1, Com2 и все сегменты 0-31.
Для определения какой адрес и какой бит отвечает за какой сегмент была написана простая программа, которая перебирает все адреса и все биты. Результаты были записаны в электронную таблицу для последующего анализа. Вот так выглядит заполненная таблица.
Теперь стало ясно, как управлять дисплеем. Так, например, чтобы включить сегменты B и C в первой позиции (самая левая) нужно изменить биты D5 и D6 на 1 по адресу 0x05, остальные биты должны быть оставлены без изменений, поскольку они повлияют на другие позиции.
Если обратить внимание на таблицу, можно увидеть, что для отображения какой — либо цифры нужно поменять несколько битов в нескольких байтах. Эту задачу я решил следующим образом. Были подготовлены несколько таблиц:
- HT1621_Address(72 байта), HT_1621_Value(72 байта)
- b7SegDsp(10 байт)
- HT1621_Screen(16 байт)
HT1621_Address(72 байта), HT_1621_Value(72 байта) эти две таблицы связаны между собой следующим образом — вторая таблица представляет собой маску (для OR) для установки соответствующего бита в 1, причем первые девять байтов отвечают за сегменты A,B,C,D,E,F,G + десятичную точку + вернее «подчеркивание» первого знакоместа, следующие девять — за сегменты второго знакоместа, и так далее. Первая таблица — представляет собой адреса, которые соответствуют второй таблице. Для понимания внизу приведена иллюстрация.
b7SegDsp(10 байт) Эта таблица кодирует какие сегменты должны включаться для отображения числа.Первый байт — это кодирование числа 0, последний байт кодирует 9. Старшие семь бит D7-D1 кодируют сегменты A-G, младший D0 — не используется, я его установил в 0, кроме того, это экономит одну операцию битового сдвига влево — я использую маску 0x80 для проверки бита.
HT1621_Screen(16 байт) просто видеопамять, все 16 байтов. Вначале рендерится все в память, а затем все копируется в HT1621.
Ниже код, который выполняет рендеринг в HT1621_Screen, который потом просто выводится в память микросхемы для отображения.
Подключение ht1381 к ардуино
Я так понял, с ней можно общаться с помощью USART ? Никогда раньше не имел с этим дела. Подскажите, как на примере. С помощью каких операторов. Пик 16F877A.
![]() | ![]() |
ЯНДЕКС | Дата: 01.10.2012 |
anatol | Дата: Пн, 01.10.2012, 22:54 | Сообщение # 2 | |
![]() | mikhail09p, USART где нашел? Serial не равно USART . И вообще где ее выкопал? | |
|
mikhail09p | Дата: Пн, 01.10.2012, 23:12 | Сообщение # 3 | |
![]() | Где нашёл вопрос не стоит. Она есть и нужно запустить. Тут интерфейс SPI, я понял. Она очень похожа на DS1302, я правильно понимаю? Помогите запустить. | |
|
ivan_fd | Дата: Пн, 01.10.2012, 23:25 | Сообщение # 4 |
![]() | Если понимаете немного Паскаль, то вот. Unit for access to Real Time Clock (RTC) Holtek HT1380 or HT 1381 2007 Ramon Domingo Retamar Pin connection PIC18F452 HT1380 (see schematic example) RE0 (pin 8) —-> SCLK (pin 7) See example schematic (png format) here: // Copy n bits between variables (or registers) // Convert A byte variable to string (2 digits with pad-left-zeros) // Send pulse to SLCK line (RE0) // Send one byte to RTC (LSB first) // Send Command and Data (2 bytes) // Send Command byte and read Data byte // Set chip flags on first power-on // Get seconds from RTC // Get minutes from RTC // Get hours from RTC // Get days from RTC (1..31) // Get month from RTC (1..12) // Get day of week from RTC (1..7) // Get year (0..99) // Return time from RTC as string (format is hh:mm:ss) // Return date from RTC as string (format is dd/mm/yy) // Set time to RTC // Set date to RTC // Check if RTC is blank on first power on (test Year register) // Set date/time registers in read-only mode // Enable date/time registers write Var Const // Day names // // Copy n bits between variables (or registers) // Send pulse to SLCK line (RE0) // Send one byte to RTC (LSB first) // Send Command and Data (2 bytes) // Send Command byte and read Data byte // // Get minutes from RTC // Get hours from RTC // Get days from RTC (1..31) // Get month from RTC (1..12) // Get day of week from RTC (1..7) // Get year (0..99) // Convert A byte variable to string (2 digits with pad-left-zeros) // Return time from RTC as string (format is hh:mm:ss) // Return date from RTC as string (format is dd/mm/yy) // Set time to RTC // Set date to RTC // Check if RTC is blank (using Year register) // Set date/tme registers in read-only mode // Enable date/time registers write // Set chip flags on first power-on. detector |