Pull to refresh

Comments 27

5 вольт. Необходимое повышенное напряжение для питания самого лампового индикатора формируется на борту — там установлен повышающий преобразователь. Но нас это совершенно не должно волновать :)
Меня как раз интересует этот повышающий преобразователь, хотел бы знать его схемотехническое устройство. В даташите на этот дисплей такой инфы, к сожалению, не нашел
а зачем вам это знать? Этот индикатор — законченное устройство, plug&play как говорится. Как простая лампочка накаливания. Берите и пользуйтесь, и не заморачивайтесь. В HD44780 тоже ни слова про схемотехнику каких-нибудь дешифраторов
Имею индикатор, который требует подключения дополнительного питания, а тут как раз вижу статью, в которой описан VFD дисплей со встроенным преобразователем, вот и интересуюсь, может возможно узнать схемотехнику этого преобразователя. Предполагаю, что используется какое-нибудь законченное решение на базе микрухи с обвязкой, как раз то, что мне нужно
Пожалуйста, изучайте :) Никаких микросхем. Все «на одном» транзисторе
Обратная сторона
image
Что-то я не уверен на счет одного транзистора, там их как минимум 3 штуки и 3 стабилитрона с кучей диодов. На блокинг-генератор не похож, да и силовой транзистор слишком крупненький как для маломощного устройства. Может, обратноход?
Ведь кроме высокого напряжения нужно еще и накальное, изолированное гальванически и стабилизированное.
Если знаете, какое именно нужно напряжение на выходе, гуглите что-то на lm2566\2567 например, обвязки ерунда, а точность и диапазон возможной регулировки весьма широк + у китайцев есть готовые платы по цене от 1.2 до 5-6 долларов. смотря что и сколько нужно.
UFO just landed and posted this here
Да уж… Меня с раннего детства перло от этих жизнерадостно зеленых индикаторов… И как приятно видеть, что технология жива до сих пор!
Но цена… Кому «ехать» без вариантов предпочтет LCD за 5, чем эту конфетку, но за 55 :-(
Ищите более интересные и в часы, чисто из-за красоты. А так они все же устарели в большинстве случаев. Хотя символьный индикатор вроде вашего я бы применил в магнитоле, но слишком они дороги (от 50$ до 300$ графические).
Я бы предпочёл OLED индикаторы вакуумным. И потребление и хрупкость и контраст изображения выигрывают у вакуумных, а ресурс… даже больше чем у вакуумных(если не брать в расчёт отбраковку).
Ну да… Но они какие-то безжизненные, нет такого живого мерцания, нет разных хитрых контактиков, сеточек, едва различимой красной ниточки… Так-то «восьмерка» на диодах копейки, LCD тоже, кому надо для дела. А качественный цветной экран стоит соизмеримо и позволяет многое «нарисовать», в том числе с имитацией люминисцентного или вакуумного индикатора, а то и ЭЛТ, но вблизи видно же, что «не то»…
UFO just landed and posted this here
это мой первый пост. я еще тут не освоился. Не могу понять разницу направлений — хабр, гик, мегамозг
Разница примерно такая:
Хабр: Быстрый алгоритм распознавания изображений на 8-битных микроконтроллерах табличным методом
Гиктаймс: Смотрите, я прикрутил дисплей к ардуино!
Мегамозг: Как продавать китайские ардуины или реалии перегруженного рынка сбыта…
Самое главное — что текст может при этом незначительно различаться путём создания акцента на том или ином разделе.
И что теперь ваш комментарий делает на гиктаймсе?
Эмм, а аппаратный SPI нельзя для этого использовать? Судя по диаграмме это в чистом виде SPI на 3х проводах с CSn
честно не думал об этом, ибо в синтаксисе ардуины не силен. Больше программировал на AVRовском асме
Её же можно из AVRStudio цеплять, нет?
там какой то кривой SPI

http://datasheet.elcodis.com/pdf2/94/90/949025/m204sd02aj.pdf
Волей случая занесло меня в эксперименты с таким дисплеем. И у меня полный праведного гнева вопрос: где в Вашем коде команда <0хF8 0х0С>, которая включает дисплей?) Без нее дисплей был нем как рыба, и я уже начал сомневаться в его работоспособности.
Прошу прощения, я не совсем понял логику работы программы. Вы сначала заполняете память, а потом уже включаете дисплей. Это сбило меня с толку, и поэтому я считал, что мой дисплей неисправен, хотя он просто не получал команды на включение.
В статье очень заморочено с подключением по последовательному интерфейсу. Для ардуинщика лучше использовать параллельный интерфейс в 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);
}

Sign up to leave a comment.

Articles