Подключение PIC к PT6523

Подключение разных дисплейчиков
Mixer
инженер, читатель
инженер, читатель
Сообщения: 70
Зарегистрирован: 27 ноя 2009, 00:45

Re: Подключение PIC к PT6523

Сообщение Mixer »

Управляющие пока все 0 оставил. С видео, к сожалению, не получится. Попробовал в темноте снять - мало что можно различить. Родная подсветка у дисплея крайне ужасная + камера на ночную съемку не расчитана.
PIC16F628A
Mixer
инженер, читатель
инженер, читатель
Сообщения: 70
Зарегистрирован: 27 ноя 2009, 00:45

Re: Подключение PIC к PT6523

Сообщение Mixer »

В продолжении эпопеи - дисплей с разметкой кристалов!
Изображение

Это общая схема дисплея, а вообще он цветной и выглядит так:
Изображение

Следующие биты данных дисплея (счет с 0 до 155) 34, 48, 49, 53, 54, 55, 56, 63, 64, 68, 69, 70, 71, 78, 79, 83, 84, 85, 86, 93, 94, 98, 99, 100, 101, 108, 109, 113, 114, 115, 116, 121, 123, 124, 125, 129, 130, 135, 136, 137, 144, 145, 146, 147, 148, 149, 150, 151, 152, 153, 154, 155 являются пустыми (т.е. не подключены к кристалам), поэтому абсолютно не важно какое у них значение.

Полноразмерное изображение дисплея с разметкой в прикрепленном архиве.
Вложения
Сегменты.rar
(357.22 КБ) 874 скачивания
Последний раз редактировалось Mixer 20 янв 2010, 06:16, всего редактировалось 2 раза.
PIC16F628A
Mixer
инженер, читатель
инженер, читатель
Сообщения: 70
Зарегистрирован: 27 ноя 2009, 00:45

Re: Подключение PIC к PT6523

Сообщение Mixer »

Контрольные биты DR, SC и BU.

DR: В случае с SC-7500 дисплей подключен в режиме 1/2 Bias, поэтому DR ставится в ноль. Если установить DR в 1 (при том же подключении схемы), то контрастность дисплея будет меньше.

SC: включает / выключает сегменты (кристалы). На практике может пригодиться лишь в случае, когда /INH управляется не с контроллера, а запитан через VDD. 0 - дисплей включен, 1 - выключен.

BU: aka "режим энергосбережения". Тоже бесполезный на мой взгляд режим. На практике либо включает (0 - режим энергосбережения отключен), либо выключает (1 - режим энергосбережения включен) дисплей. Вот и вся экономия. Возможно этим битом еще что-то где-то включается / выключается, но в данную тайну разработчики, видимо, не посчитали нужным нас посвящать.

Подведем итоги:
Как уже и говорилось ранее - все 4 бита в данном случае рекомендуется ставить в 0. Биты дисплея рекомендуется передавать все 156.
Последний раз редактировалось Mixer 20 янв 2010, 06:17, всего редактировалось 1 раз.
PIC16F628A
Аватара пользователя
rhf-admin
администратор, спонсор, писатель, дизайнер, инженер, программист, идеолог
администратор, спонсор, писатель, дизайнер, инженер, программист, идеолог
Сообщения: 3060
Зарегистрирован: 25 авг 2009, 23:19
Откуда: Уфа
Контактная информация:

Re: Подключение PIC к PT6523

Сообщение rhf-admin »

Спасибо за обширную информацию, теперь можно и статью написать по мотивам твоих исследований. Не возражаешь? А что кстати будет-то если не все биты передавать?
Просто он будет считать, что переданы старшие биты, а младшие будет считать нулями?
С уважением, администрация сайта.
Mixer
инженер, читатель
инженер, читатель
Сообщения: 70
Зарегистрирован: 27 ноя 2009, 00:45

Re: Подключение PIC к PT6523

Сообщение Mixer »

По поводу статьи - только "ЗА"!
А с битами полная анархия... Приведу два примера с неполной отправкой (отсчет с 0 по 155):
1. Отправляем биты дисплея с 8 по 155, т.е. про первые 8 бит (с 0 по 7) забываем. Что ожидается: должны гореть все кристалы, кроме 0-7. Что имеем в действительности: при первой отправке горят все кристалы, кроме 7(!) При второй и последующих оптравках горят все кристалы, кроме 3-7(!)
2. Отправляем биты дисплея с 16 по 155, т.е. про первые 16 бит (с 0 по 15) забываем. Что ожидается: должны гореть все кристалы, кроме 0-15. Что имеем в действительности: при первой отправке горят все кристалы, кроме 15(!) При второй и последующих оптравках горят все кристалы, кроме 11-15(!)

Вобщем практика расходится с теорией. Код проверен на 10 раз (прилагаю). Кстати, из результатов эксперимента можно было бы предположить, что при старте все биты дисплея в буфере драйвера заполнены 1, но - пробовал ничего не передавая включить /INH - на дисплее пусто.

Код: Выделить всё

unsigned short i, j, OLD_B, bit_count, ar_bit[21];

void set_bits()
{
  for (i = 0; i < bit_count; i++)
  {
    if (i > 0)
    {
      OLD_B.F6 = 1;
      PORTB = OLD_B;
    }
    for (j = 0; j < 8; j++)
    {
      OLD_B.F4 = 0;
      PORTB = OLD_B;
      OLD_B.F7 = (ar_bit[i] >> (7 - j)) & (0x01);
      PORTB = OLD_B;
      OLD_B.F4 = 1;
      PORTB = OLD_B;
    }
  }
  OLD_B.F4 = 0;
  OLD_B.F5 = 1;
  OLD_B.F6 = 0;
  PORTB = OLD_B;
}

void main()
{
  CMCON = 0x7;
  PORTA = 0b00000000;
  TRISA = 0b00000000;
  PORTB = 0b00000000;
  TRISB = 0b00000010;
  OLD_B = 0b00000000;
  Usart_Init(2400);
  
  Delay_ms(1500);

  ar_bit[0] = 0x82;
  i = 0;
  while(1)
  {
    if (Usart_Data_Ready())
    {
      if (i == 0)
      {
        bit_count = Usart_Read();
        i++;
      }
      else
      {
        ar_bit[i] = Usart_Read();
        i++;
        if (i == bit_count)
        {
          Usart_Write(0x4F);
          Usart_Write(0x4B);
          set_bits();
          i = 0;
        }
      }
    }
  }
}
Вопрос: как из под IcProg'а в EEPROM PIC'а данные запихать?
Последний раз редактировалось Mixer 20 янв 2010, 06:19, всего редактировалось 1 раз.
PIC16F628A
Аватара пользователя
rhf-admin
администратор, спонсор, писатель, дизайнер, инженер, программист, идеолог
администратор, спонсор, писатель, дизайнер, инженер, программист, идеолог
Сообщения: 3060
Зарегистрирован: 25 авг 2009, 23:19
Откуда: Уфа
Контактная информация:

Re: Подключение PIC к PT6523

Сообщение rhf-admin »

Слушай, сейчас внимательно посмотрел твою карту дисплея. Сегментов-то всего 52 + 3 линии com. Тут путаница из-за терминов. То, что в доке называется сегментами - это не сегменты дисплея, - это линии сегментов. Поэтому я и называл то что на дисплее не сегментами, а кристаллами. То есть к одному сегменту (линии сегментов) могут быть подключены 3 кристалла (к разным общим).
То есть если мы забываем про первые 8 бит, то мы забываем про две линии сегментов полностью, а третью линию подключаем только к com1.
Может быть проблема с неполными посылками в этом?
Блин, я на СИ 100 лет не писал, даже как-то стыдно, но чё-то я в твой код плохо въезжаю. Напиши комментарии пожалуйста. Неразберихи быть не должно. Если есть неразбериха - значит мы ещё не всё поняли.

По поводу того, как из под IC-proga данные в EEPROM pic-а запихать. Тут у меня тоже глюки бывают. Не всегда с первого раза записываются, а иногда записывается не то, что надо (хотя программа всегда с первого раза нормально шьется). Не знаю почему. Тут похоже в IC-proge какой-то косяк. Попробуй на разных скоростях.
С уважением, администрация сайта.
Mixer
инженер, читатель
инженер, читатель
Сообщения: 70
Зарегистрирован: 27 ноя 2009, 00:45

Re: Подключение PIC к PT6523

Сообщение Mixer »

Да, с терминологией путаница вышла. Думал о кристалах, написал о сегментах. Еще раз перелистал тему, поправил сообщения где не соответствовало.
Если мы забываем про первые 8 бит, то мы забываем про первые 8 кристалов (0-7).

Код: Выделить всё

| Сегмент | COM3 | COM2 | COM1 |
|   SEG1  |   0  |   0  |   0  |
|   SEG2  |   0  |   0  |   0  |
|   SEG3  |   0  |   0  |   1  |
|   SEG4  |   1  |   1  |   1  |
|   SEG5  |   1  |   1  |   1  |
         ну и так далее...
Попробую заморочиться с отправкой битов с количеством кратным 3. Код закомментирую по результатам эксперимента.
PIC16F628A
Mixer
инженер, читатель
инженер, читатель
Сообщения: 70
Зарегистрирован: 27 ноя 2009, 00:45

Re: Подключение PIC к PT6523

Сообщение Mixer »

Код: Выделить всё

unsigned short i, j, OLD_B, bit_count, ar_byte[21];

void set_bits()
{
  for (i = 0; i < 21; i++)
  {
    //перебираем все байты массива, максимум их 21
    //8 бит адреса + 156 бит дисплея + 4 бита дисплея = 168 бит
    //168 бит / 8 = 21 байт
    if (i > 0)
    {
      //если передали адрес - включаем CE
      OLD_B.F6 = 1;  //CE 1
      PORTB = OLD_B; //передаем в порт
    }
    for (j = 0; j < 8; j++)
    {
      //перебираем биты у байта
      if (((i * 8) + j) < bit_count)
      {
        //продолжаем передавать данные, если еще не все переданы
        OLD_B.F4 = 0;  //CLOCK 0
        PORTB = OLD_B; //передаем в порт
        //поочередно перебираем все 8 бит, начинаем со старших
        OLD_B.F7 = (ar_bit[i] >> (7 - j)) & (0x01); //DI
        PORTB = OLD_B; //передаем в порт
        OLD_B.F4 = 1;  //CLOCK 1
        PORTB = OLD_B; //передаем в порт
      }
      else
      {
        //если все передали - завершаем
        break;
      }
    }
  }
  OLD_B.F4 = 0;  //CLOCK 0
  OLD_B.F5 = 1;  //INH 1
  OLD_B.F6 = 0;  //CE 0
  PORTB = OLD_B; //передаем в порт
}

void main()
{
  CMCON = 0x7;
  PORTA = 0b00000000;
  TRISA = 0b00000000;
  PORTB = 0b00000000;
  TRISB = 0b00000010;
  OLD_B = 0b00000000;
  Usart_Init(2400);

  Delay_ms(1500);

  i = 0; //ставим счетчик массива в 0
  
  while(1)
  {
    if (Usart_Data_Ready())
    {
      //если пришли какие-то данные
      if (i < 1)
      {
        //если это самое начало передачи, сначала принимаем количество
        //битов, которое будет передано
        bit_count = Usart_Read(); //количество битов
        ar_byte[i] = 0x82;        //записываем адрес 10000010
      }
      else
      {
        ar_byte[i] = Usart_Read(); //принимаем остальные биты
      }
      i++;
      if (i > 20)
      {
        //если переданы все биты, начинаем передачу в контроллер
        set_bits(); //передача в контроллер
        i = 0;      //сбрасываем счетчик
      }
    }
  }
}
Если кратко, то смысл такой - сначала передаем, сколько бит будет передано (bit_count), потом заполняем массив 21 байтом (с уже смещенными битами), а в цикле уже передаем только те, что нужны. Результаты хоть и лучше предыдущих, но тоже не однозначные... Передал 3-155 - отобразилось нормально, затем 6-155 - тоже нормально, а вот 9-155, 12-155 и т.д. пошли накладки. На днях еще поковыряю.
PIC16F628A
Mixer
инженер, читатель
инженер, читатель
Сообщения: 70
Зарегистрирован: 27 ноя 2009, 00:45

Re: Подключение PIC к PT6523

Сообщение Mixer »

Все-таки передавать надо все 156 бит дисплея. Написал уже программку проще некуда - отправляет сначала все 156, затем 120 и потом 60. На 156 горят все кристалы. На 120 тоже все, но кристалы с номерами с 31 по 35 горят в половину своей яркости. На 60 горят все, а с 91 по 95 - в половину. В архиве видео (за качество извиняюсь), но проблему видно.
Вложения
sc7500.rar
(397.53 КБ) 786 скачиваний
PIC16F628A
Аватара пользователя
rhf-admin
администратор, спонсор, писатель, дизайнер, инженер, программист, идеолог
администратор, спонсор, писатель, дизайнер, инженер, программист, идеолог
Сообщения: 3060
Зарегистрирован: 25 авг 2009, 23:19
Откуда: Уфа
Контактная информация:

Re: Подключение PIC к PT6523

Сообщение rhf-admin »

Да, похоже надо передавать все. Ну и ладно, всё равно это быстро происходит.
С уважением, администрация сайта.
Ответить