Приветствую всех форумчан! Начал недавно разбираться с микросхемой на ТМ1637, но к успеху это не привело . Пробовал сделать на аппаратном I2C, но ничего не получилось, в итоге, сначала решил завести ногодрыгом. Суть в следующем: Для Ардуино есть готовые библиотеки, которые работают нормально, но мне нужно для STM32. В даташите есть пример кода для какого-то микроконтрроллера: Спойлер
Код:
# include <reg52.h> # include <intrins.h> / / Define port sbit clk = P1 ^ 2; sbit dio = P1 ^ 1; / / / ===================== void Delay_us (unsigned int i) // n us delay { for (; i> 0; i--) _nop_ (); } / / / ==================== void I2CStart (void) // 1637 start { clk = 1; dio = 1; Delay_us (2); dio = 0; } / / / ========= void I2Cask (void) // 1637 Answer { clk = 0; Delay_us (5); // After the falling edge of the eighth clock delay 5us, ACK signals the beginning of judgment while (dio); clk = 1; Delay_us (2); clk = 0; } / / / ==== void I2CStop (void) // 1637 Stop { clk = 0; Delay_us (2); dio = 0; Delay_us (2); clk = 1; Delay_us (2); dio = 1; } / / / ===== void I2CWrByte (unsigned char oneByte) // write a byte { unsigned char i; for (i = 0; i <8; i + +) { Clk = 0; if (oneByte & 0x01) // low front {dio = 1;} else {dio = 0;} Delay_us (3); oneByte = oneByte >> 1; clk = 1; Delay_us (3); } } / / / ---------- - unsigned char ScanKey (void) // read buttons \ { unsigned char rekey, rkey, i; I2CStart (); I2CWrByte (0x42); // read command buttons I2Cask (); dio = 1; // read keys before data lines pulled for (i = 0; i <8; i + +) // start reading from the low { Clk = 0; rekey = rekey >> 1; Delay_us(30); clk=1; if(dio) { rekey=rekey|0x80; } else { rekey=rekey|0x00; } Delay_us(30); } I2Cask(); I2CStop(); return (rekey); } void SmgDisplay(void) // Write display register { unsigned char i; I2CStart(); I2CWrByte(0x40); //40H address is automatically incremented by 1 mode, 44H fixed address mode I2Cask(); I2CStop(); I2CStart(); I2CWrByte(0xc0); // Set the first address I2Cask(); for(i=0;i<6;i++) // Addresses from Canada, do not always write address { I2CWrByte(0xff); // Send data I2Cask(); } I2CStop(); I2CStart(); I2CWrByte(0x8f); // Open display, maximum brightness I2Cask(); I2CStop(); } ///========== void init() // Initialization routine { // Initialization slightly } ///========== void main(void) { unsigned char keydate; init(); // Initialization SmgDisplay(); // Write register and open display while(1) { keydate=[b]Scankey[/b](); // Read key value, the key value is not read out for treatment. } } //===========end================
Жирным вsделена функция, написанная с ошибкой (должен быть ScanKey).
Оригинал, с короторого передирал, лежит здесь: https://github.com/lpodkalicki/attiny-tm1637-library Когда делали на аппаратном I2C, возможно не учли, что в "каноничном" I2C передача идет старшим байтом вперед, а ТМ1637 принимает младшим байтом вперед.
Обязательным условием долгой и стабильной работы Li-FePO4-аккумуляторов, в том числе и производства EVE Energy, является применение специализированных BMS-микросхем. Литий-железофосфатные АКБ отличаются такими характеристиками, как высокая многократность циклов заряда-разряда, безопасность, возможность быстрой зарядки, устойчивость к буферному режиму работы и приемлемая стоимость. Но для этих АКБ очень важен контроль процесса заряда и разряда для избегания воздействия внешнего зарядного напряжения после достижения 100% заряда. Инженеры КОМПЭЛ подготовили список таких решений от разных производителей.
дык яж на TMxxxxx выкладыввал гето на форум на всю серию шиты искать ленива чето инет тормозит
_________________ ZМудрость(Опыт и выдержка) приходит с годами. Все Ваши беды и проблемы, от недостатка знаний. Умный и у дурака научится, а дураку и .. Алберт Ейнштейн не поможет и ВВП не спасет.и МЧС опаздает
Компания EVE выпустила новый аккумулятор серии PLM, сочетающий в себе высокую безопасность, длительный срок службы, широкий температурный диапазон и высокую токоотдачу даже при отрицательной температуре.
Эти аккумуляторы поддерживают заряд при температуре от -40/-20°С (сниженным значением тока), безопасны (не воспламеняются и не взрываются) при механическом повреждении (протыкание и сдавливание), устойчивы к вибрации. Они могут применяться как для автотранспорта (трекеры, маячки, сигнализация), так и для промышленных устройств мониторинга, IoT-устройств.
Дык... пока на глазы в продаже не попадалась - и не интересовалси, а тут вроде как их расплодилось - а почти все ссыли на китая-маму. Воть накопал - теперь и почитамсс.
Микросхема одинакова ВСЕГДА, а вот раскладка выводов индикатора относительно выводов микросхемы может отличаться в зависимости от типа светодиодной матрицы и производителя модуля. Посему и картинка может быть отличной. Этот вопрос ранее уже всплывал в темах о ЖКИ индикаторах - вполне возможно и в данном случае может иметь место. Лучше уж самому программы загрузки по даташиту соорудить и протестировать соответствие бит ОЗУ конкретным сегментам индикатора (посегментный тест привязки бит ОЗУ). Тем более, что микросхема обслуживает 6 позиций , а индикаторы типовые на 4-5 позиций (ежли "часовые" точки считать 5-й) какой порядок соответствия установлен в конкретном изделии - надо тестировать. Будет в лапах образец - составлю и прожку (пойдет "текущим хвостом" - продолжением сюда https://radiokot.ru/forum/viewtopic.php ... 7#p3365177 ).
Завелось таки!!! Основная проблема оказалась задержках. Нужно было увеличить их в 10 РАЗ!!!. Скорее всего это связано с атомарным управлением пинами в STM32. Позже выложу готовый код. Щас надо в порядок его привести.
Как можно сделать настройку с помощью функции типа: pinsSet(GPIOB, 0, 1);? Подозреваю, что это должно как-то быть связано с энумерацией, но пока не соображу чет...
Основная проблема оказалась задержках. Нужно было увеличить их в 10 РАЗ!!!
Ещё нужно учесть, что если используются резисторы подтяжки только те что на плате, то они там 10кОм и параллельно SDA,SLC ещё по 1000пф ёмкость подпаяна
Сейчас этот форум просматривают: Kolin и гости: 29
Вы не можете начинать темы Вы не можете отвечать на сообщения Вы не можете редактировать свои сообщения Вы не можете удалять свои сообщения Вы не можете добавлять вложения