Подключение PIC к PT6523
Re: Подключение PIC к PT6523
Управляющие пока все 0 оставил. С видео, к сожалению, не получится. Попробовал в темноте снять - мало что можно различить. Родная подсветка у дисплея крайне ужасная + камера на ночную съемку не расчитана.
PIC16F628A
Re: Подключение PIC к PT6523
В продолжении эпопеи - дисплей с разметкой кристалов!
Это общая схема дисплея, а вообще он цветной и выглядит так:
Следующие биты данных дисплея (счет с 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 являются пустыми (т.е. не подключены к кристалам), поэтому абсолютно не важно какое у них значение.
Полноразмерное изображение дисплея с разметкой в прикрепленном архиве.
Это общая схема дисплея, а вообще он цветной и выглядит так:
Следующие биты данных дисплея (счет с 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 КБ) 879 скачиваний
Последний раз редактировалось Mixer 20 янв 2010, 06:16, всего редактировалось 2 раза.
PIC16F628A
Re: Подключение PIC к PT6523
Контрольные биты DR, SC и BU.
DR: В случае с SC-7500 дисплей подключен в режиме 1/2 Bias, поэтому DR ставится в ноль. Если установить DR в 1 (при том же подключении схемы), то контрастность дисплея будет меньше.
SC: включает / выключает сегменты (кристалы). На практике может пригодиться лишь в случае, когда /INH управляется не с контроллера, а запитан через VDD. 0 - дисплей включен, 1 - выключен.
BU: aka "режим энергосбережения". Тоже бесполезный на мой взгляд режим. На практике либо включает (0 - режим энергосбережения отключен), либо выключает (1 - режим энергосбережения включен) дисплей. Вот и вся экономия. Возможно этим битом еще что-то где-то включается / выключается, но в данную тайну разработчики, видимо, не посчитали нужным нас посвящать.
Подведем итоги:
Как уже и говорилось ранее - все 4 бита в данном случае рекомендуется ставить в 0. Биты дисплея рекомендуется передавать все 156.
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
Спасибо за обширную информацию, теперь можно и статью написать по мотивам твоих исследований. Не возражаешь? А что кстати будет-то если не все биты передавать?
Просто он будет считать, что переданы старшие биты, а младшие будет считать нулями?
Просто он будет считать, что переданы старшие биты, а младшие будет считать нулями?
С уважением, администрация сайта.
Re: Подключение PIC к PT6523
По поводу статьи - только "ЗА"!
А с битами полная анархия... Приведу два примера с неполной отправкой (отсчет с 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 - на дисплее пусто.
Вопрос: как из под IcProg'а в EEPROM PIC'а данные запихать?
А с битами полная анархия... Приведу два примера с неполной отправкой (отсчет с 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;
}
}
}
}
}
Последний раз редактировалось Mixer 20 янв 2010, 06:19, всего редактировалось 1 раз.
PIC16F628A
- rhf-admin
- администратор, спонсор, писатель, дизайнер, инженер, программист, идеолог
- Сообщения: 3060
- Зарегистрирован: 25 авг 2009, 23:19
- Откуда: Уфа
- Контактная информация:
Re: Подключение PIC к PT6523
Слушай, сейчас внимательно посмотрел твою карту дисплея. Сегментов-то всего 52 + 3 линии com. Тут путаница из-за терминов. То, что в доке называется сегментами - это не сегменты дисплея, - это линии сегментов. Поэтому я и называл то что на дисплее не сегментами, а кристаллами. То есть к одному сегменту (линии сегментов) могут быть подключены 3 кристалла (к разным общим).
То есть если мы забываем про первые 8 бит, то мы забываем про две линии сегментов полностью, а третью линию подключаем только к com1.
Может быть проблема с неполными посылками в этом?
Блин, я на СИ 100 лет не писал, даже как-то стыдно, но чё-то я в твой код плохо въезжаю. Напиши комментарии пожалуйста. Неразберихи быть не должно. Если есть неразбериха - значит мы ещё не всё поняли.
По поводу того, как из под IC-proga данные в EEPROM pic-а запихать. Тут у меня тоже глюки бывают. Не всегда с первого раза записываются, а иногда записывается не то, что надо (хотя программа всегда с первого раза нормально шьется). Не знаю почему. Тут похоже в IC-proge какой-то косяк. Попробуй на разных скоростях.
То есть если мы забываем про первые 8 бит, то мы забываем про две линии сегментов полностью, а третью линию подключаем только к com1.
Может быть проблема с неполными посылками в этом?
Блин, я на СИ 100 лет не писал, даже как-то стыдно, но чё-то я в твой код плохо въезжаю. Напиши комментарии пожалуйста. Неразберихи быть не должно. Если есть неразбериха - значит мы ещё не всё поняли.
По поводу того, как из под IC-proga данные в EEPROM pic-а запихать. Тут у меня тоже глюки бывают. Не всегда с первого раза записываются, а иногда записывается не то, что надо (хотя программа всегда с первого раза нормально шьется). Не знаю почему. Тут похоже в IC-proge какой-то косяк. Попробуй на разных скоростях.
С уважением, администрация сайта.
Re: Подключение PIC к PT6523
Да, с терминологией путаница вышла. Думал о кристалах, написал о сегментах. Еще раз перелистал тему, поправил сообщения где не соответствовало.
Если мы забываем про первые 8 бит, то мы забываем про первые 8 кристалов (0-7).
Попробую заморочиться с отправкой битов с количеством кратным 3. Код закомментирую по результатам эксперимента.
Если мы забываем про первые 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 |
ну и так далее...
PIC16F628A
Re: Подключение PIC к PT6523
Код: Выделить всё
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; //сбрасываем счетчик
}
}
}
}
PIC16F628A
Re: Подключение PIC к PT6523
Все-таки передавать надо все 156 бит дисплея. Написал уже программку проще некуда - отправляет сначала все 156, затем 120 и потом 60. На 156 горят все кристалы. На 120 тоже все, но кристалы с номерами с 31 по 35 горят в половину своей яркости. На 60 горят все, а с 91 по 95 - в половину. В архиве видео (за качество извиняюсь), но проблему видно.
- Вложения
-
- sc7500.rar
- (397.53 КБ) 791 скачивание
PIC16F628A
- rhf-admin
- администратор, спонсор, писатель, дизайнер, инженер, программист, идеолог
- Сообщения: 3060
- Зарегистрирован: 25 авг 2009, 23:19
- Откуда: Уфа
- Контактная информация:
Re: Подключение PIC к PT6523
Да, похоже надо передавать все. Ну и ладно, всё равно это быстро происходит.
С уважением, администрация сайта.