Jump to content
COKPOWEHEU

Блог Cokpoweheu

Recommended Posts

Оставлю свои наработки на сайте. Вдруг потеряются или пригодятся кому.

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


Ругался на отсутствие форматирования исходного кода (включая отсутствие осмысленных комментариев и наличие неубранного после конфигуратора мусора) не менее 15 раз.

Часть моих наработок.

Share this post


Link to post
Share on other sites

Делал часы. Вроде в 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


Ругался на отсутствие форматирования исходного кода (включая отсутствие осмысленных комментариев и наличие неубранного после конфигуратора мусора) не менее 15 раз.

Часть моих наработок.

Share this post


Link to post
Share on other sites

Немного изменил 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


Ругался на отсутствие форматирования исходного кода (включая отсутствие осмысленных комментариев и наличие неубранного после конфигуратора мусора) не менее 15 раз.

Часть моих наработок.

Share this post


Link to post
Share on other sites

Быстро и просто. Разработка бюджетного неизолированного источника питания на контроллере VIPer122

С помощью VIPer122 можно создавать как изолированные, так и неизолированные сетевые источники питания. Разберем самый простой и бюджетный вариант – разработку неизолированного понижающего источника питания с выходным током в несколько сотен миллиампер без трудоемких расчетов трансформаторов и компонентов обвязки.

Подробнее

Работа в stm32f103 с дисплеем на контроллере ili9341 (от Raspberry Pi) и библиотека трехмерной графики.

stm_model.tar.bz2

VIDEO0031.3gp


Ругался на отсутствие форматирования исходного кода (включая отсутствие осмысленных комментариев и наличие неубранного после конфигуратора мусора) не менее 15 раз.

Часть моих наработок.

Share this post


Link to post
Share on other sites

Пополнение линейки ViperPlus от STMicroelectronics

Компания ST обновила семейство ШИМ-регуляторов со встроенным ключом ViperPlus, выпустив новые бюджетные микросхемы VIPER122 и VIPER222, и микросхемы VIPER265K и VIPER267K, имеющие встроенный ключ MOSFET напряжением 1050 В. С их помощью возможно реализовать топологии: изолированный и неизолированный обратноходовой преобразователь (flyback), понижающий преобразователь (buck), повышающе-понижающий преобразователь (buck-boost).

Подробнее

Переходник USB-HID <-> e24

Driver.tar.gz

Pcb.tar.gz

Firmware.tar.gz

Docs.tar.gz


Ругался на отсутствие форматирования исходного кода (включая отсутствие осмысленных комментариев и наличие неубранного после конфигуратора мусора) не менее 15 раз.

Часть моих наработок.

Share this post


Link to post
Share on other sites

LED-драйверы LCM - бюджетное решение для умного дома!

Для более простого и бюджетного решения по организации управляемого освещения в здании с имеющейся системой KNX компания Mean Well предлагает готовые к использованию LED-драйверы семейства LCM/KN, управляемые по протоколу KNX. По своим техническим возможностям эти изделия похожи на драйверы из популярного семейства LCM/(DA).

Подробнее

Не библиотеки, а просто набор фоточек плат на stm32f103 и stm32l151

l151_front.jpg

l151back_wire.jpg

l151back.jpg

jtag_top.jpg

jtag_back.jpg

f103_front.jpg

f103_back.jpg

L1_blink.rar

F1_blink.rar

Edited by COKPOWEHEU
добавил сорцы

Ругался на отсутствие форматирования исходного кода (включая отсутствие осмысленных комментариев и наличие неубранного после конфигуратора мусора) не менее 15 раз.

Часть моих наработок.

Share this post


Link to post
Share on other sites

Is it can order in lazada or ebay? may i have the link of products?

Это можно заказать в лазаде или на ebay? Можно ли ссылку на продукты?

Edited by Falconist

Share this post


Link to post
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.
Note: Your post will require moderator approval before it will be visible.

Guest
Reply to this topic...

×   Pasted as rich text.   Restore formatting

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

Loading...

  • Сообщения

    • Вот типичная схема включения микросхемы, если вход посадить на землю и у вас пропадает шум, это только обвязка на входе микросхемы. Усилитель усиливает то что приходит на вход, то есть, есть 1мВ вот и на выходе 10мВ, то что вы и слышите. Мудрить с новой платой смысла нет. Так же фон может идти от некачественного аудиокабеля. И последнее, темброблок просто так нельзя отключать, в нём собрана схема согласования входа усилителя с входом с другой аппаратурой звука. Изучайте матчасть.
    • Наша огромная страна и есть рынок сбыта. Даже людям в 200 ойро необходимо дома иметь бытовую технику от лампочки до индукционной плиты и телевизора. Немыслим без электроники весь наземный и подземный транспорт, машиностроение, пищевая, химическая, лёгкая  промышленность со множеством автоматики итд итп. Я замучаюсь все перечислять. Да пофигу, что было. Вопрос в том, что необходимо возрождать свое собственное производство во всех отраслях промышленности, а не покупать у китайцев .
    • Дорисуйте выпрямитель с конденсатором.
    • Операционник подключается к выходам темброблока, темброблок отключен и фактически вход TDA связан только с инверсным входом и землей через обвязку и конденсатором, вторая нога которого в воздухе. Сравниваю номиналы обвязки и даташитов на TDA2050 и UTC2030 - отличия в полтора - два раза, и вообще разводка какая-то странная.  Хочу выпаять одну из TDA  и собрать отдельно, заменить номиналы обвязки на рекомендуемые и проверить будет ли шум, если шума не будет то приходит идея сделать новую плату лутом и собрать по схеме из ДШ. До кучи можно будет трансформатор поменять на что-то вроде ТТП40 и вынести диодный модуль с конденсаторами ближе к трансу.    Нарисовал часть схемы после темброблока в KiCad, к сожалению номиналы SMD конденсаторов не видны (может они с обратной строны?). Некоторые номиналы сильно отличаются от того, что в даташите TDA2050 и TDA2030 (R19, R23, R34, C13, C15, C24), да и схема отличается (в даташите нет C39, C40, C20) может это приводить к шуму? 1597443486872_TDA.sch
    • Ну вот, пока на вас не наорёшь, совсем думать не хотите. Теперь понесу в ремонт. А ещё кто-то сказал что новую заказать, только негде, совсем нигде
    • Доброго времени суток всем! Подскажите пожалуйста, собрал инвертор, поварил, все не плохо! Решил подключить осциллятор для тиг сварки, при искровом разряде чегото контроллер перезапускается. Не знаю в чем может быть проблема. Стоит на защиту конденсатор и варистор по выходу, все как пологается, а такая вот неприятность. Помогите что добавить в схему?
    • Если лама горит значит есть КЗ. Лампу включают за место предохранителя, хотя тут и не уместно уже. Что касается вопроса @stereorail то у него неисправность в БП, вот после того как заменит все сгоревшие можно и через лампочку включать, через гвозди он уже пробовал, не прокатило.
×
×
  • Create New...