HT1621
- Войдите на сайт для отправки комментариев
 
      Чт, 07/08/2014 - 19:54
          
      Добрый день господа, есть такой дисплей : 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
Не как не могу завести, качал библеотку, и на пример продаца тоже ругается...
          
      
Ну бегите за хорошим кофе и что бы гущи побольше. Будем на ней гадать куда вы тот дисплей подключали.
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() ;
Мдааа.
Итог: пациент глух и туп. В морг.
Спасибо конечно за ваше знание паталогоонатомических свойств, но мне интересно знать, почему даже с инклудной библеотекой все равно пишет ошибку
#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);
Давайте вы включите то место которое у вас еду принимает.
В заголовке обещают модуль который работает по SPI.
Это такая железная хрень. Которую нельзя назначить на те пины которын у вас чешутся.
Так же у вас есть наименование контролера и ни что не мешает ваизаглянуть в его даташит и узнать как же он на самом деле работает.
збс, чотко и кратко)))))))))))))))
Вы забежали вперед. Потерпите чуток.
Пока еще скомпилится не получается....
До "залил и ничего не показывает. что это может быть?" еще не дошли. А может повезет и SPI окажется именно на этих пинах. А может библиотека делает совтверный SPI, а может......
Блуждающий софтварный spi. Угадай на каких он пинах сегодня. Прям новая игра на ардуине.
#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); } }Всем спасибо тестовый код найден
дабы не плодить темы
вопрос такой, имеем 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(); // вывод буфера на дисплей }подскажите в какую сторону смотреть?
два экрана абсолютно одинаково реагирует на это
из ситуации вышел заменой кода на вод этот без библиотеки
http://www.14core.com/wiring-the-6-digit-7-segment-2-4-inch-ht1621-lcd-display-module-on-microcontroller/
Кто нибудь сталкивался с таким дисплеем
Принесли целую кучу
Что можно на нем реализовать (часы, термометр)
а какого он размера?
у меня вот тут одна штука лежит

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

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