Индикаторы TIC8148 и TIC33

Получил наконец то эти индикаторы из ekits.ru. Давно хотел их поиметь, но в Москве не мог их нигде найти. На фотографии маленький — это TIC33, а большой TIC8148.
маин
Замятый уголок отражателя у tic33 из-за того, что я его отдирал. Без него индикатор начинает работать на просвет, выглядит довольно прикольно. И я все равно хотел сделать к ним подсветку.
В оба индикатора на стекло проинтегрирован контроллер ML1001. Хотя контроллером его назвать можно условно — по сути это набор сдвигающих регистров с защелкой, генератор и драйверы сегментов. В зависимости от модели индикатора он может быть по разному сконфигурирован, например может быть отключен тактовый генератор:(, и присутствовать на стекле в одном или нескольких экземплярах. Зато потребляет он минимум и легко управляется. Ток потребления у TIC8148 был 10мкА, а у TIC33 — 0.4мкА!
Структурная схема контроллера и внутренние соединения для TIC8148 и TIC33:
ML1001
Для управления используются следующие выводы:
  • Din — вход данных.
  • Dclk — вход тактов данных, данные проталкиваются по фронту положительного сигнала.

  • Load — вход защелки данных, защелкивание идет тоже положительном фронтом.
  • Lclk — вход обновления индикации. Присутствует если в контроллере отключен встроенный генератор. На вход нужно подавать сигнал с частотой 50-120Гц.
  • Ben — разрешение мигания. На моих индикаторах его не было.
  • Bclk — тактовая частота для мигания.
  • VDD — питание, в зависимости от индикатора может быть от 2.5 до 5.0В
  • GND — общий, куда же без него.
Длительность тактовых импульсов должна быть не меньше 0.4us.

Для вывода на avr и stm8 используется одна и та же программа, разница только в описаниях подключения.
Для stm8:
#define   TIC8148 GPIOA
#define   Load    GPIO_Pin_3
#define   Din     GPIO_Pin_4
#define   Dclk    GPIO_Pin_5
#define   SetDin  GPIO_SetBits(TIC8148,Din)       // Установка бита данных в 1
#define   ClrDin  GPIO_ResetBits(TIC8148,Din)     // Установка бита данных в 0
#define   SetDclk GPIO_SetBits(TIC8148,Dclk);     // Установка строба данных в 1
#define   ClrDclk GPIO_ResetBits(TIC8148,Dclk);   // Установка строба данных в 0
#define   SClk    SetDclk;ClrDclk                 // Строб данных
#define   SetLoad GPIO_SetBits(TIC8148,Load);     // Установка строба загрузки в 1
#define   ClrLoad GPIO_ResetBits(TIC8148,Load);   // Установка строба загрузки в 0
#define   SLoad   SetLoad;ClrLoad                 // Строб загрузки

Для avr:
#define   TIC8148 PORTA
#define   Load    3
#define   Din     4
#define   Dclk    5
#define   SetDin  TIC8148 |= 1<<Din       // Установка бита данных в 1
#define   ClrDin  TIC8148 &=~ (1<<Din)    // Установка бита данных в 0
#define   SetDclk TIC8148 |= 1<<Dclk      // Установка строба данных в 1
#define   ClrDclk TIC8148 &=~ (1<<Dclk)   // Установка строба данных в 0
#define   SClk    SetDclk;ClrDclk         // Строб данных
#define   SetLoad TIC8148 |= 1<<Load      // Установка строба загрузки в 1
#define   ClrLoad TIC8148 &=~ (1<<Load)   // Установка строба загрузки в 0
#define   SLoad   SetLoad;ClrLoad         // Строб загрузки


Вывод одного разряда для TIC8148:

// Вывод на TIC8148
const u8 DigitTIC8148[]  = {1+2+8+16+32+64,64+32,16+32+4+2+1,16+32+4+64+1,8+4+32+64,16+8+4+64+1,16+8+2+4+1+64,16+32+64,127,127-2};
// point = 1, вывод точки
// sel = 1, вывод нижней скобки
void WriteCharTIC8148(u8 ch, u8 point, u8 sel)
{
  u8 i;
  ch=DigitTIC8148[ch];
  // Вывод точки
  if(point) SetDin;
  else ClrDin;
  SClk;
  // Вывод подчеркивания
  if(sel) SetDin;
  else ClrDin;
  SClk;
  // Вывод символа
  for(i=7;i;i--)
  {
  if(ch & 64) SetDin;
  else ClrDin;
  SClk;
  ch=ch<<1;
  }
}

Вывод одного разряда для TIC33:
// Вывод на TIC33
// point = 1, вывод точки
// 0...9,-,Градус,Space
#define   minus   10
#define   degress 11
#define   space   12
const u8 DigitTIC33[]  = {2+8+16+32+64+128,2+8,128+2+4+32+16,2+8+128+4+16,64+4+2+8,128+64+4+8+16,128+64+4+8+16+32,128+2+8,2+4+8+16+32+64+128,2+4+8+16+64+128,4,2+4+64+128,0};
void WriteCharTIC33(u8 ch,u8 point)
{
  u8 i;
  ch=DigitTIC33[ch];
  if(point) ch |= 1;
  // Вывод символа
  for(i=8;i;i--)
  {
  if(ch & 128) SetDin;
  else ClrDin;
  SClk;
  ch=ch<<1;
  }
}

И непосредственно вывод:
WriteCharTIC8148(8,0,1);
  WriteCharTIC8148(7,0,0);
  WriteCharTIC8148(6,1,0);
  WriteCharTIC8148(5,0,1);
  WriteCharTIC8148(4,0,1);
  WriteCharTIC8148(3,1,0);
  WriteCharTIC8148(2,0,0);
  WriteCharTIC8148(1,0,1);
  SLoad;

  WriteCharTIC33(1,0);
  WriteCharTIC33(2,0);
  WriteCharTIC33(3,1);
  WriteCharTIC33(4,0);
  WriteCharTIC33(5,0);
  WriteCharTIC33(6,1);
  WriteCharTIC33(7,0);
  WriteCharTIC33(8,0);
  WriteCharTIC33(9,1);
  SLoad;

Все выводы вначале конфигурируются на вывод и устанавливаюся в 0. На TIC33 также необходимо подать на Lclk меандр с частотой герц 60.
  • +2
  • 24 августа 2011, 00:15
  • PRC

Комментарии (60)

RSS свернуть / развернуть
Эх, знал бы я о них пару лет назад, когда делал курсовик по МПТ… Тогда я очень сильно намучился с поиском дисплея. Мне нравится задумка с последовательным интерфейсом, явное преимущество по сравнению с 44780! Надо будет прикупить.
0
Есть еще дисплеи от тел. аппаратов HT1613 или KO-4B, два вывода на управление.
0
У них вроде, если не обновлять информацию какое-то время, то они переходят в режим секундомера. И встроенный «знакогенератор», убогий чуть более чем полностью:)
0
Ну и этот не лучше, достать тяжелее, а знакогенератор — для таких, я считаю, хватит и вывода цифр.
0
Еще как минимум хочется знаки минуса там, градуса:)
0
Оба эти символа там (HT1613) есть.
0
Градуса символ точно, минус – не уверен, можно заменить, при его отсутствии, чем то другим, тоже мне проблема. А вообще хотеть не вредно. Даже очень полезно.
0
Насколько я помню символа градуса там как раз нет. И в любом случае удобней загонять изображение посегментно, чем кодами, которых в нем целых 16:) Мало ли что понадобится нарисовать.
0
Нет градус есть. Ладно я спатки.
0
А чо, квадратик из четырех сегментов нарисовать нельзя? Я так градус в термометре обозначал
0
Там загоняются 4 бита — код символа. Из них 10 цифры, причем код 0 — 10, наследие телефонного прошлого:) остается 6 символов, 99% которых абсолютно бесполезны. В том индикаторе, который был у меня единственный полезный знак который был — был минус. Ну и пусто конечно.
0
неудобно. лучше-бы просто по сегментам
0
Удобная штука для тех МК, в которых нет контроллера LCD, или у которых ножек мало.
0
Еще с ним разводка платы упрощается. Развести 3-4 ножки от этих или 28 у обычного ЖК.
0
часто использую TIC3321(с тремя разрядами) для тини 13/85
табло также позволяет организовать управление по 1 ноге с микроконтроллера, вот схема подключения с номиналами и пример функции по отображению чисел
если кому то интересно

//------------------------------------
/*Выводит число(numerics) на табло tic3321
следующие 3 переменные указывают надо или не надо отображать точки*/
//---------------------------------------
void showtic3321(unsigned short numerics,
			const unsigned char colon,
			const unsigned char firstdot,
			const unsigned char seconddot)
{
#include <avr/io.h>
#include <util/delay.h>

#define	LOAD_1	PORTB = (1<<PB0);		// PB0=1	
#define	LOAD_0	PORTB = (0<<PB0);		// PB0=0	

unsigned char X2=0,X1=0,X0=0;

unsigned char Conv_7 (unsigned char);
void Ind (const unsigned char );

    while(numerics>=100)
    {
        X2++;
        numerics-=100;
    }
    while(numerics>=10)
    {
        X1++;
        numerics-=10;
    }
    X0=numerics;
/*
	if (X2 == 0)
		{
		X2=10;
		if (X1 == 0)
			{
			X1=10;
			}
		}
*/
X0=Conv_7(X0);
X1=Conv_7(X1);
X2=Conv_7(X2);
X2 = (X2 >> 1);

if (colon==1){X1|=0b00000001;}
if (firstdot==1){X2|=0b10000000;}
if (seconddot==1){X0|=0b00000001;}

	Ind(X0);
	

	Ind(X1);
	

	Ind(X2);
	
	PORTB = (1<<PB0);		//LOAD_1
	_delay_ms(1);
	PORTB = (0<<PB0);		//LOAD_0

//	LOAD_1;
//	_delay_us(10);
//	LOAD_0;

}
//------------------------------------
unsigned char Conv_7 (unsigned char  data)
{
	switch (data)
			{
			case 0:	data=0b11111010;
					break;
			case 1:	data=0b01100000;
					break;
			case 2:	data=0b10110110;
					break;
			case 3:	data=0b11110100;
					break;
			case 4:	data=0b01101100;
					break;
			case 5:	data=0b11011100;
					break;
			case 6:	data=0b11011110;
					break;
			case 7:	data=0b01110000;
					break;
			case 8:	data=0b11111110;
					break;
			case 9:	data=0b11111100;
					break;
			case 10:data=0b00000000;
					break;
			}
	return data;
}
//------------------------------------
void Ind (const unsigned char Buf)
{

#define	DCLK_1	PORTB = (1<<PB0);		// PB0=1
#define	DCLK_0	PORTB = (0<<PB0);		// PB0=0	

unsigned char Tmp,Mask=0x80;

	while (Mask!=0)
		{
		Tmp = Buf & Mask;
		Mask = Mask >> 1;
		DCLK_1;					// DCLK_1
		if (Tmp==0)
			{
			_delay_us(5);		// DIN_0
			DCLK_0;
			_delay_us(45);
			}		
		else
			{
			_delay_us(45);		// DIN_1
			DCLK_0;
			_delay_us(5);
			}
		}
}
+1
Не перестаю удивляться количеству интереснейших статей у DiHalt-а! Уже хочу попробовать сделать дисплей с управлением на одном проводе! На двух (I2C) я уже делал :) Где-то у меня валяются 7 сегментные модули и 74HC164, надо только вспомнить где…
0
Сделал интересное наблюдение, если обновлять информацию на TIC33 не реже раза в секунду, то изображение будет и при отсутствии сигнала на Lclk. Хотя срок службы экрана думаю не слабо снизится.
0
  • avatar
  • PRC
  • 24 августа 2011, 19:08
Там наверное получается, что дисплей постоянным напряжением питается. А это плохо.
0
Я поэтому и написал про срок работы.
0
А, я прочитал по диагонали :) думал — «слабо снизится»
0
а можно спросить из-за чего снизится?
0
Из-за того, что «пиксели» в ЖК дисплеях, по своей природе, должны питаться переменным током. Иначе начинают деградировать.
0
На постоянном токе жидкие кристаллы быстро разрушаются электролизом, поэтому их запитывают только переменкой.
0
это должен быть полноценный переменный или меандр от 0 до +5 достаточно?
0
Переменный между сегментами отображения и общим (СОМ). Обычно достаточно меандра.
0
Принцип такого управления можно увидеть на счетчиках для часов серии К176ИЕ.
Вход S для ЖКИ
Вход S предназначен для переключения режимов работы микросхемы с разными индикаторами. Если этот вывод соединить с + питания, то микросхема переходит в режим работы с индикатором с общим анодом, если с — питания – то в режим индикатора с общим катодом.
0
Там не должно быть постоянной составляющей. Форма может быть произвольной.
0
Да.Классные индикаторы.Я когда их попробовал очень был доволен.И закупил TIC8148 сразу десяток.
Может есть у кого опыт работы с TIC-32? Графические.
А то есть у меня пара штук, а запустить никак не могу.
Ни одна точка не светится.
0
А как на такие дисплеи делают подцветку?
0
Как обычно. Или спереди стеклышко с подсветкой (передняя подсветка), или сзади на просвет (возможно потребуется заменить отражающую пленку на полупрозрачную или вообще удалить).
0
Для 8148 есть готовый модуль подсветки. Тут один деятель расписывает изготовление подсветки самостоятельно.
0
спасибо!
0
Имеется подобный индикатор, но 4 вывода. Что за контроллер может стоять?
0
Может быть из серии HTхххх или миэлтовский МТ-хххх. Хорошо бы на изображение его посмотреть.
0
Верхний savepic.org/2221553.jpg

Не совсем правильно написал, выводов то 8, а используються 4.
Слава — направо
1) через перемычку на корпус(наверно контрастность, т.к. есть возможность соеденить в качестве делителя на +)
2 и 3) минус
4) плюс
5 и 6 ) не используются
7 и 8) данные (подтяжка 5кОм к плюсу)
Всего разрядов около 14, и много спец. символов

Нижний тоже не опознан, символьный, вывода — GND,VDD,MODE,LCDRS,SEL,LCDCS,D0,D1,D2,D3
0
Поснифферить возможность имеется? 2 линии управления и подтяжка намекают на I2C.
Нижний тоже не опознан
Названия линий несколько напоминают 44780 с урезанным до 4 бит интерфейсом.
0
Поснифферить возможность имеется?
Пока нет, плата куда подключался то есть, но ее работоспособность вызывает сомнения.

напоминают 44780 с урезанным интерфейсом.
Пробывал, то ли не он, то ли не так подключал.
0
У меня TIC33 добытый из «Тритона». Я на Lclk вообще 12 КГц подаю. Экспериментальная величина… Откуда цифра в 50-120Гц? В даташитах, которые я использовал было вообще 32 КГц(из даташита на контролер ML1001).
0
  • avatar
  • mvb
  • 11 ноября 2011, 17:14
32кГц — частота встроенного генератора, которая затем делиться до нужных величин. И эта, поделенная уже, частота идет на сдвигающие регистры. В 33 генератора нет и сигнал на регистры идет напрямую. А частота регенерации для ЖК как раз около 50-120Гц.
0
Спасибо за ответ. Это я всё понимаю. Я не понимаю откуда взялись цифры 50-120Гц? К сожалению, у меня документация очень мутная.
Маленький листочек (pdf) не сам индикатор (в основном указаны геометрические размеры) и общая дока на контроллер ML1001. Из доки на контроллер не понятно как именно на этом конкретном индикаторе он используется. А про частоту _внешнего_ генератора нет ни слова…
Если у Вас есть ссылка на «правильную» доку — поделитесь, пожалуйста.
0
Я ориентировался по этому — ML1001.pdf. Там как раз есть схемы внутренних соединений и по ней видно, что тактовая для индикатора равна 125Гц. Такая же схема внутренних соединений есть и в мануале к 33.
0
Можно Вас попросить дать ссылку на pdf по индикатору? В той, которую использовал я, FIN подключен к GND а LCLK выведен наружу. Туда 32 kHz нужно подавать. Или я запутался в доке на ML1001?
0
Все верно. FIN — вход встроенного делителя, в TIC8148 к нему подключается OOUT — выход генератора на 32кГц. Разрешает работу генератора вход OEN, в 33 он подключен к + (разрешение идет 0). И с выхода этого делителя сигнал с F=125Гц идет на LCLK. Это хорошо видно в мануале на 8148.
Сравни схемы коммутации на 8148 и 33.
0
Спасибо за подробный ответ. Пошёл крутить гайки. Эта информация сильно облегчила моё устройство :) 120 Hz накопать проще чем 32 kHz.
0
Добавил в саму статью структурную схему контроллера и внутренние связи у 8148 и 33. По ней хорошо видно, откуда взялась частота 120Гц:)
0
а подсветку для tic33 удалось соорудить? увидеть бы где пошаговую инструкцию и картинки, как оно выгляит с подсветкой…
0
Получилось. На маленьких неплохо смотрится, но процесс не особо технологичный.
0
нужны подробности! что значит не особо технологичный?
0
Толстого оргстекла у меня не было. Я нарезал пластин из крышки от компакт диска, зашкурил каждую с обоих сторон и склеивал в пакет нужной толщины. Затем со всех сторон обклеил белой бумагой и по бокам сделал дырки под светодиоды. В итоге свет рассеивается очень хорошо, но процесс сборки мне не особо понравился.
0
блин. я плохо представляю саму технологию. какова механика? нужно ли отдирать что-либо с самого дисплейчика? насколько после этой операции он увеличивается в размерах?
0
Увеличивается в ширину на 5мм (длину светодиодов). От экрана нужно оторвать пленку снизу, что бы он стал работать не на отражение, а на просвет.
0
какие-то еще тонкости, которые нужно знать? есть шанс повредить экран?
0
Эти пленочки обычно полупрозрачные. Сквозь нее подсветка не пробивает?
0
Тогда нужна большая яркость и будут видны пятна света от светодиодов.
0
сдаётся мне, у меня без меандра на lclk работало — сейчас разбирал код, глянул, а строчка, включающая таймер, была в комментариях. завтра проверю.
0
в самом деле. таймер включаться не должен был, но при этом оно работало.
0
Я выше, в коментариях, уже писал об этом.
0
чорт. хотя у меня оно и обновлялось раз в секунду.
уже два раза пытался поймать, иногда на дисплее отображается какая-то фигня на долю секунды и потом опять нормальная картинка. грешил на натыренную в инете функцию преобразования из числа в отдельные разряды.
буду теперь знать, что обновлять нужно только в том случае, если значение поменялось.
интересно, а если обновить один раз и не подавать меандр? :-)
и вот еще: кто как их монтирует? вот думаю, на жидкие сопли/цианоакрилат или момент посадить. а электрические соединения — монтажным проводом. на плату как-то неудобно получается…
0
Не советую цианакрилат. Он испаряется, затем эти пары оседают где попало и полимеризуются. «Где попало» обычно оказывается стеклом или экраном.
Жидкие сопли, если речь о термоклее, я бы тоже не применял. Во первых, они любят со временем терять адгезию, во вторых стекло и/или ЖК может не одобрать нагрев.
ИМХО, лучше крепить механически.
0
ох… очередная напасть. вот оно вроде б показывает, строб сделал 60гц. обновляю цифры только по мере надобности. и что вижу? а вижу, как оно как в кино со спецэффектами стирается! просто исчезает в небытие. были цифры на экране, и через пару минут перестали быть совсем. что тут нужно подкрутить, чтобы оно не пропадало?
или это со стробом что-то у меня не того (отключаю питание — и те старые цифры на мгновение просвечиваются заново)
0
Только зарегистрированные и авторизованные пользователи могут оставлять комментарии.