Дисплей 16х1 от ККМ "Элвес Микро"

RomYch13
Offline
Зарегистрирован: 05.06.2017

Здравствуйте!

Отковырял от списанного кассового аппарата "Элвес Микро" блок индикации с дисплеем 16х1. Документацию на данный дисплей в Интернете найти не удалось. Подключил его к UNO (порты А4 и А5). Хочу в дальнейшем применить его в каком-нибудь своем устройстве, но пока не получается найти с ним общий язык.

Схема подключения такая:

Скетч для отладки:

#include <Wire.h> 
#include <LiquidCrystal_I2C.h>

LiquidCrystal_I2C lcd(0x27,16,1);  

void setup()
{
  lcd.init();
  lcd.init();
  lcd.backlight();
}


void loop()
{
  lcd.print("Hello, world!");
}

Компиллируется без ошибок, но дисплей не работает. Думаю, что или подключаюсь не к тем контактам, хотя пробовал менять местами А4 и А5, или адрес не верный.

Подскажите, пожалуйста, как еще можно попробовать "договориться" с дисплеем.

DetSimen
DetSimen аватар
Offline
Зарегистрирован: 25.01.2017

а с чего ты взял, что адрес у него 0х27?  И что он вапще по i2c подключается? 

RomYch13
Offline
Зарегистрирован: 05.06.2017

Ну... на схеме с сайта производителя выводы DDAT и DCLK, наверное, и есть i2c. "Но это не точно"

Адрес от балды, так как информацию по этому дисплею не нашел.

ua6em
ua6em аватар
Offline
Зарегистрирован: 17.08.2016

Запустить сканер I2C - он увидел?

b707
Offline
Зарегистрирован: 26.05.2017

RomYch13 пишет:

Ну... на схеме с сайта производителя выводы DDAT и DCLK, наверное, и есть i2c. "Но это не точно"

Адрес от балды, так как информацию по этому дисплею не нашел.

чето фигня какая-то. У меня никак не складывается. как это "схема на сайте производителя" есть, а "информации в инете не нашел"

Зачем в скетче два раза lcd.init() - чтоб до дисплея лучше доходило? :)

dimax
dimax аватар
Offline
Зарегистрирован: 25.12.2013

RomYch13, да по пинам видно что это обычный "серийник" , к I2C не имеет никакого отношения. Без документации на формат данных  заюзать неполучится, киньте это в помойку и не морочьте голову себе и нам  :)

DetSimen
DetSimen аватар
Offline
Зарегистрирован: 25.01.2017

b707 пишет:

RomYch13 пишет:

Ну... на схеме с сайта производителя выводы DDAT и DCLK, наверное, и есть i2c. "Но это не точно"

Адрес от балды, так как информацию по этому дисплею не нашел.

чето фигня какая-то. У меня никак не складывается. как это "схема на сайте производителя" есть, а "информации в инете не нашел"

Вот я тоже хотел за это спросить. :) 

DetSimen
DetSimen аватар
Offline
Зарегистрирован: 25.01.2017

Перед помойкой, для успокоения совести, запусти всёжэ I2C сканер, на всякий случай. 

sadman41
Offline
Зарегистрирован: 19.10.2016

b707 пишет:

Зачем в скетче два раза lcd.init() - чтоб до дисплея лучше доходило? :)

В экземпле к ликвидкристал-и2с два инита стоит ;) Зачем - не понимаю.

ЕвгенийП
ЕвгенийП аватар
Offline
Зарегистрирован: 25.05.2015

Так сканер-то будем запускать, или мозг будем выносить? Уж два часа как спросили! 

ЕвгенийП
ЕвгенийП аватар
Offline
Зарегистрирован: 25.05.2015

RomYch13 пишет:
Документацию на данный дисплей в Интернете найти не удалось.

Я ахреневаю, дорогая редакция!

Запрос в гугл "Элвес Микро схема" и первый же результат - полный комплект принципиальных и монтажных схем на этот кассовый аппарат, включая и "блок индикации", как там этот дисплей называется.

sadman41
Offline
Зарегистрирован: 19.10.2016

ЕвгенийП пишет:

Запрос в гугл "Элвес Микро схема" и первый же результат - полный комплект принципиальных и монтажных схем на этот кассовый аппарат, включая и "блок индикации", как там этот дисплей называется.

У вас интернет другой системы. Дорогой, наверное, поэтому там больше информации по дисплеям.

ЕвгенийП
ЕвгенийП аватар
Offline
Зарегистрирован: 25.05.2015

Наверное. Кстати, глянул на схему .... мда, там экран ITS-E0806SRNP и перед ним 8 сдвиговых регистров CD4015BCM. Значит никакого I2C там, разумеется и близко нет. Работать с дисплеем как-то само собой можно, но надо разбираться с даташитом ITS-E0806SRNP а потом "кормить" его через сдвиговые регистры.

RomYch13
Offline
Зарегистрирован: 05.06.2017

ЕвгенийП пишет:

Так сканер-то будем запускать, или мозг будем выносить? Уж два часа как спросили! 

Железка дома, а я на работе :)

Кстати, при сканировании надо "подтягивать" А4 и А5 резисторами по 10кОм к +5В?

ua6em
ua6em аватар
Offline
Зарегистрирован: 17.08.2016

RomYch13 пишет:

ЕвгенийП пишет:

Так сканер-то будем запускать, или мозг будем выносить? Уж два часа как спросили! 

Железка дома, а я на работе :)

Кстати, при сканировании надо "подтягивать" А4 и А5 резисторами по 10кОм к +5В?

Надо, если в дисплее оные не распаяны

ЕвгенийП
ЕвгенийП аватар
Offline
Зарегистрирован: 25.05.2015

ua6em пишет:

Надо, если в дисплее оные не распаяны

Особенно если в CD4015BCM откуда-нибудь I2C возьмётся :)

RomYch13
Offline
Зарегистрирован: 05.06.2017

Как и ожидалось, не сканируется железяка.

Но визуально сильно отличается от документации, возможно у меня какая-то более поздняя версия.

svm
Offline
Зарегистрирован: 06.11.2016

Вот что получилось на варианте дисплея на восьми CD4015BCM:

/*
 * Распайка индикатора на CD4015 со стороны индикатора первая нога левая
 * 1 - DRES
 * 2 - ACCLO  красный светодиод
 * 3 - CHARGE зеленый светодиод
 * 4 - DCLK
 * 5 - DDAT
 * 6 - NC
 * 7 - UCC 5V
 * 8 - UCC 5V
 * 9 - GND
 * 10- GND
 */



int resPin = 2;
int clockPin = 3;
int dataPin = 4;

int simv[11]={//          знакогенератор
B11111100, //0                _____
B10000100, //1               | D6  |
B11011001, //2           D5  |     | D7
B11001101, //3               |_____|
B10100101, //4               | D0  |                
B01101101, //5           D4  |     | D2
B01111101, //6               |_____| o D1
B11000100, //7                 D3
B11111101, //8
B11101101, //9
B00000000, //пусто
};
void setup() {
  pinMode(resPin, OUTPUT);
  pinMode(clockPin, OUTPUT);
  pinMode(dataPin, OUTPUT);
  // ******** СБРОС РЕГИСТРОВ ******
  digitalWrite(resPin, HIGH);
  digitalWrite(resPin, LOW);
}
void loop() {
  for (int i = 0; i < 8; i++) {
  shiftOut(dataPin, clockPin,LSBFIRST,simv[i]);}
  delay(3);
}

Скетч выводит цифры от 0 до 7. 

RomYch13
Offline
Зарегистрирован: 05.06.2017

Нет, к сожалению, не работает.

svm
Offline
Зарегистрирован: 06.11.2016

RomYch13 пишет:

Нет, к сожалению, не работает.

Я тоже проверял, на CD4015 - без проблем. А эти не хотят, хотя судя по схемам сигналы- те же. И никакой документации по ним не нашел.

RomYch13
Offline
Зарегистрирован: 05.06.2017

svm пишет:

... никакой документации по ним не нашел.

Аналогично

vladimir_62
Offline
Зарегистрирован: 18.01.2019

Если еще актуально...

Недавно попался мне такой. Работает по протоколу holtek HT1621. В инете есть инфа.

Подключил к LPC2146 (эклз из помойки :) ). Если нужен быстрокод для тестов - могу поделиться

ВН
Offline
Зарегистрирован: 25.02.2016

+1 за отзывчивость!

а код выкладывайте, если не ТС, то может кому другому пригодится

и тема будет завершенной

vladimir_62
Offline
Зарегистрирован: 18.01.2019
#include <LPC214x.h>
#include "ht1621.h"

#define BIAS 0x52
#define OSC 0x18 //System clock source, on-chip RC oscillator
#define SYSEN 0x01 //Turn on system oscillator
#define LCDON 0x03 //Turn on LCD bias generator
#define LCDOFF 0x04
#define BIAS12 0x24 //0010-abX0-X LCD 1/2 bias option ab=00: 2 commons option ab=01: 3 commons option ab=10: 4 commons option
#define BIAS13 0x29 //0010-abX1-X LCD 1/3 bias option ab=00: 2 commons option ab=01: 3 commons option ab=10: 4 commons option
#define TONE4K 0x40 //Tone frequency, 4kHz
#define F128   0xA7 //Time base/WDT clock output:128Hz The WDT time-out flag after: 1/32s 
#define IRQEN  0x88 //Enable IRQ output
#define WDTEN  0x06 //Enable time base output

void wr_Data(uint8_t pos, uint8_t val, uint16_t mask,uint8_t s);
uint8_t i,m,m1;

uint8_t arr1[18][3]={
{ 0xBC , 0xAC,0x8A}, //0
{ 0xB0 , 0xAC,0x80}, //1
{ 0xB4 , 0xA8,0x8E}, //2
{ 0xB0 , 0xAC,0x8E}, //3
{ 0xB8 , 0xAC,0x84}, //4
{ 0xB8 , 0xA4,0x8E}, //5
{ 0xBC , 0xA4,0x8E}, //6
{ 0xB0 , 0xAC,0x88}, //7
{ 0xBC , 0xAC,0x8E}, //8
{ 0xB8 , 0xAC,0x8E}, //9
{ 0xBC , 0xAC,0x8C}, //A
{ 0xBC , 0xA4,0x86}, //b
{ 0xBC , 0xA0,0x8A}, //C
{ 0xB4 , 0xAC,0x86}, //d
{ 0xBC , 0xA0,0x8E}, //E
{ 0xBC , 0xA0,0x8C}, //F
{ 0xB0 , 0xA0,0x84}, //-
{ 0xB0 , 0xA0,0x80}};//

uint16_t arr2[18][3]={
{ 0x14E , 0x4A,0x34}, //0
{ 0x146 , 0x40,0x30}, //1
{ 0x14C , 0x46,0x34}, //2
{ 0x14E , 0x46,0x30}, //3
{ 0x146 , 0x4C,0x30}, //4
{ 0x14A , 0x4E,0x30}, //5
{ 0x14A , 0x4E,0x34}, //6
{ 0x14E , 0x40,0x30}, //7
{ 0x14E , 0x4E,0x34}, //8
{ 0x14E , 0x4E,0x30}, //9
{ 0x14E , 0x4C,0x34}, //A
{ 0x142 , 0x4E,0x34}, //b
{ 0x148 , 0x4A,0x34}, //C
{ 0x146 , 0x46,0x34}, //d
{ 0x148 , 0x4E,0x34}, //E
{ 0x148 , 0x4C,0x34}, //F
{ 0x140 , 0x44,0x30}, //-
{ 0x140 , 0x40,0x30}};//


uint16_t arr3[18][3]={
{ 0x2E , 0x1A,0x04}, //0
{ 0x26 , 0x10,0x00}, //1
{ 0x2C , 0x16,0x04}, //2
{ 0x2E , 0x16,0x00}, //3
{ 0x26 , 0x1C,0x00}, //4
{ 0x2A , 0x1E,0x00}, //5
{ 0x2A , 0x1E,0x04}, //6
{ 0x2E , 0x10,0x00}, //7
{ 0x2E , 0x1E,0x04}, //8
{ 0x2E , 0x1E,0x00}, //9
{ 0x2E , 0x1C,0x04}, //A
{ 0x22 , 0x1E,0x04}, //b
{ 0x28 , 0x1A,0x04}, //C
{ 0x26 , 0x16,0x04}, //d
{ 0x28 , 0x1E,0x04}, //E
{ 0x28 , 0x1C,0x04}, //F
{ 0x20 , 0x14,0x00}, //-
{ 0x20 , 0x10,0x00}};//
//первый разряд не подключен. здесь каша: 
uint16_t arr4[18][3]={
{ 0x15A , 0x16E,0x08}, //0
{ 0x150 , 0x162,0x08}, //1
{ 0x154 , 0x16E,0x08}, //2
{ 0x150 , 0x16E,0x08}, //3
{ 0x158 , 0x16E,0x08}, //4
{ 0x158 , 0x16E,0x00}, //5
{ 0x15C , 0xA4,0x00}, //6
{ 0x150 , 0xAC,0x08}, //7
{ 0x15C , 0xAC,0x08}, //8
{ 0x158 , 0xAC,0x08}, //9
{ 0x15C , 0xAC,0x08}, //A
{ 0x15C , 0xA4,0x00}, //b
{ 0x15C , 0xA0,0x00}, //C
{ 0x154 , 0xAC,0x08}, //d
{ 0x15C , 0xA0,0x00}, //E
{ 0x15C , 0xA0,0x00}, //F
{ 0x150 , 0xA0,0x00}, //-
{ 0x150 , 0xA0,0x00}};//

int main(void)
{
IO0DIR |= ddat|dclk|dres| (1<<20);// ноги именованы как на схеме. 20 - порт для светодиода
	
cs(1,1); delay(20);	
out_cmd (0x0C); 
out_cmd (0x18); 
out_cmd (0xE3);	
 
out_cmd (0x01);//(0b00000001); //SYSTEM ENABLE
out_cmd (0x03);//(0b00000011);    //TURN ON LCD     
out_cmd (0x29);//(0b00101000); //BIAS & COM 
//out_cmd (0x09);//(0b00000001); //beep
//	out_cmd (0x24); //elves
out_cmd (0x88); // on led
clear_all();


for (m1=0;m1<255;m1++)
{
out_cmd (0x29);
for (m=0;m<7;m++)
{

wr_Data(8, m1&0x1F, 0x200,m);
delay1(4000000);	
IOSET0=(1<<20);	

delay1(4000000);	
IOCLR0=(1<<20);	
}
}

ddat0;
dclk0;
while (1)
{}
}

void wr_Data(uint8_t pos, uint8_t val, uint16_t mask,uint8_t s)//(про запас, что выводим, маска, знакоместо - справа налево). самый левый разряд с косяком
	{
uint16_t i,i1,m1,d;
//=======================		
if (s==5)
{
	for (i = 0; i < 3; i++)
	{
	cs(0,1);	m1=mask;
	SendBit(0x05,3,0,0x4);//cmd 101,3 bit,>>	
		for (i1 = 0; i1 < 10; i1++)		
	{	
	d=arr2[val][i];
	if(d&m1) {ddat1;}	else 	{ddat0;}; delay(2);dclk1;delay(5);dclk0;delay(5);m1>>=1;
	}
	cs(1,1);
	}
}
else if (s==6)
//==========================
{
	for (i = 0; i < 3; i++)
	{
	cs(0,1);	m1=mask;
	SendBit(0x05,3,0,0x4);//cmd 101,3 bit,>>	
		for (i1 = 0; i1 < 10; i1++)		
	{
	d=arr3[val][i];
	if(d&m1) {ddat1;}	else 	{ddat0;}; delay(2);dclk1;delay(5);dclk0;delay(5);m1>>=1;
	}
	cs(1,1);
	}
}
else if (s==7)
//==========================
{
	for (i = 0; i < 3; i++)
	{
	cs(0,1);	m1=mask;
	SendBit(0x05,3,0,0x4);//cmd 101,3 bit,>>	
		for (i1 = 0; i1 < 10; i1++)		
	{
	d=arr4[val][i];
	if(d&m1) {ddat1;}	else 	{ddat0;}; delay(2);dclk1;delay(5);dclk0;delay(5);m1>>=1;
	}
	cs(1,1);
	}
}
else
//=========================
{	
	for (i = 0; i < 3; i++)
	{
	cs(0,1);	m1=mask;
	SendBit(0x05,3,0,0x4);//cmd 101,3 bit,>>	
		for (i1 = 0; i1 < 10; i1++)		
	{	
	if(i==2){d=(arr1[val][i]+0x10-0x10*s);}else{d=arr1[val][i]	+0x20*s;}
	if(d&m1) {ddat1;}	else 	{ddat0;}; delay(2);dclk1;delay(5);dclk0;delay(5);m1>>=1;
	}
	cs(1,1);
}
}	
}

==========================

ht1621.h

==========================

#include <stdint.h>
#include <LPC214x.h>
#define ddat (1<<4) //P0
#define dclk (1<<5) //P0
#define dres (1<<6) //P0
#define ddat0 IOCLR0=ddat //как на разъеме
#define ddat1 IOSET0=ddat
#define dclk0 IOCLR0=dclk
#define dclk1 IOSET0=dclk
#define dres0 IOCLR0=dres
#define dres1 IOSET0=dres
#define t20 delay(20)
#define t10 delay(10)
#define t15 delay(15)
#define t5 delay(5)
 
void cs(uint8_t b,uint8_t t);
void delay(uint8_t n);
void delay1(uint32_t n);
 
void SendBit(uint16_t data,uint8_t cnt,uint8_t dir,uint16_t mask) 
{
uint8_t i;
 
for(i =0; i<cnt; i ++)
{
if(data&mask) { ddat1;} else {ddat0;};
delay(2);dclk1;delay(5);dclk0;delay(5);
 
if (dir) {mask<<=1;} else 
{mask>>=1;}}}
 
void cs(uint8_t b,uint8_t t){dclk0;
if (b ==1) {delay(t);dres1;} else {dres0;delay(t);}} 
 
void out_cmd(uint8_t cmd){
 
cs(0,1); // CS LOW
SendBit(0x4,3,0,0x4);//cmd 100
SendBit(cmd,8,0,0x80);//8 bit,cmd,>>
SendBit(0,1,0,0x0);//1 bit,X,>>
cs(1,1); // CS HIGH 
}       
 
void out_data(uint8_t temp1, uint8_t addr)
{
cs(0,1); // CS LOW
SendBit(0x05,3,0,0x4);//cmd 101,3 bit,>>
SendBit(addr,6,0,0x20);//addr 6bit,>>
SendBit(temp1,4,1,0x01); //4bit,<<
cs(1,5); // CS HIGH 
}       
 
void clear_all(void)
{
uint8_t i;
cs(0,1); // CS LOW
SendBit(5,3,0,4);//cmd 101,3 bit,>>
SendBit(0,6,0,0x20);//addr 6bit,>>
ddat0;
for(i =0; i<127; i ++)
{ dclk1;delay(2); dclk0;delay(2);}
cs(1,5); // CS HIGH 
}       
 
/******************************************************/
void delay(uint8_t n)
{
uint8_t k;
n=n*2;
for(k = 0 ; k < n ; k ++);
}
 
void delay1(uint32_t n)
{
uint32_t k;
for(k = 0 ; k < n ; k ++);
}
 

 

svm
Offline
Зарегистрирован: 06.11.2016

vladimir_62 пишет:

Недавно попался мне такой. Работает по протоколу holtek HT1621. В инете есть инфа.

Подключил к LPC2146 (эклз из помойки :) ). Если нужен быстрокод для тестов - могу поделиться

Если протокол НТ1621, то ваш код немного отличается от обычного для библиотеки ht1621. Или требуется некая перекодировка? 

И второй вопрос по поводу использования ЭКЛЗ. Вы использовали его процессор для управления индикатором?

vladimir_62
Offline
Зарегистрирован: 18.01.2019

Пока разбирался с этим дисплеем, пришлось переписать под себя библиотеку. Выяснилось, что разработчики платы сильно не заморачивались каким либо упорядочиванием соответствия адрес/сегмент. Если в правой половине хоть каке-то правила соблюдены, то первые три знакоместа просто развели как получится (под них пришлось выделять индивидуальные массивы кодировки). В результате первый разряд индикатора  так и не подключил полноценно, в силу пересечения адресов пары сегментов со 2-м разрядом. К стати и в ккм первое знакоместо не используется полностью.

По эклз инфа взята отсюда (спасибо автору): http://www.kovlev.ru/eklz.html

На плате эклз снесен криптопроцессор за ненадобностью. Все остальное присутствует для экспериментов и изучения матчасти.   

Хотел прикрепить фото своего чудо-макета, но что-то сайт не захотел принять. 

svm
Offline
Зарегистрирован: 06.11.2016

Что-то компилироваться не хочет, возможно из-за отсутствия библиотеки LPS214x.h. У Вас нет более детального описания протокола обмена. От 1621 скорее всего отличия значительные. Во всяком случае у нее отсутствует звук. И что-то странное с бардаком в разрядах. По идее все сегменты индикатора соединены внутри дисплея и такого быть не должно. Просто какая-то хитрая адресация. И возможно у Вас немного не такой дисплей. У вас в комментариях упоминается возможность программного включения светодиода. На моих платах стоят два светодиода, напрямую выведенные на разъем.

vladimir_62
Offline
Зарегистрирован: 18.01.2019

давайте по порядку - чем пользуетесь ? я использую Keil (для ARM) и все здесь под него заточено. просто компилите и все.

в описании 1621 действительно нет команды на включение подсветки (я говорю про светодиоды - это подсветка дисплея 88h). не хотел про это упоминать - но подсказала это мне ida. к стати и основная последовательность команд инициализации (1,3,24,40,e3,a7,6) от нее же.  два led (red и green) "живут" самостоятельно и к 1621 отношения не имеют. в моем коде к ним нет обращения - можно зацепить на P0.20. это у меня тестовый led и сидит на плате эклз на разъеме.

vladimir_62
Offline
Зарегистрирован: 18.01.2019

и еще - у Вас точно UTC (P-D030801CT-E) ? с каплей на плате ? просто у элвес-микро было две модификации дисплеев - вот этот и на дискретных регистрах, как в документации на ккм. 

vladimir_62
Offline
Зарегистрирован: 18.01.2019

да, и про звук вот выдержка из описания:

TONE OFF 1 0 0 0000-1000-X C Turn off tone outputs Yes
TONE ON 1 0 0 0000-1001-X C Turn on tone outputs
 
TONE 4K 1 0 0 010X-XXXX-X C Tone frequency, 4kHz
TONE 2K 1 0 0 011X-XXXX-X C Tone frequency, 2kHz
 

 

svm
Offline
Зарегистрирован: 06.11.2016

Извините , я думал это под ардуино ИДЕ, поэтому ничего не понятно. Дисплей такой, с другоим вариантом, я разобрался, скетч здесь выкладывал. Просто тех дисплеев немного, а этого варианта десяток еще сохранился. Буду разбираться.

vladimir_62
Offline
Зарегистрирован: 18.01.2019

поставьте Keil и все получится. могу hex выложить для 2146 (48), проверите.

svm
Offline
Зарегистрирован: 06.11.2016

Ктати насчет Keil, где лучше про него почитать. И достаточно-ли демо версии?

vladimir_62
Offline
Зарегистрирован: 18.01.2019

просто говорим поисковику keil, и например открываем вот это:

https://bravikov.wordpress.com/2016/02/21/начало-работы-с-stm32-в-keil-mdk-arm/

или вот это

http://narodstream.ru/stm-urok-1-ustanovka-keil-μvision/

вообще на официальном сайте заполняем ни к чему не обязывающую форму

https://www.keil.com/demo/eval/arm.htm

и качаем демо

но можно как обычно ч/з torrent найти удобные для себя варианты.

я использую 4.73. ставил 5-ю версию, но через чур навернута. 

демо вполне достаточно. отличный отладчик симулятор. работает все - ограничение только размеру кода.  вот здесь неплохо для начала http://www.embed.com.ua/arm/pervyiy-samostoyatelnyiy-proekt-v-keil/ 

svm
Offline
Зарегистрирован: 06.11.2016

Заинтриговали, почитал про LPC? оказывается внутри никому не нужной и практически халявной ЭКЛЗ спрятан нехилый процессор да и остальное достаточно грамотно сделано. Вы какие-то проекты на этой базе уже делали, или пока только изучение,

vladimir_62
Offline
Зарегистрирован: 18.01.2019

изучаю. и сделал бы. да только что ? на нем много чего можно. usb  к стати в полный рост работает. и загрузчики есть. ну вольтметры всякие термометры измерители емкости и пр. хрень пробовал. примеров миллион на 2146. есть еще эклз на lpc2364 КС. эта вообще с постоянно включенным шим может от 1.5v работать

 

vladimir_62
Offline
Зарегистрирован: 18.01.2019

к стати работает на рекомендованных 60 мгц, но разгоняется легко до 120 и вполне себя так нормально чувстствует

Если до конца проникнитесь, то очень рекомендую вот это. Вполне так все доходчиво и прям в точку.

https://studfiles.net/preview/2385253/

svm
Offline
Зарегистрирован: 06.11.2016

В общем камушек интересный, только нужно найти ему достойное применение. Для тех задач, которые приходится решать и ардуины за глаза. Да и поздновато уже начинать, лет 40 назад наверное взялся - бы без раздумий. А сейчас и глаза уже не те, да и мозги не так быстро соображают. Только по старой радиолюбительской привычке не могу пройти мимо безхозной железки, а применение ее под большим вопросом. А насчет ЭКЛЗ - в принципе компактная готовая надежная система, которая может хранить и обрабатывать данные. Привязать к ней простенький интерфейсный блочек и пусть трудится. Конечно в данном варианте не удастся использовать все возможности процессора, но вычислительные возможности вполне. Ну а если вывести все порты, то никакая ардуинка ей в подметки не годится, да еще и нахалву.

vladimir_62
Offline
Зарегистрирован: 18.01.2019

по поводу бесхозной железки - выложите ардуинскую библиотеку для 1621. счас прилепим. тамже на атмеле все ? 

и кс тати вот: https://github.com/pilnikov/HT1621-Arduino-Library/tree/master/Ht1621-library-Master

svm
Offline
Зарегистрирован: 06.11.2016

Что-то не прокатило. Хотя библиотека вроде должна подойти, но в ней косяки, во всяком случае на этапе инициализации с Вашей отличается. Так у Вас первые команды 1 и 3, а там 2 и 4, явно лишний нолик в конце добавлен. Возможно и в других командах косяки. А Ваши команды с даташитом совпадают.

Вот кусочек из библиотеки , где явное несовпадение с даташитом и Вашей инициализацией:

    
      SYS_EN    = 0b00000010, /*!< System enable. It starts the bias generator and the system oscillator. */
      LCD_OFF   = 0b00000100, /*!< Turn off the bias generator. */
      LCD_ON    = 0b00000110, /*!< Turn on the bias generator. 
 
Где заметил исправил, но не завелось. Кстати библиотека просит выводы SS,RW,DATA  на дисплее DATA,CLK и RES правда вариантов включения не так много, но неи один не пошел. Пока не ясно в чем проблема. В программе, железе или подключении. И по выводу 8 дисплея, вроде напряжение подсветки, а может и нет. Наверное проще будет по даташиту свой код набросать, чем разбираться с возможно кривой библиотекой.
vladimir_62
Offline
Зарегистрирован: 18.01.2019

отлично, что взялись. не беда - завалим железку.

по порядку

vladimir_62
Offline
Зарегистрирован: 18.01.2019

команды правильные, только обратите внимание - чипу надо сказать :

100 (подать команду. 3 бита)

сама команда 0000 0001

и еще один пустой бит, неважно какой.

должно быть как в даташите 100 0000 0001 X - итого 12 бит

как делается здесь:

{
TAKE_CS();
HT1621::writeBits(COMMAND_MODE, 4); т.е. 1000
HT1621::writeBits(cmd, 8); 0000 0100  - итого 12 бит
RELEASE_CS(); 
}
 
у них все верно
vladimir_62
Offline
Зарегистрирован: 18.01.2019

SS,RW,DATA - делаем соответствие

data -> ddat

rw -> dclk

ss (скорее всего cs) -> dres

 у Вас так ?

vladimir_62
Offline
Зарегистрирован: 18.01.2019

проблема скорее всего во времянке. я всетаки рекомендую поставить keil и прогнать все в логическом анализаторе в отладчике. увидите во всяком случае что зачем следует.

И еще - в Вашем дисплее нет команды чтения. нет физически вывода RD. поэтому производится только запись. и по коду надо смотреть, чтобы не было обращения к чтению. 

вот эти строчки закомментируйте

#ifndef __HT1621_READ
  ram[address] = data;
#endif
 
и еще Vcc и Vh посадили на +5 ?
svm
Offline
Зарегистрирован: 06.11.2016

Так все и сделал, ладно это не горит. Поковыряюсь еще. Насчет кейла - от атмеги тоже поддерживает?

svm
Offline
Зарегистрирован: 06.11.2016

vladimir_62 пишет:

команды правильные, только обратите внимание - чипу надо сказать :

100 (подать команду. 3 бита)

сама команда 0000 0001

и еще один пустой бит, неважно какой.

должно быть как в даташите 100 0000 0001 X - итого 12 бит

как делается здесь:

{
TAKE_CS();
HT1621::writeBits(COMMAND_MODE, 4); т.е. 1000
HT1621::writeBits(cmd, 8); 0000 0100  - итого 12 бит
RELEASE_CS(); 
}
 
у них все верно

Т.е. если я привык использовать десчтичные, или шестнадцатеричные то при переводе двоичных из бмблиотеки младшим байтом считается 1 ый? И при переводе младший не учитывается?

vladimir_62
Offline
Зарегистрирован: 18.01.2019

по поводу keil похоже за угол завел... нет поддержки

http://www.keil.com/support/docs/1655.htm

как понять что этот гад завелся:

при подаче команды:

88H (08H) должна загореться подсветка

09H должен запищать

 https://drive.google.com/open?id=1Hzz-psf9OUCspGcLSilVI64ICbYwkpA0

svm
Offline
Зарегистрирован: 06.11.2016

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

vladimir_62
Offline
Зарегистрирован: 18.01.2019

это они так упростили себе жизнь. здесь неважно где конец одного и начало другого

важно в целом выдержать последовательность передачи бит (формат посылки) от cs \ до /cs  

svm
Offline
Зарегистрирован: 06.11.2016

Ясно, а я пытался найти логику. Еще раз спасибо.

vladimir_62
Offline
Зарегистрирован: 18.01.2019

это они так упростили себе жизнь. здесь неважно где конец одного и начало другого

важно в целом выдержать последовательность передачи бит (формат посылки) от cs \ до /cs