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
001#include "HT1621.h"
002 
003#define DATA_PIN  2
004#define WR_PIN    3
005#define CS_PIN    4
006 
007 
008HT1621 ht1621(DATA_PIN, WR_PIN, CS_PIN);
009 
010byte pos; byte val;
011 
012//массив констант для отображения цифр, минуса и пробела:
013byte arr[18][3]={
014 { 6,12, 6}, //0
015 { 0, 0, 6}, //1
016 { 2,14, 4}, //2
017 { 0,14, 6}, //3
018 { 4, 2, 6}, //4
019 { 4,14, 2}, //5
020 { 6,14, 2}, //6
021 { 0, 4, 6}, //7
022 { 6,14, 6}, //8
023 { 4,14, 6}, //9
024 { 6, 6, 6}, //A
025 { 6,10, 2}, //b
026 { 6,12, 0}, //C
027 { 2,10, 6}, //d
028 { 6,14, 0}, //E
029 { 6, 6, 0}, //F
030 { 0, 2, 0}, //-
031 { 0, 0, 0}  //
032};
033//массив констант для отображения цифр с точкой:
034byte arr_point[10][3]={
035 { 6,12, 14}, //0.
036 { 0, 0, 14}, //1.
037 { 2,14, 12}, //2.
038 { 0,14, 14}, //3.
039 { 4, 2, 14}, //4.
040 { 4,14, 10}, //5.
041 { 6,14, 10}, //6.
042 { 0, 4, 14}, //7.
043 { 6,14, 14}, //8.
044 { 4,14, 14}  //9.
045};
046//создаём новую функцию для отображения по шаблону "позиция-цифра":
047void writeDigit(byte pos, byte val){
048  for (byte i = 0; i < 3; i++)
049  ht1621.writeMem(3*pos+5+i, arr[val][i]);
050  }
051//а эта для отображения цифры с точкой:
052void writeDigitPoint(byte pos, byte val){
053  for (byte i = 0; i < 3; i++)
054  ht1621.writeMem(3*pos+5+i, arr_point[val][i]);
055  }
056   
057void setup(){
058  pinMode(DATA_PIN, OUTPUT);
059  pinMode(WR_PIN,   OUTPUT);
060  pinMode(CS_PIN,   OUTPUT);
061   
062  Serial.begin(9600);
063  if (! ht1621.begin()) {
064  Serial.println("Could not init device!\n");
065  }
066}
067 
068/**********************************************************************/
069//эта короткая программка получает с аналогового входа 0 4-значное число
070//от 0 до 1023 и отображает его в первых 4-х разрядах:
071void loop()
072{
073int AI0=analogRead(0);
074for (byte i=4; i>0; i--) {
075writeDigit(i, AI0%10); AI0=(AI0-AI0%10)/10;
076 }
077delay (100);
078}
079 
080/******************************************************************/
081//прикольная программка - как в американских боевиках "подбор кода":
082//раскомментируйте, кому интересно (не забыв закомментировать LOOP, который выше)
083/*
084void loop()
085{
086pos = random(9);
087val = random(10);
088writeDigit(pos, val);
089delay(pos*val+50);
090}
091*/
092//или вот так:
093/*
094void loop()
095{
096for (byte pos = 1; pos <= 8; pos++) {
097 val = random(10);
098 writeDigit(pos, val);}
099 delay(100);
100}
101*/

На такой код пишет ошибку в строке :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
001#define sbi(x, y)  (x |= (1 << y))   /*set Register x of y*/
002#define cbi(x, y)  (x &= ~(1 <<y ))  /*Clear Register x of y*/      
003      #define uchar   unsigned char
004      #define uint   unsigned int
005      //Defined HT1621's command 
006      #define  ComMode    0x52  //4COM,1/3bias  1000    010 1001  0 
007      #define  RCosc      0x30  //on-chip RC oscillator(Power-on default)1000 0011 0000
008      #define  LCD_on     0x06  //Turn on LCD
009      #define  LCD_off    0x04  //Turn off LCD
010      #define  Sys_en     0x02  //Turn on system oscillator 1000   0000 0010
011      #define  CTRl_cmd   0x80  //Write control cmd
012      #define  Data_cmd   0xa0  //Write data cmd  
013       
014      // //Define port    HT1621 data port
015      #define CS   2  //Pin 2 as chip selection output
016      #define WR   3  //Pin 3 as read clock  output
017      #define DATA 4  //Pin 4 as Serial data output
018      
019      #define CS1    digitalWrite(CS, HIGH)
020      #define CS0    digitalWrite(CS, LOW)
021      #define WR1    digitalWrite(WR, HIGH)
022      #define WR0    digitalWrite(WR, LOW)
023      #define DATA1  digitalWrite(DATA, HIGH)
024      #define DATA0  digitalWrite(DATA, LOW)
025          
026 
027char dispnum[6]={0x00,0x00,0x00,0x00,0x00,0x00};
028 
029/*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,-, ,*/   
030//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,};
031const 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,};
032       /**-------------------------------------------------------------------------
033 
034                        Name: SendBit_1621(send data)
035      ---------------------------------------------------------------------------*/
036 
037      void SendBit_1621(uchar sdata,uchar cnt) //High bit first
038      {
039       uchar i;
040       for(i=0;i<cnt;i++)
041             {
042              WR0;
043              delayMicroseconds(20);
044              if(sdata&0x80) DATA1;
045              else DATA0;
046              delayMicroseconds(20);
047              WR1;
048              delayMicroseconds(20);
049              sdata<<=1;
050      
051              }
052        delayMicroseconds(20);
053      }
054       
055      
056      /**-------------------------------------------------------------------------
057 
058                        Name: SendCmd(send cmd)
059                        //Write MODE“100” AND 9 bits command
060      ---------------------------------------------------------------------------*/
061 
062      void SendCmd_1621(uchar command)
063      {
064      CS0;
065      SendBit_1621(0x80,4);   
066      SendBit_1621(command,8); 
067      CS1;                   
068      }
069      /**-------------------------------------------------------------------------
070 
071                        Name: Write_1621send data and cmd)
072      ---------------------------------------------------------------------------*/
073 
074      void Write_1621(uchar addr,uchar sdata)
075      {
076       addr<<=3;
077       CS0;
078       SendBit_1621(0xa0,3);     //Write MODE“101”
079       SendBit_1621(addr,6);     //Write addr high 6 bits
080       SendBit_1621(sdata,8);    //Write data  8 bits
081       CS1;
082      }
083      /**-------------------------------------------------------------------------
084 
085                                Name: all_off(Clear Display)
086      ---------------------------------------------------------------------------*/
087 
088      void HT1621_all_off(uchar num)
089      { uchar i;
090        uchar addr=0;
091        for(i=0;i<num;i++)
092                       {
093                         Write_1621(addr,0x00);
094                     addr+=1;
095                    }
096      }
097      /****************************************************************************
098 
099                                Name: all_on(All lit)
100      ****************************************************************************/
101 
102      void HT1621_all_on(uchar num)
103      { uchar i,j;
104        uchar addr=0;
105        for(i=0;i<num;i++)
106                { Write_1621(addr,0xff);
107                addr+=1;
108                }
109      }      /****************************************************************************
110 
111                                Name: all_on_num(All lit,Display the same number)
112      ****************************************************************************/
113 
114      void HT1621_all_on_num(uchar num,uchar xx)
115      { uchar i,j;
116        uchar addr=0;
117        for(i=0;i<num;i++)
118                { Write_1621(addr,xx);
119                addr+=1;
120                }
121      }
122 
123      /****************************************************************************
124 
125                                Name: Init_1621(initialize 1621)
126      *****************************************************************************/
127 
128      void Init_1621(void)
129      {
130       SendCmd_1621(Sys_en);
131       SendCmd_1621(RCosc);   
132       SendCmd_1621(ComMode); 
133       SendCmd_1621(LCD_on);
134      }
135      /****************************************************************************
136 
137                                Name: LCDoff(off 1621)
138      *****************************************************************************/
139 
140      void LCDoff(void)
141      
142       SendCmd_1621(LCD_off); 
143      }
144      /****************************************************************************
145 
146                                Name: LCDon(on 1621)
147      *****************************************************************************/
148 
149      void LCDon(void)
150      
151       SendCmd_1621(LCD_on); 
152      }
153  
154 
155void displayallnum(unsigned int n)       //Display all digital characters
156{uchar i,j;
157 uchar addr=0;
158  
159        for(i=0;i<n;i++)
160                       { for(j=0;j<27;j++)
161                         {
162                         Write_1621(addr,num[j]); delay(100) ;
163                         }
164                         addr+=1;
165                       }
166   
167
168 
169 
170//By-bit display 8 characters and decimal point
171void displayall8(void)
172{uchar i;
173    HT1621_all_off(16);
174    for(i=0;i<16;i++)
175       {
176    Write_1621(i,0b11110111);
177    delay(50) ;
178       }
179}
180 
181//
182 
183 /****************************************************************************
184 
185   Name: displaydata(unsigned long int t) Display  data
186   t : Data to be displayed
187      
188*****************************************************************************/
189 
190void displaydata(unsigned long int t)
191{uchar i;
192dispnum[5]=num[t/100000];
193dispnum[4]=num[(t/10000)%10];
194dispnum[3]=num[(t/1000)%10];
195dispnum[2]=num[(t/100)%10];
196dispnum[1]=num[(t/10)%10];
197dispnum[0]=num[t%10];
198 
199 
200for(i=0;i < 6 ;i++)
201{
202  Write_1621(i,dispnum[i]);
203  
204}
205 
206}  
207 
208 
209void setup()
210{
211   pinMode(CS, OUTPUT); //Pin 2
212   pinMode(WR, OUTPUT); //Pin 3
213   pinMode(DATA, OUTPUT); //Pin 4 
214   
215}
216 
217 
218void loop()
219{
220long int t=0;
221uchar i,j;
222delay(50) ;
223Init_1621() ;
224  
225    HT1621_all_on(16) ;
226    delay(300) ;
227    HT1621_all_off(16);
228    delay(300) ;
229    HT1621_all_on(16) ;
230    delay(300) ;
231    HT1621_all_off(16);
232    delay(300) ;
233 
234for(i=0;i<27;i++)
235   {
236     HT1621_all_on_num(16,num[i]);
237     delay(200) ;
238   }
239      
240    HT1621_all_off(16);
241     
242     
243while(1)
244    {
245      
246    //display 0 to 999999
247   for(t=0;t<999999;t++)
248   {    
249     displaydata(t);
250     delay(100) ;
251    }
252     
253     
254 
255 
256  //displaydata : "0 1 2 3 4 5 6 7 8 9 A b"
257   //for(i=0;i < 16 ;i++)
258//{
259  //Write_1621(i,num[i]);
260  
261//}
262 
263 
264 
265 
266 
267//displaybihua();
268delay(1000);
269 
270 
271  }
272   
273}

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

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

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

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

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

 

 

 

 

 

 

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

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

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

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

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