COKPOWEHEU Опубликовано 15 декабря, 2015 Поделиться Опубликовано 15 декабря, 2015 Оставлю свои наработки на сайте. Вдруг потеряются или пригодятся кому. bootloader Самозагрузчик для AVR минимального размера, использующий UART. Запускается автоматически при старте программы, если в течении определенного времени по UART ничего не пришло, возвращается в основную программу. Написан на ассемблере. Используемые константы: F_CPU - тактовая частота контроллера (Гц) TIMEOUT_SEC - время до перехода в рабочий режим (сек) UART_BAUD - скорость UART (бод) . pinmacro.h Набор макросов на Си для удобного назначения и использования портов. Пример объявления: #define ANY_PORT C,2 Пример использования: PORT_0( ANY_PORT ) - установить PORTC2 в лог.0, эквивалентно PORTC &=~(1<<2); DDR_1( ANY_PORT ) - установить DDRC2 в лог.1, эквивалентно DDRC |= (1<<2); PIN_1( ANY_PORT ) - возвращает логическое значение, равное уровню на PINC2, эквивалентно (PINC & (1<<2)) PIN_0( ANY_PORT ) - возвращает значение, противоположное уровню на PINC2, эквивалентно (!(PINC & (1<<2))) И другие. . lcd.h Библиотека на Си для работы с дисплеем на контроллере HD44780 по 4-проводной шине. Требуется набор макросов pinmacro.h. Линии RS и E могут располагаться на любых портах, RW не используется. Используемые макросы: #define LCD_DATA С,2 - куда подключены линии данных D4-D8 дисплея. В данном случае, это PC2-PC5 #define LCD_RS B,0 - куда подключена линия RS. В данном случае PB0 #define LCD_E D,3 - куда подключена линия E. В данном случае PD3 #define LCD_NUM_STR 4 - сколько строк поддерживает дисплей. В настоящее время реализованы 2-х и 4-х строчные дисплеи. Этот макрос используется для получения адресов строк LCD_STR_1, LCD_STR_2, LCD_STR_3, LCD_STR_4, их и рекомендуется использовать. Функции: lcd_init(); - в комментариях не нуждается lcd_cur_*(); - установка формы и размера курсора. На выбор 4 варианта: cd_cur_small(); - нижнее подчеркивание lcd_cur_large(); - мигающее знакоместо, здоровенный прямоугольник lcd_cur_two(); - оба вместе lcd_cur_hide(); - курсор не виден lcd_goto(unsigned char addr); - позиционирование в нужной точке. Адресация абсолютная, так что для обращения к отдельным строкам придется использовать макросы lcd_goto(LCD_STR_2+8); - 2 строка 8-й символ. lcd_enable() / lcd_disable(); - перевод линий, используемых дисплеем в рабочее / нерабочее состояние, на случай, если на них висит что-нибудь еще. lcd_str(const char *ch) / lcd_str_P(const char *ch); - вывод строки (стандарта Си, то есть заканчивающейся \0), из ОЗУ или из flash. Названия сделаны по шаблону strcmp / strcmp_P и подобных стандартных библиотек. lcd_data(char data) - посылка байта данных. Осторожно! устанавливает бит RS в лог.1 Полусистемные макросы и функции. Для штатного использования они не предназначены, но, учитывая, что библиотека писалась под себя, что-то мог забыть. Например, запись собственных символов в память, или последовательность команд, которые не надо разделять постоянной установкой бита RS. Однако, при их использовании стоит соблюдать осторожность и, желательно, просмотреть исходный код и предупреждения. lcd_send(unsigned char data); - посылка байта в дисплей. Биты RS и E, как и настрокйи порта (DDR) не меняются lcd_cmd(char cmd); - посылка команды. Обычно не нужна, так как написаны более специализированные макросы, вроде lcd_goto или lcd_cur_* Осторожно! Устанавливает RS в лог.0. bootloader.tar.gz pinmacro.tar.gz lcd.tar.gz 7 Ругался на отсутствие форматирования исходного кода (включая отсутствие осмысленных комментариев и наличие неубранного после конфигуратора мусора) не менее 15 раз. Часть моих наработок. Ссылка на комментарий Поделиться на другие сайты Поделиться
COKPOWEHEU Опубликовано 23 декабря, 2015 Автор Поделиться Опубликовано 23 декабря, 2015 Делал часы. Вроде в AVR-контроллерах разбираюсь, а обычные часы ни разу не делал, непорядок. И вот, когда прошивка была написана, посетила меня идея поменять ориентацию 7-сегментных индикаторов, были с общим анодом, а станут с общим катодом. Или и вовсе ключи на катоды поставить? В оригинальной прошивке придется менять в десятке мест одновременно, а это неудобно, да и накосячить раз плюнуть. После чего я решил вынести всю динамическую индикацию в отдельную библиотеку, сделав ее достаточно гибкой, но и не слишком раздутой. Собственно, вот что получилось, может кому-то будет интересно или полезно посмотреть некоторые решения. . 7seg.h Библиотека для динамической 7-сегментной индикации. Из соображений оптимизации и лени, линии сегментов и линии разрядов должны занимать каждый по одному порту. Например, сегменты PB0-PB7, а разряды PD2, PD3 и PD5. Сами сегменты и разряды могут быть расположены внутри своих портов произвольно, как будет удобнее для разводки платы. Настройки SEG_PORT, DIG_PORT - буква порта, на котором висят сегменты или разряды. Только буква, а не полное название! SEG_A - SEG_G, SEG_DOT - номера линий порта SEG_PORT, на которых висят соответствующие сегменты. Только номера! DIG_0, DIG_1 <...-DIG_7> - номера линий порта DIG_PORT, на которых висят разряды. Количество может меняться от 2 до 8. SEG_POL, DIG_POL - полярность активного уровня сегментов и разрядов. Какой логический уровень соответствует светящемуся сегменту, 0 или 1. SEG_HEX - расширенный набор кодов, добавлены шестнадцатеричные буквы A-F. USE_PROGMEM - использование массивов в flash-памяти вместо ОЗУ. Крайне рекомендуется. SEG_BLINK - возможность выделения нужного разряда миганием SEG_BL_BIT - делитель для мигалки. При каждом проходе соответствующего разряда 8-битный счетчик увеличивается. Сам разряд будет мигать с частотой изменения бита номер SEG_BL_BIT. SEG_EX_NUMBERS - отказ от встроенных кодов цифр и подключение внешних. Внешние надо объявить как <PROGMEM> const char seg_nums[]={...}, модификатор PROGMEM зависит от макроса USE_PROGMEM. Вообще-то его использование довольно сложное, поэтому лучше бы обойтись. SEG_DOT_SEC() - пользовательский макрос управления точкой. Должен возвращать логическое значение когда точку зажигать. Лучше его объявить до подключения этой библиотеки. В нем можно пользоваться локальным счетчиком seg_num индицируемого в данный момент разряда. Переменные unsigned char seg_buffer[] - буфер кадра. Объявлен в самой библиотеке, внешняя программа должна его всего лишь использовать char seg_blink - номер мигающего сегмента. Определен только если соответствующая функция активирована (см. макрос SEG_BLINK) Функции inline void seg_init() - настройка DDRx, соответствующих индикатору, на выход. inline void seg_disable() - перевод всех линий в неактивное состояние (при котором все диоды погашены) seg_update() - сама динамическая индикация, оформлена как макрос. Вызывайте с нужной частотой - будет отображение. 7seg.tar.gz 5 Ругался на отсутствие форматирования исходного кода (включая отсутствие осмысленных комментариев и наличие неубранного после конфигуратора мусора) не менее 15 раз. Часть моих наработок. Ссылка на комментарий Поделиться на другие сайты Поделиться
20% скидка на весь каталог электронных компонентов в ТМ Электроникс!Акция "Лето ближе - цены ниже", успей сделать выгодные покупки!Плюс весь апрель действует скидка 10% по промокоду APREL24 + 15% кэшбэк и бесплатная доставка!Перейти на страницу акции Реклама: ООО ТМ ЭЛЕКТРОНИКС, ИНН: 7806548420, info@tmelectronics.ru, +7(812)4094849
COKPOWEHEU Опубликовано 3 декабря, 2016 Автор Поделиться Опубликовано 3 декабря, 2016 Немного изменил pinmacro.h Каждому выводу можно назначить букву порта, номер пина в нем и значение по умолчанию. #define LED C,3,1 //светодиод на PC3, подключенный к порту катодом #define BTN D,5,0 //кнопка на PD5, коммутируемая на питание и подтянутая резистором к земле DDR_1(LED); DDR_0(BTN); //DDRC.3=1 ; DDRD.5=0 - переключить вывод светодиода на выход, а вывод кнопки на вход PORT_OFF(LED); PORT_0(BTN); //выключить светодиод PORTC.3=1; и выключить подтяжку кнопки PORTD.5=0; if( PIN_ON(BTN) ) //если кнопка нажата PIND.5 == 1; PORT_T(LED); //изменить состояние светодиода PORTC.3 = ! PORTC.3; Кроме того, поддерживается возможность добавления аргументов, например, конструкция #define LED C,3,1,a,0 будет корректно распознана. Просьба модераторам заменить этим постом кусок первого поста, посвященный pinmacro.h. pinmacro.tar.gz 0 Ругался на отсутствие форматирования исходного кода (включая отсутствие осмысленных комментариев и наличие неубранного после конфигуратора мусора) не менее 15 раз. Часть моих наработок. Ссылка на комментарий Поделиться на другие сайты Поделиться
Выбираем схему BMS для корректной работы литий-железофосфатных (LiFePO4) аккумуляторов Обязательным условием долгой и стабильной работы Li-FePO4-аккумуляторов, в том числе и производства EVE Energy, является применение специализированных BMS-микросхем. Литий-железофосфатные АКБ отличаются такими характеристиками, как высокая многократность циклов заряда-разряда, безопасность, возможность быстрой зарядки, устойчивость к буферному режиму работы и приемлемая стоимость. Но для этих АКБ, также как и для других, очень важен контроль процесса заряда и разряда, а специализированных микросхем для этого вида аккумуляторов не так много. Инженеры КОМПЭЛ подготовили список имеющихся микросхем и возможных решений от разных производителей. Подробнее>> Реклама: АО КОМПЭЛ, ИНН: 7713005406, ОГРН: 1027700032161
COKPOWEHEU Опубликовано 10 февраля, 2017 Автор Поделиться Опубликовано 10 февраля, 2017 Работа в stm32f103 с дисплеем на контроллере ili9341 (от Raspberry Pi) и библиотека трехмерной графики. stm_model.tar.bz2 VIDEO0031.3gp 1 Ругался на отсутствие форматирования исходного кода (включая отсутствие осмысленных комментариев и наличие неубранного после конфигуратора мусора) не менее 15 раз. Часть моих наработок. Ссылка на комментарий Поделиться на другие сайты Поделиться
COKPOWEHEU Опубликовано 27 апреля, 2017 Автор Поделиться Опубликовано 27 апреля, 2017 Переходник USB-HID <-> e24 Driver.tar.gz Pcb.tar.gz Firmware.tar.gz Docs.tar.gz 0 Ругался на отсутствие форматирования исходного кода (включая отсутствие осмысленных комментариев и наличие неубранного после конфигуратора мусора) не менее 15 раз. Часть моих наработок. Ссылка на комментарий Поделиться на другие сайты Поделиться
COKPOWEHEU Опубликовано 15 июня, 2019 Автор Поделиться Опубликовано 15 июня, 2019 (изменено) Не библиотеки, а просто набор фоточек плат на stm32f103 и stm32l151 L1_blink.rar F1_blink.rar Изменено 15 июня, 2019 пользователем COKPOWEHEU добавил сорцы 0 Ругался на отсутствие форматирования исходного кода (включая отсутствие осмысленных комментариев и наличие неубранного после конфигуратора мусора) не менее 15 раз. Часть моих наработок. Ссылка на комментарий Поделиться на другие сайты Поделиться
fb88vnasia Опубликовано 12 декабря, 2019 Поделиться Опубликовано 12 декабря, 2019 (изменено) Is it can order in lazada or ebay? may i have the link of products? Это можно заказать в лазаде или на ebay? Можно ли ссылку на продукты? Изменено 12 декабря, 2019 пользователем Falconist 0 Ссылка на комментарий Поделиться на другие сайты Поделиться
Рекомендуемые сообщения
Присоединяйтесь к обсуждению
Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.
Примечание: Ваш пост будет проверен модератором, прежде чем станет видимым.