Светодиодный индикатор на базе ТМ1637

Дисплеи, датчики и прочие функциональные узлы, управляемые МК.
Аватара пользователя
Starichok51
Модератор
Сообщения: 19053
Зарегистрирован: Сб авг 14, 2010 15:05:51
Откуда: г. Озерск, Челябинская обл.

Re: Светодиодный индикатор на базе ТМ1637

Сообщение Starichok51 »

собственный код удобнее даже тем, что сигналы можно назначить на любые ноги, а не только на те, которые связаны с аппаратным I2С.
Мудрость приходит вместе с импотенцией...
Когда на русском форуме переходят на Вы, в реальной жизни начинают бить морду.
Реклама
veso74
Поставщик валерьянки для Кота
Сообщения: 1909
Зарегистрирован: Сб май 05, 2012 20:24:52
Откуда: KN34PC, Болгария
Контактная информация:

Re: Светодиодный индикатор на базе ТМ1637

Сообщение veso74 »

[uquote="Starichok51",url="/forum/viewtopic.php?p=4366041#p4366041"]... можно назначить на любые ноги ...[/uquote]
Да, то же самое и с программным I2c, но для конкретного теста в ATtiny13A сэкономило памяти. Осталось и для других приложений, например для датчиков.
Реклама
Аватара пользователя
VNS
Говорящий с текстолитом
Сообщения: 1627
Зарегистрирован: Пт дек 10, 2021 12:48:46
Откуда: Тюмень

Re: Светодиодный индикатор на базе ТМ1637

Сообщение VNS »

Имитация работы часов… убрал всё лишнее… код подкорректировал… :) частота тактирования 9,6 МГц.
Исходник на АВ… код для индикатора без конденсаторов… :solder: :)
Test TM1637 tiny13 forum.zip
(16.98 КБ) 123 скачивания
veso74
Поставщик валерьянки для Кота
Сообщения: 1909
Зарегистрирован: Сб май 05, 2012 20:24:52
Откуда: KN34PC, Болгария
Контактная информация:

Re: Светодиодный индикатор на базе ТМ1637

Сообщение veso74 »

Мне удалось подключить дисплей к TM1637 и устройство с "настоящим I2C" (с адресом) на двух пинах МК :).
(Добавил и "безадресный" i2c_start в TinyWire).

Конечно, с оговорками и особенностями: должен быть выполнен порядок загрузки инфо: сначала загрузка информации на у-во с "настоящим I2C", затем на дисплей. Последняя цифра в дисплее гаснет за время загрузки информации, но после расстановки приоритета загрузки этого не заметно.

Я доволен :), теперь 3 (+1) пина "бедного" ATtiny13A остаются "для будущего использования".

тест: счетчик 0000..9999 и светодиодная мигалка:
Вложения
tm1637_i2c_pcf8574.gif
(25.08 КБ) 138 скачиваний
Реклама
Эиком - электронные компоненты и радиодетали
Аватара пользователя
musor
Друг Кота
Сообщения: 39197
Зарегистрирован: Сб сен 13, 2014 16:27:32
Откуда: СпиртоГонск созвездия Омега

Re: Светодиодный индикатор на базе ТМ1637

Сообщение musor »

забавно вот тока иногда +++ читать даьтчик на шине "настоящим I2C" (с адресом)
нать и доску опросить через ТМ-ку
ZМудрость(Опыт и выдержка) приходит с годами.
Все Ваши беды и проблемы, от недостатка знаний.
Умный и у дурака научится, а дураку и ..
Алберт Ейнштейн не поможет и ВВП не спасет.и МЧС опаздает
Реклама
veso74
Поставщик валерьянки для Кота
Сообщения: 1909
Зарегистрирован: Сб май 05, 2012 20:24:52
Откуда: KN34PC, Болгария
Контактная информация:

Re: Светодиодный индикатор на базе ТМ1637

Сообщение veso74 »

musor, я не понял (РУ сленг?). Можно другими словами?
Реклама
Аватара пользователя
musor
Друг Кота
Сообщения: 39197
Зарегистрирован: Сб сен 13, 2014 16:27:32
Откуда: СпиртоГонск созвездия Омега

Re: Светодиодный индикатор на базе ТМ1637

Сообщение musor »

ну пример на общей I2C
висят ds1307 +LM75A через tm1641
выводим на LED час-митуты -сек +год месяц - число -ден недели
+температура с LM75A
+опрос клавиатуры (periodic polling of the keyboard matrix) через tm1641
такое будет работать?
ZМудрость(Опыт и выдержка) приходит с годами.
Все Ваши беды и проблемы, от недостатка знаний.
Умный и у дурака научится, а дураку и ..
Алберт Ейнштейн не поможет и ВВП не спасет.и МЧС опаздает
veso74
Поставщик валерьянки для Кота
Сообщения: 1909
Зарегистрирован: Сб май 05, 2012 20:24:52
Откуда: KN34PC, Болгария
Контактная информация:

Re: Светодиодный индикатор на базе ТМ1637

Сообщение veso74 »

TM1641: интерфейс (CLK, STB, DIN, DOUT)
Совсем ушли от темы.
Последний раз редактировалось veso74 Вс фев 05, 2023 12:45:28, всего редактировалось 1 раз.
Аватара пользователя
musor
Друг Кота
Сообщения: 39197
Зарегистрирован: Сб сен 13, 2014 16:27:32
Откуда: СпиртоГонск созвездия Омега

Re: Светодиодный индикатор на базе LM75A

Сообщение musor »

ах да тамже подобие SPI забыл уже... ну ладно а тоже самое с ТМ1637?
ZМудрость(Опыт и выдержка) приходит с годами.
Все Ваши беды и проблемы, от недостатка знаний.
Умный и у дурака научится, а дураку и ..
Алберт Ейнштейн не поможет и ВВП не спасет.и МЧС опаздает
veso74
Поставщик валерьянки для Кота
Сообщения: 1909
Зарегистрирован: Сб май 05, 2012 20:24:52
Откуда: KN34PC, Болгария
Контактная информация:

Re: Светодиодный индикатор на базе ТМ1637

Сообщение veso74 »

DS1307: 0x68, LM75A: 0x48

ТМ1637 еще не использовал для входа (слишком "бедная" на функций, оставлю для дисплея на данный момент).
Клавиатуру бы использовал напр. на PCF8574. Преимущество: даже не нужно постоянно сканировать ее, а ИС будет генерировать прерывание.

PCF8574: 0x20

-> занятые выводы МК: 2 за I2C (+1 для прерывание).
Аватара пользователя
>TEHb<
Друг Кота
Сообщения: 5744
Зарегистрирован: Ср ноя 11, 2009 17:19:30
Откуда: Воронеж
Контактная информация:

Re: Светодиодный индикатор на базе ТМ1637

Сообщение >TEHb< »

Просто напомнить, что к настоящей и2ц шине экран таки действительно подключается. И да, как говорил Starichok51, он съедает шину целиком.
"Привет!" - соврал он.
veso74
Поставщик валерьянки для Кота
Сообщения: 1909
Зарегистрирован: Сб май 05, 2012 20:24:52
Откуда: KN34PC, Болгария
Контактная информация:

Re: Светодиодный индикатор на базе ТМ1637

Сообщение veso74 »

[uquote="Starichok51",url="/forum/viewtopic.php?p=4362845#p4362845"]по I2C можно подключить только один модуль на базе ТМ1637.
а мне нужно подключить 2 модуля для показа напряжения и показа тока в блоке питания.[/uquote]
Мне попадались сегодня интересные способы о подключения для решения этого вопроса. Второго дисплея нет для теста, но положил решения в папку "интересные варианты" :). (и использование минимального количества выводов МК)

Connect multiple displays
7-segment Displays Connection
Вложения
svc_7_dir.jpg
(141.16 КБ) 126 скачиваний
tm1637_2devices.png
(9.07 КБ) 121 скачивание
Аватара пользователя
musor
Друг Кота
Сообщения: 39197
Зарегистрирован: Сб сен 13, 2014 16:27:32
Откуда: СпиртоГонск созвездия Омега

Re: Светодиодный индикатор на базе ТМ1637

Сообщение musor »

драйверы tm16xx неплохи но иза отсудсвия привязки к адресам или входоф CS
ф настоящем девайсе имет смысл прменять толка 1 чип соответствуюшей (минимално нужной разрядности) на шине...
при болшом числе разрядоф LED имет смысл применять старшие многоразрядные чипы начиная с 1640 при этом ПО ВОЗМОЖНОСТИ игнорируя опрос клавы ими... имено таки сделано вмногих серийных промдевайсах...
вопрос связи с другими девайсами на техже пинах весма мутен и может силно усложнить кодили привести ку сбоям опроса датчикоф
боле целесобразно выделить на дисплей отделные пины что исключает малопиновые мк из оборота но ничего плохого в том нет
КАЖДОМУ СВОЕ
ZМудрость(Опыт и выдержка) приходит с годами.
Все Ваши беды и проблемы, от недостатка знаний.
Умный и у дурака научится, а дураку и ..
Алберт Ейнштейн не поможет и ВВП не спасет.и МЧС опаздает
veso74
Поставщик валерьянки для Кота
Сообщения: 1909
Зарегистрирован: Сб май 05, 2012 20:24:52
Откуда: KN34PC, Болгария
Контактная информация:

Re: Светодиодный индикатор на базе ТМ1637

Сообщение veso74 »

Если буду искать чип, который сложно найти (TM1640), то бы предпочел построить драйвер LED/KBD (с любым МК) в I2c slave режиме, с со своим адресом и функциями.
---
Упс, нет :).
10 pcs: US $3.35, правда, китайцы их раздают почти бесплатно.
veso74
Поставщик валерьянки для Кота
Сообщения: 1909
Зарегистрирован: Сб май 05, 2012 20:24:52
Откуда: KN34PC, Болгария
Контактная информация:

Re: Светодиодный индикатор на базе ТМ1637

Сообщение veso74 »

Почему на всех дисплеях с TM1637 есть кондензаторы 10 nF на DIO и CLK ...?

Купил другие дисплеи 4x 7seg, другого типа, другой формы. Опять же, у них есть конденсаторы:
Я устал их выпаивать :). Стало интересно почему так все производители так их делают ...
Есть какие-то пояснения?
Аватара пользователя
Alex_641
Поставщик валерьянки для Кота
Сообщения: 2314
Зарегистрирован: Вт янв 26, 2021 22:33:21

Re: Светодиодный индикатор на базе ТМ1637

Сообщение Alex_641 »

Блокировочные , например макс 7219 вообще не работают с большими ёмкостями .

Добавлено after 34 seconds:
В смысле не работают без них

Добавлено after 6 minutes 59 seconds:
veso74 писал(а):Объясните. Не понимал.
У матриц в моменты максимального свечения , происходит максимальное потребление тока,
конденсаторы сглаживают этот бросок .
Не спрашивай по ком звонит колокол, он звонит по тебе !
veso74
Поставщик валерьянки для Кота
Сообщения: 1909
Зарегистрирован: Сб май 05, 2012 20:24:52
Откуда: KN34PC, Болгария
Контактная информация:

Re: Светодиодный индикатор на базе ТМ1637

Сообщение veso74 »

Вопрос о кондензаторы 10 nF на DIO и CLK.
Вложения
tm1637_01.jpg
(143.54 КБ) 137 скачиваний
tm1637_02.jpg
(138.95 КБ) 112 скачиваний
tm.jpg
(151.93 КБ) 109 скачиваний
Аватара пользователя
Alex_641
Поставщик валерьянки для Кота
Сообщения: 2314
Зарегистрирован: Вт янв 26, 2021 22:33:21

Re: Светодиодный индикатор на базе ТМ1637

Сообщение Alex_641 »

Ну да, на дио и цлк - непонятно зачем нужны
Не спрашивай по ком звонит колокол, он звонит по тебе !
kalobyte
Друг Кота
Сообщения: 13796
Зарегистрирован: Чт сен 20, 2007 14:08:00

Re: Светодиодный индикатор на базе ТМ1637

Сообщение kalobyte »

с интересом прочитал тему
у меня есть эти платы и я даже не знал, что там шина и2ц
я думал спи, т.к. на платах подписано не как обычно пишут scl sda

еще и конденсаторы зачем-то и еще выбора адреса нет

тогда лучше 7219, если кнопки не нужны
цена та же, так их хоть друг за другом можно подключить

я этих плат купил всех цветов и еще купил платы на 8 индикаторов и 2 регистра и тоже всех цветов
тематические ответы только в форуме, в приват не пишите
Vlad_RK
Мучитель микросхем
Сообщения: 412
Зарегистрирован: Чт июл 11, 2013 12:37:39

Re: Светодиодный индикатор на базе ТМ1637

Сообщение Vlad_RK »

Привет.
У меня никак не получается выводить цифры в Proteus 8.15 на 7SEG-MPX4-CC. То дисплей вообще не светится, то светит всеми элементами.
Пробовал код отсюда: https://www.chipmaker.ru/blogs/entry/2170/ (там на ассме, я переделывал на си), пробовал ИИ дать задание написать программку, но ничего не работает. Все есть в архиве, там и для Microchip Studio и для Протеуса.
Помогите разобраться. :(
Спойлер

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

#define F_CPU 12000000UL
#include <avr/io.h>
#include <avr/interrupt.h>
#include <util/delay.h>
#include <stdlib.h>
#include <stDIO.h>
#include <avr/iom32.h>
#include <math.h>
//#include "TM1637Display.h"
 
//*****************************************
//Это код от ИИ
/*
#define CLK PORTC0 // Подключите CLK к порту C0
#define DIO PORTC1 // Подключите DIO к порту C1

uint8_t digitSegments[] =
{
	0b00111111, // 0
	0b00000110, // 1
	0b01011011, // 2
	0b01001111, // 3
	0b01100110, // 4
	0b01101101, // 5
	0b01111101, // 6
	0b00000111, // 7
	0b01111111, // 8
	0b01101111  // 9
};
*/
//*****************************************

//**********************
//Настройка портов:
 void Port_ini(void)
 {
	 DDRC |= (1<<PORTC0)|(1<<PORTC1);	//PORTC0 - CLK, PORTC1 - DIO
	 PORTC |= (1<<PORTC0)|(1<<PORTC1);
}
//**********************

//*****************************************
//Это код от https://www.chipmaker.ru/blogs/entry/2170/
//
void start(void)					//Маркер начала посылки
{
	_delay_us(100);					//Пауза 100 мкс
	PORTC |= (1<<PORTC0);			//На выходе CLK "1"
	PORTC |= (1<<PORTC1);			//На выходе DIO "1"
	_delay_us(100);					//Пауза 100 мкс
	PORTC &=~(1<<PORTC1);			//На выходе DIO "0"
	_delay_us(100);					//Пауза 100 мкс
}

void end(void)						//Маркер конца посылки
{
	PORTC |= (1<<PORTC0);			//На выходе CLK "1"
	_delay_us(100);					//Пауза 100 мкс
	PORTC |= (1<<PORTC1);			//На выходе DIO "1"
	_delay_us(100);					//Пауза 100 мкс
}

void outcom(unsigned char d)		//Последовательный вывод. Выводимый байт находится в переменной "d"
{
unsigned char i = 0;				//Рабочая переменная для счетчика цикла
unsigned char x = 0b00000001;		//Рабочая переменная для выделения текущего передаваемого бита из байта "d"
	
	for (i=0; i<=7; i++)			//Побитно выводим байт на LED индикатор
	{
		PORTC &=~(1<<PORTC0);		//На выходе CLK "0"
		_delay_us(100);				//Пауза 100 мкс
	
//Если текущий передаваемый бит = 1 -> установить в "1" PORTC1 (DIO), и через 100 мкс сбросить PORTC1 в "0"
	
		if (d & x) PORTC |= (1<<PORTC1);	//На выходе DIO "1"
		else PORTC &=~(1<<PORTC1);			//На выходе DIO "0"
		
		_delay_us(100);				//Пауза 100 мкс
		PORTC |= (1<<PORTC0);		//На выходе CLK "1"
		_delay_us(100);				//Пауза 100 мкс
		x = x<<1;					//Сдвигаем "x" влево на 1 бит
	}

//Стоп-бит
	DDRC &=~(1<<PORTC1);			//PORTC1 - на вход, переключаем DIO как вход, чтобы исключить коллизию с ACK	
	PORTC &=~(1<<PORTC0);			//На выходе CLK "0"	
	_delay_us(100);					//Пауза 100 мкс	
	PORTC |= (1<<PORTC0);			//На выходе CLK "1"	
	_delay_us(100);					//Пауза 100 мкс	
	PORTC &=~(1<<PORTC0);			//На выходе CLK "0"	
	PORTC &=~(1<<PORTC1);			//На выходе DIO "0"	
	DDRC |= (1<<PORTC1);			//PORTC1 - на выход, окончание стоп-бита, переключаем DIO как выход

	
//(Выходим с нулями на обеих шинах)
	_delay_us(100);					//Пауза 100 мкс
}

void incom(void)					//Чтение кнопок
{
	
}
//
//*****************************************



//*****************************************
//Это код от ИИ
/*
void TM1637_start(void) {
	DDRC |= (1<<DIO); // Установка DIO на выход
	PORTC &= ~(1<<CLK); // CLK = 0
	_delay_us(5); // Задержка
}

void TM1637_stop(void) {
	DDRC &= ~(1<<DIO); // Установка DIO на вход
	PORTC |= (1<<CLK); // CLK = 1
	_delay_us(5); // Задержка
}

void TM1637_writeByte(uint8_t data) {
	for(uint8_t i = 0; i < 8; i++) {
		PORTC &= ~(1<<CLK); // CLK = 0
		_delay_us(5); // Задержка
		if(data & 0x01) { // Если бит данных равен 1
			DDRC &= ~(1<<DIO); // Установка DIO на вход
			} else {
			DDRC |= (1<<DIO); // Установка DIO на выход
		}
		data >>= 1;
		PORTC |= (1<<CLK); // CLK = 1
		_delay_us(5); // Задержка
	}

	// Чтение подтверждения
	DDRC &= ~(1<<DIO); // Установка DIO на вход
	PORTC &= ~(1<<CLK); // CLK = 0
	_delay_us(5); // Задержка
	while(PINC & (1<<DIO)); // Ожидание подтверждения
	PORTC |= (1<<CLK); // CLK = 1
	_delay_us(5); // Задержка
}

void TM1637_displayDigit(uint8_t digit, uint8_t position) {
	TM1637_start();
	TM1637_writeByte(0x44); // Фиксированный адрес
	TM1637_stop();

	TM1637_start();
	TM1637_writeByte(0xC0 | position); // Установка адреса
	TM1637_writeByte(digitSegments[digit]); // Запись сегментов
	TM1637_stop();

	TM1637_start();
	TM1637_writeByte(0x8F); // Включение дисплея
	TM1637_stop();
}*/
//*****************************************





//***********
// ПРОГРАММА
//***********
int main(void)
{
	
//*****************************************
//Это код от ИИ
/*
// Инициализация портов
DDRC |= (1<<CLK); // Установка CLK на выход
PORTC |= (1<<CLK); // CLK = 1

// Инициализация дисплея
TM1637_start();
TM1637_writeByte(0x8F); // Включение дисплея
TM1637_stop();

// Вывод цифры 7 на позицию 0
TM1637_displayDigit(7, 0);
*/
//*****************************************



//*****************************************
//Это код от https://www.chipmaker.ru/blogs/entry/2170/
//
	Port_ini();						//Конфигурация портов В/В
	_delay_ms(2000);				//Задержка в 2000 миллисекунд, чтобы Proteus 8 Professional корректно отобразил осциллограмму на виртуальном осциллографе

//Инициализация TM1637:
	start();
	outcom(0x88);
	end();
	_delay_us(100);					//Пауза 100 мкс

//Включение режима передачи данных с автоинкрементом адреса:
	start();
	outcom(0x40);
	end();
	_delay_us(100);					//Пауза 100 мкс

//Вывод сообщения "123" на табло:
	start();						//Маркер начала посылки
	outcom(0xC0);					//Выводим начальный адрес (0хC0 - крайнее левое знакоместо)
	outcom(0x06);					//Выводим 1 в первый разряд
	outcom(0x5b);					//Выводим 2 во второй разряд
	outcom(0x4f);					//Выводим 3 в третий разряд
	end();							//Маркер конца посылки
	_delay_us(100);					//Пауза 100 мкс
//
//*****************************************




	while(1)
	{

	}

}
Вложения
Test01.rar
(50.87 КБ) 76 скачиваний
Ответить

Вернуться в «Периферия»