МС6205: различия между версиями

Материал из DekatronPC
 
(не показано 5 промежуточных версий этого же участника)
Строка 1: Строка 1:
[[Категория:Музей]]
[[Категория:Музей]]
[[Категория:Индикаторы]]
[[Категория:Индикаторы]]
[[Категория:Проекты]]
[[Файл:Mc6205 view.jpg|мини|справа]]
[[Файл:Mc6205 view.jpg|мини|справа]]
== Описание ==  
== Описание ==  
Строка 9: Строка 10:
* Разрешение 100*100 точек
* Разрешение 100*100 точек
* Конфигурация - 10 строк по 16 символов с подчеркиванием
* Конфигурация - 10 строк по 16 символов с подчеркиванием
* Размеры  индикатора 145*145*90мм.


[[ГИП10000]] по умолчанию - графический индикатор. Однако контроллер дисплея конфигурирует его как текстовый, с постоянно горящими символами подчеркивания. Кодовая таблица - "чережопный" КОИ-7 - зашита непосредственно в ПЗУ индикаторной панели. "Черезжопный" потому что октеты символов инвертированы.
[[ГИП10000]] по умолчанию - графический индикатор. Однако контроллер дисплея конфигурирует его как текстовый, с постоянно горящими символами подчеркивания. Кодовая таблица - "чережопный" КОИ-7 - зашита непосредственно в ПЗУ индикаторной панели. "Черезжопный" потому что октеты символов инвертированы.
Строка 27: Строка 29:


Индикатор исправен и будет использоваться в эмуляторе лампового компьютера на ПЛИС
Индикатор исправен и будет использоваться в эмуляторе лампового компьютера на ПЛИС
=== Код для Arduino ===
шина данных и шина адреса смультиплексированы, к пинам 11 10 и 12 подключены Wr, Addr, и Rst - исходя из нумерации дефиниций.
<spoiler show="showMessage" hide="hideMessage">
<syntaxhighlight lang="c">
#define WR (11)
#define RST (10)
#define ADR (12)
void setup() {
  Serial.begin(38400);
  // put your setup code here, to run once:
  for (uint8_t i = 2; i <= 20; ++i )
  {
    pinMode(i, OUTPUT);
    digitalWrite(i, LOW);
  }
  digitalWrite(WR, HIGH);
  digitalWrite(ADR, HIGH);
  digitalWrite(RST, HIGH);
  strobeRst(20);
}
void strobeWr()
{
  PORTB &= ~(1 << PB3);
  delayMicroseconds(2);
  PORTB |= (1 << PB3);
}
void strobeAddr()
{
  PORTB &= ~(1 << PB4);
  delayMicroseconds(2);
  PORTB |= (1 << PB4);
}
void strobeRst(uint8_t row)
{
  uint8_t startPos = row < 10 ? row * 16 : 0;
  uint8_t endPos = row < 10 ? row * 16 + 16 : 160;
 
  for (uint8_t i = startPos; i < endPos; ++i)
  {
    sendAddr(i);
    sendData(0x5F);
  }
  sendAddr(0);
}
void sendPort(uint8_t data)
{
  PORTC &= ~0x3F;
  PORTC |= data & 0x3F;
  PORTB &= ~0x03;
  PORTB |= (data >> 6) & 0x03;
}
void sendAddr(uint8_t addr)
{  sendPort(addr);  strobeAddr();}
void sendData(uint8_t data)
{  sendPort(data);  strobeWr();}
uint8_t pos = 0;
unsigned long previousMillis = 0;        // will store last time LED was updated
const long interval = 1;          // interval at which to blink (milliseconds)
uint8_t convertChar(uint8_t data)
{
  uint8_t high = 0x70 - (data & 0xf0);
  uint8_t low = (0x0f - (data & 0x0f)) & 0x0f;
  return high | low;
}
void loop() {
  while (1)
  { // put your main code here, to run repeatedly:
    if (Serial.available() > 0)
    {
      uint8_t symbol =  Serial.read();
      if (symbol == 0xff)
        pos = 1;
      else
      {
        if ((symbol & 0xf0)  == 0xf0)
        {
          strobeRst(symbol & 0x0f);
          pos = 0;
        }
        switch (pos)
        {
          case 1:
            sendAddr(symbol);
            pos = 2;
            break;
          case 2:
            sendData(symbol);
            pos = 0;
            break;
        }
      }
    }
    unsigned long currentMillis = millis();
    if (currentMillis - previousMillis >= 1) {
      previousMillis = currentMillis;
      Serial.write(0xfd);
    }
  }
}
</syntaxhighlight>
</spoiler>


== Видео ==
== Видео ==
Строка 36: Строка 156:
* http://retropc.org/Indikator_Elektronika_MS6205_s_138.html - Внутренности
* http://retropc.org/Indikator_Elektronika_MS6205_s_138.html - Внутренности
* [[Файл:Indikator elektronika ms6205.djvu]] - Технмческое описание и инструкция по эксплуатации
* [[Файл:Indikator elektronika ms6205.djvu]] - Технмческое описание и инструкция по эксплуатации
* https://dekatronpc.com/images/3/33/MC6205_manual.pdf - Технмческое описание и инструкция по эксплуатации (более высокое качество)

Текущая версия на 11:46, 5 апреля 2021

Mc6205 view.jpg

Описание

Индикаторная панель МС6205 на основе индикатора ГИП10000

  • Рабочая область экрана 119*119мм
  • Разрешение 100*100 точек
  • Конфигурация - 10 строк по 16 символов с подчеркиванием
  • Размеры индикатора 145*145*90мм.

ГИП10000 по умолчанию - графический индикатор. Однако контроллер дисплея конфигурирует его как текстовый, с постоянно горящими символами подчеркивания. Кодовая таблица - "чережопный" КОИ-7 - зашита непосредственно в ПЗУ индикаторной панели. "Черезжопный" потому что октеты символов инвертированы.

Индикаторная панель требует два типа питания - +5В и +12В. Все остальные напряжения необходимые для работы - вырабатываются самой панелью.

Интерфейс - параллельный. 8 линий адреса, 7 линий данных. Можно мультиплексировать шину адреса и шину данных, указывая на отдельном пине что сейчас подается.

Происхождение

схема распайки кабеля

Конкретно моя панель стояла на советском счетчике банкнот "Банкнота-1"

Mc6205 banknota.jpg

Подарил Андрей М. За что ему спасибо. У панели родной шлейф, который был прозвонен, к нему были подпаяны две колодки и индикатор был подключен к плате ардуино.

Mc6205 cable.jpg

Индикатор исправен и будет использоваться в эмуляторе лампового компьютера на ПЛИС

Код для Arduino

шина данных и шина адреса смультиплексированы, к пинам 11 10 и 12 подключены Wr, Addr, и Rst - исходя из нумерации дефиниций.

Видео

Ссылки