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

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

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

Share this post


Link to post
Share on other sites

Вебинар STM32G0 – новый лидер бюджетных 32-битных микроконтроллеров от STMicroelectronics

Компания Компэл приглашает вас 25 сентября принять участие в вебинаре, который посвящен новому семейству микроконтроллеров STM32G0. Вебинар рассчитан на технических специалистов и тех, кто хорошо знаком с семейством STM32. На вебинаре будут освоены современные методы тестирования производительности микроконтроллеров на примере самых бюджетных 32-битных семейств общего назначения STM32G0 и STM32F0 и проведено их подробное сравнение.

Подробнее

                     

Литиевые батарейки Fanso в беспроводных датчиках пожарно-охранной сигнализации

Выбор подходящего элемента питания, способного обеспечивать требуемый уровень напряжения и выдавать необходимый ток на протяжении всего периода эксплуатации беспроводной пожарно-охранной системы является одной из первостепенных задач. Наиболее подходящим для этих целей элементом являются литий-тионилхлоридные элементы питания, а одним из наиболее конкурентоспособных производителей – компания Fanso, предлагающая своим клиентам продукты как универсальные, так и разработанные специально для решения конкретных задач.

Подробнее...

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...

  • Сообщения

    • @Серж Вамп Давай я расскажу какие ходят слухи о Трампе. Трамп просит Зеленского накопать компромат на Байдена, про это прослышали демократы и начали давить на Трама, у них сейчас целая палата (Трам хромая утка), Трам ещё не от мылся от решенгейта.  В целом выборы США это будет борьба компараторов, походу в этот раз золотая карта у Украины, Украина может утопить рейтинг Байдена если выложит на него во время компромат, а может и Трампа, если начнёт рассказывать о том что Трамп требовал нарыть компромат на Байдена. Нас ждёт цирк, запасайся попкорном.
    • Хозяин - барин... Начните с того, что подключите два светодиода встречно-параллельно и можно убрать стабилитроны. Да, наверное, и резистор тоже может оказаться лишним. А еще можно подключить еще два трансформатора и еще две пары светодиодов.
    • Походу в канале Z и поблема, пемерял вторички под нагрузкой, там 14.3 переменки, пульсации на с6 - где то 10.2в, поставил кс182А, на базе VT9 (желтый луч) относительно средней точки (земля). Синий луч выход БП (минус). С6 там стоит керамика, где-то пол микрофарада. VD6 - 4148     @vg155 1989 год на них написано, емкость в норме, -5%, утечка меньше 1%
    • Слава!  Брат!  Ты и прав, и не прав.   Да, то. что мы видим и измеряем, можно поправить, сделать лучше. Но в "звучании"  важен не только основной тон, но и многочисленные гармоники, тоны, обертоны.  Часть из них (в нашем диапазоне 20-20), мы видим и слышим.  Другая часть недоступна нашему уху, но это не означает, что мы это не воспринимаем.  Весь этот букет тонов, обертонов, высших гармоник, и пр.  и создает свой, особый, неповторимый  звук того или иного инструмента, ансамбля .  Этот же букет в той или иной степени воспроизводится комплексом элементов тракта усиления, и каждый элемент вносит свой вклад, создавая своё, неповторимое звучание.  Это же ясно, как дважды два -четыре.  Само-собой, и конденсаторы.  Может быть, даже, в бОльшей степени, т.к. вместе с резисторами формируют фильтры, меняющих частотные характеристики, фазовые, причем не факт, что   пропорционально "букету"  входящего сигнала.   Слава!   Ну не  слышат эти люди разницы - казалось бы,  флаг им в руки и пёрышко в ...ну, поняли, куда.   Но постоянная агрессивная демонстрация своих ограниченных возможностей - это уже за пределами разумной логики. Причем, и не в ладах эти авторитеты и с любой логикой.  Вот нет для них никакой разницы.  Приводятся графики, ютубовские ролики, инженер - музыкальный эксперт.  Вот из-за таких экспертов общий уровень  наших  бытовых приборов и отстал от общемирового уровня.  Им легче штамповать что-то, нежели создавать то, что может быть лучше готового. 1983г В 5 номере журнала "Радио" статья Сухова "Динамическое подмагничивание"  -небольшая схема  на   544 УД1, с обвязкой. Позволяло резко увеличит диапазон записывамых частот на ленту с 12кгц до 15...16 и более, повышая "классность".   Весной  1984г. главный инженер КБ попросил отремонтировать импортный магнитофон -замкнули выход -УНЧ сгорел, естественно. Пол КБ сбежалось посмотреть - в нём стояла плата !!!! Сухова, из 5-1983"Радио" с нашими комплектующими.  По коду вычислили завод в Прибалтике, связались и выяснили - японская фирма еще в прошлом году заказала у них большую партию готовых устройств.  Т.е. не прошло и года на всё-про всё. !!!!  Увидели - заказали -произвели быстро магнитофоны - продали -морячки привезли в комиссионки- начальник купил - уже сколько-то пользовался -на какой-то вечеринке  нагнули усилитель. Японцы потом выпустили специализированную микросхему (чтобы не городить несколько корпусов с несколько транзисторов). К чему это?  Капиталист  гонится за  выгодой - увидел что-то, что даст конкурентное преимущество - обязательно сделает, даже если это сейчас дороже.  Потому как ему надо захватывать рынки, иначе выдавят.  Тут может некоторые думают, что капиталист заботится о нас? Наивный!  Нет.  Выгода, выгода и ещё раз выгода.  Дешевле сделать, по любому выдавить подешевле, продать как можно подороже.  Не получается -сменить модель, моду,  вдуть в уши рекламу и пр.  но удержать выгоду.  А качественные параметры  ( ну у нас так совпало -все-же техника не массовая и не ежедневная потребность) ему помогают -ну и нам, само-собой,  хорошо.  (зато дерьмового шмотья-завались -но там массовый и очень небогатый покупатель) Так почему же капиталист ставит, к примеру,  дорогой  конденсатор  -ему тысячу раз выгодно вместо одного купить коробку керамических, например, КМ5,  у Васильича -дёшево же, копейки стоят!! СуперВыгодно!!   И "эксперты" рекомендуют, опять же -ведь по их мнению, разницы нет. А если нет разницы -зачем поекпать дорогое?.  Но не покупает, потому как не дурак, потому как  десятки лет создается бизнес,  иной раз поколениями  и  малейшая ходка за халявой очень чревата ...большой попой!   А на форуме  -"авторитеты",   льющие в уши   МММ-овские сказки о сотнях проданных изделиях и  супердоходах.  О слухачах, которые  не могут отличить звучание одного конденсатора  от другого при перещелкивании. Да в одной медвежьей берлоге с медвежатами воспитывались эти слухачи!  И популярность -дешевая, в прямом и переносном смысле.  Беден наш меломан -не может позволить себе высококлассной аппаратуры.  Завален интернет дешевыми поделками с таким же дешевым звуком.  Приходилось слушать  - большинство "дрова",  потому как  не сразу сказка сказывается, не сразу звук ФК рождается -поколдовать надо.  Тонкости имеются. Форум, по-моему - сообщество творческих инженеров, где новичок может найти новые знания - и я тоже,    поделиться проблемой -и  помогут решить (а может и не помогут, но хоть посочувствуют), где можно обсудить  интересующие проблемы  и найти решения,  а не безграмотные указания, лишенных  желания думать, гуру.
    • С уважением тем кто тут живет, и всем кто рангом ниже ! Пока едет электронная мелочевка, намотал катушки ДД 23 см по обмоткам, Тх- 0,45 , 45 витков,   Rx-0,2 , 200 витков.Вопрос, какое сопротивление обмоток катушек примерно должно быть? У меня на Тх - 3,6 Ом, на Rх-77,2 Ом.
    • Я создал тему в Вакансия и разовая работа, пока тишина. На счет сервиса, если посоветуете проверенный в Москве, почему бы и нет Спросил, посмотрим, что ответит...
    • У большинства обывателей на бытовом уровне сознания срабатывает рефлекс парности: два провода всегда подразумевают втыкивание в две дырочки. При этом электрические розетки имеют неоспоримый приоритет перед радиотрансляционными и телефонными в силу своей повсеместной распространенности.
×
×
  • Create New...