Мне удалось подключить дисплей к TM1637 и устройство с "настоящим I2C" (с адресом) на двух пинах МК . (Добавил и "безадресный" i2c_start в TinyWire).
Конечно, с оговорками и особенностями: должен быть выполнен порядок загрузки инфо: сначала загрузка информации на у-во с "настоящим I2C", затем на дисплей. Последняя цифра в дисплее гаснет за время загрузки информации, но после расстановки приоритета загрузки этого не заметно.
Я доволен , теперь 3 (+1) пина "бедного" ATtiny13A остаются "для будущего использования".
Использование модульных источников питания открытого типа широко распространено в современных устройствах. Присущие им компактность, гибкость в интеграции и высокая эффективность делают их отличным решением для систем промышленной автоматизации, телекоммуникационного оборудования, медицинской техники, устройств «умного дома» и прочих приложений. Рассмотрим подробнее характеристики и особенности трех самых популярных вариантов AC/DC-преобразователей MW открытого типа, подходящих для применения в промышленных устройствах - серий EPS, EPP и RPS представленных на Meanwell.market.
забавно вот тока иногда +++ читать даьтчик на шине "настоящим I2C" (с адресом) нать и доску опросить через ТМ-ку
_________________ ZМудрость(Опыт и выдержка) приходит с годами. Все Ваши беды и проблемы, от недостатка знаний. Умный и у дурака научится, а дураку и .. Алберт Ейнштейн не поможет и ВВП не спасет.и МЧС опаздает
ну пример на общей I2C висят ds1307 +LM75A через tm1641 выводим на LED час-митуты -сек +год месяц - число -ден недели +температура с LM75A +опрос клавиатуры (periodic polling of the keyboard matrix) через tm1641 такое будет работать?
_________________ ZМудрость(Опыт и выдержка) приходит с годами. Все Ваши беды и проблемы, от недостатка знаний. Умный и у дурака научится, а дураку и .. Алберт Ейнштейн не поможет и ВВП не спасет.и МЧС опаздает
ах да тамже подобие SPI забыл уже... ну ладно а тоже самое с ТМ1637?
_________________ ZМудрость(Опыт и выдержка) приходит с годами. Все Ваши беды и проблемы, от недостатка знаний. Умный и у дурака научится, а дураку и .. Алберт Ейнштейн не поможет и ВВП не спасет.и МЧС опаздает
ТМ1637 еще не использовал для входа (слишком "бедная" на функций, оставлю для дисплея на данный момент). Клавиатуру бы использовал напр. на PCF8574. Преимущество: даже не нужно постоянно сканировать ее, а ИС будет генерировать прерывание.
PCF8574: 0x20
-> занятые выводы МК: 2 за I2C (+1 для прерывание).
по I2C можно подключить только один модуль на базе ТМ1637. а мне нужно подключить 2 модуля для показа напряжения и показа тока в блоке питания.
Мне попадались сегодня интересные способы о подключения для решения этого вопроса. Второго дисплея нет для теста, но положил решения в папку "интересные варианты" . (и использование минимального количества выводов МК)
драйверы tm16xx неплохи но иза отсудсвия привязки к адресам или входоф CS ф настоящем девайсе имет смысл прменять толка 1 чип соответствуюшей (минимално нужной разрядности) на шине... при болшом числе разрядоф LED имет смысл применять старшие многоразрядные чипы начиная с 1640 при этом ПО ВОЗМОЖНОСТИ игнорируя опрос клавы ими... имено таки сделано вмногих серийных промдевайсах... вопрос связи с другими девайсами на техже пинах весма мутен и может силно усложнить кодили привести ку сбоям опроса датчикоф боле целесобразно выделить на дисплей отделные пины что исключает малопиновые мк из оборота но ничего плохого в том нет КАЖДОМУ СВОЕ
_________________ ZМудрость(Опыт и выдержка) приходит с годами. Все Ваши беды и проблемы, от недостатка знаний. Умный и у дурака научится, а дураку и .. Алберт Ейнштейн не поможет и ВВП не спасет.и МЧС опаздает
Если буду искать чип, который сложно найти (TM1640), то бы предпочел построить драйвер LED/KBD (с любым МК) в I2c slave режиме, с со своим адресом и функциями. --- Упс, нет . 10 pcs: US $3.35, правда, китайцы их раздают почти бесплатно.
Почему на всех дисплеях с TM1637 есть кондензаторы 10 nF на DIO и CLK ...?
Купил другие дисплеи 4x 7seg, другого типа, другой формы. Опять же, у них есть конденсаторы: Я устал их выпаивать . Стало интересно почему так все производители так их делают ... Есть какие-то пояснения?
Привет. У меня никак не получается выводить цифры в Proteus 8.15 на 7SEG-MPX4-CC. То дисплей вообще не светится, то светит всеми элементами. Пробовал код отсюда: https://www.chipmaker.ru/blogs/entry/2170/ (там на ассме, я переделывал на си), пробовал ИИ дать задание написать программку, но ничего не работает. Все есть в архиве, там и для Microchip Studio и для Протеуса. Помогите разобраться.
//***************************************** //Это код от ИИ /* #define CLK PORTC0 // Подключите CLK к порту C0 #define DIO PORTC1 // Подключите DIO к порту C1
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); // Задержка }
//*********** // ПРОГРАММА //*********** int main(void) {
//***************************************** //Это код от ИИ /* // Инициализация портов DDRC |= (1<<CLK); // Установка CLK на выход PORTC |= (1<<CLK); // CLK = 1
// Вывод цифры 7 на позицию 0 TM1637_displayDigit(7, 0); */ //*****************************************
//***************************************** //Это код от https://www.chipmaker.ru/blogs/entry/2170/ // Port_ini(); //Конфигурация портов В/В _delay_ms(2000); //Задержка в 2000 миллисекунд, чтобы Proteus 8 Professional корректно отобразил осциллограмму на виртуальном осциллографе
//Включение режима передачи данных с автоинкрементом адреса: 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 мкс // //*****************************************
Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 4
Вы не можете начинать темы Вы не можете отвечать на сообщения Вы не можете редактировать свои сообщения Вы не можете удалять свои сообщения Вы не можете добавлять вложения