Pull to refresh
25
0
Игорь @Newsonya

Пользователь

Send message
В статье очень заморочено с подключением по последовательному интерфейсу. Для ардуинщика лучше использовать параллельный интерфейс в 4-битном режиме или через pcf8574 — преобразователь на I2C интерфейс. Дисплей ведь совместим с hd44780, соответственно с ним работает библиотека LiquidCrystal.h без каких-либо доработок. И даже не нужно перекидывать джамперы (страпы).

Futaba M204SD02AJ русский текст

PS: Этот дисплей применялся в блоках навигации BIN-03. Теперь большинство из них пришло в негодность, а экранчики можно использовать в своих поделках.

На всякий случай скетч:
Заголовок спойлера
// include the library code:
#include <LiquidCrystal.h>
#include <OneWire.h>
OneWire ds(10);

// initialize the library with the numbers of the interface pins
LiquidCrystal lcd(12, 11, 5, 4, 3, 2);

////////////////////////////////////////////////////////////////////
// initialize display
// 3rd parameter is a string containing some needed russian characters from "БГДЖЗИЙЛПУФЦЧШЩЬЪЫЭЮЯ"
// up to 16 letters, but recommended not more than 8, anyway, i can use 16 on my lcd :)
////////////////////////////////////////////////////////////////////
static byte addon_letters[16];
void init_rus(const char* letters_use )
{
  // custom characters
  static byte letters[][8]   = {
        { B11111, B10000, B10000, B11111, B10001, B10001, B11111, B00000 },//Б
        { B11111, B10000, B10000, B10000, B10000, B10000, B10000, B00000 },//Г
        {  B00000, B01111, B01001, B01001, B01001, B01001, B11111, B10001 },//Д
        {  B01010, B00000, B11111, B10000, B11110, B10000, B10000, B11111 }, //Ё
        { B10101, B10101, B10101, B01110, B10101, B10101, B10101, B00000 },//Ж
        { B01110, B10001, B00001, B00110, B00001, B10001, B01110, B00000 },//З
        { B10001, B10001, B10011, B10101, B11001, B10001, B10001, B00000 },//И
        { B10101, B10101, B10011, B10101, B11001, B10001, B10001, B00000 },//Й
        { B00111, B01001, B10001, B10001, B10001, B10001, B10001, B00000 },//Л
        { B11111, B10001, B10001, B10001, B10001, B10001, B10001, B00000 },//П
        { B10001, B10001, B10001, B01111, B00001, B10001, B01110, B00000 },//У
        {  B00000, B01110, B10101, B10101, B10101, B01110, B00100, B00100 },//Ф
        { B10001, B10001, B10001, B10001, B10001, B10001, B11111, B00001 },//Ц
        { B10001, B10001, B10001, B01111, B00001, B00001, B00001, B00000 },//Ч
        {  B00000, B10101, B10101, B10101, B10101, B10101, B10101, B11111 },//Ш
        { B10101, B10101, B10101, B10101, B10101, B10101, B11111, B00001 },//Щ
        {  B00000, B10000, B10000, B10000, B11110, B10001, B10001, B11110 },//Ь
        { B11000, B01000, B01110, B01001, B01001, B01001, B01110, B00000 },//Ъ
        { B10001, B10001, B10001, B11101, B10101, B10101, B11101, B00000 },//Ы
        {  B00000, B11110, B00001, B00001, B01111, B00001, B00001, B11110 },//Э
        { B10111, B10101, B10101, B11101, B10101, B10101, B10111, B00000 },//Ю
        { B01111, B10001, B10001, B01111, B10001, B10001, B10001, B00000 },//Я
  };
  static char chars[] = {'Б','Г','Д','Ё','Ж','З','И','Й','Л','П','У','Ф','Ц','Ч','Ш','Щ','Ь','Ъ','Ы','Э','Ю','Я'};
  static byte empty[8] = { 0, 0, 0, 0, 0, 0, 0, 0 };
  int index = 0, cl = sizeof(chars)/sizeof(char),i,j,symb;
  memset(addon_letters,0,sizeof(addon_letters));
  for( j = 0; j < strlen(letters_use) && j < 16; j++ )
          lcd.createChar(j, empty);

  for( j = 0; j < strlen(letters_use) && j < 16; j++ )
  {
          symb = -1;
          for( i=0; i < cl; i++ ) if( chars[i] == letters_use[j] ) { symb = i; addon_letters[index] = letters_use[j]; break; }
          if( symb != -1 ) { lcd.createChar(index, letters[symb]); index++; }
  }
}
////////////////////////////////////////////////////////////////////
// print russian chars
////////////////////////////////////////////////////////////////////
void print_rus(char *str) {
  static char rus_letters[] =   {'А','Б', 'В','Г', 'Д', 'Е','Ё', 'Ж', 'З', 'И', 'Й', 'К','Л', 'М','Н','О','П', 'Р','С','Т','У', 'Ф', 'Х','Ц', 'Ч', 'Ш', 'Щ', 'Ъ', 'Ы', 'Ь', 'Э', 'Ю', 'Я' };
  static char trans_letters[] = {'A',0x80,'B',0x92,0x81,'E',0xCB,0x82,0x83,0x84,0x85,'K',0x86,'M','H','O',0x87,'P','C','T',0x88,0xA2,'X',0x89,0x8A,0x8B,0x8C,0x8D,0x8E,0x62,0x8F,0xAC,0xAD};
  int lcount = sizeof(rus_letters)/sizeof(char), i, j;
  for( i=0; i<strlen(str); i++ )
  { 
        if( byte(str[i]) == 208 ) continue; // 208 ignore
        int found = 0;
        for(j=0; j < 16; j++) if( addon_letters[j] != 0 && byte(str[i]) == byte(addon_letters[j]) ) { lcd.write(j); found = 1; break; }
        if(!found) for(j=0; j < lcount; j++) if( byte(str[i]) == byte(rus_letters[j]) ) { lcd.write(trans_letters[j]); found = 1; break; }
        if(!found) lcd.write(byte(str[i]));
  }  
}
void print_rus(int x, int y, char *str) {
  lcd.setCursor(x, y);
  print_rus(str);
}
////////////////////////////////////////////////////////////////////



static byte degree[8] = { B01100, B10010, B10010, B01100, B00000, B00000, B00000, B00000 };// Значок градуса

void setup() {
  lcd.begin(20, 4); // Задаём режим работы индикатора: 4 строки по 20 символов
  init_rus("ДЭШЩФЬЁ"); // Загружаем нужные символы в программируемые ячейки (максимум 8 символов)
  lcd.createChar(7, degree);
  print_rus(0,0,"ТЕМПЕРАТУРА:20.6 С");
  print_rus(0,1,"1234567890()+-={}[]/");
  print_rus(0,2,"АБВГДЕЁЖЗИЙКЛМНОПРСТ");
  print_rus(0,3,"УФХЦЧШЩЪЫЬЭЮЯ");
}

void loop() {
//-----------------
byte data[2];
ds.reset(); 
ds.write(0xCC);
ds.write(0x44);
delay(750);
ds.reset();
ds.write(0xCC);
ds.write(0xBE);
data[0] = ds.read(); 
data[1] = ds.read();
int Temp = (data[1]<< 8)+data[0];
Temp = Temp>>4;
                lcd.setCursor(12,0);
                lcd.print(Temp);
                lcd.write(7);
                lcd.print("C  ");
//-----------------
        delay(1000);
}

Способ подходит для XM, возможно ещё для Hikvision и Dahua, но в плеере скорее всего формат будет другой.
Распакуйте прошивку, пройдитесь по файлам утилитой binwalk, тогда будет понятнее.
Или такой. Заказал, посмотрим, что за зверь.
Есть такая мысль, что ночью включается подсветка, лезут помехи из-за отсутствия фильтров по питанию, изображение покрывается какой-то рябью, а чип не справляется с возросшим потоком «мусора».
Так и не удалось их победить несмотря на ежемесячное обновление их прошивок китайцами?
У меня одна такая живёт и ещё 5 подобных ползут из Китая. Вроде как с родным видеорегистратором они ещё дружат, но там, похоже, используется какой-то свой протокол.
Есть идеи, как побороть?
У меня камера живёт без тормозов только с прошивкой General_HZXM_IPC_HI3516C_53H20L_V4.02.R11.20131108_ALL.bin
При этом с неё пишется на видеорегистратор по протоколу NETIP.
Сколько пробовал прошивок, вышедших после этой, все тупят через какое-то время. А в этой мне не нравится качество сжатия, уж больно много артефактов.
Я вот такие настройки сделал:

тормозить перестало, но качество упало.
У меня не сразу стало тормозить, а на следующий день. Возможно, утечка памяти. А что за прошивка?
Там же линь внутри, можно зайти в операционку, глянуть загрузку процессора, таблицу маршрутов. Естественно, всё это в отладочных целях. Когда всё работает, telnet не нужен.
Вот как раз глюки с FPS и были. Выставил High profile и 4Mbit, как всё затормозило, один кадр в секунду, веб-интерфейс еле ползает, явно не хватает производительности процессора. Ну, я и откатился на другую прошивку.
Да, на самой первой прошивке тоже было розовое при смене режима день-ночь.
Да, там много чего интересного. Жаль, что он забросил этот блог ещё в 2011 году.
При этом она же оказалась самой глючной. Вот тут есть ещё прошивки. Мне подошла General_HZXM_IPC_HI3516C_53H20L_V4.02.R11.20131108_ALL.bin
Так львиная доля этих регистраторов из Китая, например Polivision, Divitek, TBTEC и т.д. Причём разница за реги с одинаковой начинкой тут и там, больше, чем в 2 раза. А за нормальный придётся доплатить гораздо больше, вот и приходится иметь дело с китаем.
Как-то давным-давно, лет 15 назад делал игрушку как раз с таким экранчиком (им тогда факсы комплектовались). Русский удалось сделать, использовав часть спецсимволов и 8 программируемых символов. Пришлось составить специальную таблицу перекодировки, получил даже маленькие и большие русские буквы.
Дырочка ещё действует, можно зарегистрировать таким образом домен, только вот пользователей создать нельзя: «Достигнуто максимальное количество аккаунтов пользователей (1) для этой организации» :(
Про аппаратное издыхание читал, пока не вижу связи между прошивкой и неработоспособностью. Скорее всего просто некачественный продукт у d-link.
Там же в теме предлагали наклеить радиатор на чип, чтобы предотвратить перегрев.
До сих пор работает. Правда он в режиме точки доступа и файлопомойки, возможно это что-то меняет.
PS: Какого рода кирпич у вас получился? В терминале что-нибудь выдаёт?
Поправил статью, добавил комментарий и ссылку на прошивку, чтобы зря не курочили роутер.
Там уже по-другому. Впрочем, есть уже отзывы о перешивке в keenetic без консольного кабеля через web-интерфейс. Подробности в теме по DIR-620 на ixbt.
1

Information

Rating
Does not participate
Location
Москва и Московская обл., Россия
Date of birth
Registered
Activity