HT1621

dozbot
dozbot аватар
Offline
Зарегистрирован: 12.01.2013

Добрый день господа, есть такой дисплей : http://www.ebay.com/itm/Arduino-kit-SPI-16-Digital-7Seg-LCD-LED-Module-with-Arduino-UNO-MEGA2560-example/281346816442?_trksid=p5411.c100167.m2940&_trkparms=aid%3D222007%26algo%3DSIC.MBE%26ao%3D1%26asc%3D20140131123730%26meid%3D8868288178118560637%26pid%3D100167%26prg%3D20140131123730%26rk%3D2%26rkt%3D15%26sd%3D231041707524

 

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

Puhlyaviy
Puhlyaviy аватар
Offline
Зарегистрирован: 22.05.2013

Ну бегите за хорошим кофе и что бы гущи побольше. Будем на ней гадать куда вы тот дисплей подключали.

dozbot
dozbot аватар
Offline
Зарегистрирован: 12.01.2013

Init` ы все прописал

 void setup()
{
   pinMode(CS, OUTPUT); //Pin 2 
   pinMode(WR, OUTPUT); //Pin 3 
   pinMode(DATA, OUTPUT); //Pin 4  
}

void loop()
{
 

Init_1621() ;
 

    while(1)
    { 
   
    //display 0 to 99999
   for(t=0;t<99999;t++)
   {  
     displaydata(t);
     delay(100) ;
    }
 

ругается на строчку : Init_1621() ;

Puhlyaviy
Puhlyaviy аватар
Offline
Зарегистрирован: 22.05.2013

Мдааа.
Итог: пациент глух и туп. В морг.

dozbot
dozbot аватар
Offline
Зарегистрирован: 12.01.2013

Спасибо конечно за ваше знание паталогоонатомических свойств, но мне интересно знать, почему даже с инклудной библеотекой все равно пишет ошибку

dozbot
dozbot аватар
Offline
Зарегистрирован: 12.01.2013
#include "HT1621.h"

#define DATA_PIN  2
#define WR_PIN    3
#define CS_PIN    4


HT1621 ht1621(DATA_PIN, WR_PIN, CS_PIN);

byte pos; byte val;

//массив констант для отображения цифр, минуса и пробела:
byte arr[18][3]={
 { 6,12, 6}, //0
 { 0, 0, 6}, //1
 { 2,14, 4}, //2
 { 0,14, 6}, //3
 { 4, 2, 6}, //4
 { 4,14, 2}, //5
 { 6,14, 2}, //6
 { 0, 4, 6}, //7
 { 6,14, 6}, //8
 { 4,14, 6}, //9
 { 6, 6, 6}, //A
 { 6,10, 2}, //b
 { 6,12, 0}, //C
 { 2,10, 6}, //d
 { 6,14, 0}, //E 
 { 6, 6, 0}, //F
 { 0, 2, 0}, //-
 { 0, 0, 0}  //
};
//массив констант для отображения цифр с точкой:
byte arr_point[10][3]={
 { 6,12, 14}, //0.
 { 0, 0, 14}, //1.
 { 2,14, 12}, //2.
 { 0,14, 14}, //3.
 { 4, 2, 14}, //4.
 { 4,14, 10}, //5.
 { 6,14, 10}, //6.
 { 0, 4, 14}, //7.
 { 6,14, 14}, //8.
 { 4,14, 14}  //9.
};
//создаём новую функцию для отображения по шаблону "позиция-цифра":
void writeDigit(byte pos, byte val){
  for (byte i = 0; i < 3; i++)
  ht1621.writeMem(3*pos+5+i, arr[val][i]);
  }
//а эта для отображения цифры с точкой:
void writeDigitPoint(byte pos, byte val){
  for (byte i = 0; i < 3; i++)
  ht1621.writeMem(3*pos+5+i, arr_point[val][i]);
  }
  
void setup(){
  pinMode(DATA_PIN, OUTPUT);
  pinMode(WR_PIN,   OUTPUT);
  pinMode(CS_PIN,   OUTPUT);
  
  Serial.begin(9600);
  if (! ht1621.begin()) {
  Serial.println("Could not init device!\n");
  }
}

/**********************************************************************/
//эта короткая программка получает с аналогового входа 0 4-значное число
//от 0 до 1023 и отображает его в первых 4-х разрядах:
void loop()
{
int AI0=analogRead(0);
for (byte i=4; i>0; i--) {
writeDigit(i, AI0%10); AI0=(AI0-AI0%10)/10;
 }
delay (100);
}

/******************************************************************/
//прикольная программка - как в американских боевиках "подбор кода":
//раскомментируйте, кому интересно (не забыв закомментировать LOOP, который выше)
/*
void loop()
{
pos = random(9);
val = random(10);
writeDigit(pos, val);
delay(pos*val+50);
}
*/
//или вот так:
/*
void loop()
{
for (byte pos = 1; pos <= 8; pos++) {
 val = random(10);
 writeDigit(pos, val);} 
 delay(100);
}
*/

На такой код пишет ошибку в строке :HT1621 ht1621(DATA_PIN, WR_PIN, CS_PIN);

Puhlyaviy
Puhlyaviy аватар
Offline
Зарегистрирован: 22.05.2013

Давайте вы включите то место которое у вас еду принимает.
В заголовке обещают модуль который работает по SPI.
Это такая железная хрень. Которую нельзя назначить на те пины которын у вас чешутся.
Так же у вас есть наименование контролера и ни что не мешает ваизаглянуть в его даташит и узнать как же он на самом деле работает.

dozbot
dozbot аватар
Offline
Зарегистрирован: 12.01.2013

збс, чотко и кратко)))))))))))))))

leshak
Offline
Зарегистрирован: 29.09.2011

Puhlyaviy пишет:
Давайте вы включите то место которое у вас еду принимает. В заголовке обещают модуль который работает по SPI. Это такая железная хрень. Которую нельзя назначить на те пины которын у вас чешутся.

Вы забежали вперед. Потерпите чуток.
Пока еще скомпилится не получается....
До "залил и ничего не показывает. что это может быть?" еще не дошли. А может повезет и SPI окажется именно на этих пинах. А может библиотека делает совтверный SPI, а может......
 

Puhlyaviy
Puhlyaviy аватар
Offline
Зарегистрирован: 22.05.2013

Блуждающий софтварный spi. Угадай на каких он пинах сегодня. Прям новая игра на ардуине.

dozbot
dozbot аватар
Offline
Зарегистрирован: 12.01.2013
 

#define sbi(x, y)  (x |= (1 << y))   /*set Register x of y*/
#define cbi(x, y)  (x &= ~(1 <<y ))  /*Clear Register x of y*/       
      #define uchar   unsigned char 
      #define uint   unsigned int 
      //Defined HT1621's command  
      #define  ComMode    0x52  //4COM,1/3bias  1000    010 1001  0  
      #define  RCosc      0x30  //on-chip RC oscillator(Power-on default)1000 0011 0000 
      #define  LCD_on     0x06  //Turn on LCD 
      #define  LCD_off    0x04  //Turn off LCD 
      #define  Sys_en     0x02  //Turn on system oscillator 1000   0000 0010 
      #define  CTRl_cmd   0x80  //Write control cmd 
      #define  Data_cmd   0xa0  //Write data cmd   
      
      // //Define port    HT1621 data port
      #define CS   2  //Pin 2 as chip selection output
      #define WR   3  //Pin 3 as read clock  output
      #define DATA 4  //Pin 4 as Serial data output
     
      #define CS1    digitalWrite(CS, HIGH) 
      #define CS0    digitalWrite(CS, LOW)
      #define WR1    digitalWrite(WR, HIGH) 
      #define WR0    digitalWrite(WR, LOW)
      #define DATA1  digitalWrite(DATA, HIGH) 
      #define DATA0  digitalWrite(DATA, LOW)
         

char dispnum[6]={0x00,0x00,0x00,0x00,0x00,0x00};

/*0,1,2,3,4,5,6,7,8,9,A,b,C,c,d,E,F,H,h,L,n,N,o,P,r,t,U,-, ,*/	  
//const char num[]={0x7D,0x60,0x3E,0x7A,0x63,0x5B,0x5F,0x70,0x7F,0x7B,0x77,0x4F,0x1D,0x0E,0x6E,0x1F,0x17,0x67,0x47,0x0D,0x46,0x75,0x37,0x06,0x0F,0x6D,0x02,0x00,}; 
const char num[]={0xD7,0x50,0xE3,0xF1,0x74,0xB5,0xB7,0xD0,0xF7,0xF5,0xF6,0x37,0x87,0X23,0X73,0XA7,0XA6,0X76,0X36,0X07,0XD6,0XE6,0X22,0X27,0X57,0X20,0x00,}; 
       /**------------------------------------------------------------------------- 

                        Name: SendBit_1621(send data) 
      ---------------------------------------------------------------------------*/ 

      void SendBit_1621(uchar sdata,uchar cnt) //High bit first
      { 
       uchar i; 
       for(i=0;i<cnt;i++) 
             { 
              WR0;
			  delayMicroseconds(20); 
              if(sdata&0x80) DATA1; 
              else DATA0; 
			  delayMicroseconds(20);
              WR1;
			  delayMicroseconds(20);
              sdata<<=1; 
     
              } 
		delayMicroseconds(20);
      }
      
     
      /**------------------------------------------------------------------------- 

                        Name: SendCmd(send cmd) 
                        //Write MODE“100” AND 9 bits command 
      ---------------------------------------------------------------------------*/ 

      void SendCmd_1621(uchar command) 
      { 
      CS0; 
      SendBit_1621(0x80,4);    
      SendBit_1621(command,8);  
      CS1;                    
      } 
      /**------------------------------------------------------------------------- 

                        Name: Write_1621send data and cmd) 
      ---------------------------------------------------------------------------*/ 

      void Write_1621(uchar addr,uchar sdata) 
      { 
       addr<<=3; 
       CS0; 
       SendBit_1621(0xa0,3);     //Write MODE“101” 
       SendBit_1621(addr,6);     //Write addr high 6 bits
       SendBit_1621(sdata,8);    //Write data  8 bits
       CS1; 
      } 
      /**------------------------------------------------------------------------- 

                                Name: all_off(Clear Display) 
      ---------------------------------------------------------------------------*/ 

      void HT1621_all_off(uchar num) 
      { uchar i; 
        uchar addr=0; 
        for(i=0;i<num;i++) 
                       { 
                         Write_1621(addr,0x00); 
                     addr+=1; 
                    } 
      } 
      /**************************************************************************** 

                                Name: all_on(All lit) 
      ****************************************************************************/ 

      void HT1621_all_on(uchar num) 
      { uchar i,j; 
        uchar addr=0; 
        for(i=0;i<num;i++) 
                { Write_1621(addr,0xff); 
                addr+=1; 
                } 
      }      /**************************************************************************** 

                                Name: all_on_num(All lit,Display the same number) 
      ****************************************************************************/ 

      void HT1621_all_on_num(uchar num,uchar xx) 
      { uchar i,j; 
        uchar addr=0; 
        for(i=0;i<num;i++) 
                { Write_1621(addr,xx); 
                addr+=1; 
                } 
      } 

      /**************************************************************************** 

                                Name: Init_1621(initialize 1621) 
      *****************************************************************************/ 

      void Init_1621(void) 
      {
       SendCmd_1621(Sys_en);
       SendCmd_1621(RCosc);    
       SendCmd_1621(ComMode);  
       SendCmd_1621(LCD_on);
      } 
      /**************************************************************************** 

                                Name: LCDoff(off 1621) 
      *****************************************************************************/ 

      void LCDoff(void) 
      {  
       SendCmd_1621(LCD_off);  
      } 
      /**************************************************************************** 

                                Name: LCDon(on 1621) 
      *****************************************************************************/ 

      void LCDon(void) 
      {  
       SendCmd_1621(LCD_on);  
      } 
 

void displayallnum(unsigned int n)       //Display all digital characters
{uchar i,j; 
 uchar addr=0; 
 
        for(i=0;i<n;i++) 
                       { for(j=0;j<27;j++)
					     {
                         Write_1621(addr,num[j]); delay(100) ;
						 }
                         addr+=1; 
                       } 
  
}  


//By-bit display 8 characters and decimal point	
void displayall8(void)
{uchar i;
    HT1621_all_off(16);
	for(i=0;i<16;i++)
	   {
	Write_1621(i,0b11110111);
	delay(50) ;
	   }
}

//

 /**************************************************************************** 

   Name: displaydata(unsigned long int t) Display  data
   t : Data to be displayed
     
*****************************************************************************/ 

void displaydata(unsigned long int t)
{uchar i;
dispnum[5]=num[t/100000];
dispnum[4]=num[(t/10000)%10];
dispnum[3]=num[(t/1000)%10];
dispnum[2]=num[(t/100)%10];
dispnum[1]=num[(t/10)%10];
dispnum[0]=num[t%10];


for(i=0;i < 6 ;i++) 
{
  Write_1621(i,dispnum[i]);
 
}

}   


void setup()
{
   pinMode(CS, OUTPUT); //Pin 2 
   pinMode(WR, OUTPUT); //Pin 3 
   pinMode(DATA, OUTPUT); //Pin 4  
  
}


void loop()
{
long int t=0;
uchar i,j;
delay(50) ;
Init_1621() ;
 
    HT1621_all_on(16) ;
	delay(300) ;
    HT1621_all_off(16);
	delay(300) ;
    HT1621_all_on(16) ;
	delay(300) ;
    HT1621_all_off(16);
	delay(300) ;

for(i=0;i<27;i++) 
   {
     HT1621_all_on_num(16,num[i]);
     delay(200) ;
   }
	 
    HT1621_all_off(16);
    
	
while(1)
    { 
     
    //display 0 to 999999
   for(t=0;t<999999;t++)
   {	 
     displaydata(t);
     delay(100) ;
    }
    
    


  //displaydata : "0 1 2 3 4 5 6 7 8 9 A b"
   //for(i=0;i < 16 ;i++) 
//{
  //Write_1621(i,num[i]);
 
//}





//displaybihua();
delay(1000);


  }
  
}

Всем спасибо тестовый код найден

adel
adel аватар
Offline
Зарегистрирован: 03.02.2015

дабы не плодить темы

вопрос такой, имеем LCD 6 сегментный 7 разрядный
библиотека обычная <HT1621.h>

скетч из примера, подключил как прописано, запустился, но есть проблемы
изображение показывает перевернутое и зеркальное
вывод числа 2131 и индикатора заряда батареи

 

 

 

 

 

 

нормальный вид

с помощью "зеркала" и к верх ногами

ко всему прочему выводит только одну точку посередине (символ 1)
индикатор заряда батареи только либо "акб+одно нижнее деление" (символ 2)
и/или верхнее (символ 3)


#include <HT1621.h>
HT1621		LCD;

void setup(){
	LCD.begin(11,10,13);		//	инициализация модуля	(WD,DATA,CS)
}

void loop(){
	LCD.clrScr();			//	очистка буфера LCD

	LCD.print(2131, 0);	//	создание числа		(число, [начальная позиция], [система счисления], [длинна])
 

	LCD.symbol(3,true);		//	показать 2ой символ	(№ символа, true/false)

	LCD.update();			//	вывод буфера на дисплей
}

подскажите в какую сторону смотреть?
два экрана абсолютно одинаково реагирует на это

adel
adel аватар
Offline
Зарегистрирован: 03.02.2015

из ситуации вышел заменой кода на вод этот без библиотеки
http://www.14core.com/wiring-the-6-digit-7-segment-2-4-inch-ht1621-lcd-display-module-on-microcontroller/

sergeikip1
Offline
Зарегистрирован: 10.01.2018

Кто нибудь сталкивался с таким дисплеем

sergeikip1
Offline
Зарегистрирован: 10.01.2018

Принесли целую кучу

Что можно на нем реализовать (часы, термометр)

adel
adel аватар
Offline
Зарегистрирован: 03.02.2015

а какого он размера?

adel
adel аватар
Offline
Зарегистрирован: 03.02.2015

у меня вот тут одна штука лежит
я пока никак не могу распиновать ее чтобы поменять экран

хотелось бы экран отсюда переставить туда, чтобы хоть как то работал, а то печально совсем

sergeikip1
Offline
Зарегистрирован: 10.01.2018

размер стекла?

adel
adel аватар
Offline
Зарегистрирован: 03.02.2015

да, запустить его пока не получается же, чтобы померить цифры)

sergeikip1
Offline
Зарегистрирован: 10.01.2018

78x32