Светодиодный индикатор на базе ТМ1637
- Starichok51
- Модератор
- Сообщения: 19053
- Зарегистрирован: Сб авг 14, 2010 15:05:51
- Откуда: г. Озерск, Челябинская обл.
Re: Светодиодный индикатор на базе ТМ1637
собственный код удобнее даже тем, что сигналы можно назначить на любые ноги, а не только на те, которые связаны с аппаратным I2С.
Мудрость приходит вместе с импотенцией...
Когда на русском форуме переходят на Вы, в реальной жизни начинают бить морду.
Когда на русском форуме переходят на Вы, в реальной жизни начинают бить морду.
- Реклама
-
veso74
- Поставщик валерьянки для Кота
- Сообщения: 1909
- Зарегистрирован: Сб май 05, 2012 20:24:52
- Откуда: KN34PC, Болгария
- Контактная информация:
Re: Светодиодный индикатор на базе ТМ1637
[uquote="Starichok51",url="/forum/viewtopic.php?p=4366041#p4366041"]... можно назначить на любые ноги ...[/uquote]
Да, то же самое и с программным I2c, но для конкретного теста в ATtiny13A сэкономило памяти. Осталось и для других приложений, например для датчиков.
Да, то же самое и с программным I2c, но для конкретного теста в ATtiny13A сэкономило памяти. Осталось и для других приложений, например для датчиков.
- VNS
- Говорящий с текстолитом
- Сообщения: 1627
- Зарегистрирован: Пт дек 10, 2021 12:48:46
- Откуда: Тюмень
Re: Светодиодный индикатор на базе ТМ1637
Имитация работы часов… убрал всё лишнее… код подкорректировал…
частота тактирования 9,6 МГц.
Исходник на АВ… код для индикатора без конденсаторов…
Исходник на АВ… код для индикатора без конденсаторов…
-
veso74
- Поставщик валерьянки для Кота
- Сообщения: 1909
- Зарегистрирован: Сб май 05, 2012 20:24:52
- Откуда: KN34PC, Болгария
- Контактная информация:
Re: Светодиодный индикатор на базе ТМ1637
Мне удалось подключить дисплей к TM1637 и устройство с "настоящим I2C" (с адресом) на двух пинах МК
.
(Добавил и "безадресный" i2c_start в TinyWire).
Конечно, с оговорками и особенностями: должен быть выполнен порядок загрузки инфо: сначала загрузка информации на у-во с "настоящим I2C", затем на дисплей. Последняя цифра в дисплее гаснет за время загрузки информации, но после расстановки приоритета загрузки этого не заметно.
Я доволен
, теперь 3 (+1) пина "бедного" ATtiny13A остаются "для будущего использования".
тест: счетчик 0000..9999 и светодиодная мигалка:
(Добавил и "безадресный" i2c_start в TinyWire).
Конечно, с оговорками и особенностями: должен быть выполнен порядок загрузки инфо: сначала загрузка информации на у-во с "настоящим I2C", затем на дисплей. Последняя цифра в дисплее гаснет за время загрузки информации, но после расстановки приоритета загрузки этого не заметно.
Я доволен
тест: счетчик 0000..9999 и светодиодная мигалка:
- Вложения
-
- tm1637_i2c_pcf8574.gif
- (25.08 КБ) 138 скачиваний
- musor
- Друг Кота
- Сообщения: 39197
- Зарегистрирован: Сб сен 13, 2014 16:27:32
- Откуда: СпиртоГонск созвездия Омега
Re: Светодиодный индикатор на базе ТМ1637
забавно вот тока иногда +++ читать даьтчик на шине "настоящим I2C" (с адресом)
нать и доску опросить через ТМ-ку
нать и доску опросить через ТМ-ку
ZМудрость(Опыт и выдержка) приходит с годами.
Все Ваши беды и проблемы, от недостатка знаний.
Умный и у дурака научится, а дураку и ..
Алберт Ейнштейн не поможет и ВВП не спасет.и МЧС опаздает
Все Ваши беды и проблемы, от недостатка знаний.
Умный и у дурака научится, а дураку и ..
Алберт Ейнштейн не поможет и ВВП не спасет.и МЧС опаздает
- Реклама
-
veso74
- Поставщик валерьянки для Кота
- Сообщения: 1909
- Зарегистрирован: Сб май 05, 2012 20:24:52
- Откуда: KN34PC, Болгария
- Контактная информация:
Re: Светодиодный индикатор на базе ТМ1637
musor, я не понял (РУ сленг?). Можно другими словами?
- musor
- Друг Кота
- Сообщения: 39197
- Зарегистрирован: Сб сен 13, 2014 16:27:32
- Откуда: СпиртоГонск созвездия Омега
Re: Светодиодный индикатор на базе ТМ1637
ну пример на общей I2C
висят ds1307 +LM75A через tm1641
выводим на LED час-митуты -сек +год месяц - число -ден недели
+температура с LM75A
+опрос клавиатуры (periodic polling of the keyboard matrix) через tm1641
такое будет работать?
висят ds1307 +LM75A через tm1641
выводим на LED час-митуты -сек +год месяц - число -ден недели
+температура с LM75A
+опрос клавиатуры (periodic polling of the keyboard matrix) через tm1641
такое будет работать?
ZМудрость(Опыт и выдержка) приходит с годами.
Все Ваши беды и проблемы, от недостатка знаний.
Умный и у дурака научится, а дураку и ..
Алберт Ейнштейн не поможет и ВВП не спасет.и МЧС опаздает
Все Ваши беды и проблемы, от недостатка знаний.
Умный и у дурака научится, а дураку и ..
Алберт Ейнштейн не поможет и ВВП не спасет.и МЧС опаздает
-
veso74
- Поставщик валерьянки для Кота
- Сообщения: 1909
- Зарегистрирован: Сб май 05, 2012 20:24:52
- Откуда: KN34PC, Болгария
- Контактная информация:
Re: Светодиодный индикатор на базе ТМ1637
TM1641: интерфейс (CLK, STB, DIN, DOUT)
Совсем ушли от темы.
Совсем ушли от темы.
Последний раз редактировалось veso74 Вс фев 05, 2023 12:45:28, всего редактировалось 1 раз.
- musor
- Друг Кота
- Сообщения: 39197
- Зарегистрирован: Сб сен 13, 2014 16:27:32
- Откуда: СпиртоГонск созвездия Омега
Re: Светодиодный индикатор на базе LM75A
ах да тамже подобие SPI забыл уже... ну ладно а тоже самое с ТМ1637?
ZМудрость(Опыт и выдержка) приходит с годами.
Все Ваши беды и проблемы, от недостатка знаний.
Умный и у дурака научится, а дураку и ..
Алберт Ейнштейн не поможет и ВВП не спасет.и МЧС опаздает
Все Ваши беды и проблемы, от недостатка знаний.
Умный и у дурака научится, а дураку и ..
Алберт Ейнштейн не поможет и ВВП не спасет.и МЧС опаздает
-
veso74
- Поставщик валерьянки для Кота
- Сообщения: 1909
- Зарегистрирован: Сб май 05, 2012 20:24:52
- Откуда: KN34PC, Болгария
- Контактная информация:
Re: Светодиодный индикатор на базе ТМ1637
DS1307: 0x68, LM75A: 0x48
ТМ1637 еще не использовал для входа (слишком "бедная" на функций, оставлю для дисплея на данный момент).
Клавиатуру бы использовал напр. на PCF8574. Преимущество: даже не нужно постоянно сканировать ее, а ИС будет генерировать прерывание.
PCF8574: 0x20
-> занятые выводы МК: 2 за I2C (+1 для прерывание).
ТМ1637 еще не использовал для входа (слишком "бедная" на функций, оставлю для дисплея на данный момент).
Клавиатуру бы использовал напр. на PCF8574. Преимущество: даже не нужно постоянно сканировать ее, а ИС будет генерировать прерывание.
PCF8574: 0x20
-> занятые выводы МК: 2 за I2C (+1 для прерывание).
- >TEHb<
- Друг Кота
- Сообщения: 5744
- Зарегистрирован: Ср ноя 11, 2009 17:19:30
- Откуда: Воронеж
- Контактная информация:
Re: Светодиодный индикатор на базе ТМ1637
Просто напомнить, что к настоящей и2ц шине экран таки действительно подключается. И да, как говорил Starichok51, он съедает шину целиком.
"Привет!" - соврал он.
-
veso74
- Поставщик валерьянки для Кота
- Сообщения: 1909
- Зарегистрирован: Сб май 05, 2012 20:24:52
- Откуда: KN34PC, Болгария
- Контактная информация:
Re: Светодиодный индикатор на базе ТМ1637
[uquote="Starichok51",url="/forum/viewtopic.php?p=4362845#p4362845"]по I2C можно подключить только один модуль на базе ТМ1637.
а мне нужно подключить 2 модуля для показа напряжения и показа тока в блоке питания.[/uquote]
Мне попадались сегодня интересные способы о подключения для решения этого вопроса. Второго дисплея нет для теста, но положил решения в папку "интересные варианты"
. (и использование минимального количества выводов МК)
Connect multiple displays
7-segment Displays Connection
а мне нужно подключить 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
драйверы tm16xx неплохи но иза отсудсвия привязки к адресам или входоф CS
ф настоящем девайсе имет смысл прменять толка 1 чип соответствуюшей (минимално нужной разрядности) на шине...
при болшом числе разрядоф LED имет смысл применять старшие многоразрядные чипы начиная с 1640 при этом ПО ВОЗМОЖНОСТИ игнорируя опрос клавы ими... имено таки сделано вмногих серийных промдевайсах...
вопрос связи с другими девайсами на техже пинах весма мутен и может силно усложнить кодили привести ку сбоям опроса датчикоф
боле целесобразно выделить на дисплей отделные пины что исключает малопиновые мк из оборота но ничего плохого в том нет
КАЖДОМУ СВОЕ
ф настоящем девайсе имет смысл прменять толка 1 чип соответствуюшей (минимално нужной разрядности) на шине...
при болшом числе разрядоф LED имет смысл применять старшие многоразрядные чипы начиная с 1640 при этом ПО ВОЗМОЖНОСТИ игнорируя опрос клавы ими... имено таки сделано вмногих серийных промдевайсах...
вопрос связи с другими девайсами на техже пинах весма мутен и может силно усложнить кодили привести ку сбоям опроса датчикоф
боле целесобразно выделить на дисплей отделные пины что исключает малопиновые мк из оборота но ничего плохого в том нет
КАЖДОМУ СВОЕ
ZМудрость(Опыт и выдержка) приходит с годами.
Все Ваши беды и проблемы, от недостатка знаний.
Умный и у дурака научится, а дураку и ..
Алберт Ейнштейн не поможет и ВВП не спасет.и МЧС опаздает
Все Ваши беды и проблемы, от недостатка знаний.
Умный и у дурака научится, а дураку и ..
Алберт Ейнштейн не поможет и ВВП не спасет.и МЧС опаздает
-
veso74
- Поставщик валерьянки для Кота
- Сообщения: 1909
- Зарегистрирован: Сб май 05, 2012 20:24:52
- Откуда: KN34PC, Болгария
- Контактная информация:
Re: Светодиодный индикатор на базе ТМ1637
Если буду искать чип, который сложно найти (TM1640), то бы предпочел построить драйвер LED/KBD (с любым МК) в I2c slave режиме, с со своим адресом и функциями.
---
Упс, нет
.
10 pcs: US $3.35, правда, китайцы их раздают почти бесплатно.
---
Упс, нет
10 pcs: US $3.35, правда, китайцы их раздают почти бесплатно.
-
veso74
- Поставщик валерьянки для Кота
- Сообщения: 1909
- Зарегистрирован: Сб май 05, 2012 20:24:52
- Откуда: KN34PC, Болгария
- Контактная информация:
Re: Светодиодный индикатор на базе ТМ1637
Почему на всех дисплеях с TM1637 есть кондензаторы 10 nF на DIO и CLK ...?
Купил другие дисплеи 4x 7seg, другого типа, другой формы. Опять же, у них есть конденсаторы:
Я устал их выпаивать
. Стало интересно почему так все производители так их делают ...
Есть какие-то пояснения?
Купил другие дисплеи 4x 7seg, другого типа, другой формы. Опять же, у них есть конденсаторы:
Я устал их выпаивать
Есть какие-то пояснения?
Re: Светодиодный индикатор на базе ТМ1637
Блокировочные , например макс 7219 вообще не работают с большими ёмкостями .
Добавлено after 34 seconds:
В смысле не работают без них
Добавлено after 6 minutes 59 seconds:
конденсаторы сглаживают этот бросок .
Добавлено after 34 seconds:
В смысле не работают без них
Добавлено after 6 minutes 59 seconds:
У матриц в моменты максимального свечения , происходит максимальное потребление тока,veso74 писал(а):Объясните. Не понимал.
конденсаторы сглаживают этот бросок .
Не спрашивай по ком звонит колокол, он звонит по тебе !
-
veso74
- Поставщик валерьянки для Кота
- Сообщения: 1909
- Зарегистрирован: Сб май 05, 2012 20:24:52
- Откуда: KN34PC, Болгария
- Контактная информация:
Re: Светодиодный индикатор на базе ТМ1637
Вопрос о кондензаторы 10 nF на DIO и CLK.
- Вложения
-
- tm1637_01.jpg
- (143.54 КБ) 137 скачиваний
-
- tm1637_02.jpg
- (138.95 КБ) 112 скачиваний
-
- tm.jpg
- (151.93 КБ) 109 скачиваний
Re: Светодиодный индикатор на базе ТМ1637
Ну да, на дио и цлк - непонятно зачем нужны
Не спрашивай по ком звонит колокол, он звонит по тебе !
Re: Светодиодный индикатор на базе ТМ1637
с интересом прочитал тему
у меня есть эти платы и я даже не знал, что там шина и2ц
я думал спи, т.к. на платах подписано не как обычно пишут scl sda
еще и конденсаторы зачем-то и еще выбора адреса нет
тогда лучше 7219, если кнопки не нужны
цена та же, так их хоть друг за другом можно подключить
я этих плат купил всех цветов и еще купил платы на 8 индикаторов и 2 регистра и тоже всех цветов
у меня есть эти платы и я даже не знал, что там шина и2ц
я думал спи, т.к. на платах подписано не как обычно пишут scl sda
еще и конденсаторы зачем-то и еще выбора адреса нет
тогда лучше 7219, если кнопки не нужны
цена та же, так их хоть друг за другом можно подключить
я этих плат купил всех цветов и еще купил платы на 8 индикаторов и 2 регистра и тоже всех цветов
тематические ответы только в форуме, в приват не пишите
Re: Светодиодный индикатор на базе ТМ1637
Привет.
У меня никак не получается выводить цифры в Proteus 8.15 на 7SEG-MPX4-CC. То дисплей вообще не светится, то светит всеми элементами.
Пробовал код отсюда: https://www.chipmaker.ru/blogs/entry/2170/ (там на ассме, я переделывал на си), пробовал ИИ дать задание написать программку, но ничего не работает. Все есть в архиве, там и для Microchip Studio и для Протеуса.
Помогите разобраться.
У меня никак не получается выводить цифры в 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 скачиваний


