Jump to content

Блог Cokpoweheu


COKPOWEHEU
 Share

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 раз.

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

Link to comment
Share on other sites

  • 2 weeks later...

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

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

Link to comment
Share on other sites

  • 11 months later...

Реле, разъемы, вентиляторы, корпуса, микросхемы, конденсаторы и много другое!

Скидки до 20% на сайте электронного дискаунтера ТМ Электроникс.

Бесплатная доставка в любую точку России + кэшбэк 15%.

Всем кто сделает заказ в сентябре, начислим 3000 баллов на аккаунт. 1 балл = 1 рублю!

Подробнее

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

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

Link to comment
Share on other sites

  • 2 months later...

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

stm_model.tar.bz2

VIDEO0031.3gp

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

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

Link to comment
Share on other sites

  • 2 months later...

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

Driver.tar.gz

Pcb.tar.gz

Firmware.tar.gz

Docs.tar.gz

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

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

Link to comment
Share on other sites

  • 2 years later...

Не библиотеки, а просто набор фоточек плат на 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 раз.

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

Link to comment
Share on other sites

  • 5 months later...

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
Unfortunately, your content contains terms that we do not allow. Please edit your content to remove the highlighted words below.
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...
 Share

  • Recently Browsing   0 members

    • No registered users viewing this page.
  • Сообщения

    • Глянул по ссылке, и сразу посетила шальная мысль, типа - а врача сразу с собой брать, или у продавца рядом уже есть?  Не, Ю. Макаров конечно известная хиэндная личность, но провода 2м по 48 квадратов - это уже... А почему не по 240-400 квадратов, как на ЛЭП-220кВ? 
    • Он вам не нужен. Чтобы спалить хату, довольно и того, что уже сделано. Автомат, кстати, не очень надёжный по механике. Особенно, если ему "далеко за сорок". 
    • Что мешает потратить ещё 10 минут и красиво оформить схему в Сплане? А то, недели две этот фонарик анонсировал  - анонсировал, всех заинтриговал, а на выходе - пшик, весь пар в свисток ушёл. 
    • У моей маски тоже изогнутый поликарбонат( и дёрнул же меня когда-то  чёрт купить именно Patriot-а с кривой мордой, а ведь рядом лежали разные плоскомордые ресанты и фубаги вдвое дешевле). Поэтому и защитные стекляшки заказал у автомобильных частников-"стеклодувов". За пол часа сам же сделал из стальных прутков матрицу на 10 стекляшек, а на ней уже мастер-стекольщик нажарил в печи стекляшек. Часть из них из-за кривизны сильно искажали; одну разбил, пытаясь приладить к маске, осталось шесть - на несколько лет хватит. Одна уже отжила своё - приняла на себя изрядную дозу стальной дроби, когда гнал потолочный шов, латая-усиливая раму говномеса знакомого офроудера. Да и икс на неё; новая "фотомода" Patriot-а из поликарбоната обошлась бы мне дороже всей возни со стекляшками; к тому же её ещё нужно было где-то найти. Теперь-то проще - можно и у нас по приемлемой цене купить поликарбонатную защиту для затемняющегося экрана, а тогда её днём с огнём было не найти, да и пересылка на ДВ чуть ли не удваивала бы её цену.
    • а что не качественного заметили? Силовые полигоны без маски - можно усилить. Выход под клемник тоже хорошо. Терминалы питания тоже приличные. Цвет партии конечно на любителя, но часто Вы на платы смотрите после установки в корпус?)  От себя - Жду проверочного запуска ПП, закажу скорее всего если ещё очередь не кончилась
×
×
  • Create New...