Сбой при формировании своих символов на LCD 1602
- Войдите на сайт для отправки комментариев
Вс, 24/11/2013 - 11:33
В общем всё работает нормально, но...
Часто (в 50% случаев) при старте или перезагрузке в памяти дисплея оказываются не нужные мне символы букв а их смесь. В данном случае например буква П сверху и буква У снизу. Код такой:
// include the library code:
#include <LiquidCrystal.h>
#include <EEPROM.h>
uint8_t temp_cel_0[8] =
{
B01010,
B10101,
B10011,
B10101,
B11001,
B10001,
B10001
}; //закодировано в двоичной системе знак Й
uint8_t temp_cel_1[8] =
{
B10001,
B10001,
B10011,
B10101,
B11001,
B10001,
B10001
}; //закодировано в двоичной системе знак И
uint8_t temp_cel_2[8] =
{
B11110,
B00001,
B00001,
B01110,
B00001,
B00001,
B11110
}; //закодировано в двоичной системе знак З
uint8_t temp_cel_3[8] =
{
B10101,
B10101,
B01110,
B00100,
B01110,
B10101,
B10101
}; //закодировано в двоичной системе знак Ж
uint8_t temp_cel_4[8] =
{
B01111,
B10001,
B10001,
B01111,
B00101,
B01001,
B10001
}; //закодировано в двоичной системе знак Я
uint8_t temp_cel_5[8] =
{
B11111,
B10001,
B10001,
B10001,
B10001,
B10001,
B10001
}; //закодировано в двоичной системе знак П
uint8_t temp_cel_6[8] =
{
B10001,
B10001,
B01010,
B00110,
B00100,
B01000,
B10000
}; //закодировано в двоичной системе знак У
uint8_t temp_cel_7[8] =
{
B11110,
B00001,
B00001,
B01111,
B00001,
B00001,
B11110
}; //закодировано в двоичной системе знак З
int tok = 0; //сварочный ток, % импульсов сети
int time = 0; //время сварки, основной параметр
int rezhim = 1; //режим однократный или многократный
int pauza = 0;// задержка перед отключением пневмоклапана
int menu = 0; //активный пункт меню
int addres_eeprom_tok=0;
int addres_eeprom_time=2;
int addres_eeprom_rezhim=4;
int addres_eeprom_pauza=6;
// initialize the library with the numbers of the interface pins
LiquidCrystal lcd(12, 11, 5, 4, 3, 2);
int a=0;
void setup() {
lcd.createChar(1, temp_cel_0);//Й
lcd.createChar(2, temp_cel_1);//И
lcd.createChar(3, temp_cel_2);//З
lcd.createChar(4, temp_cel_3);//Ж
lcd.createChar(5, temp_cel_4);//Я
lcd.createChar(6, temp_cel_5);//П
lcd.createChar(7, temp_cel_6);//У
lcd.createChar(8, temp_cel_7);//З
// set up the LCD's number of columns and rows:
lcd.begin(16, 2);
// Print a message to the LCD.
lcd.print(" KOHTAKTHA\5");
lcd.setCursor(5, 1);
lcd.print("CBAPKA");
pinMode (A5, INPUT);
}
void loop() {
a = analogRead (5);
// set the cursor to column 0, line 1
// (note: line 1 is the second row, since counting begins with 0):
// print the number of seconds since reset:
if (a < 896 && a> 894)
{
EEPROM.write(addres_eeprom_tok, tok);
EEPROM.write(addres_eeprom_time, time);
EEPROM.write(addres_eeprom_rezhim, rezhim);
EEPROM.write(addres_eeprom_pauza, pauza);
lcd.clear ();
lcd.print(" COXPAHEHO");
lcd.setCursor(3, 1);
lcd.print("B \6AM\5T\2");
delay(2000);
edit();
}
if (a> 765 && a < 769 )
{
tok = EEPROM.read(addres_eeprom_tok);
time = EEPROM.read(addres_eeprom_time);
rezhim = EEPROM.read(addres_eeprom_rezhim);
pauza = EEPROM.read(addres_eeprom_pauza);
lcd.clear ();
lcd.print(" BO\3BPAT");
lcd.setCursor(3, 1);
lcd.print("HACTPOEK");
delay(2000);
menu=1;
edit();
}
if (a> 124 && a < 128 )
{
++menu;
if (menu==5)
{
menu=1;
}
delay(200);
edit();
}
if (a> 637 && a < 641 )
{
if (menu==1)
{
if (time>0)
{
--time;
}
}
if (menu==2)
{
if (tok>0)
{
--tok;
}
}
if (menu==3)
{
if (rezhim>0)
{
--rezhim;
}
}
if (menu==4)
{
if (pauza>0)
{
--pauza;
}
}
delay(200);
edit();
}
if (a> 380 && a < 384 )
{
if (menu==1)
{
++time;
}
if (menu==2)
{
++tok;
}
if (menu==3)
{
++rezhim;
}
if (menu==4)
{
++pauza;
}
delay(200);
edit();
}
if (a> 252 && a < 256 )
{
--menu;
if (menu==0)
{
menu=4;
}
if (menu<0)
{
menu=4;
}
delay(200);
edit();
}
if (a> 506 && a < 514 )
{
//
}
}
void edit() {
if (menu==1)
{
lcd.clear ();
lcd.print(" HACTPO\1K\2");
lcd.setCursor(0, 1);
lcd.print("BPEM\5 :");
lcd.print(time);
//
}
if (menu==2)
{
lcd.clear ();
lcd.print(" HACTPO\1K\2");
lcd.setCursor(0, 1);
lcd.print("TOK :");
lcd.print(tok);
//
}
if (menu==3)
{
lcd.clear ();
lcd.print(" HACTPO\1K\2");
lcd.setCursor(0, 1);
lcd.print("PE\4\2M CBAPK\2 :");
lcd.print(rezhim);
//
}
if (menu==4)
{
lcd.clear ();
lcd.print(" HACTPO\1K\2");
lcd.setCursor(0, 1);
lcd.print("\6A\7\3A");
lcd.print(" :");
lcd.print(pauza);
//
}
}

Как избавиться от этой досадной мелочи?
Напряжение питания на дисплее измерьте. Какое напряжение?
Не успевает при инициализации, попробуй по играться с задержками
Мне помогло в такой же ситуации
Не успевает при инициализации, попробуй по играться с задержками
Мне помогло в такой же ситуации
Большое спасибо всем ответившим за помощь. Введение задержки по совету Iona кажется помогло.
Во всяком случае за 15 перезагрузок, такой проблемы более не обнаружено.